Add ability to control the display of the "Check Spelling" button. Allows administrat...
[squirrelmail.git] / config / conf.pl
CommitLineData
23afd0bd 1#!/usr/bin/env perl
bbd30ac8 2# conf.pl
bbd30ac8 3#
22387c8d 4# Copyright (c) 1999-2017 The SquirrelMail Project Team
6614128e 5# Licensed under the GNU GPL. For full terms see COPYING.
6#
7# A simple configure script to configure SquirrelMail
245a6892 8#
9# $Id$
598294a7 10############################################################
3641f36d 11$conf_pl_version = "1.5.0";
bbd30ac8 12
38b69acb 13############################################################
14# Check what directory we're supposed to be running in, and
15# change there if necessary. File::Basename has been in
16# Perl since at least 5.003_7, and nobody sane runs anything
17# before that, but just in case.
18############################################################
8bd9e0dd 19my $dir;
eaace00e 20if ( eval q{require "File/Basename.pm"} ) {
8bd9e0dd 21 $dir = File::Basename::dirname($0);
38b69acb 22 chdir($dir);
23}
24
598294a7 25############################################################
d595e32e 26# Some people try to run this as a CGI. That's wrong!
598294a7 27############################################################
eaace00e 28if ( defined( $ENV{'PATH_INFO'} )
29 || defined( $ENV{'QUERY_STRING'} )
30 || defined( $ENV{'REQUEST_METHOD'} ) ) {
31 print "Content-Type: text/html\n\n";
32 print "You must run this script from the command line.";
33 exit;
34 }
d595e32e 35
8bd9e0dd 36############################################################
37# If we got here, use Cwd to get the full directory path
38# (the Basename stuff above will sometimes return '.' as
598294a7 39# the base directory, which is not helpful here).
8bd9e0dd 40############################################################
41use Cwd;
42$dir = cwd();
43
598294a7 44
45############################################################
34aa9765 46# Try to determine what the version of SquirrelMail is
47############################################################
48$sm_version = 'unknown';
49if ( -e "../include/constants.php" && -r "../include/constants.php") {
50 open( FILE, "../include/constants.php" );
51 while ( $line = <FILE> ) {
52 if ($line =~ m/^define\('SM_VERSION', ?'(\d+\.\d+\.\d+( ?\[\w+]|))'/) {
53 $sm_version = $1;
54 last;
55 }
56 }
57 close(FILE);
58}
59
60
61############################################################
62# First, let's read in the data already in there...
598294a7 63############################################################
eaace00e 64if ( -e "config.php" ) {
9061389c 65 # Make sure that file is readable
66 if (! -r "config.php") {
67 clear_screen();
68 print "WARNING:\n";
69 print "The file \"config/config.php\" was found, but you don't\n";
70 print "have rights to read it.\n";
71 print "\n";
8b56e282 72 print "Press enter to continue";
9061389c 73 $ctu = <STDIN>;
74 exit;
75 }
eaace00e 76 open( FILE, "config.php" );
77 while ( $line = <FILE> ) {
78 $line =~ s/^\s+//;
79 $line =~ s/^\$//;
80 $var = $line;
81
82 $var =~ s/=/EQUALS/;
85645192 83 if ( $var =~ /^([a-z])/i ) {
eaace00e 84 @o = split ( /\s*EQUALS\s*/, $var );
85 if ( $o[0] eq "config_version" ) {
85645192 86 $o[1] =~ s/[\n\r]//g;
87 $o[1] =~ s/[\'\"];\s*$//;
eaace00e 88 $o[1] =~ s/;$//;
85645192 89 $o[1] =~ s/^[\'\"]//;
eaace00e 90
91 $config_version = $o[1];
92 close(FILE);
93 }
94 }
95 }
96 close(FILE);
97
98 if ( $config_version ne $conf_pl_version ) {
f8c17cdd 99 clear_screen();
9061389c 100 print "WARNING:\n";
eaace00e 101 print " The file \"config/config.php\" was found, but it is for\n";
102 print " an older version of SquirrelMail. It is possible to still\n";
103 print " read the defaults from this file but be warned that many\n";
104 print " preferences change between versions. It is recommended that\n";
105 print " you start with a clean config.php for each upgrade that you\n";
106 print " do. To do this, just move config/config.php out of the way.\n";
107 print "\n";
108 print "Continue loading with the old config.php [y/N]? ";
109 $ctu = <STDIN>;
110
111 if ( ( $ctu !~ /^y\n/i ) || ( $ctu =~ /^\n/ ) ) {
112 exit;
113 }
114
115 print "\nDo you want me to stop warning you [y/N]? ";
116 $ctu = <STDIN>;
117 if ( $ctu =~ /^y\n/i ) {
118 $print_config_version = $conf_pl_version;
119 } else {
120 $print_config_version = $config_version;
121 }
122 } else {
123 $print_config_version = $config_version;
124 }
125
126 $config = 1;
127 open( FILE, "config.php" );
128} elsif ( -e "config_default.php" ) {
129 open( FILE, "config_default.php" );
130 while ( $line = <FILE> ) {
131 $line =~ s/^\s+//;
132 $line =~ s/^\$//;
133 $var = $line;
134
135 $var =~ s/=/EQUALS/;
85645192 136 if ( $var =~ /^([a-z])/i ) {
eaace00e 137 @o = split ( /\s*EQUALS\s*/, $var );
138 if ( $o[0] eq "config_version" ) {
85645192 139 $o[1] =~ s/[\n\r]//g;
140 $o[1] =~ s/[\'\"];\s*$//;
eaace00e 141 $o[1] =~ s/;$//;
85645192 142 $o[1] =~ s/^[\'\"]//;
eaace00e 143
144 $config_version = $o[1];
145 close(FILE);
146 }
147 }
148 }
149 close(FILE);
150
151 if ( $config_version ne $conf_pl_version ) {
f8c17cdd 152 clear_screen();
9061389c 153 print "WARNING:\n";
eaace00e 154 print " You are trying to use a 'config_default.php' from an older\n";
155 print " version of SquirrelMail. This is HIGHLY unrecommended. You\n";
156 print " should get the 'config_default.php' that matches the version\n";
157 print " of SquirrelMail that you are running. You can get this from\n";
158 print " the SquirrelMail web page by going to the following URL:\n";
a3bb5005 159 print " http://squirrelmail.org.\n";
eaace00e 160 print "\n";
161 print "Continue loading with old config_default.php (a bad idea) [y/N]? ";
162 $ctu = <STDIN>;
163
164 if ( ( $ctu !~ /^y\n/i ) || ( $ctu =~ /^\n/ ) ) {
165 exit;
166 }
167
168 print "\nDo you want me to stop warning you [y/N]? ";
169 $ctu = <STDIN>;
170 if ( $ctu =~ /^y\n/i ) {
171 $print_config_version = $conf_pl_version;
172 } else {
173 $print_config_version = $config_version;
174 }
175 } else {
176 $print_config_version = $config_version;
177 }
178 $config = 2;
179 open( FILE, "config_default.php" );
1e0628fb 180} else {
eaace00e 181 print "No configuration file found. Please get config_default.php\n";
182 print "or config.php before running this again. This program needs\n";
183 print "a default config file to get default values.\n";
184 exit;
bbd30ac8 185}
186
a3439b27 187# Read and parse the current configuration file
188# (either config.php or config_default.php).
eaace00e 189while ( $line = <FILE> ) {
598294a7 190 $line =~ s/^\s+//;
eaace00e 191 $line =~ s/^\$//;
192 $var = $line;
193
194 $var =~ s/=/EQUALS/;
85645192 195 if ( $var =~ /^([a-z])/i ) {
eaace00e 196 @options = split ( /\s*EQUALS\s*/, $var );
85645192 197 $options[1] =~ s/[\n\r]//g;
198 $options[1] =~ s/[\'\"];\s*$//;
eaace00e 199 $options[1] =~ s/;$//;
85645192 200 $options[1] =~ s/^[\'\"]//;
ed65d11b 201 # de-escape escaped strings
202 $options[1] =~ s/\\'/'/g;
203 $options[1] =~ s/\\\\/\\/g;
eaace00e 204
82351c82 205 if ( $options[0] =~ /^user_themes\[[0-9]+\]\[['"]PATH['"]\]/ ) {
eaace00e 206 $sub = $options[0];
85645192 207 $sub =~ s/\]\[['"]PATH['"]\]//;
eaace00e 208 $sub =~ s/.*\[//;
82351c82 209 if ( -e "../css/" ) {
210 $options[1] =~ s/^\.\.\/config/\.\.\/css/;
a3439b27 211 }
82351c82 212 $user_theme_path[$sub] = &change_to_rel_path($options[1]);
213 } elsif ( $options[0] =~ /^user_themes\[[0-9]+\]\[['"]NAME['"]\]/ ) {
eaace00e 214 $sub = $options[0];
85645192 215 $sub =~ s/\]\[['"]NAME['"]\]//;
eaace00e 216 $sub =~ s/.*\[//;
82351c82 217 $user_theme_name[$sub] = $options[1];
83139c0b 218 } elsif ( $options[0] =~ /^icon_themes\[[0-9]+\]\[['"]PATH['"]\]/ ) {
219 $sub = $options[0];
220 $sub =~ s/\]\[['"]PATH['"]\]//;
221 $sub =~ s/.*\[//;
222 if ( -e "../images/" ) {
223 $options[1] =~ s/^\.\.\/config/\.\.\/images/;
224 }
225 $icon_theme_path[$sub] = &change_to_rel_path($options[1]);
226 } elsif ( $options[0] =~ /^icon_themes\[[0-9]+\]\[['"]NAME['"]\]/ ) {
227 $sub = $options[0];
228 $sub =~ s/\]\[['"]NAME['"]\]//;
229 $sub =~ s/.*\[//;
230 $icon_theme_name[$sub] = $options[1];
5e78e498 231 } elsif ( $options[0] =~ /^aTemplateSet\[[0-9]+\]\[['"]ID['"]\]/ ) {
85bacb8f 232 $sub = $options[0];
5e78e498 233 $sub =~ s/\]\[['"]ID['"]\]//;
85bacb8f 234 $sub =~ s/.*\[//;
235 if ( -e "../templates" ) {
236 $options[1] =~ s/^\.\.\/config/\.\.\/templates/;
237 }
5e78e498 238 $templateset_id[$sub] = $options[1];
649162c3 239##### FIXME: This section BELOW here so old prefs files don't blow up when running conf.pl
b4e8b4a3 240##### Remove after a month or two
649162c3 241} elsif ( $options[0] =~ /^aTemplateSet\[[0-9]+\]\[['"]PATH['"]\]/ ) {
242 $sub = $options[0];
243 $sub =~ s/\]\[['"]PATH['"]\]//;
244 $sub =~ s/.*\[//;
245 if ( -e "../templates" ) {
246 $options[1] =~ s/^\.\.\/config/\.\.\/templates/;
247 }
248 $templateset_id[$sub] = $options[1];
249##### FIXME: This section ABOVE here so old prefs files don't blow up when running conf.pl
b4e8b4a3 250##### Remove after a month or two
85bacb8f 251 } elsif ( $options[0] =~ /^aTemplateSet\[[0-9]+\]\[['"]NAME['"]\]/ ) {
252 $sub = $options[0];
253 $sub =~ s/\]\[['"]NAME['"]\]//;
254 $sub =~ s/.*\[//;
255 $templateset_name[$sub] = $options[1];
a1b036d6 256 } elsif ( $options[0] =~ /^plugins\[[0-9]*\]/ ) {
eaace00e 257 $sub = $options[0];
258 $sub =~ s/\]//;
259 $sub =~ s/^plugins\[//;
a1b036d6 260 if ($sub eq '') {
261 push @plugins, $options[1];
262 } else {
263 $plugins[$sub] = $options[1];
264 }
81132de8 265 } elsif ($options[0] =~ /^fontsets\[\'[a-z]*\'\]/) {
266 # parse associative $fontsets array
267 $sub = $options[0];
268 $sub =~ s/\'\]//;
269 $sub =~ s/^fontsets\[\'//;
270 $fontsets{$sub} = $options[1];
e2409f9c 271 } elsif ( $options[0] =~ /^theme\[[0-9]+\]\[['"]PATH|NAME['"]\]/ ) {
9061389c 272 ##
273 ## $color themes are no longer supported. Please leave this
274 ## so conf.pl doesn't barf if it encounters a $theme.
275 ##
eaace00e 276 } elsif ( $options[0] =~ /^ldap_server\[[0-9]+\]/ ) {
277 $sub = $options[0];
278 $sub =~ s/\]//;
279 $sub =~ s/^ldap_server\[//;
280 $continue = 0;
281 while ( ( $tmp = <FILE> ) && ( $continue != 1 ) ) {
282 if ( $tmp =~ /\);\s*$/ ) {
283 $continue = 1;
284 }
285
85645192 286 if ( $tmp =~ /^\s*[\'\"]host[\'\"]/i ) {
287 $tmp =~ s/^\s*[\'\"]host[\'\"]\s*=>\s*[\'\"]//i;
288 $tmp =~ s/[\'\"],?\s*$//;
289 $tmp =~ s/[\'\"]\);\s*$//;
eaace00e 290 $host = $tmp;
85645192 291 } elsif ( $tmp =~ /^\s*[\'\"]base[\'\"]/i ) {
292 $tmp =~ s/^\s*[\'\"]base[\'\"]\s*=>\s*[\'\"]//i;
293 $tmp =~ s/[\'\"],?\s*$//;
294 $tmp =~ s/[\'\"]\);\s*$//;
eaace00e 295 $base = $tmp;
85645192 296 } elsif ( $tmp =~ /^\s*[\'\"]charset[\'\"]/i ) {
297 $tmp =~ s/^\s*[\'\"]charset[\'\"]\s*=>\s*[\'\"]//i;
298 $tmp =~ s/[\'\"],?\s*$//;
299 $tmp =~ s/[\'\"]\);\s*$//;
eaace00e 300 $charset = $tmp;
85645192 301 } elsif ( $tmp =~ /^\s*[\'\"]port[\'\"]/i ) {
302 $tmp =~ s/^\s*[\'\"]port[\'\"]\s*=>\s*[\'\"]?//i;
303 $tmp =~ s/[\'\"]?,?\s*$//;
304 $tmp =~ s/[\'\"]?\);\s*$//;
eaace00e 305 $port = $tmp;
85645192 306 } elsif ( $tmp =~ /^\s*[\'\"]maxrows[\'\"]/i ) {
307 $tmp =~ s/^\s*[\'\"]maxrows[\'\"]\s*=>\s*[\'\"]?//i;
308 $tmp =~ s/[\'\"]?,?\s*$//;
309 $tmp =~ s/[\'\"]?\);\s*$//;
eaace00e 310 $maxrows = $tmp;
43397658 311 } elsif ( $tmp =~ /^\s*[\'\"]filter[\'\"]/i ) {
312 $tmp =~ s/^\s*[\'\"]filter[\'\"]\s*=>\s*[\'\"]?//i;
313 $tmp =~ s/[\'\"]?,?\s*$//;
314 $tmp =~ s/[\'\"]?\);\s*$//;
315 $filter = $tmp;
85645192 316 } elsif ( $tmp =~ /^\s*[\'\"]name[\'\"]/i ) {
317 $tmp =~ s/^\s*[\'\"]name[\'\"]\s*=>\s*[\'\"]//i;
318 $tmp =~ s/[\'\"],?\s*$//;
319 $tmp =~ s/[\'\"]\);\s*$//;
eaace00e 320 $name = $tmp;
85645192 321 } elsif ( $tmp =~ /^\s*[\'\"]binddn[\'\"]/i ) {
322 $tmp =~ s/^\s*[\'\"]binddn[\'\"]\s*=>\s*[\'\"]//i;
323 $tmp =~ s/[\'\"],?\s*$//;
324 $tmp =~ s/[\'\"]\);\s*$//;
30e9932c 325 $binddn = $tmp;
85645192 326 } elsif ( $tmp =~ /^\s*[\'\"]bindpw[\'\"]/i ) {
327 $tmp =~ s/^\s*[\'\"]bindpw[\'\"]\s*=>\s*[\'\"]//i;
328 $tmp =~ s/[\'\"],?\s*$//;
329 $tmp =~ s/[\'\"]\);\s*$//;
30e9932c 330 $bindpw = $tmp;
85645192 331 } elsif ( $tmp =~ /^\s*[\'\"]protocol[\'\"]/i ) {
332 $tmp =~ s/^\s*[\'\"]protocol[\'\"]\s*=>\s*[\'\"]?//i;
333 $tmp =~ s/[\'\"]?,?\s*$//;
334 $tmp =~ s/[\'\"]?\);\s*$//;
30e9932c 335 $protocol = $tmp;
43397658 336 } elsif ( $tmp =~ /^\s*[\'\"]limit_scope[\'\"]/i ) {
337 $tmp =~ s/^\s*[\'\"]limit_scope[\'\"]\s*=>\s*[\'\"]?//i;
338 $tmp =~ s/[\'\"]?,?\s*$//;
339 $tmp =~ s/[\'\"]?\);\s*$//;
340 $limit_scope = $tmp;
327e2d96 341 } elsif ( $tmp =~ /^\s*[\'\"]listing[\'\"]/i ) {
342 $tmp =~ s/^\s*[\'\"]listing[\'\"]\s*=>\s*[\'\"]?//i;
343 $tmp =~ s/[\'\"]?,?\s*$//;
344 $tmp =~ s/[\'\"]?\);\s*$//;
345 $listing = $tmp;
664fd7a0 346 } elsif ( $tmp =~ /^\s*[\'\"]writeable[\'\"]/i ) {
347 $tmp =~ s/^\s*[\'\"]writeable[\'\"]\s*=>\s*[\'\"]?//i;
348 $tmp =~ s/[\'\"]?,?\s*$//;
349 $tmp =~ s/[\'\"]?\);\s*$//;
350 $writeable = $tmp;
593370a4 351 } elsif ( $tmp =~ /^\s*[\'\"]search_tree[\'\"]/i ) {
352 $tmp =~ s/^\s*[\'\"]search_tree[\'\"]\s*=>\s*[\'\"]?//i;
353 $tmp =~ s/[\'\"]?,?\s*$//;
354 $tmp =~ s/[\'\"]?\);\s*$//;
355 $search_tree = $tmp;
356 } elsif ( $tmp =~ /^\s*[\'\"]starttls[\'\"]/i ) {
357 $tmp =~ s/^\s*[\'\"]starttls[\'\"]\s*=>\s*[\'\"]?//i;
358 $tmp =~ s/[\'\"]?,?\s*$//;
359 $tmp =~ s/[\'\"]?\);\s*$//;
360 $starttls = $tmp;
eaace00e 361 }
a3439b27 362 }
eaace00e 363 $ldap_host[$sub] = $host;
364 $ldap_base[$sub] = $base;
365 $ldap_name[$sub] = $name;
366 $ldap_port[$sub] = $port;
367 $ldap_maxrows[$sub] = $maxrows;
43397658 368 $ldap_filter[$sub] = $filter;
eaace00e 369 $ldap_charset[$sub] = $charset;
30e9932c 370 $ldap_binddn[$sub] = $binddn;
371 $ldap_bindpw[$sub] = $bindpw;
372 $ldap_protocol[$sub] = $protocol;
43397658 373 $ldap_limit_scope[$sub] = $limit_scope;
327e2d96 374 $ldap_listing[$sub] = $listing;
664fd7a0 375 $ldap_writeable[$sub] = $writeable;
593370a4 376 $ldap_search_tree[$sub] = $search_tree;
377 $ldap_starttls[$sub] = $starttls;
83139c0b 378 } elsif ( $options[0] =~ /^(data_dir|attachment_dir|org_logo|signout_page|icon_theme_def)$/ ) {
8bd9e0dd 379 ${ $options[0] } = &change_to_rel_path($options[1]);
eaace00e 380 } else {
381 ${ $options[0] } = $options[1];
382 }
383 }
bbd30ac8 384}
1a7a2fcc 385close FILE;
0ae4c1f2 386
d81572f7 387# RPC template sets aren't included in user interface skin list,
388# so add the one from the config file here
389#
390if ($rpc_templateset =~ /_rpc$/) {
391 $templateset_name[$#templateset_name + 1] = $rpc_templateset;
392 $templateset_id[$#templateset_id + 1] = $rpc_templateset;
393}
394
a15f9d93 395# FIXME: unknown introduction date
35aaf666 396$useSendmail = 'false' if ( lc($useSendmail) ne 'true' );
397$sendmail_path = "/usr/sbin/sendmail" if ( !$sendmail_path );
398$pop_before_smtp = 'false' if ( !$pop_before_smtp );
783e926e 399$pop_before_smtp_host = '' if ( !$pop_before_smtp_host );
35aaf666 400$default_unseen_notify = 2 if ( !$default_unseen_notify );
401$default_unseen_type = 1 if ( !$default_unseen_type );
402$config_use_color = 0 if ( !$config_use_color );
403$invert_time = 'false' if ( !$invert_time );
404$force_username_lowercase = 'false' if ( !$force_username_lowercase );
405$optional_delimiter = "detect" if ( !$optional_delimiter );
406$auto_create_special = 'false' if ( !$auto_create_special );
407$default_use_priority = 'true' if ( !$default_use_priority );
35aaf666 408$default_use_mdn = 'true' if ( !$default_use_mdn );
409$delete_folder = 'false' if ( !$delete_folder );
410$noselect_fix_enable = 'false' if ( !$noselect_fix_enable );
411$frame_top = "_top" if ( !$frame_top );
412$provider_uri = '' if ( !$provider_uri );
5810acfa 413$provider_name = '' if ( !$provider_name || $provider_name eq 'SquirrelMail');
35aaf666 414$no_list_for_subscribe = 'false' if ( !$no_list_for_subscribe );
415$allow_charset_search = 'true' if ( !$allow_charset_search );
66bfb27b 416$allow_advanced_search = 0 if ( !$allow_advanced_search) ;
35aaf666 417$prefs_user_field = 'user' if ( !$prefs_user_field );
418$prefs_key_field = 'prefkey' if ( !$prefs_key_field );
419$prefs_val_field = 'prefval' if ( !$prefs_val_field );
a15f9d93 420$session_name = 'SQMSESSID' if ( !$session_name );
421$skip_SM_header = 'false' if ( !$skip_SM_header );
422$default_use_javascript_addr_book = 'false' if (! $default_use_javascript_addr_book);
423
beebd508 424# since 1.2.0
425$hide_sm_attributions = 'false' if ( !$hide_sm_attributions );
a2aa472a 426# since 1.2.5
427$edit_identity = 'true' if ( !$edit_identity );
428$edit_name = 'true' if ( !$edit_name );
3f7a756d 429# since 1.4.23/1.5.2
430$edit_reply_to = 'true' if ( !$edit_reply_to );
beebd508 431
a15f9d93 432# since 1.4.0
35aaf666 433$use_smtp_tls= 'false' if ( !$use_smtp_tls);
434$smtp_auth_mech = 'none' if ( !$smtp_auth_mech );
435$use_imap_tls = 'false' if ( !$use_imap_tls );
436$imap_auth_mech = 'login' if ( !$imap_auth_mech );
81132de8 437
e036ff69 438# $use_imap_tls and $use_smtp_tls are switched to integer since 1.5.1
439$use_imap_tls = 0 if ( $use_imap_tls eq 'false');
440$use_imap_tls = 1 if ( $use_imap_tls eq 'true');
441$use_smtp_tls = 0 if ( $use_smtp_tls eq 'false');
442$use_smtp_tls = 1 if ( $use_smtp_tls eq 'true');
443
71d3f882 444# since 1.5.0
35aaf666 445$show_alternative_names = 'false' if ( !$show_alternative_names );
5ba5dc8e 446# $available_languages option available only in 1.5.0. removed due to $languages
447# implementation changes. options are provided by limit_languages plugin
448# $available_languages = 'all' if ( !$available_languages );
f03f6ee7 449$aggressive_decoding = 'false' if ( !$aggressive_decoding );
ca885a4f 450# available only in 1.5.0 and 1.5.1
451# $advanced_tree = 'false' if ( !$advanced_tree );
35aaf666 452$use_php_recode = 'false' if ( !$use_php_recode );
453$use_php_iconv = 'false' if ( !$use_php_iconv );
775a1f52 454$buffer_output = 'false' if ( !$buffer_output );
81132de8 455
71d3f882 456# since 1.5.1
457$use_icons = 'false' if ( !$use_icons );
ef6ad2a1 458$use_iframe = 'false' if ( !$use_iframe );
71d3f882 459$lossy_encoding = 'false' if ( !$lossy_encoding );
460$allow_remote_configtest = 'false' if ( !$allow_remote_configtest );
061108dc 461$secured_config = 'true' if ( !$secured_config );
8f557b94 462$sq_https_port = 443 if ( !$sq_https_port );
463$sq_ignore_http_x_forwarded_headers = 'true' if ( !$sq_ignore_http_x_forwarded_headers );
1888b1bf 464
465$sm_debug_mode = 'SM_DEBUG_MODE_MODERATE' if ( !$sm_debug_mode );
466#FIXME: When this is STABLE software, remove the line above and uncomment the one below:
467#$sm_debug_mode = 'SM_DEBUG_MODE_OFF' if ( !$sm_debug_mode );
468$sm_debug_mode = convert_debug_binary_integer_to_constants($sm_debug_mode);
469
71d3f882 470$addrbook_global_table = 'global_abook' if ( !$addrbook_global_table );
471$addrbook_global_writeable = 'false' if ( !$addrbook_global_writeable );
472$addrbook_global_listing = 'false' if ( !$addrbook_global_listing );
473$abook_global_file = '' if ( !$abook_global_file);
474$abook_global_file_writeable = 'false' if ( !$abook_global_file_writeable);
475$abook_global_file_listing = 'true' if ( !$abook_global_file_listing );
432db2fc 476$encode_header_key = '' if ( !$encode_header_key );
477$hide_auth_header = 'false' if ( !$hide_auth_header );
ee20a285 478$time_zone_type = '0' if ( !$time_zone_type );
06316c07 479$prefs_user_size = 128 if ( !$prefs_user_size );
480$prefs_key_size = 64 if ( !$prefs_key_size );
481$prefs_val_size = 65536 if ( !$prefs_val_size );
81132de8 482
fd7ab795 483# add qmail-inject test here for backwards compatibility
85bacb8f 484if ( !$sendmail_args && $sendmail_path =~ /qmail-inject/ ) {
fd7ab795 485 $sendmail_args = '';
486} elsif ( !$sendmail_args ) {
487 $sendmail_args = '-i -t';
488}
39d3ec89 489
81132de8 490$default_fontsize = '' if ( !$default_fontsize);
491$default_fontset = '' if ( !$default_fontset);
492if ( !%fontsets) {
493 %fontsets = ('serif', 'serif',
494 'sans', 'helvetica,arial,sans-serif',
495 'comicsans', 'comic sans ms,sans-serif',
496 'tahoma', 'tahoma,sans-serif',
497 'verasans', 'bitstream vera sans,verdana,sans-serif');
498}
499
801da708 500# sorting options changed names and reversed values in 1.5.1
501$disable_thread_sort = 'false' if ( !$disable_thread_sort );
502$disable_server_sort = 'false' if ( !$disable_server_sort );
81132de8 503
7311c377 504# since 1.5.2
505$abook_file_line_length = 2048 if ( !$abook_file_line_length );
3dc5d88f 506$config_location_base = '' if ( !$config_location_base );
029d1fc2 507$smtp_sitewide_user = '' if ( !$smtp_sitewide_user );
508$smtp_sitewide_pass = '' if ( !$smtp_sitewide_pass );
9061389c 509$icon_theme_def = '' if ( !$icon_theme_def );
93d67e0d 510$disable_plugins = 'false' if ( !$disable_plugins );
511$disable_plugins_user = '' if ( !$disable_plugins_user );
9c0f1780 512$only_secure_cookies = 'true' if ( !$only_secure_cookies );
d555f507 513$disable_security_tokens = 'false' if ( !$disable_security_tokens );
514$check_referrer = '' if ( !$check_referrer );
209e24bb 515$ask_user_info = 'true' if ( !$ask_user_info );
6ab8321f 516$use_transparent_security_image = 'true' if ( !$use_transparent_security_image );
9ae70b62 517$display_imap_login_error = 'false' if ( !$display_imap_login_error );
7311c377 518
eaace00e 519if ( $ARGV[0] eq '--install-plugin' ) {
520 print "Activating plugin " . $ARGV[1] . "\n";
fb98dfcf 521 if ( -d "../plugins/" . $ARGV[1]) {
522 push @plugins, $ARGV[1];
523 save_data();
524 exit(0);
525 } else {
526 print "No such plugin.\n";
527 exit(1);
528 }
eaace00e 529} elsif ( $ARGV[0] eq '--remove-plugin' ) {
530 print "Removing plugin " . $ARGV[1] . "\n";
ebd13f55 531 foreach $plugin (@plugins) {
eaace00e 532 if ( $plugin ne $ARGV[1] ) {
533 push @newplugins, $plugin;
ebd13f55 534 }
535 }
536 @plugins = @newplugins;
537 save_data();
538 exit(0);
091ee417 539} elsif ( $ARGV[0] eq '--update-plugins' or $ARGV[0] eq '-u') {
540 build_plugin_hook_array();
541 exit(0);
542} elsif ( $ARGV[0] eq '--help' or $ARGV[0] eq '-h') {
543 print "SquirrelMail Configuration Script\n";
544 print "Usage:\n";
545 print " * No arguments: initiates the configuration dialog\n";
546 print " * --install-plugin <plugin> : activates the specified plugin\n";
547 print " * --remove-plugin <plugin> : deactivates the specified plugin\n";
548 print " * --update-plugins , -u : rebuilds plugin_hooks.php according\n";
549 print " to plugins activated in config.php\n";
550 print " * --help , -h : Displays this help\n";
551 print "\n";
552 exit(0);
ebd13f55 553}
554
7a4f9bfb 555
556
557####################################################################################
558
559# used in multiple places, define once
560$list_supported_imap_servers =
561 " bincimap = Binc IMAP server\n" .
562 " courier = Courier IMAP server\n" .
563 " cyrus = Cyrus IMAP server\n" .
564 " dovecot = Dovecot Secure IMAP server\n" .
565 " exchange = Microsoft Exchange IMAP server\n" .
566 " hmailserver = hMailServer\n" .
567 " macosx = Mac OS X Mailserver\n" .
568 " mercury32 = Mercury/32\n" .
a798d8b2 569 " uw = University of Washington's IMAP server\n" .
570 " gmail = IMAP access to Google mail (Gmail) accounts\n";
7a4f9bfb 571
5b6ae78a 572#####################################################################################
eaace00e 573if ( $config_use_color == 1 ) {
021044ec 574 $WHT = "\x1B[1m";
eaace00e 575 $NRM = "\x1B[0m";
0ecb47e5 576} else {
eaace00e 577 $WHT = "";
578 $NRM = "";
579 $config_use_color = 2;
580}
581
af5de065 582# lists can be printed in more than one column; default is just one
583#
584$columns = 1;
eec03d8c 585
586# try to get screen width dynamically if possible; default to 80
587# (user can override with "w#" command)
588#
589eval { require "sys/ioctl.ph" };
590if ($@
591 || !defined &TIOCGWINSZ
592 || !open(TTY, "+</dev/tty")
593 || !ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
594 $screen_width = 80;
595} else {
596 ($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
597 $screen_width = $col;
598}
af5de065 599
8b5c49cd 600while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) {
f8c17cdd 601 clear_screen();
eaace00e 602 print $WHT. "SquirrelMail Configuration : " . $NRM;
603 if ( $config == 1 ) { print "Read: config.php"; }
604 elsif ( $config == 2 ) { print "Read: config_default.php"; }
34aa9765 605 print "\nConfig version $print_config_version; SquirrelMail version $sm_version\n";
eaace00e 606 print "---------------------------------------------------------\n";
607
608 if ( $menu == 0 ) {
609 print $WHT. "Main Menu --\n" . $NRM;
610 print "1. Organization Preferences\n";
611 print "2. Server Settings\n";
612 print "3. Folder Defaults\n";
613 print "4. General Options\n";
348610ca 614 print "5. User Interface\n";
4272758c 615 print "6. Address Books\n";
eaace00e 616 print "7. Message of the Day (MOTD)\n";
617 print "8. Plugins\n";
618 print "9. Database\n";
598294a7 619 print "10. Language settings\n";
620 print "11. Tweaks\n";
eaace00e 621 print "\n";
622 print "D. Set pre-defined settings for specific IMAP servers\n";
623 print "\n";
624 } elsif ( $menu == 1 ) {
625 print $WHT. "Organization Preferences\n" . $NRM;
b6e0c3b6 626 print "1. Organization Name : $WHT$org_name$NRM\n";
627 print "2. Organization Logo : $WHT$org_logo$NRM\n";
628 print "3. Org. Logo Width/Height : $WHT($org_logo_width/$org_logo_height)$NRM\n";
629 print "4. Organization Title : $WHT$org_title$NRM\n";
630 print "5. Signout Page : $WHT$signout_page$NRM\n";
39d3ec89 631 print "6. Top Frame : $WHT$frame_top$NRM\n";
632 print "7. Provider link : $WHT$provider_uri$NRM\n";
5810acfa 633 print "8. Provider link text : $WHT$provider_name$NRM\n";
0ae4c1f2 634
eaace00e 635 print "\n";
dcc1cc82 636 print "R Return to Main Menu\n";
eaace00e 637 } elsif ( $menu == 2 ) {
47a29326 638 print $WHT. "Server Settings\n\n" . $NRM;
639 print $WHT . "General" . $NRM . "\n";
640 print "-------\n";
641 print "1. Domain : $WHT$domain$NRM\n";
642 print "2. Invert Time : $WHT$invert_time$NRM\n";
643 print "3. Sendmail or SMTP : $WHT";
35aaf666 644 if ( lc($useSendmail) eq 'true' ) {
eaace00e 645 print "Sendmail";
646 } else {
647 print "SMTP";
648 }
649 print "$NRM\n";
47a29326 650 print "\n";
598294a7 651
47a29326 652 if ( $show_imap_settings ) {
653 print $WHT . "IMAP Settings". $NRM . "\n--------------\n";
654 print "4. IMAP Server : $WHT$imapServerAddress$NRM\n";
655 print "5. IMAP Port : $WHT$imapPort$NRM\n";
656 print "6. Authentication type : $WHT$imap_auth_mech$NRM\n";
2b4a868c 657 print "7. Secure IMAP (TLS) : $WHT" . display_use_tls($use_imap_tls) . "$NRM\n";
47a29326 658 print "8. Server software : $WHT$imap_server_type$NRM\n";
659 print "9. Delimiter : $WHT$optional_delimiter$NRM\n";
660 print "\n";
661 } elsif ( $show_smtp_settings ) {
35aaf666 662 if ( lc($useSendmail) eq 'true' ) {
47a29326 663 print $WHT . "Sendmail" . $NRM . "\n--------\n";
664 print "4. Sendmail Path : $WHT$sendmail_path$NRM\n";
fd7ab795 665 print "5. Sendmail arguments : $WHT$sendmail_args$NRM\n";
666 print "6. Header encryption key : $WHT$encode_header_key$NRM\n";
47a29326 667 print "\n";
668 } else {
669 print $WHT . "SMTP Settings" . $NRM . "\n-------------\n";
670 print "4. SMTP Server : $WHT$smtpServerAddress$NRM\n";
671 print "5. SMTP Port : $WHT$smtpPort$NRM\n";
672 print "6. POP before SMTP : $WHT$pop_before_smtp$NRM\n";
029d1fc2 673 print "7. SMTP Authentication : $WHT$smtp_auth_mech" . display_smtp_sitewide_userpass() ."$NRM\n";
2b4a868c 674 print "8. Secure SMTP (TLS) : $WHT" . display_use_tls($use_smtp_tls) . "$NRM\n";
432db2fc 675 print "9. Header encryption key : $WHT$encode_header_key$NRM\n";
47a29326 676 print "\n";
677 }
eaace00e 678 }
47a29326 679
680 if ($show_imap_settings == 0) {
681 print "A. Update IMAP Settings : ";
682 print "$WHT$imapServerAddress$NRM:";
683 print "$WHT$imapPort$NRM ";
684 print "($WHT$imap_server_type$NRM)\n";
598294a7 685 }
47a29326 686 if ($show_smtp_settings == 0) {
35aaf666 687 if ( lc($useSendmail) eq 'true' ) {
47a29326 688 print "B. Change Sendmail Config : $WHT$sendmail_path$NRM\n";
689 } else {
690 print "B. Update SMTP Settings : ";
691 print "$WHT$smtpServerAddress$NRM:";
692 print "$WHT$smtpPort$NRM\n";
693 }
694 }
695 if ( $show_smtp_settings || $show_imap_settings )
696 {
598294a7 697 print "H. Hide " .
698 ($show_imap_settings ? "IMAP Server" :
35aaf666 699 (lc($useSendmail) eq 'true') ? "Sendmail" : "SMTP") . " Settings\n";
47a29326 700 }
598294a7 701
eaace00e 702 print "\n";
dcc1cc82 703 print "R Return to Main Menu\n";
eaace00e 704 } elsif ( $menu == 3 ) {
705 print $WHT. "Folder Defaults\n" . $NRM;
bcd3bed7 706 print "1. Default Folder Prefix : $WHT$default_folder_prefix$NRM\n";
707 print "2. Show Folder Prefix Option : $WHT$show_prefix_option$NRM\n";
708 print "3. Trash Folder : $WHT$trash_folder$NRM\n";
709 print "4. Sent Folder : $WHT$sent_folder$NRM\n";
710 print "5. Drafts Folder : $WHT$draft_folder$NRM\n";
711 print "6. By default, move to trash : $WHT$default_move_to_trash$NRM\n";
712 print "7. By default, save sent messages : $WHT$default_move_to_sent$NRM\n";
713 print "8. By default, save as draft : $WHT$default_save_as_draft$NRM\n";
714 print "9. List Special Folders First : $WHT$list_special_folders_first$NRM\n";
715 print "10. Show Special Folders Color : $WHT$use_special_folder_color$NRM\n";
716 print "11. Auto Expunge : $WHT$auto_expunge$NRM\n";
717 print "12. Default Sub. of INBOX : $WHT$default_sub_of_inbox$NRM\n";
718 print "13. Show 'Contain Sub.' Option : $WHT$show_contain_subfolders_option$NRM\n";
719 print "14. Default Unseen Notify : $WHT$default_unseen_notify$NRM\n";
720 print "15. Default Unseen Type : $WHT$default_unseen_type$NRM\n";
721 print "16. Auto Create Special Folders : $WHT$auto_create_special$NRM\n";
722 print "17. Folder Delete Bypasses Trash : $WHT$delete_folder$NRM\n";
723 print "18. Enable /NoSelect folder fix : $WHT$noselect_fix_enable$NRM\n";
eaace00e 724 print "\n";
dcc1cc82 725 print "R Return to Main Menu\n";
eaace00e 726 } elsif ( $menu == 4 ) {
727 print $WHT. "General Options\n" . $NRM;
9c0f1780 728 print "1. Data Directory : $WHT$data_dir$NRM\n";
729 print "2. Attachment Directory : $WHT$attachment_dir$NRM\n";
730 print "3. Directory Hash Level : $WHT$dir_hash_level$NRM\n";
731 print "4. Default Left Size : $WHT$default_left_size$NRM\n";
732 print "5. Usernames in Lowercase : $WHT$force_username_lowercase$NRM\n";
733 print "6. Allow use of priority : $WHT$default_use_priority$NRM\n";
734 print "7. Hide SM attributions : $WHT$hide_sm_attributions$NRM\n";
735 print "8. Allow use of receipts : $WHT$default_use_mdn$NRM\n";
736 print "9. Allow editing of identity : $WHT$edit_identity$NRM\n";
737 print " Allow editing of name : $WHT$edit_name$NRM\n";
3f7a756d 738 print " Allow editing of reply-to : $WHT$edit_reply_to$NRM\n";
9c0f1780 739 print " Remove username from header : $WHT$hide_auth_header$NRM\n";
740 print "10. Disable server thread sort : $WHT$disable_thread_sort$NRM\n";
741 print "11. Disable server-side sorting : $WHT$disable_server_sort$NRM\n";
742 print "12. Allow server charset search : $WHT$allow_charset_search$NRM\n";
743 print "13. Allow advanced search : $WHT$allow_advanced_search$NRM\n";
744 print "14. PHP session name : $WHT$session_name$NRM\n";
745 print "15. Time zone configuration : $WHT$time_zone_type$NRM\n";
746 print "16. Location base : $WHT$config_location_base$NRM\n";
747 print "17. Only secure cookies if poss. : $WHT$only_secure_cookies$NRM\n";
d555f507 748 print "18. Disable secure forms : $WHT$disable_security_tokens$NRM\n";
749 print "19. Page referal requirement : $WHT$check_referrer$NRM\n";
6ab8321f 750 print "20. Security image : $WHT" . (lc($use_transparent_security_image) eq 'true' ? 'Transparent' : 'Textual') . "$NRM\n";
9ae70b62 751 print "21. Display login error from IMAP: $WHT$display_imap_login_error$NRM\n";
eaace00e 752 print "\n";
dcc1cc82 753 print "R Return to Main Menu\n";
eaace00e 754 } elsif ( $menu == 5 ) {
348610ca 755 print $WHT. "User Interface\n" . $NRM;
83139c0b 756 print "1. Use Icons? : $WHT$use_icons$NRM\n";
757# print "3. Default Icon Set : $WHT$icon_theme_def$NRM\n";
758 print "2. Default font size : $WHT$default_fontsize$NRM\n";
52bc19ad 759 print "3. Manage template sets (skins)\n";
83139c0b 760 print "4. Manage user themes\n";
761 print "5. Manage font sets\n";
762 print "6. Manage icon themes\n";
85bacb8f 763
eaace00e 764 print "\n";
dcc1cc82 765 print "R Return to Main Menu\n";
eaace00e 766 } elsif ( $menu == 6 ) {
4272758c 767 print $WHT. "Address Books\n" . $NRM;
768 print "1. Change LDAP Servers\n";
eaace00e 769 for ( $count = 0 ; $count <= $#ldap_host ; $count++ ) {
770 print " > $ldap_host[$count]\n";
771 }
71d3f882 772 print "2. Use Javascript address book search : $WHT$default_use_javascript_addr_book$NRM\n";
ee20a285 773 print "3. Global address book file : $WHT$abook_global_file$NRM\n";
4272758c 774 print "4. Allow writing into global file address book : $WHT$abook_global_file_writeable$NRM\n";
71d3f882 775 print "5. Allow listing of global file address book : $WHT$abook_global_file_listing$NRM\n";
7311c377 776 print "6. Allowed address book line length : $WHT$abook_file_line_length$NRM\n";
eaace00e 777 print "\n";
dcc1cc82 778 print "R Return to Main Menu\n";
eaace00e 779 } elsif ( $menu == 7 ) {
780 print $WHT. "Message of the Day (MOTD)\n" . $NRM;
781 print "\n$motd\n";
782 print "\n";
783 print "1 Edit the MOTD\n";
784 print "\n";
dcc1cc82 785 print "R Return to Main Menu\n";
eaace00e 786 } elsif ( $menu == 8 ) {
93d67e0d 787 if (lc($disable_plugins) eq 'true' && $disable_plugins_user ne '') {
788 print $WHT. "Plugins (WARNING: All plugins are currently disabled\n for the user \"$disable_plugins_user\"!)\n" . $NRM;
789 } elsif (lc($disable_plugins) eq 'true') {
790 print $WHT. "Plugins (WARNING: All plugins are currently disabled!)\n" . $NRM;
791 } else {
792 print $WHT. "Plugins\n" . $NRM;
793 }
eaace00e 794 print " Installed Plugins\n";
af5de065 795 if ($columns > 1) {
796 $num = print_multi_col_list(1, $columns, $screen_width, 1, @plugins);
797 } else {
798 $num = 0;
799 for ( $count = 0 ; $count <= $#plugins ; $count++ ) {
800 $num = $count + 1;
801 $english_name = get_plugin_english_name($plugins[$count]);
802 if ( $english_name eq "" ) {
803 print " $WHT$num.$NRM $plugins[$count]" . get_plugin_version($plugins[$count]) . "\n";
804 } else {
805 print " $WHT$num.$NRM $english_name ($plugins[$count])" . get_plugin_version($plugins[$count]) . "\n";
806 }
184e94a3 807 }
eaace00e 808 }
809 print "\n Available Plugins:\n";
810 opendir( DIR, "../plugins" );
52bc19ad 811 @files = sort(readdir(DIR));
eaace00e 812 $pos = 0;
813 @unused_plugins = ();
814 for ( $i = 0 ; $i <= $#files ; $i++ ) {
a0fa595d 815 if ( -d "../plugins/" . $files[$i] && $files[$i] !~ /^\./ && $files[$i] ne ".svn" ) {
eaace00e 816 $match = 0;
817 for ( $k = 0 ; $k <= $#plugins ; $k++ ) {
818 if ( $plugins[$k] eq $files[$i] ) {
819 $match = 1;
820 }
821 }
822 if ( $match == 0 ) {
823 $unused_plugins[$pos] = $files[$i];
824 $pos++;
825 }
1a7a2fcc 826 }
eaace00e 827 }
828
af5de065 829 if ($columns > 1) {
830 $num = print_multi_col_list($num + 1, $columns, $screen_width, 1, @unused_plugins);
831 } else {
832 for ( $i = 0 ; $i <= $#unused_plugins ; $i++ ) {
833 $num = $num + 1;
834 $english_name = get_plugin_english_name($unused_plugins[$i]);
835 if ( $english_name eq "" ) {
836 print " $WHT$num.$NRM $unused_plugins[$i]" . get_plugin_version($unused_plugins[$i]) . "\n";
837 } else {
838 print " $WHT$num.$NRM $english_name ($unused_plugins[$i])" . get_plugin_version($unused_plugins[$i]) . "\n";
839 }
184e94a3 840 }
eaace00e 841 }
842 closedir DIR;
843
844 print "\n";
93d67e0d 845 if (lc($disable_plugins) eq 'true' && $disable_plugins_user ne '') {
846 print "E Enable active plugins (all plugins currently\n disabled for the user \"$disable_plugins_user\")\n";
847 } elsif (lc($disable_plugins) eq 'true') {
848 print "E Enable active plugins (all plugins currently\n disabled)\n";
849 } else {
850 print "D Disable all plugins\n";
851 }
852 print "U Set the user for whom plugins can be disabled\n";
dcc1cc82 853 print "R Return to Main Menu\n";
af5de065 854 print "C# List plugins in <#> number of columns\n";
eec03d8c 855 print "W# Change screen width to <#> (currently $screen_width)\n";
eaace00e 856 } elsif ( $menu == 9 ) {
857 print $WHT. "Database\n" . $NRM;
858 print "1. DSN for Address Book : $WHT$addrbook_dsn$NRM\n";
859 print "2. Table for Address Book : $WHT$addrbook_table$NRM\n";
99a6c222 860 print "\n";
eaace00e 861 print "3. DSN for Preferences : $WHT$prefs_dsn$NRM\n";
862 print "4. Table for Preferences : $WHT$prefs_table$NRM\n";
06316c07 863 print "5. Field for username : $WHT$prefs_user_field$NRM ($prefs_user_size)\n";
864 print "6. Field for prefs key : $WHT$prefs_key_field$NRM ($prefs_key_size)\n";
865 print "7. Field for prefs value : $WHT$prefs_val_field$NRM ($prefs_val_size)\n";
eaace00e 866 print "\n";
30e9932c 867 print "8. DSN for Global Address Book : $WHT$addrbook_global_dsn$NRM\n";
868 print "9. Table for Global Address Book : $WHT$addrbook_global_table$NRM\n";
869 print "10. Allow writing into Global Address Book : $WHT$addrbook_global_writeable$NRM\n";
870 print "11. Allow listing of Global Address Book : $WHT$addrbook_global_listing$NRM\n";
871 print "\n";
dcc1cc82 872 print "R Return to Main Menu\n";
39d3ec89 873 } elsif ( $menu == 10 ) {
af5de065 874 print $WHT. "Language settings\n" . $NRM;
875 print "1. Default Language : $WHT$squirrelmail_default_language$NRM\n";
876 print "2. Default Charset : $WHT$default_charset$NRM\n";
877 print "3. Show alternative language names : $WHT$show_alternative_names$NRM\n";
878 print "4. Enable aggressive decoding : $WHT$aggressive_decoding$NRM\n";
879 print "5. Enable lossy encoding : $WHT$lossy_encoding$NRM\n";
880 print "\n";
dcc1cc82 881 print "R Return to Main Menu\n";
39d3ec89 882 } elsif ( $menu == 11 ) {
af5de065 883 print $WHT. "Interface tweaks\n" . $NRM;
884 print "1. Display html mails in iframe : $WHT$use_iframe$NRM\n";
885 print "2. Ask user info on first login : $WHT$ask_user_info$NRM\n";
886 print "\n";
887 print $WHT. "PHP tweaks\n" . $NRM;
888 print "4. Use php recode functions : $WHT$use_php_recode$NRM\n";
889 print "5. Use php iconv functions : $WHT$use_php_iconv$NRM\n";
775a1f52 890 print "6. Buffer all output : $WHT$buffer_output$NRM\n";
af5de065 891 print "\n";
892 print $WHT. "Configuration tweaks\n" . $NRM;
775a1f52 893 print "7. Allow remote configtest : $WHT$allow_remote_configtest$NRM\n";
894 print "8. Debug mode : $WHT$sm_debug_mode$NRM\n";
895 print "9. Secured configuration mode : $WHT$secured_config$NRM\n";
8f557b94 896 print "10. HTTPS port : $WHT$sq_https_port$NRM\n";
897 print "11. Ignore HTTP_X_FORWARDED headers: $WHT$sq_ignore_http_x_forwarded_headers$NRM\n";
af5de065 898 print "\n";
dcc1cc82 899 print "R Return to Main Menu\n";
eaace00e 900 }
901 if ( $config_use_color == 1 ) {
1ef64acb 902 print "C Turn color off\n";
eaace00e 903 } else {
1ef64acb 904 print "C Turn color on\n";
eaace00e 905 }
dcc1cc82 906 print "S Save data\n";
907 print "Q Quit\n";
eaace00e 908
909 print "\n";
910 print "Command >> " . $WHT;
911 $command = <STDIN>;
85645192 912 $command =~ s/[\n\r]//g;
eaace00e 913 $command =~ tr/A-Z/a-z/;
914 print "$NRM\n";
915
916 # Read the commands they entered.
917 if ( $command eq "r" ) {
918 $menu = 0;
919 } elsif ( $command eq "s" ) {
920 save_data();
921 print "Press enter to continue...";
922 $tmp = <STDIN>;
923 $saved = 1;
924 } elsif ( ( $command eq "q" ) && ( $saved == 0 ) ) {
925 print "You have not saved your data.\n";
926 print "Save? [" . $WHT . "Y" . $NRM . "/n]: ";
927 $save = <STDIN>;
928 if ( ( $save =~ /^y/i ) || ( $save =~ /^\s*$/ ) ) {
929 save_data();
930 }
931 } elsif ( $command eq "c" ) {
932 if ( $config_use_color == 1 ) {
933 $config_use_color = 2;
934 $WHT = "";
935 $NRM = "";
936 } else {
937 $config_use_color = 1;
021044ec 938 $WHT = "\x1B[1m";
eaace00e 939 $NRM = "\x1B[0m";
940 }
af5de065 941 } elsif ( $command =~ /^w([0-9]+)/ ) {
942 $screen_width = $1;
eaace00e 943 } elsif ( $command eq "d" && $menu == 0 ) {
944 set_defaults();
945 } else {
946 $saved = 0;
947 if ( $menu == 0 ) {
39d3ec89 948 if ( ( $command > 0 ) && ( $command < 12 ) ) {
eaace00e 949 $menu = $command;
1a7a2fcc 950 }
eaace00e 951 } elsif ( $menu == 1 ) {
952 if ( $command == 1 ) { $org_name = command1(); }
953 elsif ( $command == 2 ) { $org_logo = command2(); }
b6e0c3b6 954 elsif ( $command == 3 ) { ($org_logo_width,$org_logo_height) = command2a(); }
955 elsif ( $command == 4 ) { $org_title = command3(); }
956 elsif ( $command == 5 ) { $signout_page = command4(); }
39d3ec89 957 elsif ( $command == 6 ) { $frame_top = command6(); }
958 elsif ( $command == 7 ) { $provider_uri = command7(); }
959 elsif ( $command == 8 ) { $provider_name = command8(); }
0ae4c1f2 960
eaace00e 961 } elsif ( $menu == 2 ) {
47a29326 962 if ( $command eq "a" ) { $show_imap_settings = 1; $show_smtp_settings = 0; }
963 elsif ( $command eq "b" ) { $show_imap_settings = 0; $show_smtp_settings = 1; }
964 elsif ( $command eq "h" ) { $show_imap_settings = 0; $show_smtp_settings = 0; }
965 elsif ( $command <= 3 ) {
966 if ( $command == 1 ) { $domain = command11(); }
967 elsif ( $command == 2 ) { $invert_time = command110(); }
968 elsif ( $command == 3 ) { $useSendmail = command14(); }
969 $show_imap_settings = 0; $show_smtp_settings = 0;
970 } elsif ( $show_imap_settings ) {
971 if ( $command == 4 ) { $imapServerAddress = command12(); }
972 elsif ( $command == 5 ) { $imapPort = command13(); }
b47821fb 973 elsif ( $command == 6 ) { $imap_auth_mech = command112a(); }
a15f9d93 974 elsif ( $command == 7 ) { $use_imap_tls = command_use_tls("IMAP",$use_imap_tls); }
47a29326 975 elsif ( $command == 8 ) { $imap_server_type = command19(); }
976 elsif ( $command == 9 ) { $optional_delimiter = command111(); }
35aaf666 977 } elsif ( $show_smtp_settings && lc($useSendmail) eq 'true' ) {
432db2fc 978 if ( $command == 4 ) { $sendmail_path = command15(); }
fd7ab795 979 elsif ( $command == 5 ) { $sendmail_args = command_sendmail_args(); }
980 elsif ( $command == 6 ) { $encode_header_key = command114(); }
47a29326 981 } elsif ( $show_smtp_settings ) {
982 if ( $command == 4 ) { $smtpServerAddress = command16(); }
983 elsif ( $command == 5 ) { $smtpPort = command17(); }
984 elsif ( $command == 6 ) { $pop_before_smtp = command18a(); }
b47821fb 985 elsif ( $command == 7 ) { $smtp_auth_mech = command112b(); }
a15f9d93 986 elsif ( $command == 8 ) { $use_smtp_tls = command_use_tls("SMTP",$use_smtp_tls); }
432db2fc 987 elsif ( $command == 9 ) { $encode_header_key = command114(); }
47a29326 988 }
eaace00e 989 } elsif ( $menu == 3 ) {
990 if ( $command == 1 ) { $default_folder_prefix = command21(); }
991 elsif ( $command == 2 ) { $show_prefix_option = command22(); }
992 elsif ( $command == 3 ) { $trash_folder = command23a(); }
993 elsif ( $command == 4 ) { $sent_folder = command23b(); }
994 elsif ( $command == 5 ) { $draft_folder = command23c(); }
995 elsif ( $command == 6 ) { $default_move_to_trash = command24a(); }
996 elsif ( $command == 7 ) { $default_move_to_sent = command24b(); }
997 elsif ( $command == 8 ) { $default_save_as_draft = command24c(); }
998 elsif ( $command == 9 ) { $list_special_folders_first = command27(); }
999 elsif ( $command == 10 ) { $use_special_folder_color = command28(); }
1000 elsif ( $command == 11 ) { $auto_expunge = command29(); }
1001 elsif ( $command == 12 ) { $default_sub_of_inbox = command210(); }
1002 elsif ( $command == 13 ) { $show_contain_subfolders_option = command211(); }
1003 elsif ( $command == 14 ) { $default_unseen_notify = command212(); }
1004 elsif ( $command == 15 ) { $default_unseen_type = command213(); }
1005 elsif ( $command == 16 ) { $auto_create_special = command214(); }
1006 elsif ( $command == 17 ) { $delete_folder = command215(); }
ca85aabe 1007 elsif ( $command == 18 ) { $noselect_fix_enable = command216(); }
eaace00e 1008 } elsif ( $menu == 4 ) {
39d3ec89 1009 if ( $command == 1 ) { $data_dir = command33a(); }
1010 elsif ( $command == 2 ) { $attachment_dir = command33b(); }
1011 elsif ( $command == 3 ) { $dir_hash_level = command33c(); }
1012 elsif ( $command == 4 ) { $default_left_size = command35(); }
1013 elsif ( $command == 5 ) { $force_username_lowercase = command36(); }
1014 elsif ( $command == 6 ) { $default_use_priority = command37(); }
1015 elsif ( $command == 7 ) { $hide_sm_attributions = command38(); }
1016 elsif ( $command == 8 ) { $default_use_mdn = command39(); }
ee20a285 1017 elsif ( $command == 9 ) { $edit_identity = command310(); }
11e00010 1018 elsif ( $command == 10 ) { $disable_thread_sort = command312(); }
1019 elsif ( $command == 11 ) { $disable_server_sort = command313(); }
39d3ec89 1020 elsif ( $command == 12 ) { $allow_charset_search = command314(); }
de74555e 1021 elsif ( $command == 13 ) { $allow_advanced_search = command316(); }
1022 elsif ( $command == 14 ) { $session_name = command317(); }
ee20a285 1023 elsif ( $command == 15 ) { $time_zone_type = command318(); }
3dc5d88f 1024 elsif ( $command == 16 ) { $config_location_base = command_config_location_base(); }
9c0f1780 1025 elsif ( $command == 17 ) { $only_secure_cookies = command319(); }
d555f507 1026 elsif ( $command == 18 ) { $disable_security_tokens = command320(); }
1027 elsif ( $command == 19 ) { $check_referrer = command321(); }
6ab8321f 1028 elsif ( $command == 20 ) { $use_transparent_security_image = command322(); }
9ae70b62 1029 elsif ( $command == 21 ) { $display_imap_login_error = command323(); }
eaace00e 1030 } elsif ( $menu == 5 ) {
83139c0b 1031 if ( $command == 1 ) { $use_icons = commandB3(); }
775a1f52 1032# elsif ( $command == 3 ) { $icon_theme_def = command53(); }
83139c0b 1033 elsif ( $command == 2 ) { $default_fontsize = command_default_fontsize(); }
1034 elsif ( $command == 3 ) { $templateset_default = command_templates(); }
1035 elsif ( $command == 4 ) { command_userThemes(); }
1036 elsif ( $command == 5 ) { command_fontsets(); }
1037 elsif ( $command == 6 ) { command_iconSets(); }
eaace00e 1038 } elsif ( $menu == 6 ) {
1039 if ( $command == 1 ) { command61(); }
1040 elsif ( $command == 2 ) { command62(); }
4272758c 1041 elsif ( $command == 3 ) { $abook_global_file=command63(); }
1042 elsif ( $command == 4 ) { command64(); }
71d3f882 1043 elsif ( $command == 5 ) { command65(); }
7311c377 1044 elsif ( $command == 6 ) { command_abook_file_line_length(); }
eaace00e 1045 } elsif ( $menu == 7 ) {
1046 if ( $command == 1 ) { $motd = command71(); }
1047 } elsif ( $menu == 8 ) {
af5de065 1048 if ( $command =~ /^[0-9]+/ ) { @plugins = command81(); }
1049 elsif ( $command eq "u" ) { $disable_plugins_user = command82(); }
1050 elsif ( $command eq "d" ) { $disable_plugins = 'true'; }
1051 elsif ( $command eq "e" ) { $disable_plugins = 'false'; }
1052 elsif ( $command =~ /^c([0-9]+)/ ) { $columns = $1; }
eaace00e 1053 } elsif ( $menu == 9 ) {
99a6c222 1054 if ( $command == 1 ) { $addrbook_dsn = command91(); }
1055 elsif ( $command == 2 ) { $addrbook_table = command92(); }
1056 elsif ( $command == 3 ) { $prefs_dsn = command93(); }
1057 elsif ( $command == 4 ) { $prefs_table = command94(); }
1058 elsif ( $command == 5 ) { $prefs_user_field = command95(); }
1059 elsif ( $command == 6 ) { $prefs_key_field = command96(); }
1060 elsif ( $command == 7 ) { $prefs_val_field = command97(); }
30e9932c 1061 elsif ( $command == 8 ) { $addrbook_global_dsn = command98(); }
1062 elsif ( $command == 9 ) { $addrbook_global_table = command99(); }
1063 elsif ( $command == 10 ) { $addrbook_global_writeable = command910(); }
1064 elsif ( $command == 11 ) { $addrbook_global_listing = command911(); }
39d3ec89 1065 } elsif ( $menu == 10 ) {
1066 if ( $command == 1 ) { $squirrelmail_default_language = commandA1(); }
5ba5dc8e 1067 elsif ( $command == 2 ) { $default_charset = commandA2(); }
dcc1cc82 1068 elsif ( $command == 3 ) { $show_alternative_names = commandA3(); }
5ba5dc8e 1069 elsif ( $command == 4 ) { $aggressive_decoding = commandA4(); }
1070 elsif ( $command == 5 ) { $lossy_encoding = commandA5(); }
39d3ec89 1071 } elsif ( $menu == 11 ) {
ca885a4f 1072 if ( $command == 1 ) { $use_iframe = commandB2(); }
209e24bb 1073 elsif ( $command == 2 ) { $ask_user_info = command_ask_user_info(); }
72bf0ae7 1074 elsif ( $command == 4 ) { $use_php_recode = commandB4(); }
1075 elsif ( $command == 5 ) { $use_php_iconv = commandB5(); }
775a1f52 1076 elsif ( $command == 6 ) { $buffer_output = commandB6(); }
1077 elsif ( $command == 7 ) { $allow_remote_configtest = commandB7(); }
1078 elsif ( $command == 8 ) { $sm_debug_mode = commandB8(); }
1079 elsif ( $command == 9 ) { $secured_config = commandB9(); }
8f557b94 1080 elsif ( $command == 10 ) { $sq_https_port = commandB10(); }
1081 elsif ( $command == 11 ) { $sq_ignore_http_x_forwarded_headers = commandB11(); }
eaace00e 1082 }
1083 }
828b4753 1084}
1085
cbd6543c 1086# we exit here
1087print "\nExiting conf.pl.\n".
35aaf666 1088 "You might want to test your configuration by browsing to\n".
1089 "http://your-squirrelmail-location/src/configtest.php\n".
1090 "Happy SquirrelMailing!\n\n";
cbd6543c 1091
1092
828b4753 1093####################################################################################
1094
5b6ae78a 1095# org_name
1096sub command1 {
eaace00e 1097 print "We have tried to make the name SquirrelMail as transparent as\n";
1098 print "possible. If you set up an organization name, most places where\n";
1099 print "SquirrelMail would take credit will be credited to your organization.\n";
1100 print "\n";
360ef370 1101 print "If your Organization Name includes a '\$', please precede it with a \\. \n";
1102 print "Other '\$' will be considered the beginning of a variable that\n";
1103 print "must be defined before the \$org_name is printed.\n";
360ef370 1104 print "\n";
eaace00e 1105 print "[$WHT$org_name$NRM]: $WHT";
1106 $new_org_name = <STDIN>;
1107 if ( $new_org_name eq "\n" ) {
1108 $new_org_name = $org_name;
1109 } else {
85645192 1110 $new_org_name =~ s/[\r\n]//g;
35aaf666 1111 $new_org_name =~ s/\"/&quot;/g;
eaace00e 1112 }
1113 return $new_org_name;
5b6ae78a 1114}
1115
1116# org_logo
1117sub command2 {
eaace00e 1118 print "Your organization's logo is an image that will be displayed at\n";
25be56ab 1119 print "different times throughout SquirrelMail. ";
1120 print "\n";
1121 print "Please be aware of the following: \n";
1122 print " - Relative URLs are relative to the config dir\n";
1123 print " to use the default logo, use ../images/sm_logo.png\n";
1124 print " - To specify a logo defined outside the SquirrelMail source tree\n";
1125 print " use the absolute URL the webserver would use to include the file\n";
a3bb5005 1126 print " e.g. http://example.com/images/mylogo.gif or /images/mylogo.jpg\n";
eaace00e 1127 print "\n";
1128 print "[$WHT$org_logo$NRM]: $WHT";
1129 $new_org_logo = <STDIN>;
1130 if ( $new_org_logo eq "\n" ) {
1131 $new_org_logo = $org_logo;
1132 } else {
85645192 1133 $new_org_logo =~ s/[\r\n]//g;
eaace00e 1134 }
1135 return $new_org_logo;
5b6ae78a 1136}
1137
b6e0c3b6 1138# org_logo_width
1139sub command2a {
1140 print "Your organization's logo is an image that will be displayed at\n";
1141 print "different times throughout SquirrelMail. Width\n";
1142 print "and Height of your logo image. Use '0' to disable.\n";
1143 print "\n";
1144 print "Width: [$WHT$org_logo_width$NRM]: $WHT";
1145 $new_org_logo_width = <STDIN>;
1146 $new_org_logo_width =~ tr/0-9//cd; # only want digits!
1147 if ( $new_org_logo_width eq '' ) {
1148 $new_org_logo_width = $org_logo_width;
1149 }
0e21688d 1150 if ( $new_org_logo_width > 0 ) {
1151 print "Height: [$WHT$org_logo_height$NRM]: $WHT";
1152 $new_org_logo_height = <STDIN>;
1153 $new_org_logo_height =~ tr/0-9//cd; # only want digits!
e03345e1 1154 if( $new_org_logo_height eq '' ) {
35aaf666 1155 $new_org_logo_height = $org_logo_height;
1156 }
00c4b08d 1157 } else {
0e21688d 1158 $new_org_logo_height = 0;
b6e0c3b6 1159 }
1160 return ($new_org_logo_width, $new_org_logo_height);
1161}
1162
5b6ae78a 1163# org_title
1164sub command3 {
eaace00e 1165 print "A title is what is displayed at the top of the browser window in\n";
1166 print "the titlebar. Usually this will end up looking something like:\n";
1167 print "\"Netscape: $org_title\"\n";
1168 print "\n";
360ef370 1169 print "If your Organization Title includes a '\$', please precede it with a \\. \n";
1170 print "Other '\$' will be considered the beginning of a variable that\n";
1171 print "must be defined before the \$org_title is printed.\n";
360ef370 1172 print "\n";
eaace00e 1173 print "[$WHT$org_title$NRM]: $WHT";
1174 $new_org_title = <STDIN>;
1175 if ( $new_org_title eq "\n" ) {
1176 $new_org_title = $org_title;
1177 } else {
85645192 1178 $new_org_title =~ s/[\r\n]//g;
35aaf666 1179 $new_org_title =~ s/\"/\'/g;
eaace00e 1180 }
1181 return $new_org_title;
5b6ae78a 1182}
5b6ae78a 1183
f923b93d 1184# signout_page
1185sub command4 {
eaace00e 1186 print "When users click the Sign Out button they will be logged out and\n";
1187 print "then sent to signout_page. If signout_page is left empty,\n";
1188 print "(hit space and then return) they will be taken, as normal,\n";
1189 print "to the default and rather sparse SquirrelMail signout page.\n";
1190 print "\n";
1191 print "[$WHT$signout_page$NRM]: $WHT";
1192 $new_signout_page = <STDIN>;
1193 if ( $new_signout_page eq "\n" ) {
1194 $new_signout_page = $signout_page;
1195 } else {
85645192 1196 $new_signout_page =~ s/[\r\n]//g;
eaace00e 1197 $new_signout_page =~ s/^\s+$//g;
1198 }
1199 return $new_signout_page;
6ef7145f 1200}
1201
80e86e94 1202# Default top frame
1203sub command6 {
1204 print "SquirrelMail defaults to using the whole of the browser window.\n";
1205 print "This allows you to keep it within a specified frame. The default\n";
1206 print "is '_top'\n";
1207 print "\n";
1208 print "[$WHT$frame_top$NRM]: $WHT";
1209 $new_frame_top = <STDIN>;
eaace00e 1210 if ( $new_frame_top eq "\n" ) {
80e86e94 1211 $new_frame_top = '_top';
1212 } else {
85645192 1213 $new_frame_top =~ s/[\r\n]//g;
80e86e94 1214 $new_frame_top =~ s/^\s+$//g;
1215 }
1216 return $new_frame_top;
1217}
1218
0ae4c1f2 1219# Default link to provider
1220sub command7 {
5810acfa 1221 print "Here you can set the link on the top-right of the message list.\n";
1222 print "If empty, it will not be displayed.\n";
0ae4c1f2 1223 print "\n";
1224 print "[$WHT$provider_uri$NRM]: $WHT";
1225 $new_provider_uri = <STDIN>;
1226 if ( $new_provider_uri eq "\n" ) {
8b5c49cd 1227 $new_provider_uri = '';
0ae4c1f2 1228 } else {
85645192 1229 $new_provider_uri =~ s/[\r\n]//g;
0ae4c1f2 1230 $new_provider_uri =~ s/^\s+$//g;
1231 }
7b6563c0 1232 return $new_provider_uri;
0ae4c1f2 1233}
1234
1235sub command8 {
5810acfa 1236 print "Here you can set the name of the link on the top-right of the message list.\n";
1237 print "The default is empty (do not display anything).'\n";
0ae4c1f2 1238 print "\n";
1239 print "[$WHT$provider_name$NRM]: $WHT";
1240 $new_provider_name = <STDIN>;
1241 if ( $new_provider_name eq "\n" ) {
5810acfa 1242 $new_provider_name = '';
0ae4c1f2 1243 } else {
85645192 1244 $new_provider_name =~ s/[\r\n]//g;
0ae4c1f2 1245 $new_provider_name =~ s/^\s+$//g;
26eed4f7 1246 $new_provider_name =~ s/\'/\\'/g;
0ae4c1f2 1247 }
7b6563c0 1248 return $new_provider_name;
0ae4c1f2 1249}
1250
828b4753 1251####################################################################################
5b6ae78a 1252
828b4753 1253# domain
1254sub command11 {
e1e4f932 1255 print "The domain name is the suffix at the end of all email addresses. If\n";
5d28b77e 1256 print "for example, your email address is jdoe\@example.com, then your domain\n";
1257 print "would be example.com.\n";
eaace00e 1258 print "\n";
1259 print "[$WHT$domain$NRM]: $WHT";
1260 $new_domain = <STDIN>;
1261 if ( $new_domain eq "\n" ) {
1262 $new_domain = $domain;
1263 } else {
da9e7627 1264 $new_domain =~ s/\s//g;
eaace00e 1265 }
1266 return $new_domain;
828b4753 1267}
5b6ae78a 1268
828b4753 1269# imapServerAddress
1270sub command12 {
47a29326 1271 print "This is the hostname where your IMAP server can be contacted.\n";
eaace00e 1272 print "[$WHT$imapServerAddress$NRM]: $WHT";
1273 $new_imapServerAddress = <STDIN>;
1274 if ( $new_imapServerAddress eq "\n" ) {
1275 $new_imapServerAddress = $imapServerAddress;
1276 } else {
85645192 1277 $new_imapServerAddress =~ s/[\r\n]//g;
eaace00e 1278 }
1279 return $new_imapServerAddress;
828b4753 1280}
5b6ae78a 1281
828b4753 1282# imapPort
1283sub command13 {
eaace00e 1284 print "This is the port that your IMAP server is on. Usually this is 143.\n";
1285 print "[$WHT$imapPort$NRM]: $WHT";
1286 $new_imapPort = <STDIN>;
1287 if ( $new_imapPort eq "\n" ) {
1288 $new_imapPort = $imapPort;
1289 } else {
85645192 1290 $new_imapPort =~ s/[\r\n]//g;
eaace00e 1291 }
1292 return $new_imapPort;
828b4753 1293}
1294
1295# useSendmail
1296sub command14 {
eaace00e 1297 print "You now need to choose the method that you will use for sending\n";
1298 print "messages in SquirrelMail. You can either connect to an SMTP server\n";
1299 print "or use sendmail directly.\n";
35aaf666 1300 if ( lc($useSendmail) eq 'true' ) {
eaace00e 1301 $default_value = "1";
1302 } else {
1303 $default_value = "2";
1304 }
1305 print "\n";
1306 print " 1. Sendmail\n";
1307 print " 2. SMTP\n";
1308 print "Your choice [1/2] [$WHT$default_value$NRM]: $WHT";
1309 $use_sendmail = <STDIN>;
1310 if ( ( $use_sendmail =~ /^1\n/i )
1311 || ( ( $use_sendmail =~ /^\n/ ) && ( $default_value eq "1" ) ) ) {
35aaf666 1312 $useSendmail = 'true';
eaace00e 1313 } else {
35aaf666 1314 $useSendmail = 'false';
eaace00e 1315 }
1316 return $useSendmail;
828b4753 1317}
5b6ae78a 1318
828b4753 1319# sendmail_path
1320sub command15 {
eaace00e 1321 print "Specify where the sendmail executable is located. Usually /usr/sbin/sendmail\n";
1322 print "[$WHT$sendmail_path$NRM]: $WHT";
1323 $new_sendmail_path = <STDIN>;
1324 if ( $new_sendmail_path eq "\n" ) {
1325 $new_sendmail_path = $sendmail_path;
1326 } else {
85645192 1327 $new_sendmail_path =~ s/[\r\n]//g;
eaace00e 1328 }
1329 return $new_sendmail_path;
828b4753 1330}
5b6ae78a 1331
fd7ab795 1332# Extra sendmail arguments
1333sub command_sendmail_args {
1334 print "Specify additional sendmail program arguments.\n";
1335 print "\n";
1336 print "Make sure that arguments are supported by your sendmail program. -f argument \n";
1337 print "is added automatically by SquirrelMail scripts. Variable defaults to standard\n";
1338 print "/usr/sbin/sendmail arguments. If you use qmail-inject, nbsmtp or any other \n";
1339 print "sendmail wrapper, which does not support -i and -t arguments, set variable to\n";
85bacb8f 1340 print "empty string or use arguments suitable for your mailer.\n";
fd7ab795 1341 print "\n";
1342 print "[$WHT$sendmail_args$NRM]: $WHT";
1343 $new_sendmail_args = <STDIN>;
1344 if ( $new_sendmail_args eq "\n" ) {
1345 $new_sendmail_args = $sendmail_args;
1346 } else {
1347 # strip linefeeds and crs.
1348 $new_sendmail_args =~ s/[\r\n]//g;
1349 }
1350 return trim($new_sendmail_args);
1351}
1352
828b4753 1353# smtpServerAddress
1354sub command16 {
47a29326 1355 print "This is the hostname of your SMTP server.\n";
eaace00e 1356 print "[$WHT$smtpServerAddress$NRM]: $WHT";
1357 $new_smtpServerAddress = <STDIN>;
1358 if ( $new_smtpServerAddress eq "\n" ) {
1359 $new_smtpServerAddress = $smtpServerAddress;
1360 } else {
85645192 1361 $new_smtpServerAddress =~ s/[\r\n]//g;
eaace00e 1362 }
1363 return $new_smtpServerAddress;
828b4753 1364}
1365
1366# smtpPort
1367sub command17 {
eaace00e 1368 print "This is the port to connect to for SMTP. Usually 25.\n";
1369 print "[$WHT$smtpPort$NRM]: $WHT";
1370 $new_smtpPort = <STDIN>;
1371 if ( $new_smtpPort eq "\n" ) {
1372 $new_smtpPort = $smtpPort;
1373 } else {
85645192 1374 $new_smtpPort =~ s/[\r\n]//g;
eaace00e 1375 }
1376 return $new_smtpPort;
bbd30ac8 1377}
d2f4c914 1378
2044f95a 1379# pop before SMTP
1380sub command18a {
1381 print "Do you wish to use POP3 before SMTP? Your server must\n";
1382 print "support this in order for SquirrelMail to work with it.\n";
1383
1384 $YesNo = 'n';
35aaf666 1385 $YesNo = 'y' if ( lc($pop_before_smtp) eq 'true' );
2044f95a 1386
783e926e 1387 print "Use POP before SMTP (y/n) [$WHT$YesNo$NRM]: $WHT";
2044f95a 1388
1389 $new_pop_before_smtp = <STDIN>;
1390 $new_pop_before_smtp =~ tr/yn//cd;
783e926e 1391 if ( $new_pop_before_smtp eq "y" ) {
1392 $new_pop_before_smtp = "true";
1393 } elsif ( $new_pop_before_smtp eq "n" ) {
1394 $new_pop_before_smtp = "false";
1395 } else {
1396 $new_pop_before_smtp = $pop_before_smtp;
1397 }
1398
1399 # if using POP before SMTP, allow setting of custom POP server address
1400 if ($new_pop_before_smtp eq "true") {
1401 print "$NRM\nIf the address of the POP server is not the same as\n";
1402 print "your SMTP server, you may specify it here. Leave blank (to\n";
1403 print "clear this, enter only spaces) to use the same address as\n";
1404 print "your SMTP server.\n";
1405 print "POP before SMTP server address [$WHT$pop_before_smtp_host$NRM]: $WHT";
1406
1407 $new_pop_before_smtp_host = <STDIN>;
1408 if ( $new_pop_before_smtp_host eq "\n" ) {
1409 $new_pop_before_smtp_host = $pop_before_smtp_host;
1410 } elsif ($new_pop_before_smtp_host =~ /^\s+$/) {
1411 $new_pop_before_smtp_host = '';
1412 } else {
1413 $new_pop_before_smtp_host =~ s/[\r|\n]//g;
1414 }
1415 $pop_before_smtp_host = $new_pop_before_smtp_host;
1416 }
1417
1418 return $new_pop_before_smtp;
2044f95a 1419}
1420
598294a7 1421# imap_server_type
d2f4c914 1422sub command19 {
eaace00e 1423 print "Each IMAP server has its own quirks. As much as we tried to stick\n";
1424 print "to standards, it doesn't help much if the IMAP server doesn't follow\n";
1425 print "the same principles. We have made some work-arounds for some of\n";
1426 print "these servers. If you would like to use them, please select your\n";
1427 print "IMAP server. If you do not wish to use these work-arounds, you can\n";
1428 print "set this to \"other\", and none will be used.\n";
7a4f9bfb 1429 print $list_supported_imap_servers;
a33764f6 1430 print "\n";
b39825f0 1431 print " other = Not one of the above servers\n";
a33764f6 1432 print "\n";
eaace00e 1433 print "[$WHT$imap_server_type$NRM]: $WHT";
1434 $new_imap_server_type = <STDIN>;
1435
1436 if ( $new_imap_server_type eq "\n" ) {
1437 $new_imap_server_type = $imap_server_type;
1438 } else {
85645192 1439 $new_imap_server_type =~ s/[\r\n]//g;
eaace00e 1440 }
1441 return $new_imap_server_type;
a93b12ba 1442}
3f8fe68e 1443
d47b2518 1444# invert_time
d2f4c914 1445sub command110 {
eaace00e 1446 print "Sometimes the date of messages sent is messed up (off by a few hours\n";
1447 print "on some machines). Typically this happens if the system doesn't support\n";
1448 print "tm_gmtoff. It will happen only if your time zone is \"negative\".\n";
1449 print "This most often occurs on Solaris 7 machines in the United States.\n";
1450 print "By default, this is off. It should be kept off unless problems surface\n";
1451 print "about the time that messages are sent.\n";
1452 print " no = Do NOT fix time -- almost always correct\n";
1453 print " yes = Fix the time for this system\n";
1454
1455 $YesNo = 'n';
35aaf666 1456 $YesNo = 'y' if ( lc($invert_time) eq 'true' );
eaace00e 1457
1458 print "Fix the time for this system (y/n) [$WHT$YesNo$NRM]: $WHT";
1459
1460 $new_invert_time = <STDIN>;
1461 $new_invert_time =~ tr/yn//cd;
35aaf666 1462 return 'true' if ( $new_invert_time eq "y" );
1463 return 'false' if ( $new_invert_time eq "n" );
eaace00e 1464 return $invert_time;
1465}
d47b2518 1466
d2f4c914 1467sub command111 {
eaace00e 1468 print "This is the delimiter that your IMAP server uses to distinguish between\n";
1469 print "folders. For example, Cyrus uses '.' as the delimiter and a complete\n";
1470 print "folder would look like 'INBOX.Friends.Bob', while UW uses '/' and would\n";
1471 print "look like 'INBOX/Friends/Bob'. Normally this should be left at 'detect'\n";
1472 print "but if you are sure you know what delimiter your server uses, you can\n";
1473 print "specify it here.\n";
1474 print "\nTo have it autodetect the delimiter, set it to 'detect'.\n\n";
1475 print "[$WHT$optional_delimiter$NRM]: $WHT";
1476 $new_optional_delimiter = <STDIN>;
1477
1478 if ( $new_optional_delimiter eq "\n" ) {
1479 $new_optional_delimiter = $optional_delimiter;
1480 } else {
85645192 1481 $new_optional_delimiter =~ s/[\r\n]//g;
eaace00e 1482 }
1483 return $new_optional_delimiter;
40ba4d36 1484}
b47821fb 1485# IMAP authentication type
33feaaec 1486# Possible values: login, plain, cram-md5, digest-md5
b47821fb 1487# Now offers to detect supported mechs, assuming server & port are set correctly
1488
1489sub command112a {
61e49023 1490 if ($use_imap_tls ne "0") {
1491 # 1. Script does not handle TLS.
1492 # 2. Server does not have to declare all supported authentication mechs when
1493 # STARTTLS is used. Supported mechs are declared only after STARTTLS.
1494 print "Auto-detection of login methods is unavailable when using TLS or STARTTLS.\n";
80e3fcf8 1495 } else {
35aaf666 1496 print "If you have already set the hostname and port number, I can try to\n";
1497 print "detect the mechanisms your IMAP server supports.\n";
1498 print "I will try to detect CRAM-MD5 and DIGEST-MD5 support. I can't test\n";
1499 print "for \"login\" or \"plain\" without knowing a username and password.\n";
1500 print "Auto-detecting is optional - you can safely say \"n\" here.\n";
1501 print "\nTry to detect supported mechanisms? [y/N]: ";
1502 $inval=<STDIN>;
1503 chomp($inval);
1504 if ($inval =~ /^y\b/i) {
1505 # Yes, let's try to detect.
1506 print "Trying to detect IMAP capabilities...\n";
1507 my $host = $imapServerAddress . ':'. $imapPort;
1508 print "CRAM-MD5:\t";
1509 my $tmp = detect_auth_support('IMAP',$host,'CRAM-MD5');
1510 if (defined($tmp)) {
1511 if ($tmp eq 'YES') {
1512 print "$WHT SUPPORTED$NRM\n";
1513 } else {
1514 print "$WHT NOT SUPPORTED$NRM\n";
1515 }
80e3fcf8 1516 } else {
35aaf666 1517 print $WHT . " ERROR DETECTING$NRM\n";
1518 }
1519
1520 print "DIGEST-MD5:\t";
1521 $tmp = detect_auth_support('IMAP',$host,'DIGEST-MD5');
1522 if (defined($tmp)) {
1523 if ($tmp eq 'YES') {
1524 print "$WHT SUPPORTED$NRM\n";
1525 } else {
1526 print "$WHT NOT SUPPORTED$NRM\n";
1527 }
1528 } else {
1529 print $WHT . " ERROR DETECTING$NRM\n";
1530 }
598294a7 1531
35aaf666 1532 }
598294a7 1533 }
35aaf666 1534 print "\nWhat authentication mechanism do you want to use for IMAP connections?\n\n";
1535 print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n";
33feaaec 1536 print $WHT . "plain" . $NRM . " - SASL PLAIN. If you need this, you already know it.\n";
35aaf666 1537 print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext methods.\n";
1538 print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n";
1539 print "\n*** YOUR IMAP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n";
1540 print "If you don't understand or are unsure, you probably want \"login\"\n\n";
1541 print "login, plain, cram-md5, or digest-md5 [$WHT$imap_auth_mech$NRM]: $WHT";
b47821fb 1542 $inval=<STDIN>;
1543 chomp($inval);
33feaaec 1544 if ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) || ($inval =~ /^login\b/i) || ($inval =~ /^plain\b/i)) {
b47821fb 1545 return lc($inval);
1546 } else {
1547 # user entered garbage or default value so nothing needs to be set
1548 return $imap_auth_mech;
1549 }
1550}
40ba4d36 1551
598294a7 1552
b47821fb 1553# SMTP authentication type
615b2793 1554# Possible choices: none, login, plain, cram-md5, digest-md5
b47821fb 1555sub command112b {
61e49023 1556 if ($use_smtp_tls ne "0") {
1557 print "Auto-detection of login methods is unavailable when using TLS or STARTTLS.\n";
1558 } elsif (eval ("use IO::Socket; 1")) {
1559 # try loading IO::Socket module
80e3fcf8 1560 print "If you have already set the hostname and port number, I can try to\n";
1561 print "automatically detect some of the mechanisms your SMTP server supports.\n";
35aaf666 1562 print "Auto-detection is *optional* - you can safely say \"n\" here.\n";
80e3fcf8 1563 print "\nTry to detect auth mechanisms? [y/N]: ";
1564 $inval=<STDIN>;
1565 chomp($inval);
1566 if ($inval =~ /^y\b/i) {
35aaf666 1567 # Yes, let's try to detect.
1568 print "Trying to detect supported methods (SMTP)...\n";
598294a7 1569
35aaf666 1570 # Special case!
1571 # Check none by trying to relay to junk@microsoft.com
1572 $host = $smtpServerAddress . ':' . $smtpPort;
35aaf666 1573 my $sock = IO::Socket::INET->new($host);
1574 print "Testing none:\t\t$WHT";
1575 if (!defined($sock)) {
1576 print " ERROR TESTING\n";
1577 close $sock;
1578 } else {
15dce5a6 1579 $got = <$sock>; # Discard greeting
5d28b77e 1580 print $sock "HELO $domain\r\n";
35aaf666 1581 $got = <$sock>; # Discard
5d28b77e 1582 print $sock "MAIL FROM:<tester\@squirrelmail.org>\r\n";
1583 $got = <$sock>; # Discard
1584 print $sock "RCPT TO:<junk\@microsoft.com\r\n";
35aaf666 1585 $got = <$sock>; # This is the important line
1586 if ($got =~ /^250\b/) { # SMTP will relay without auth
1587 print "SUPPORTED$NRM\n";
1588 } else {
1589 print "NOT SUPPORTED$NRM\n";
1590 }
5d28b77e 1591 print $sock "RSET\r\n";
1592 print $sock "QUIT\r\n";
35aaf666 1593 close $sock;
1594 }
615b2793 1595
35aaf666 1596 # Try login (SquirrelMail default)
1597 print "Testing login:\t\t";
1598 $tmp=detect_auth_support('SMTP',$host,'LOGIN');
1599 if (defined($tmp)) {
1600 if ($tmp eq 'YES') {
1601 print $WHT . "SUPPORTED$NRM\n";
1602 } else {
1603 print $WHT . "NOT SUPPORTED$NRM\n";
1604 }
1605 } else {
1606 print $WHT . "ERROR DETECTING$NRM\n";
1607 }
598294a7 1608
615b2793 1609 # Try plain
1610 print "Testing plain:\t\t";
1611 $tmp=detect_auth_support('SMTP',$host,'PLAIN');
1612 if (defined($tmp)) {
1613 if ($tmp eq 'YES') {
1614 print $WHT . "SUPPORTED$NRM\n";
1615 } else {
1616 print $WHT . "NOT SUPPORTED$NRM\n";
1617 }
1618 } else {
1619 print $WHT . "ERROR DETECTING$NRM\n";
1620 }
1621
35aaf666 1622 # Try CRAM-MD5
80e3fcf8 1623 print "Testing CRAM-MD5:\t";
1624 $tmp=detect_auth_support('SMTP',$host,'CRAM-MD5');
1625 if (defined($tmp)) {
1626 if ($tmp eq 'YES') {
1627 print $WHT . "SUPPORTED$NRM\n";
1628 } else {
1629 print $WHT . "NOT SUPPORTED$NRM\n";
1630 }
1631 } else {
1632 print $WHT . "ERROR DETECTING$NRM\n";
b47821fb 1633 }
598294a7 1634
80e3fcf8 1635
1636 print "Testing DIGEST-MD5:\t";
1637 $tmp=detect_auth_support('SMTP',$host,'DIGEST-MD5');
1638 if (defined($tmp)) {
1639 if ($tmp eq 'YES') {
1640 print $WHT . "SUPPORTED$NRM\n";
1641 } else {
1642 print $WHT . "NOT SUPPORTED$NRM\n";
1643 }
1644 } else {
1645 print $WHT . "ERROR DETECTING$NRM\n";
b47821fb 1646 }
598294a7 1647 }
80e3fcf8 1648 }
1649 print "\nWhat authentication mechanism do you want to use for SMTP connections?\n";
b47821fb 1650 print $WHT . "none" . $NRM . " - Your SMTP server does not require authorization.\n";
fe0b18b3 1651 print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n";
615b2793 1652 print $WHT . "plain" . $NRM . " - SASL PLAIN. Plaintext. If you can do better, you probably should.\n";
639c7164 1653 print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext.\n";
1654 print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n";
fe0b18b3 1655 print $WHT . "\n*** YOUR SMTP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n" . $NRM;
b47821fb 1656 print "If you don't understand or are unsure, you probably want \"none\"\n\n";
615b2793 1657 print "none, login, plain, cram-md5, or digest-md5 [$WHT$smtp_auth_mech$NRM]: $WHT";
47a29326 1658 $inval=<STDIN>;
1659 chomp($inval);
b47821fb 1660 if ($inval =~ /^none\b/i) {
029d1fc2 1661 # remove sitewide smtp authentication information
1662 $smtp_sitewide_user = '';
1663 $smtp_sitewide_pass = '';
1664 # SMTP doesn't necessarily require logins
1665 return "none";
1666 } elsif ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) ||
1667 ($inval =~ /^login\b/i) || ($inval =~/^plain\b/i)) {
1668 command_smtp_sitewide_userpass($inval);
1669 return lc($inval);
1670 } elsif (trim($inval) eq '') {
1671 # user selected default value
1672 command_smtp_sitewide_userpass($smtp_auth_mech);
1673 return $smtp_auth_mech;
1674 } else {
1675 # user entered garbage
1676 return $smtp_auth_mech;
47a29326 1677 }
029d1fc2 1678}
1679
1680sub command_smtp_sitewide_userpass($) {
1681 # get first function argument
1682 my $auth_mech = shift(@_);
1683 my $default, $tmp;
1684 $auth_mech = lc(trim($auth_mech));
54b27c06 1685 if ($auth_mech eq 'none') {
029d1fc2 1686 return;
1687 }
1688 print "SMTP authentication uses IMAP username and password by default.\n";
1689 print "\n";
1690 print "Would you like to use other login and password for all SquirrelMail \n";
1691 print "SMTP connections?";
1692 if ($smtp_sitewide_user ne '') {
1693 $default = 'y';
7b899075 1694 print " [Y/n]:";
029d1fc2 1695 } else {
1696 $default = 'n';
7b899075 1697 print " [y/N]:";
029d1fc2 1698 }
1699 $tmp=<STDIN>;
1700 $tmp = trim($tmp);
1701
1702 if ($tmp eq '') {
1703 $tmp = $default;
47a29326 1704 } else {
029d1fc2 1705 $tmp = lc($tmp);
1706 }
1707
1708 if ($tmp eq 'n') {
1709 $smtp_sitewide_user = '';
1710 $smtp_sitewide_pass = '';
1711 } elsif ($tmp eq 'y') {
1712 print "Enter username [$smtp_sitewide_user]:";
1713 my $new_user = <STDIN>;
1714 $new_user = trim($new_user);
1715 if ($new_user ne '') {
1716 $smtp_sitewide_user = $new_user;
1717 }
1718 if ($smtp_sitewide_user ne '') {
1719 print "If you don't enter any password, current sitewide password will be used.\n";
1720 print "If you enter space, password will be set to empty string.\n";
1721 print "Enter password:";
1722 my $new_pass = <STDIN>;
1723 if ($new_pass ne "\n") {
1724 $smtp_sitewide_pass = trim($new_pass);
1725 }
1726 } else {
1727 print "Invalid input. You must set username used for SMTP authentication.\n";
8b56e282 1728 print "Click enter to continue\n";
029d1fc2 1729 $tmp = <STDIN>;
1730 }
1731 } else {
1732 print "Invalid input\n";
8b56e282 1733 print "Click enter to continue\n";
029d1fc2 1734 $tmp = <STDIN>;
47a29326 1735 }
1736}
1737
029d1fc2 1738# Sub adds information about SMTP authentication type to menu
1739sub display_smtp_sitewide_userpass() {
1740 my $ret = '';
1741 if ($smtp_auth_mech ne 'none') {
1742 if ($smtp_sitewide_user ne '') {
1743 $ret = ' (with custom username and password)';
1744 } else {
1745 $ret = ' (with IMAP username and password)';
1746 }
1747 }
1748 return $ret;
1749}
1750
47a29326 1751# TLS
1752# This sub is reused for IMAP and SMTP
1753# Args: service name, default value
a15f9d93 1754sub command_use_tls {
35aaf666 1755 my($default_val,$service,$inval);
1756 $service=$_[0];
1757 $default_val=$_[1];
1758 print "TLS (Transport Layer Security) encrypts the traffic between server and client.\n";
a15f9d93 1759 print "STARTTLS extensions allow to start encryption on existing plain text connection.\n";
1760 print "These options add specific PHP and IMAP server configuration requirements.\n";
1761 print "See SquirrelMail documentation about connection security.\n";
1762 print "\n";
1763 print "If your " . $service . " server is localhost, you can safely disable this.\n";
35aaf666 1764 print "If it is remote, you may wish to seriously consider enabling this.\n";
a15f9d93 1765 $valid_input=0;
1766 while ($valid_input eq 0) {
1767 print "\nSelect connection security model:\n";
1768 print " 0 - Use plain text connection\n";
1769 print " 1 - Use TLS connection\n";
1770 print " 2 - Use STARTTLS extension\n";
1771 print "Select [$default_val]: ";
1772 $inval=<STDIN>;
1773 $inval=trim($inval);
1774 if ($inval =~ /^[012]$/ || $inval eq '') {
1775 $valid_input = 1;
1776 }
47a29326 1777 }
a15f9d93 1778 if ($inval ne '') {$default_val = $inval};
47a29326 1779 return $default_val;
35aaf666 1780}
47a29326 1781
2b4a868c 1782# This sub is used to display human readable text for
1783# $use_imap_tls and $use_smtp_tls values in conf.pl menu
1784sub display_use_tls($) {
1785 my $val = shift(@_);
1786 my $ret = 'disabled';
1787 if ($val eq '2') {
1788 $ret = 'STARTTLS';
1789 } elsif ($val eq '1') {
1790 $ret = 'TLS';
1791 }
1792 return $ret;
1793}
1794
432db2fc 1795# $encode_header_key
a6519f05 1796sub command114 {
919b9d41 1797 print "This encryption key allows the hiding of SquirrelMail Received:\n";
1798 print "headers in outbound messages. SquirrelMail uses the encryption\n";
1799 print "key to encode the username, remote address, and proxied address\n";
1800 print "and then stores that encoded information in X-Squirrel-* headers.\n";
432db2fc 1801 print "\n";
919b9d41 1802 print "Warning: the encryption function used to accomplish this is not\n";
1803 print "bulletproof. When used with a static encryption key as it is here,\n";
1804 print "it provides only minimal security and the encoded user information\n";
1805 print "in the X-Squirrel-* headers can be decoded quickly by a skilled\n";
1806 print "attacker.\n";
432db2fc 1807 print "\n";
919b9d41 1808 print "When you need to inspect an email sent from your system with the\n";
1809 print "X-Squirrel-* headers, you can decode the user information therein\n";
1810 print "by using the decrypt_headers.php script found in the SquirrelMail\n";
1811 print "contrib/ directory. You'll need the encryption key that you\n";
1812 print "defined here when doing so.\n";
432db2fc 1813 print "\n";
1814 print "Enter encryption key: ";
1815 $new_encode_header_key = <STDIN>;
1816 if ( $new_encode_header_key eq "\n" ) {
1817 $new_encode_header_key = $encode_header_key;
1818 } else {
1819 $new_encode_header_key =~ s/[\r\n]//g;
1820 }
1821 return $new_encode_header_key;
35aaf666 1822}
47a29326 1823
3f8fe68e 1824# MOTD
1825sub command71 {
eaace00e 1826 print "\nYou can now create the welcome message that is displayed\n";
1827 print "every time a user logs on. You can use HTML or just plain\n";
dcc1cc82 1828 print
1829"text. If you do not wish to have one, just make it blank.\n\n(Type @ on a blank line to exit)\n";
eaace00e 1830
1831 $new_motd = "";
1832 do {
1833 print "] ";
1834 $line = <STDIN>;
85645192 1835 $line =~ s/[\r\n]//g;
eaace00e 1836 if ( $line ne "@" ) {
1837 $line =~ s/ /\&nbsp;\&nbsp;/g;
1838 $line =~ s/\t/\&nbsp;\&nbsp;\&nbsp;\&nbsp;/g;
1839 $line =~ s/$/ /;
8278a58d 1840 $line =~ s/\"/\\\"/g;
eaace00e 1841
1842 $new_motd = $new_motd . $line;
1843 }
1844 } while ( $line ne "@" );
1845 return $new_motd;
3f8fe68e 1846}
911ad01c 1847
9d0c7bee 1848################# PLUGINS ###################
1849
1850sub command81 {
85645192 1851 $command =~ s/[\s\n\r]*//g;
eaace00e 1852 if ( $command > 0 ) {
1853 $command = $command - 1;
1854 if ( $command <= $#plugins ) {
1855 @newplugins = ();
1856 $ct = 0;
1857 while ( $ct <= $#plugins ) {
1858 if ( $ct != $command ) {
1859 @newplugins = ( @newplugins, $plugins[$ct] );
1860 }
1861 $ct++;
9d0c7bee 1862 }
eaace00e 1863 @plugins = @newplugins;
1864 } elsif ( $command <= $#plugins + $#unused_plugins + 1 ) {
1865 $num = $command - $#plugins - 1;
1866 @newplugins = @plugins;
1867 $ct = 0;
1868 while ( $ct <= $#unused_plugins ) {
1869 if ( $ct == $num ) {
1870 @newplugins = ( @newplugins, $unused_plugins[$ct] );
eaace00e 1871 }
1872 $ct++;
9d0c7bee 1873 }
eaace00e 1874 @plugins = @newplugins;
1875 }
1876 }
1877 return @plugins;
1878}
9d0c7bee 1879
93d67e0d 1880# disable_plugins_user
1881sub command82 {
1882 print "When all active plugins are disabled, they can be disabled only\n";
1883 print "for the one user named here. If left blank, plugins will be\n";
1884 print "disabled for ALL users. This setting has no effect if plugins\n";
1885 print "are not disabled.\n";
1886 print "\n";
1887 print "This must be the exact IMAP login name for the desired user.\n";
1888 print "\n";
1889 print "[$WHT$disable_plugins_user$NRM]: $WHT";
1890 $new_disable_plugins_user = <STDIN>;
1891 if ( $new_disable_plugins_user eq "\n" ) {
1892 $new_disable_plugins_user = $disable_plugins_user;
1893 } else {
1894 $new_disable_plugins_user =~ s/[\r\n]//g;
1895 }
1896 return $new_disable_plugins_user;
1897}
1898
911ad01c 1899################# FOLDERS ###################
1900
1901# default_folder_prefix
1902sub command21 {
eaace00e 1903 print "Some IMAP servers (UW, for example) store mail and folders in\n";
1904 print "your user space in a separate subdirectory. This is where you\n";
1905 print "specify what that directory is.\n";
1906 print "\n";
1907 print "EXAMPLE: mail/";
1908 print "\n";
1909 print "NOTE: If you use Cyrus, or some server that would not use this\n";
1910 print " option, you must set this to 'none'.\n";
1911 print "\n";
1912 print "[$WHT$default_folder_prefix$NRM]: $WHT";
1913 $new_default_folder_prefix = <STDIN>;
1914
1915 if ( $new_default_folder_prefix eq "\n" ) {
1916 $new_default_folder_prefix = $default_folder_prefix;
1917 } else {
d52532d5 1918 $new_default_folder_prefix =~ s/[\r\n]//g;
eaace00e 1919 }
d52532d5 1920 if ( ( $new_default_folder_prefix =~ /^\s*$/ ) || ( $new_default_folder_prefix =~ m/^none$/i ) ) {
eaace00e 1921 $new_default_folder_prefix = "";
1922 } else {
d52532d5 1923 # add the trailing delimiter only if we know what the server is.
ce9f808b 1924 if (($imap_server_type eq 'cyrus' and
1925 $optional_delimiter eq 'detect') or
1926 ($imap_server_type eq 'courier' and
1927 $optional_delimiter eq 'detect')) {
d52532d5 1928 $new_default_folder_prefix =~ s/\.*$/\./;
ce9f808b 1929 } elsif ($imap_server_type eq 'uw' and
1930 $optional_delimiter eq 'detect') {
d52532d5 1931 $new_default_folder_prefix =~ s/\/*$/\//;
0e21688d 1932 }
eaace00e 1933 }
1934 return $new_default_folder_prefix;
911ad01c 1935}
1936
1937# Show Folder Prefix
1938sub command22 {
eaace00e 1939 print "It is possible to set up the default folder prefix as a user\n";
1940 print "specific option, where each user can specify what their mail\n";
1941 print "folder is. If you set this to false, they will never see the\n";
1942 print "option, but if it is true, this option will appear in the\n";
1943 print "'options' section.\n";
1944 print "\n";
1945 print "NOTE: You set the default folder prefix in option '1' of this\n";
1946 print " section. That will be the default if the user doesn't\n";
1947 print " specify anything different.\n";
1948 print "\n";
1949
35aaf666 1950 if ( lc($show_prefix_option) eq 'true' ) {
eaace00e 1951 $default_value = "y";
1952 } else {
1953 $default_value = "n";
1954 }
1955 print "\n";
1956 print "Show option (y/n) [$WHT$default_value$NRM]: $WHT";
1957 $new_show = <STDIN>;
1958 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1959 $show_prefix_option = 'true';
eaace00e 1960 } else {
35aaf666 1961 $show_prefix_option = 'false';
eaace00e 1962 }
1963 return $show_prefix_option;
911ad01c 1964}
1965
598294a7 1966# Trash Folder
f7b1b3b1 1967sub command23a {
eaace00e 1968 print "You can now specify where the default trash folder is located.\n";
1969 print "On servers where you do not want this, you can set it to anything\n";
1970 print "and set option 6 to false.\n";
1971 print "\n";
1972 print "This is relative to where the rest of your email is kept. You do\n";
1973 print "not need to worry about their mail directory. If this folder\n";
1974 print "would be ~/mail/trash on the filesystem, you only need to specify\n";
1975 print "that this is 'trash', and be sure to put 'mail/' in option 1.\n";
1976 print "\n";
1977
1978 print "[$WHT$trash_folder$NRM]: $WHT";
1979 $new_trash_folder = <STDIN>;
1980 if ( $new_trash_folder eq "\n" ) {
1981 $new_trash_folder = $trash_folder;
1982 } else {
5ef3253e 1983 if (check_imap_folder($new_trash_folder)) {
1984 $new_trash_folder =~ s/[\r\n]//g;
1985 } else {
1986 $new_trash_folder = $trash_folder;
1987 }
eaace00e 1988 }
1989 return $new_trash_folder;
911ad01c 1990}
1991
598294a7 1992# Sent Folder
f7b1b3b1 1993sub command23b {
eaace00e 1994 print "This is where messages that are sent will be stored. SquirrelMail\n";
1995 print "by default puts a copy of all outgoing messages in this folder.\n";
1996 print "\n";
1997 print "This is relative to where the rest of your email is kept. You do\n";
1998 print "not need to worry about their mail directory. If this folder\n";
1999 print "would be ~/mail/sent on the filesystem, you only need to specify\n";
2000 print "that this is 'sent', and be sure to put 'mail/' in option 1.\n";
2001 print "\n";
2002
2003 print "[$WHT$sent_folder$NRM]: $WHT";
2004 $new_sent_folder = <STDIN>;
2005 if ( $new_sent_folder eq "\n" ) {
2006 $new_sent_folder = $sent_folder;
2007 } else {
5ef3253e 2008 if (check_imap_folder($new_sent_folder)) {
2009 $new_sent_folder =~ s/[\r\n]//g;
2010 } else {
2011 $new_sent_folder = $sent_folder;
2012 }
eaace00e 2013 }
2014 return $new_sent_folder;
911ad01c 2015}
2016
598294a7 2017# Draft Folder
f7b1b3b1 2018sub command23c {
eaace00e 2019 print "You can now specify where the default draft folder is located.\n";
2020 print "On servers where you do not want this, you can set it to anything\n";
2021 print "and set option 9 to false.\n";
2022 print "\n";
2023 print "This is relative to where the rest of your email is kept. You do\n";
2024 print "not need to worry about their mail directory. If this folder\n";
2025 print "would be ~/mail/drafts on the filesystem, you only need to specify\n";
2026 print "that this is 'drafts', and be sure to put 'mail/' in option 1.\n";
2027 print "\n";
2028
2029 print "[$WHT$draft_folder$NRM]: $WHT";
2030 $new_draft_folder = <STDIN>;
2031 if ( $new_draft_folder eq "\n" ) {
2032 $new_draft_folder = $draft_folder;
2033 } else {
5ef3253e 2034 if (check_imap_folder($new_draft_folder)) {
2035 $new_draft_folder =~ s/[\r\n]//g;
2036 } else {
2037 $new_draft_folder = $draft_folder;
2038 }
eaace00e 2039 }
2040 return $new_draft_folder;
f7b1b3b1 2041}
2042
598294a7 2043# default move to trash
f7b1b3b1 2044sub command24a {
eaace00e 2045 print "By default, should messages get moved to the trash folder? You\n";
2046 print "can specify the default trash folder in option 3. If this is set\n";
2047 print "to false, messages will get deleted immediately without moving\n";
2048 print "to the trash folder.\n";
2049 print "\n";
2050 print "Trash folder is currently: $trash_folder\n";
2051 print "\n";
2052
35aaf666 2053 if ( lc($default_move_to_trash) eq 'true' ) {
eaace00e 2054 $default_value = "y";
2055 } else {
2056 $default_value = "n";
2057 }
2058 print "By default, move to trash (y/n) [$WHT$default_value$NRM]: $WHT";
2059 $new_show = <STDIN>;
2060 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2061 $default_move_to_trash = 'true';
eaace00e 2062 } else {
35aaf666 2063 $default_move_to_trash = 'false';
eaace00e 2064 }
2065 return $default_move_to_trash;
2f287147 2066}
2067
bcd3bed7 2068# default move to sent (save sent messages)
f7b1b3b1 2069sub command24b {
bcd3bed7 2070 print "By default, should copies of outgoing messages get saved in the\n";
2071 print "sent folder? You can specify the default sent folder in option 4.\n";
2072 print "If this is set to false, messages will get sent and no copy will\n";
2073 print "be made.\n";
eaace00e 2074 print "\n";
6517cfd0 2075 print "Sent folder is currently: $sent_folder\n";
eaace00e 2076 print "\n";
2077
35aaf666 2078 if ( lc($default_move_to_sent) eq 'true' ) {
eaace00e 2079 $default_value = "y";
2080 } else {
2081 $default_value = "n";
2082 }
bcd3bed7 2083 print "By default, save sent messages (y/n) [$WHT$default_value$NRM]: $WHT";
eaace00e 2084 $new_show = <STDIN>;
2085 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2086 $default_move_to_sent = 'true';
eaace00e 2087 } else {
35aaf666 2088 $default_move_to_sent = 'false';
eaace00e 2089 }
2090 return $default_move_to_sent;
2f287147 2091}
2092
f7b1b3b1 2093# default save as draft
2094sub command24c {
eaace00e 2095 print "By default, should the save to draft option be shown? You can\n";
2096 print "specify the default drafts folder in option 5. If this is set\n";
2097 print "to false, users will not be shown the save to draft option.\n";
2098 print "\n";
2099 print "Drafts folder is currently: $draft_folder\n";
2100 print "\n";
2101
bcd3bed7 2102 if ( lc($default_save_as_draft) eq 'true' ) {
eaace00e 2103 $default_value = "y";
2104 } else {
2105 $default_value = "n";
2106 }
2107 print "By default, save as draft (y/n) [$WHT$default_value$NRM]: $WHT";
2108 $new_show = <STDIN>;
2109 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2110 $default_save_as_draft = 'true';
eaace00e 2111 } else {
35aaf666 2112 $default_save_as_draft = 'false';
eaace00e 2113 }
2114 return $default_save_as_draft;
f7b1b3b1 2115}
2116
598294a7 2117# List special folders first
2f287147 2118sub command27 {
eaace00e 2119 print "SquirrelMail has what we call 'special folders' that are not\n";
2120 print "manipulated and viewed like normal folders. Some examples of\n";
2121 print "these folders would be INBOX, Trash, Sent, etc. This option\n";
2122 print "Simply asks if you want these folders listed first in the folder\n";
2123 print "listing.\n";
2124 print "\n";
2125
35aaf666 2126 if ( lc($list_special_folders_first) eq 'true' ) {
eaace00e 2127 $default_value = "y";
2128 } else {
2129 $default_value = "n";
2130 }
2131 print "\n";
2132 print "List first (y/n) [$WHT$default_value$NRM]: $WHT";
2133 $new_show = <STDIN>;
2134 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2135 $list_special_folders_first = 'true';
eaace00e 2136 } else {
35aaf666 2137 $list_special_folders_first = 'false';
eaace00e 2138 }
2139 return $list_special_folders_first;
911ad01c 2140}
2141
598294a7 2142# Show special folders color
2f287147 2143sub command28 {
eaace00e 2144 print "SquirrelMail has what we call 'special folders' that are not\n";
2145 print "manipulated and viewed like normal folders. Some examples of\n";
2146 print "these folders would be INBOX, Trash, Sent, etc. This option\n";
2147 print "wants to know if we should display special folders in a\n";
2148 print "color than the other folders.\n";
2149 print "\n";
2150
35aaf666 2151 if ( lc($use_special_folder_color) eq 'true' ) {
eaace00e 2152 $default_value = "y";
2153 } else {
2154 $default_value = "n";
2155 }
2156 print "\n";
2157 print "Show color (y/n) [$WHT$default_value$NRM]: $WHT";
2158 $new_show = <STDIN>;
2159 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2160 $use_special_folder_color = 'true';
eaace00e 2161 } else {
35aaf666 2162 $use_special_folder_color = 'false';
eaace00e 2163 }
2164 return $use_special_folder_color;
911ad01c 2165}
2166
598294a7 2167# Auto expunge
2f287147 2168sub command29 {
eaace00e 2169 print "The way that IMAP handles deleting messages is as follows. You\n";
2170 print "mark the message as deleted, and then to 'really' delete it, you\n";
2171 print "expunge it. This option asks if you want to just have messages\n";
2172 print "marked as deleted, or if you want SquirrelMail to expunge the \n";
2173 print "messages too.\n";
2174 print "\n";
2175
35aaf666 2176 if ( lc($auto_expunge) eq 'true' ) {
eaace00e 2177 $default_value = "y";
2178 } else {
2179 $default_value = "n";
2180 }
2181 print "Auto expunge (y/n) [$WHT$default_value$NRM]: $WHT";
2182 $new_show = <STDIN>;
2183 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2184 $auto_expunge = 'true';
eaace00e 2185 } else {
35aaf666 2186 $auto_expunge = 'false';
eaace00e 2187 }
2188 return $auto_expunge;
911ad01c 2189}
2190
598294a7 2191# Default sub of inbox
2f287147 2192sub command210 {
eaace00e 2193 print "Some IMAP servers (Cyrus) have all folders as subfolders of INBOX.\n";
2194 print "This can cause some confusion in folder creation for users when\n";
2195 print "they try to create folders and don't put it as a subfolder of INBOX\n";
2196 print "and get permission errors. This option asks if you want folders\n";
2197 print "to be subfolders of INBOX by default.\n";
2198 print "\n";
2199
35aaf666 2200 if ( lc($default_sub_of_inbox) eq 'true' ) {
eaace00e 2201 $default_value = "y";
2202 } else {
2203 $default_value = "n";
2204 }
2205 print "Default sub of INBOX (y/n) [$WHT$default_value$NRM]: $WHT";
2206 $new_show = <STDIN>;
2207 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2208 $default_sub_of_inbox = 'true';
eaace00e 2209 } else {
35aaf666 2210 $default_sub_of_inbox = 'false';
eaace00e 2211 }
2212 return $default_sub_of_inbox;
911ad01c 2213}
2214
598294a7 2215# Show contain subfolder option
2f287147 2216sub command211 {
eaace00e 2217 print "Some IMAP servers (UW) make it so that there are two types of\n";
2218 print "folders. Those that contain messages, and those that contain\n";
2219 print "subfolders. If this is the case for your server, set this to\n";
2220 print "true, and it will ask the user whether the folder they are\n";
2221 print "creating contains subfolders or messages.\n";
2222 print "\n";
2223
35aaf666 2224 if ( lc($show_contain_subfolders_option) eq 'true' ) {
eaace00e 2225 $default_value = "y";
2226 } else {
2227 $default_value = "n";
2228 }
2229 print "Show option (y/n) [$WHT$default_value$NRM]: $WHT";
2230 $new_show = <STDIN>;
2231 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2232 $show_contain_subfolders_option = 'true';
eaace00e 2233 } else {
35aaf666 2234 $show_contain_subfolders_option = 'false';
eaace00e 2235 }
2236 return $show_contain_subfolders_option;
911ad01c 2237}
2238
598294a7 2239# Default Unseen Notify
24fc5dd2 2240sub command212 {
eaace00e 2241 print "This option specifies where the users will receive notification\n";
2242 print "about unseen messages by default. This is of course an option that\n";
2243 print "can be changed on a user level.\n";
2244 print " 1 = No notification\n";
2245 print " 2 = Only on the INBOX\n";
2246 print " 3 = On all folders\n";
2247 print "\n";
2248
2249 print "Which one should be default (1,2,3)? [$WHT$default_unseen_notify$NRM]: $WHT";
2250 $new_show = <STDIN>;
85645192 2251 if ( $new_show =~ /^[123]\n/i ) {
eaace00e 2252 $default_unseen_notify = $new_show;
2253 }
85645192 2254 $default_unseen_notify =~ s/[\r\n]//g;
eaace00e 2255 return $default_unseen_notify;
24fc5dd2 2256}
2257
598294a7 2258# Default Unseen Type
24fc5dd2 2259sub command213 {
eaace00e 2260 print "Here you can define the default way that unseen messages will be displayed\n";
2261 print "to the user in the folder listing on the left side.\n";
2262 print " 1 = Only unseen messages (4)\n";
2263 print " 2 = Unseen and Total messages (4/27)\n";
2264 print "\n";
2265
2266 print "Which one should be default (1,2)? [$WHT$default_unseen_type$NRM]: $WHT";
2267 $new_show = <STDIN>;
85645192 2268 if ( $new_show =~ /^[12]\n/i ) {
eaace00e 2269 $default_unseen_type = $new_show;
2270 }
85645192 2271 $default_unseen_type =~ s/[\r\n]//g;
eaace00e 2272 return $default_unseen_type;
24fc5dd2 2273}
2274
f7bfc9de 2275# Auto create special folders
2276sub command214 {
eaace00e 2277 print "Would you like the Sent, Trash, and Drafts folders to be created\n";
2278 print "automatically print for you when a user logs in? If the user\n";
2279 print "accidentally deletes their special folders, this option will\n";
2280 print "automatically create it again for them.\n";
2281 print "\n";
2282
35aaf666 2283 if ( lc($auto_create_special) eq 'true' ) {
eaace00e 2284 $default_value = "y";
2285 } else {
2286 $default_value = "n";
2287 }
2288 print "Auto create special folders? (y/n) [$WHT$default_value$NRM]: $WHT";
2289 $new_show = <STDIN>;
2290 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2291 $auto_create_special = 'true';
eaace00e 2292 } else {
35aaf666 2293 $auto_create_special = 'false';
eaace00e 2294 }
2295 return $auto_create_special;
f7bfc9de 2296}
2297
598294a7 2298# Automatically delete folders
4e85a37f 2299sub command215 {
d04165f3 2300 if ( $imap_server_type eq "uw" ) {
2301 print "UW IMAP servers will not allow folders containing mail to also contain folders.\n";
2302 print "Deleting folders will bypass the trash folder and be immediately deleted\n\n";
98468fba 2303 print "If this is not the correct value for your server,\n";
2304 print "please use option D on the Main Menu to configure your server correctly.\n\n";
8b56e282 2305 print "Press enter to continue...\n";
2eec12b5 2306 $new_delete = <STDIN>;
35aaf666 2307 $delete_folder = 'true';
598294a7 2308 } else {
d04165f3 2309 if ( $imap_server_type eq "courier" ) {
2310 print "Courier (or Courier-IMAP) IMAP servers may not support ";
2311 print "subfolders of Trash. \n";
2312 print "Specifically, if Courier is set to always move messages to Trash, \n";
2313 print "Trash will be treated by Courier as a special folder that does not \n";
2314 print "allow subfolders. \n\n";
2315 print "Please verify your Courier configuration, and test folder deletion \n";
598294a7 2316 print "when changing this setting.\n\n";
d04165f3 2317 }
2318
2319 print "Are subfolders of the Trash supported by your IMAP server?\n";
2320 print "If so, should deleted folders be sent to Trash?\n";
2321 print "If not, say no (deleted folders should not be sent to Trash)\n\n";
2322 # reversal of logic.
2323 # question was: Should folders be automatically deleted instead of sent to trash..
598294a7 2324 # we've changed the question to make it more clear,
2325 # and are here handling that to avoid changing the answers..
35aaf666 2326 if ( lc($delete_folder) eq 'true' ) {
2eec12b5 2327 $default_value = "n";
d04165f3 2328 } else {
2329 $default_value = "y";
2eec12b5 2330 }
d04165f3 2331 print "Send deleted folders to Trash? (y/n) [$WHT$default_value$NRM]: $WHT";
2eec12b5 2332 $new_delete = <STDIN>;
2333 if ( ( $new_delete =~ /^y\n/i ) || ( ( $new_delete =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2334 $delete_folder = 'false';
d04165f3 2335 } else {
35aaf666 2336 $delete_folder = 'true';
2eec12b5 2337 }
eaace00e 2338 }
2339 return $delete_folder;
2340}
24fc5dd2 2341
ca85aabe 2342#noselect fix
2343sub command216 {
fc4447c3 2344 print "Some IMAP servers allow subfolders to exist even if the parent\n";
ca85aabe 2345 print "folders do not. This fixes some problems with the folder list\n";
2346 print "when this is the case, causing the /NoSelect folders to be displayed\n";
2347 print "\n";
2348
35aaf666 2349 if ( lc($noselect_fix_enable) eq 'true' ) {
ca85aabe 2350 $default_value = "y";
2351 } else {
2352 $default_value = "n";
2353 }
2354 print "enable noselect fix? (y/n) [$WHT$noselect_fix_enable$NRM]: $WHT";
2355 $noselect_fix_enable = <STDIN>;
2356 if ( ( $noselect_fix_enable =~ /^y\n/i ) || ( ( $noselect_fix_enable =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2357 $noselect_fix_enable = 'true';
ca85aabe 2358 } else {
35aaf666 2359 $noselect_fix_enable = 'false';
ca85aabe 2360 }
2361 return $noselect_fix_enable;
2362}
ccfb2029 2363############# GENERAL OPTIONS #####################
2364
ccfb2029 2365# Data directory
3392dc86 2366sub command33a {
e6566358 2367 print "Specify the location for your data directory.\n";
368ab966 2368 print "You need to create this directory yourself.\n";
e6566358 2369 print "The path name can be absolute or relative (to the config directory).\n";
368ab966 2370 print "Here are two examples:\n";
2371 print " Absolute: /var/local/squirrelmail/data/\n";
598294a7 2372 print " Relative: ../data/\n";
8bd9e0dd 2373 print "Relative paths to directories outside of the SquirrelMail distribution\n";
e6566358 2374 print "will be converted to their absolute path equivalents in config.php.\n\n";
30e9932c 2375 print "Note: There are potential security risks with having a writeable directory\n";
e6566358 2376 print "under the web server's root directory (ex: /home/httpd/html).\n";
2377 print "For this reason, it is recommended to put the data directory\n";
2eec12b5 2378 print "in an alternate location of your choice. \n";
2379 print "\n";
2380
2381 print "[$WHT$data_dir$NRM]: $WHT";
2382 $new_data_dir = <STDIN>;
2383 if ( $new_data_dir eq "\n" ) {
2384 $new_data_dir = $data_dir;
2385 } else {
85645192 2386 $new_data_dir =~ s/[\r\n]//g;
2eec12b5 2387 }
eaace00e 2388 if ( $new_data_dir =~ /^\s*$/ ) {
2389 $new_data_dir = "";
2390 } else {
2391 $new_data_dir =~ s/\/*$//g;
2392 $new_data_dir =~ s/$/\//g;
2393 }
2394 return $new_data_dir;
ccfb2029 2395}
2396
2397# Attachment directory
3392dc86 2398sub command33b {
eaace00e 2399 print "Path to directory used for storing attachments while a mail is\n";
368ab966 2400 print "being composed. The path name can be absolute or relative (to the\n";
2401 print "config directory). Here are two examples:\n";
2402 print " Absolute: /var/local/squirrelmail/attach/\n";
e6566358 2403 print " Relative: ../attach/\n";
2404 print "Relative paths to directories outside of the SquirrelMail distribution\n";
2405 print "will be converted to their absolute path equivalents in config.php.\n\n";
2406 print "Note: There are a few security considerations regarding this\n";
eaace00e 2407 print "directory:\n";
2408 print " 1. It should have the permission 733 (rwx-wx-wx) to make it\n";
2409 print " impossible for a random person with access to the webserver\n";
2410 print " to list files in this directory. Confidential data might\n";
2411 print " be laying around in there.\n";
e6566358 2412 print " Depending on your user:group assignments, 730 (rwx-wx---)\n";
2413 print " may be possible, and more secure (e.g. root:apache)\n";
eaace00e 2414 print " 2. Since the webserver is not able to list the files in the\n";
2415 print " content is also impossible for the webserver to delete files\n";
2416 print " lying around there for too long.\n";
2417 print " 3. It should probably be another directory than the data\n";
2418 print " directory specified in option 3.\n";
2419 print "\n";
2420
2421 print "[$WHT$attachment_dir$NRM]: $WHT";
2422 $new_attachment_dir = <STDIN>;
2423 if ( $new_attachment_dir eq "\n" ) {
2424 $new_attachment_dir = $attachment_dir;
2425 } else {
85645192 2426 $new_attachment_dir =~ s/[\r\n]//g;
eaace00e 2427 }
2428 if ( $new_attachment_dir =~ /^\s*$/ ) {
2429 $new_attachment_dir = "";
2430 } else {
2431 $new_attachment_dir =~ s/\/*$//g;
2432 $new_attachment_dir =~ s/$/\//g;
2433 }
2434 return $new_attachment_dir;
ccfb2029 2435}
2436
3392dc86 2437sub command33c {
eaace00e 2438 print "The directory hash level setting allows you to configure the level\n";
598294a7 2439 print "of hashing that SquirrelMail employs in your data and attachment\n";
eaace00e 2440 print "directories. This value must be an integer ranging from 0 to 4.\n";
598294a7 2441 print "When this value is set to 0, SquirrelMail will simply store all\n";
eaace00e 2442 print "files as normal in the data and attachment directories. However,\n";
2443 print "when set to a value from 1 to 4, a simple hashing scheme will be\n";
2444 print "used to organize the files in this directory. In short, the crc32\n";
2445 print "value for a username will be computed. Then, up to the first 4\n";
2446 print "digits of the hash, as set by this configuration value, will be\n";
2447 print "used to directory hash the files for that user in the data and\n";
2448 print "attachment directory. This allows for better performance on\n";
2449 print "servers with larger numbers of users.\n";
2450 print "\n";
2451
2452 print "[$WHT$dir_hash_level$NRM]: $WHT";
2453 $new_dir_hash_level = <STDIN>;
2454 if ( $new_dir_hash_level eq "\n" ) {
2455 $new_dir_hash_level = $dir_hash_level;
2456 } else {
85645192 2457 $new_dir_hash_level =~ s/[\r\n]//g;
eaace00e 2458 }
2459 if ( ( int($new_dir_hash_level) < 0 )
2460 || ( int($new_dir_hash_level) > 4 )
2461 || !( int($new_dir_hash_level) eq $new_dir_hash_level ) ) {
2462 print "Invalid Directory Hash Level.\n";
2463 print "Value must be an integer ranging from 0 to 4\n";
2464 print "Hit enter to continue.\n";
2465 $enter_key = <STDIN>;
2466
2467 $new_dir_hash_level = $dir_hash_level;
2468 }
2469
2470 return $new_dir_hash_level;
3392dc86 2471}
ccfb2029 2472
2473sub command35 {
eaace00e 2474 print "This is the default size (in pixels) of the left folder list.\n";
2475 print "Default is 200, but you can set it to whatever you wish. This\n";
2476 print "is a user preference, so this will only show up as their default.\n";
2477 print "\n";
2478 print "[$WHT$default_left_size$NRM]: $WHT";
2479 $new_default_left_size = <STDIN>;
2480 if ( $new_default_left_size eq "\n" ) {
2481 $new_default_left_size = $default_left_size;
2482 } else {
85645192 2483 $new_default_left_size =~ s/[\r\n]//g;
eaace00e 2484 }
2485 return $new_default_left_size;
ccfb2029 2486}
2487
985f7c88 2488sub command36 {
eaace00e 2489 print "Some IMAP servers only have lowercase letters in the usernames\n";
2490 print "but they still allow people with uppercase to log in. This\n";
2491 print "causes a problem with the user's preference files. This option\n";
2492 print "transparently changes all usernames to lowercase.";
2493 print "\n";
2494
35aaf666 2495 if ( lc($force_username_lowercase) eq 'true' ) {
eaace00e 2496 $default_value = "y";
2497 } else {
2498 $default_value = "n";
2499 }
2500 print "Convert usernames to lowercase (y/n) [$WHT$default_value$NRM]: $WHT";
2501 $new_show = <STDIN>;
2502 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2503 return 'true';
eaace00e 2504 }
35aaf666 2505 return 'false';
985f7c88 2506}
2507
0d15cd19 2508sub command37 {
eaace00e 2509 print "";
2510 print "\n";
985f7c88 2511
35aaf666 2512 if ( lc($default_use_priority) eq 'true' ) {
eaace00e 2513 $default_value = "y";
2514 } else {
2515 $default_value = "n";
2516 }
2517
2518 print "Allow users to specify priority of outgoing mail (y/n) [$WHT$default_value$NRM]: $WHT";
2519 $new_show = <STDIN>;
2520 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2521 return 'true';
eaace00e 2522 }
35aaf666 2523 return 'false';
826b7f71 2524}
2525
eaace00e 2526sub command38 {
2527 print "";
2528 print "\n";
2529
d1aa5322 2530 if ( lc($hide_sm_attributions) eq 'true' ) {
eaace00e 2531 $default_value = "y";
2532 } else {
2533 $default_value = "n";
2534 }
2535
2536 print "Hide SM attributions (y/n) [$WHT$default_value$NRM]: $WHT";
2537 $new_show = <STDIN>;
2538 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2539 return 'true';
eaace00e 2540 }
35aaf666 2541 return 'false';
eaace00e 2542}
826b7f71 2543
8c21da0c 2544sub command39 {
eaace00e 2545 print "";
2546 print "\n";
2547
35aaf666 2548 if ( lc($default_use_mdn) eq 'true' ) {
eaace00e 2549 $default_value = "y";
2550 } else {
2551 $default_value = "n";
2552 }
2553
2554 print "Enable support for read/delivery receipt support (y/n) [$WHT$default_value$NRM]: $WHT";
2555 $new_show = <STDIN>;
2556 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2557 return 'true';
eaace00e 2558 }
35aaf666 2559 return 'false';
8c21da0c 2560}
2561
432db2fc 2562
8a7d0669 2563sub command310 {
85bacb8f 2564 print " In loosely managed environments, you may want to allow users
2565 to edit their full name and email address. In strictly managed
bb08da84 2566 environments, you may want to force users to use the name
2567 and email address assigned to them.
85bacb8f 2568
bb08da84 2569 'y' - allow a user to edit their full name and email address,
2570 'n' - users must use the assigned values.
85bacb8f 2571
bb08da84 2572 ";
eaace00e 2573
35aaf666 2574 if ( lc($edit_identity) eq 'true' ) {
8a7d0669 2575 $default_value = "y";
2576 } else {
2577 $default_value = "n";
2578 }
2eec12b5 2579 print "Allow editing of user's identity? (y/n) [$WHT$default_value$NRM]: $WHT";
8a7d0669 2580 $new_edit = <STDIN>;
eaace00e 2581 if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2582 $edit_identity = 'true';
2583 $edit_name = 'true';
3f7a756d 2584 $edit_reply_to = 'true';
2585 $hide_auth_header = command311c();
8a7d0669 2586 } else {
35aaf666 2587 $edit_identity = 'false';
2eec12b5 2588 $edit_name = command311();
3f7a756d 2589 $edit_reply_to = command311b();
2590 $hide_auth_header = command311c();
8a7d0669 2591 }
2592 return $edit_identity;
2593}
2594
2595sub command311 {
b6cbc7e0 2596 print "$NRM";
202d6445 2597 print "\n Given that users are not allowed to modify their
bb08da84 2598 email address, can they edit their full name?
85bacb8f 2599
bb08da84 2600 ";
8a7d0669 2601
35aaf666 2602 if ( lc($edit_name) eq 'true' ) {
8a7d0669 2603 $default_value = "y";
2604 } else {
2605 $default_value = "n";
2606 }
bb08da84 2607 print "Allow the user to edit their full name? (y/n) [$WHT$default_value$NRM]: $WHT";
8a7d0669 2608 $new_edit = <STDIN>;
eaace00e 2609 if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2610 $edit_name = 'true';
8a7d0669 2611 } else {
35aaf666 2612 $edit_name = 'false';
8a7d0669 2613 }
2614 return $edit_name;
2615}
8c21da0c 2616
432db2fc 2617sub command311b {
b6cbc7e0 2618 print "$NRM";
3f7a756d 2619 print "\n Given that users are not allowed to modify their
2620 email address, can they edit their reply-to address?
2621
2622 ";
2623
2624 if ( lc($edit_reply_to) eq 'true' ) {
2625 $default_value = "y";
2626 } else {
2627 $default_value = "n";
2628 }
2629 print "Allow the user to edit their reply-to address? (y/n) [$WHT$default_value$NRM]: $WHT";
2630 $new_edit = <STDIN>;
2631 if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2632 $edit_reply_to = 'true';
2633 } else {
2634 $edit_reply_to = 'false';
2635 }
2636 return $edit_reply_to;
2637}
2638
2639sub command311c {
2640 print "$NRM";
ec79d5c6 2641 print "\n SquirrelMail adds username information to every outgoing email in
2642 order to prevent possible sender forging by users that are allowed
2643 to change their email and/or full name.
bb08da84 2644
d1d2eafd 2645 You can remove user information from this header (y) if you think
2646 that it violates privacy or security.
85bacb8f 2647
ec79d5c6 2648 Note: If users are allowed to change their email addresses, this
2649 setting will make it difficult to determine who sent what where.
bb08da84 2650 Use at your own risk.
85bacb8f 2651
2405c716 2652 Note: If you have defined a header encryption key in your SMTP or
2653 Sendmail settings (see the \"Server Settings\" option page), this
2654 setting is ignored because all user information in outgoing messages
2655 is encoded.
2656
bb08da84 2657 ";
85bacb8f 2658
432db2fc 2659 if ( lc($hide_auth_header) eq "true" ) {
2660 $default_value = "y";
2661 } else {
2662 $default_value = "n";
2663 }
2664 print "Remove username from email headers? (y/n) [$WHT$default_value$NRM]: $WHT";
2665 $new_header = <STDIN>;
2666 if ( ( $new_header =~ /^y\n/i ) || ( ( $new_header =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2667 $hide_auth_header = "true";
2668 } else {
2669 $hide_auth_header = "false";
2670 }
bb08da84 2671 return $hide_auth_header;
432db2fc 2672}
2673
7c612fdd 2674sub command312 {
0e3ece54 2675 print "This option allows you to disable server side thread sorting if your server \n";
801da708 2676 print "declares THREAD support, but you don't want to provide threading options \n";
2677 print "to end users or THREAD extension is broken or extension does not work with \n";
2678 print "options used by SquirrelMail. Option is not used, if THREAD extension is \n";
2679 print "not declared in IMAP CAPABILITY.\n";
7c612fdd 2680 print "\n";
2681
801da708 2682 if ( lc($disable_thread_sort) eq 'true' ) {
7c612fdd 2683 $default_value = "y";
2684 } else {
2685 $default_value = "n";
2686 }
801da708 2687 print "Disable server side thread sorting? (y/n) [$WHT$default_value$NRM]: $WHT";
11e00010 2688 $disable_thread_sort = <STDIN>;
2689 if ( ( $disable_thread_sort =~ /^y\n/i ) || ( ( $disable_thread_sort =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2690 $disable_thread_sort = 'true';
7c612fdd 2691 } else {
11e00010 2692 $disable_thread_sort = 'false';
7c612fdd 2693 }
11e00010 2694 return $disable_thread_sort;
7c612fdd 2695}
2696
aa0da530 2697sub command313 {
0e3ece54 2698 print "This option allows you to disable server side sorting if your server declares \n";
801da708 2699 print "SORT support, but SORT extension is broken or does not work with options \n";
2700 print "used by SquirrelMail. Option is not used, if SORT extension is not declared \n";
2701 print "in IMAP CAPABILITY.\n";
2702 print "\n";
2703 print "It is strongly recommended to keep server side sorting enabled, if your ";
2704 print "IMAP server supports it.";
aa0da530 2705 print "\n";
2706
11e00010 2707 if ( lc($disable_server_sort) eq 'true' ) {
aa0da530 2708 $default_value = "y";
2709 } else {
2710 $default_value = "n";
2711 }
801da708 2712 print "Disable server-side sorting? (y/n) [$WHT$default_value$NRM]: $WHT";
11e00010 2713 $disable_server_sort = <STDIN>;
2714 if ( ( $disable_server_sort =~ /^y\n/i ) || ( ( $disable_server_sort =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2715 $disable_server_sort = 'true';
aa0da530 2716 } else {
11e00010 2717 $disable_server_sort = 'false';
aa0da530 2718 }
11e00010 2719 return $disable_server_sort;
aa0da530 2720}
2721
65ffb3ce 2722sub command314 {
2723 print "This option allows you to choose if SM uses charset search\n";
2724 print "Your IMAP server must support the SEARCH CHARSET command for this to work\n";
2725 print "\n";
2726
35aaf666 2727 if ( lc($allow_charset_search) eq 'true' ) {
65ffb3ce 2728 $default_value = "y";
2729 } else {
2730 $default_value = "n";
2731 }
2732 print "Allow charset searching? (y/n) [$WHT$default_value$NRM]: $WHT";
2733 $allow_charset_search = <STDIN>;
2734 if ( ( $allow_charset_search =~ /^y\n/i ) || ( ( $allow_charset_search =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2735 $allow_charset_search = 'true';
65ffb3ce 2736 } else {
35aaf666 2737 $allow_charset_search = 'false';
65ffb3ce 2738 }
2739 return $allow_charset_search;
2740}
2741
4ecd3a70 2742# command315 (UID support) obsoleted.
3c7ee482 2743
de74555e 2744# advanced search option
6c499577 2745sub command316 {
66bfb27b 2746 print "This option allows you to control the use of advanced search form.\n";
0f1b00b8 2747 print " 0 = enable basic search only\n";
2748 print " 1 = enable advanced search only\n";
2749 print " 2 = enable both\n";
2750 print "\n";
2751
2752 print "Allowed search (0,1,2)? [$WHT$allow_advanced_search$NRM]: $WHT";
2753 $new_allow_advanced_search = <STDIN>;
85645192 2754 if ( $new_allow_advanced_search =~ /^[012]\n/i ) {
0f1b00b8 2755 $allow_advanced_search = $new_allow_advanced_search;
de74555e 2756 }
85645192 2757 $allow_advanced_search =~ s/[\r\n]//g;
66bfb27b 2758 return $allow_advanced_search;
de74555e 2759}
2760
2761
2762sub command317 {
35aaf666 2763 print "This option allows you to change the name of the PHP session used\n";
2764 print "by SquirrelMail. Unless you know what you are doing, you probably\n";
2765 print "don't need or want to change this from the default of SQMSESSID.\n";
6c499577 2766 print "[$WHT$session_name$NRM]: $WHT";
2767 $new_session_name = <STDIN>;
35aaf666 2768 chomp($new_session_name);
6614128e 2769 if ( $new_session_name eq "" ) {
6c499577 2770 $new_session_name = $session_name;
2771 }
2772 return $new_session_name;
2773}
2774
ee20a285 2775# time zone config (since 1.5.1)
2776sub command318 {
2777 print "This option allows you to control the use of time zones.\n";
2778 print " 0 = (default) standard, GNU C time zone names\n";
2779 print " 1 = strict, generic time zone codes with offsets\n";
2780 print " 2 = custom, GNU C time zones loaded from config/timezones.php\n";
2781 print " 3 = custom strict, generic time zone codes with offsets loaded \n";
2782 print " from config/timezones.php\n";
2783 print "See SquirrelMail documentation about format of config/timezones.php file.\n";
2784 print "\n";
2785
1888b1bf 2786 print "Desired time zone configuration (0,1,2,3)? [$WHT$time_zone_type$NRM]: $WHT";
ee20a285 2787 $new_time_zone_type = <STDIN>;
2788 if ( $new_time_zone_type =~ /^[0123]\n/i ) {
2789 $time_zone_type = $new_time_zone_type;
2790 } else {
2791 print "\nInvalid configuration value.\n";
2792 print "\nPress enter to continue...";
2793 $tmp = <STDIN>;
2794 }
2795 $time_zone_type =~ s/[\r\n]//g;
2796 return $time_zone_type;
2797}
dcc1cc82 2798
74530cf4 2799# set the location base for redirects (since 1.5.2)
3dc5d88f 2800sub command_config_location_base {
74530cf4 2801 print "Here you can set the base part of the SquirrelMail URL.\n";
2802 print "It is normally autodetected but if that fails, use this\n";
2803 print "option to override.\n";
2804 print "It should contain only the protocol and hostname/port parts\n";
2805 print "of the URL; the full path will be appended automatically.\n\n";
2806 print "Examples:\nhttp://webmail.example.org\nhttp://webmail.example.com:8080\nhttps://webmail.example.com:6691\n\n";
2807 print "Do not add any path elements.\n";
2808
2809 print "URL base? [" .$WHT."autodetect$NRM]: $WHT";
2810 $new_config_location_base = <STDIN>;
2811 chomp($new_config_location_base);
2812 $config_location_base = $new_config_location_base;
2813
2814 return $config_location_base;
2815}
2816
9c0f1780 2817# only_secure_cookies (since 1.5.2)
2818sub command319 {
2819 print "This option allows you to specify that if a user session is initiated\n";
2820 print "under a secure (HTTPS, SSL-encrypted) connection, the cookies given to\n";
2821 print "the browser will ONLY be transmitted via a secure connection henceforth.\n\n";
2822 print "Generally this is a Good Thing, and should NOT be disabled. However,\n";
2823 print "if you intend to use the Secure Login or Show SSL Link plugins to\n";
2824 print "encrypt the user login, but not the rest of the SquirrelMail session,\n";
2825 print "this can be turned off. Think twice before doing so.\n";
2826 print "\n";
2827
2828 if ( lc($only_secure_cookies) eq 'true' ) {
2829 $default_value = "y";
2830 } else {
2831 $default_value = "n";
2832 }
2833 print "Transmit cookies only on secure connection when available? (y/n) [$WHT$default_value$NRM]: $WHT";
2834 $only_secure_cookies = <STDIN>;
2835 if ( ( $only_secure_cookies =~ /^y\n/i ) || ( ( $only_secure_cookies =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2836 $only_secure_cookies = 'true';
2837 } else {
2838 $only_secure_cookies = 'false';
2839 }
2840 return $only_secure_cookies;
2841}
2842
74530cf4 2843
d555f507 2844# disable_security_tokens (since 1.5.2)
2845sub command320 {
2846 print "This option allows you to turn off the security checks in the forms\n";
2847 print "that SquirrelMail generates. It is NOT RECOMMENDED that you disable\n";
2848 print "this feature - otherwise, your users may be exposed to phishing and\n";
2849 print "other attacks.\n";
2850 print "Unless you know what you are doing, you should leave this set to \"NO\".\n";
2851 print "\n";
2852
2853 if ( lc($disable_security_tokens) eq 'true' ) {
2854 $default_value = "y";
2855 } else {
2856 $default_value = "n";
2857 }
2858 print "Disable secure forms? (y/n) [$WHT$default_value$NRM]: $WHT";
2859 $disable_security_tokens = <STDIN>;
2860 if ( ( $disable_security_tokens =~ /^y\n/i ) || ( ( $disable_security_tokens =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2861 $disable_security_tokens = 'true';
2862 } else {
2863 $disable_security_tokens = 'false';
2864 }
2865 return $disable_security_tokens;
2866}
2867
2868
2869
6ab8321f 2870# check_referrer (since 1.5.2)
d555f507 2871sub command321 {
2872 print "This option allows you to enable referal checks for all page requests\n";
2873 print "made to SquirrelMail. This can help ensure that page requests came\n";
2874 print "from the same server and not from an attacker's site (usually the\n";
2875 print "result of a XSS or phishing attack). To enable referal checking,\n";
2876 print "this setting can be set to the domain where your SquirrelMail is\n";
2877 print "being hosted (usually the same as the Domain setting under Server\n";
2878 print "Settings). For example, it could be \"example.com\", or if you\n";
2879 print "use a plugin (such as Login Manager) to host SquirrelMail on more\n";
2880 print "than one domain, you can set this to \"###DOMAIN###\" to tell it\n";
2881 print "to use the current domain.\n";
2882 print "\n";
2883 print "However, in some cases (where proxy servers are in use, etc.), the\n";
2884 print "domain might be different.\n";
2885 print "\n";
2886 print "NOTE that referal checks are not foolproof - they can be spoofed by\n";
2887 print "browsers, and some browsers intentionally don't send referal\n";
2888 print "information (in which case, the check is silently bypassed)\n";
2889 print "\n";
2890
2891 print "Referal requirement? [$WHT$check_referrer$NRM]: $WHT";
2892 $new_check_referrer = <STDIN>;
2893 chomp($new_check_referrer);
2894 $check_referrer = $new_check_referrer;
2895
2896 return $check_referrer;
2897}
2898
2899
2900
6ab8321f 2901# use_transparent_security_image (since 1.5.2)
2902sub command322 {
2903 print "When HTML messages are being displayed, SquirrelMail's default behavior\n";
2904 print "is to remove all remote images and replace them with a local one.\n";
2905 print "\n";
2906 print "This option allows you to specify whether the local image should contain\n";
2907 print "text that indicates to the user that \"this image has been removed for\n";
2908 print "security reasons\" (translated into most languages), or if it should be\n";
2909 print "transparent.\n";
2910 print "\n";
2911
2912 if ( lc($use_transparent_security_image) eq 'true' ) {
2913 $default_value = "y";
2914 } else {
2915 $default_value = "n";
2916 }
2917 print "Use transparent security image? (y/n) [$WHT$default_value$NRM]: $WHT";
2918 $use_transparent_security_image = <STDIN>;
2919 if ( ( $use_transparent_security_image =~ /^y\n/i ) || ( ( $use_transparent_security_image =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2920 $use_transparent_security_image = 'true';
2921 } else {
2922 $use_transparent_security_image = 'false';
2923 }
2924 return $use_transparent_security_image;
2925}
2926
2927
2928
9ae70b62 2929# display_imap_login_error (since 1.5.2)
2930sub command323 {
2931 print "Some IMAP servers return detailed information about why a login is\n";
2932 print "being refused (the username or password could be invalid or there\n";
2933 print "might be an administrative lock on the account).\n";
2934 print "\n";
2935 print "Enabling this option will cause SquirrelMail to display login failure\n";
2936 print "messages directly from the IMAP server. When it is disabled, login\n";
2937 print "failures are always reported to the user with the traditional \"Unknown\n";
2938 print "user or password incorrect.\"\n";
2939 print "\n";
2940
2941 if ( lc($display_imap_login_error) eq 'true' ) {
2942 $default_value = "y";
2943 } else {
2944 $default_value = "n";
2945 }
2946 print "Display login error messages directly from the IMAP server? (y/n) [$WHT$default_value$NRM]: $WHT";
2947 $display_imap_login_error = <STDIN>;
2948 if ( ( $display_imap_login_error =~ /^y\n/i ) || ( ( $display_imap_login_error =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2949 $display_imap_login_error = 'true';
2950 } else {
2951 $display_imap_login_error = 'false';
2952 }
2953 return $display_imap_login_error;
2954}
2955
2956
2957
83139c0b 2958sub command_userThemes {
82351c82 2959 print "\nDefine the user themes that you wish to use. If you have added\n";
2960 print "a theme of your own, just follow the instructions (?) about\n";
2961 print "how to add them. You can also change the default theme.\n\n";
3641f36d 2962
2963 print "Available user themes:\n";
2964 $count = 0;
2965 while ( $count <= $#user_theme_name ) {
2966 if ( $count == $user_theme_default ) {
2967 print " *";
2968 } else {
2969 print " ";
2970 }
2971 if ( $count < 10 ) {
2972 print " ";
2973 }
2974 $name = $user_theme_name[$count];
2975 $num_spaces = 35 - length($name);
2976 for ( $i = 0 ; $i < $num_spaces ; $i++ ) {
2977 $name = $name . " ";
2978 }
2979
2980 print " $count. $name";
2981 print "($user_theme_path[$count])\n";
2982
2983 $count++;
2984 }
9061389c 2985
2986 print "\n";
3641f36d 2987 print ".------------------------------------.\n";
2988 print "| t (detect user themes) |\n";
2989 print "| + (add user theme) |\n";
2990 print "| - N (remove user theme) |\n";
2991 print "| m N (mark default user theme) |\n";
2992 print "| l (list user themes) |\n";
2993 print "| d (done) |\n";
2994 print "`------------------------------------'\n";
9061389c 2995
3641f36d 2996 print "\n[user_themes] command (?=help) > ";
eaace00e 2997 $input = <STDIN>;
85645192 2998 $input =~ s/[\r\n]//g;
eaace00e 2999 while ( $input ne "d" ) {
3000 if ( $input =~ /^\s*l\s*/i ) {
3001 $count = 0;
82351c82 3002 while ( $count <= $#user_theme_name ) {
3003 if ( $count == $user_theme_default ) {
eaace00e 3004 print " *";
3005 } else {
3006 print " ";
3007 }
2eec12b5 3008 if ( $count < 10 ) {
3009 print " ";
3010 }
82351c82 3011 $name = $user_theme_name[$count];
2eec12b5 3012 $num_spaces = 35 - length($name);
eaace00e 3013 for ( $i = 0 ; $i < $num_spaces ; $i++ ) {
3014 $name = $name . " ";
3015 }
3016
3017 print " $count. $name";
82351c82 3018 print "($user_theme_path[$count])\n";
eaace00e 3019
3020 $count++;
ccfb2029 3021 }
eaace00e 3022 } elsif ( $input =~ /^\s*m\s*[0-9]+/i ) {
82351c82 3023 $old_def = $user_theme_default;
3024 $user_theme_default = $input;
3025 $user_theme_default =~ s/^\s*m\s*//;
3026 if ( ( $user_theme_default > $#user_theme_name ) || ( $user_theme_default < 0 ) ) {
3027 print "Cannot set default theme to $user_theme_default. That theme does not exist.\n";
3028 $user_theme_default = $old_def;
ccfb2029 3029 }
eaace00e 3030 } elsif ( $input =~ /^\s*\+/ ) {
82351c82 3031 print "What is the name of this theme? ";
eaace00e 3032 $name = <STDIN>;
85645192 3033 $name =~ s/[\r\n]//g;
83139c0b 3034 $user_theme_name[ $#user_theme_name + 1 ] = $name;
82351c82 3035 print "Be sure to put ../css/ before the filename.\n";
3036 print "What file is this stored in (ex: ../css/my_theme/): ";
eaace00e 3037 $name = <STDIN>;
85645192 3038 $name =~ s/[\r\n]//g;
82351c82 3039 $user_theme_path[ $#user_theme_path + 1 ] = $name;
eaace00e 3040 } elsif ( $input =~ /^\s*-\s*[0-9]?/ ) {
3041 if ( $input =~ /[0-9]+\s*$/ ) {
3042 $rem_num = $input;
3043 $rem_num =~ s/^\s*-\s*//g;
3044 $rem_num =~ s/\s*$//;
3045 } else {
82351c82 3046 $rem_num = $#user_theme_name;
ccfb2029 3047 }
82351c82 3048 if ( $rem_num == $user_theme_default ) {
eaace00e 3049 print "You cannot remove the default theme!\n";
3050 } else {
3051 $count = 0;
3052 @new_theme_name = ();
3053 @new_theme_path = ();
82351c82 3054 while ( $count <= $#user_theme_name ) {
eaace00e 3055 if ( $count != $rem_num ) {
82351c82 3056 @new_theme_name = ( @new_theme_name, $user_theme_name[$count] );
3057 @new_theme_path = ( @new_theme_path, $user_theme_path[$count] );
eaace00e 3058 }
3059 $count++;
3060 }
82351c82 3061 @user_theme_name = @new_theme_name;
3062 @user_theme_path = @new_theme_path;
3063 if ( $user_theme_default > $rem_num ) {
3064 $user_theme_default--;
eaace00e 3065 }
8442ac08 3066 }
eaace00e 3067 } elsif ( $input =~ /^\s*t\s*/i ) {
3068 print "\nStarting detection...\n\n";
3069
82351c82 3070 opendir( DIR, "../css" );
e06886c9 3071 @files = sort(readdir(DIR));
eaace00e 3072 $cnt = 0;
3073 while ( $cnt <= $#files ) {
82351c82 3074 $filename = "../css/" . $files[$cnt] .'/';
a0fa595d 3075 if ( $files[$cnt] !~ /^\./ && $filename ne "../css/rtl.css" && -e $filename . "default.css" ) {
eaace00e 3076 $found = 0;
82351c82 3077 for ( $x = 0 ; $x <= $#user_theme_path ; $x++ ) {
3078 if ( $user_theme_path[$x] eq $filename ) {
eaace00e 3079 $found = 1;
3080 }
3081 }
3082 if ( $found != 1 ) {
82351c82 3083 print "** Found user theme: $filename\n";
a0fa595d 3084 $def = $files[$cnt];
3085 $def =~ s/_/ /g;
3086 $def = lc($def);
3087 #$def =~ s/(^\w+)/ucfirst $1/eg;
3088 #$def =~ s/(\s+)(\w+)/$1 . ucfirst $2/eg;
3089 $def =~ s/(^\w+)|(\s+)(\w+)/ucfirst $1 . $2 . ucfirst $3/eg;
3090 print " What is its name? [$def]: ";
eaace00e 3091 $nm = <STDIN>;
a0fa595d 3092 $nm =~ s/^\s+|\s+$|[\n\r]//g;
3093 if ( $nm eq '' ) { $nm = $def; }
82351c82 3094 $user_theme_name[ $#user_theme_name + 1 ] = $nm;
3095 $user_theme_path[ $#user_theme_path + 1 ] = $filename;
eaace00e 3096 }
3097 }
3098 $cnt++;
8442ac08 3099 }
eaace00e 3100 print "\n";
82351c82 3101 for ( $cnt = 0 ; $cnt <= $#user_theme_path ; $cnt++ ) {
3102 $filename = $user_theme_path[$cnt];
3103 if ( $filename != 'none' && !( -e $filename ."/default.css" ) ) {
eaace00e 3104 print " Removing $filename (file not found)\n";
3105 $offset = 0;
82351c82 3106 @new_user_theme_name = ();
3107 @new_user_theme_path = ();
3108 for ( $x = 0 ; $x < $#user_theme_path ; $x++ ) {
3109 if ( $user_theme_path[$x] eq $filename ) {
eaace00e 3110 $offset = 1;
3111 }
3112 if ( $offset == 1 ) {
82351c82 3113 $new_user_theme_name[$x] = $user_theme_name[ $x + 1 ];
3114 $new_user_theme_path[$x] = $user_theme_path[ $x + 1 ];
eaace00e 3115 } else {
82351c82 3116 $new_user_theme_name[$x] = $user_theme_name[$x];
3117 $new_user_theme_path[$x] = $user_theme_path[$x];
eaace00e 3118 }
3119 }
82351c82 3120 @user_theme_name = @new_user_theme_name;
3121 @user_theme_path = @new_user_theme_path;
eaace00e 3122 }
3123 }
3124 print "\nDetection complete!\n\n";
3125
3126 closedir DIR;
3127 } elsif ( $input =~ /^\s*\?\s*/ ) {
83139c0b 3128 print ".------------------------------------.\n";
3129 print "| t (detect user themes) |\n";
3130 print "| + (add user theme) |\n";
3131 print "| - N (remove user theme) |\n";
3132 print "| m N (mark default user theme) |\n";
3133 print "| l (list user themes) |\n";
3134 print "| d (done) |\n";
3135 print "`------------------------------------'\n";
3136 }
3137 print "[user_themes] command (?=help) > ";
3138 $input = <STDIN>;
3139 $input =~ s/[\r\n]//g;
3140 }
3141}
3142
3143sub command_iconSets {
3144 print "\nDefine the icon themes that you wish to use. If you have added\n";
3145 print "a theme of your own, just follow the instructions (?) about\n";
341fd984 3146 print "how to add them. You can also change the default and fallback\n";
3147 print "themes. The default theme will be used when no icon theme is\n";
3148 print "set by the user. The fallback theme will be used if an icon\n";
3149 print "cannot be found in the currently selected icon theme.\n\n";
3641f36d 3150
3151 print "Available icon themes:\n\n";
3152
3153 $count = 0;
3154 while ( $count <= $#icon_theme_name ) {
3155 if ( $count == $icon_theme_def ) {
341fd984 3156 print " d";
3157 } else {
3158 print " ";
3159 }
3160 if ( $count eq $icon_theme_fallback ) {
3161 print "f ";
3641f36d 3162 } else {
3163 print " ";
3164 }
3165 if ( $count < 10 ) {
3166 print " ";
3167 }
3168 $name = $icon_theme_name[$count];
3169 $num_spaces = 35 - length($name);
3170 for ( $i = 0 ; $i < $num_spaces ; $i++ ) {
3171 $name = $name . " ";
3172 }
3173
3174 print " $count. $name";
3175 print "($icon_theme_path[$count])\n";
3176
3177 $count++;
3178 }
3179
341fd984 3180 print "\n d = Default icon theme\n";
3181 print " f = Fallback icon theme\n";
3641f36d 3182 print "\n";
3183 print ".------------------------------------.\n";
3184 print "| t (detect icon themes) |\n";
3185 print "| + (add icon theme) |\n";
3186 print "| - N (remove icon theme) |\n";
3187 print "| m N (mark default icon theme) |\n";
341fd984 3188 print "| f N (set fallback icon set) |\n";
3641f36d 3189 print "| l (list icon themes) |\n";
3190 print "| d (done) |\n";
3191 print "`------------------------------------'\n";
3192
3193 print "\n[icon_themes] command (?=help) > ";
83139c0b 3194 $input = <STDIN>;
3195 $input =~ s/[\r\n]//g;
3196 while ( $input ne "d" ) {
3197 if ( $input =~ /^\s*l\s*/i ) {
3198 $count = 0;
341fd984 3199 print "\n";
83139c0b 3200 while ( $count <= $#icon_theme_name ) {
341fd984 3201 if ( $count == $icon_theme_def ) {
3202 print " d";
3203 } else {
3204 print " ";
3205 }
3206 if ( $count eq $icon_theme_fallback ) {
3207 print "f ";
3208 } else {
3209 print " ";
3210 }
83139c0b 3211 $name = $icon_theme_name[$count];
3212 $num_spaces = 35 - length($name);
3213 for ( $i = 0 ; $i < $num_spaces ; $i++ ) {
3214 $name = $name . " ";
3215 }
3216
3217 print " $count. $name";
3218 print "($icon_theme_path[$count])\n";
3219
3220 $count++;
3221 }
341fd984 3222 print "\n d = Default icon theme\n";
3223 print " f = Fallback icon theme\n\n";
83139c0b 3224 } elsif ( $input =~ /^\s*m\s*[0-9]+/i ) {
3225 $old_def = $icon_theme_def;
3226 $icon_theme_def = $input;
3227 $icon_theme_def =~ s/^\s*m\s*//;
3228 if ( ( $icon_theme_default > $#icon_theme_name ) || ( $icon_theme_default < 0 ) ) {
3229 print "Cannot set default icon theme to $icon_theme_default. That theme does not exist.\n";
3230 $icon_theme_def = $old_def;
3231 }
341fd984 3232 } elsif ( $input =~ /^\s*f\s*[0-9]+/i ) {
3233 $old_fb = $icon_theme_fallback;
3234 $icon_theme_fallback = $input;
3235 $icon_theme_fallback =~ s/^\s*f\s*//;
3236 if ( ( $icon_theme_fallback > $#icon_theme_name ) || ( $icon_theme_fallback < 0 ) ) {
3237 print "Cannot set fallback icon theme to $icon_theme_fallback. That theme does not exist.\n";
3238 $icon_theme_fallback = $old_fb;
3239 }
83139c0b 3240 } elsif ( $input =~ /^\s*\+/ ) {
3241 print "What is the name of this icon theme? ";
3242 $name = <STDIN>;
3243 $name =~ s/[\r\n]//g;
3244 $icon_theme_name[ $#icon_theme_name + 1 ] = $name;
3245 print "Be sure to put ../images/themes/ before the filename.\n";
3246 print "What directory is this icon theme stored in (ex: ../images/themes/my_theme/)? ";
3247 $name = <STDIN>;
3248 $name =~ s/[\r\n]//g;
3249 $icon_theme_path[ $#icon_theme_path + 1 ] = $name;
3250 } elsif ( $input =~ /^\s*-\s*[0-9]?/ ) {
3251 if ( $input =~ /[0-9]+\s*$/ ) {
3252 $rem_num = $input;
3253 $rem_num =~ s/^\s*-\s*//g;
3254 $rem_num =~ s/\s*$//;
3255 } else {
3256 $rem_num = $#icon_theme_name;
3257 }
3258 if ( $rem_num == $icon_theme_def ) {
3259 print "You cannot remove the default icon theme!\n";
341fd984 3260 } elsif ( $rem_num == $icon_theme_fallback ) {
3261 print "You cannot remove the fallback icon theme!\n";
83139c0b 3262 } else {
3263 $count = 0;
3264 @new_theme_name = ();
3265 @new_theme_path = ();
3266 while ( $count <= $#icon_theme_name ) {
3267 if ( $count != $rem_num ) {
3268 @new_theme_name = ( @new_theme_name, $icon_theme_name[$count] );
3269 @new_theme_path = ( @new_theme_path, $icon_theme_path[$count] );
3270 }
3271 $count++;
3272 }
3273 @icon_theme_name = @new_theme_name;
3274 @icon_theme_path = @new_theme_path;
3275 if ( $icon_theme_def > $rem_num ) {
3276 $icon_theme_def--;
3277 }
3278 }
3279 } elsif ( $input =~ /^\s*t\s*/i ) {
3280 print "\nStarting detection...\n\n";
3281
3282 opendir( DIR, "../images/themes/" );
e06886c9 3283 @files = sort(readdir(DIR));
83139c0b 3284 $cnt = 0;
3285 while ( $cnt <= $#files ) {
3286 $filename = "../images/themes/" . $files[$cnt] .'/';
a0fa595d 3287 if ( -d "../images/themes/" . $files[$cnt] && $files[$cnt] !~ /^\./ && $files[$cnt] ne ".svn" ) {
83139c0b 3288 $found = 0;
3289 for ( $x = 0 ; $x <= $#icon_theme_path ; $x++ ) {
3290 if ( $icon_theme_path[$x] eq $filename ) {
3291 $found = 1;
3292 }
3293 }
3294 if ( $found != 1 ) {
3295 pr