Some browswers were not putting cursor at beginning of message body after focus
[squirrelmail.git] / config / conf.pl
1 #!/usr/bin/env perl
2 # conf.pl
3 #
4 # Copyright (c) 1999-2019 The SquirrelMail Project Team
5 # Licensed under the GNU GPL. For full terms see COPYING.
6 #
7 # A simple configure script to configure SquirrelMail
8 #
9 # $Id$
10 ############################################################
11 $conf_pl_version = "1.5.0";
12
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 ############################################################
19 my $dir;
20 if ( eval q{require "File/Basename.pm"} ) {
21 $dir = File::Basename::dirname($0);
22 chdir($dir);
23 }
24
25 ############################################################
26 # Some people try to run this as a CGI. That's wrong!
27 ############################################################
28 if ( 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 }
35
36 ############################################################
37 # If we got here, use Cwd to get the full directory path
38 # (the Basename stuff above will sometimes return '.' as
39 # the base directory, which is not helpful here).
40 ############################################################
41 use Cwd;
42 $dir = cwd();
43
44
45 ############################################################
46 # Try to determine what the version of SquirrelMail is
47 ############################################################
48 $sm_version = 'unknown';
49 if ( -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...
63 ############################################################
64 if ( -e "config.php" ) {
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";
72 print "Press enter to continue";
73 $ctu = <STDIN>;
74 exit;
75 }
76 open( FILE, "config.php" );
77 while ( $line = <FILE> ) {
78 $line =~ s/^\s+//;
79 $line =~ s/^\$//;
80 $var = $line;
81
82 $var =~ s/=/EQUALS/;
83 if ( $var =~ /^([a-z])/i ) {
84 @o = split ( /\s*EQUALS\s*/, $var );
85 if ( $o[0] eq "config_version" ) {
86 $o[1] =~ s/[\n\r]//g;
87 $o[1] =~ s/[\'\"];\s*$//;
88 $o[1] =~ s/;$//;
89 $o[1] =~ s/^[\'\"]//;
90
91 $config_version = $o[1];
92 close(FILE);
93 }
94 }
95 }
96 close(FILE);
97
98 if ( $config_version ne $conf_pl_version ) {
99 clear_screen();
100 print "WARNING:\n";
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/;
136 if ( $var =~ /^([a-z])/i ) {
137 @o = split ( /\s*EQUALS\s*/, $var );
138 if ( $o[0] eq "config_version" ) {
139 $o[1] =~ s/[\n\r]//g;
140 $o[1] =~ s/[\'\"];\s*$//;
141 $o[1] =~ s/;$//;
142 $o[1] =~ s/^[\'\"]//;
143
144 $config_version = $o[1];
145 close(FILE);
146 }
147 }
148 }
149 close(FILE);
150
151 if ( $config_version ne $conf_pl_version ) {
152 clear_screen();
153 print "WARNING:\n";
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";
159 print " http://squirrelmail.org.\n";
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" );
180 } else {
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;
185 }
186
187 # Read and parse the current configuration file
188 # (either config.php or config_default.php).
189 while ( $line = <FILE> ) {
190 $line =~ s/^\s+//;
191 $line =~ s/^\$//;
192 $var = $line;
193
194 $var =~ s/=/EQUALS/;
195 if ( $var =~ /^([a-z])/i ) {
196 @options = split ( /\s*EQUALS\s*/, $var );
197 $options[1] =~ s/[\n\r]//g;
198 $options[1] =~ s/[\'\"];\s*$//;
199 $options[1] =~ s/;$//;
200 $options[1] =~ s/^[\'\"]//;
201 # de-escape escaped strings
202 $options[1] =~ s/\\'/'/g;
203 $options[1] =~ s/\\\\/\\/g;
204
205 if ( $options[0] =~ /^user_themes\[[0-9]+\]\[['"]PATH['"]\]/ ) {
206 $sub = $options[0];
207 $sub =~ s/\]\[['"]PATH['"]\]//;
208 $sub =~ s/.*\[//;
209 if ( -e "../css/" ) {
210 $options[1] =~ s/^\.\.\/config/\.\.\/css/;
211 }
212 $user_theme_path[$sub] = &change_to_rel_path($options[1]);
213 } elsif ( $options[0] =~ /^user_themes\[[0-9]+\]\[['"]NAME['"]\]/ ) {
214 $sub = $options[0];
215 $sub =~ s/\]\[['"]NAME['"]\]//;
216 $sub =~ s/.*\[//;
217 $user_theme_name[$sub] = $options[1];
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];
231 } elsif ( $options[0] =~ /^aTemplateSet\[[0-9]+\]\[['"]ID['"]\]/ ) {
232 $sub = $options[0];
233 $sub =~ s/\]\[['"]ID['"]\]//;
234 $sub =~ s/.*\[//;
235 if ( -e "../templates" ) {
236 $options[1] =~ s/^\.\.\/config/\.\.\/templates/;
237 }
238 $templateset_id[$sub] = $options[1];
239 ##### FIXME: This section BELOW here so old prefs files don't blow up when running conf.pl
240 ##### Remove after a month or two
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
250 ##### Remove after a month or two
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];
256 } elsif ( $options[0] =~ /^plugins\[[0-9]*\]/ ) {
257 $sub = $options[0];
258 $sub =~ s/\]//;
259 $sub =~ s/^plugins\[//;
260 if ($sub eq '') {
261 push @plugins, $options[1];
262 } else {
263 $plugins[$sub] = $options[1];
264 }
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];
271 } elsif ( $options[0] =~ /^theme\[[0-9]+\]\[['"]PATH|NAME['"]\]/ ) {
272 ##
273 ## $color themes are no longer supported. Please leave this
274 ## so conf.pl doesn't barf if it encounters a $theme.
275 ##
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
286 if ( $tmp =~ /^\s*[\'\"]host[\'\"]/i ) {
287 $tmp =~ s/^\s*[\'\"]host[\'\"]\s*=>\s*[\'\"]//i;
288 $tmp =~ s/[\'\"],?\s*$//;
289 $tmp =~ s/[\'\"]\);\s*$//;
290 $host = $tmp;
291 } elsif ( $tmp =~ /^\s*[\'\"]base[\'\"]/i ) {
292 $tmp =~ s/^\s*[\'\"]base[\'\"]\s*=>\s*[\'\"]//i;
293 $tmp =~ s/[\'\"],?\s*$//;
294 $tmp =~ s/[\'\"]\);\s*$//;
295 $base = $tmp;
296 } elsif ( $tmp =~ /^\s*[\'\"]charset[\'\"]/i ) {
297 $tmp =~ s/^\s*[\'\"]charset[\'\"]\s*=>\s*[\'\"]//i;
298 $tmp =~ s/[\'\"],?\s*$//;
299 $tmp =~ s/[\'\"]\);\s*$//;
300 $charset = $tmp;
301 } elsif ( $tmp =~ /^\s*[\'\"]port[\'\"]/i ) {
302 $tmp =~ s/^\s*[\'\"]port[\'\"]\s*=>\s*[\'\"]?//i;
303 $tmp =~ s/[\'\"]?,?\s*$//;
304 $tmp =~ s/[\'\"]?\);\s*$//;
305 $port = $tmp;
306 } elsif ( $tmp =~ /^\s*[\'\"]maxrows[\'\"]/i ) {
307 $tmp =~ s/^\s*[\'\"]maxrows[\'\"]\s*=>\s*[\'\"]?//i;
308 $tmp =~ s/[\'\"]?,?\s*$//;
309 $tmp =~ s/[\'\"]?\);\s*$//;
310 $maxrows = $tmp;
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;
316 } elsif ( $tmp =~ /^\s*[\'\"]name[\'\"]/i ) {
317 $tmp =~ s/^\s*[\'\"]name[\'\"]\s*=>\s*[\'\"]//i;
318 $tmp =~ s/[\'\"],?\s*$//;
319 $tmp =~ s/[\'\"]\);\s*$//;
320 $name = $tmp;
321 } elsif ( $tmp =~ /^\s*[\'\"]binddn[\'\"]/i ) {
322 $tmp =~ s/^\s*[\'\"]binddn[\'\"]\s*=>\s*[\'\"]//i;
323 $tmp =~ s/[\'\"],?\s*$//;
324 $tmp =~ s/[\'\"]\);\s*$//;
325 $binddn = $tmp;
326 } elsif ( $tmp =~ /^\s*[\'\"]bindpw[\'\"]/i ) {
327 $tmp =~ s/^\s*[\'\"]bindpw[\'\"]\s*=>\s*[\'\"]//i;
328 $tmp =~ s/[\'\"],?\s*$//;
329 $tmp =~ s/[\'\"]\);\s*$//;
330 $bindpw = $tmp;
331 } elsif ( $tmp =~ /^\s*[\'\"]protocol[\'\"]/i ) {
332 $tmp =~ s/^\s*[\'\"]protocol[\'\"]\s*=>\s*[\'\"]?//i;
333 $tmp =~ s/[\'\"]?,?\s*$//;
334 $tmp =~ s/[\'\"]?\);\s*$//;
335 $protocol = $tmp;
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;
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;
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;
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;
361 }
362 }
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;
368 $ldap_filter[$sub] = $filter;
369 $ldap_charset[$sub] = $charset;
370 $ldap_binddn[$sub] = $binddn;
371 $ldap_bindpw[$sub] = $bindpw;
372 $ldap_protocol[$sub] = $protocol;
373 $ldap_limit_scope[$sub] = $limit_scope;
374 $ldap_listing[$sub] = $listing;
375 $ldap_writeable[$sub] = $writeable;
376 $ldap_search_tree[$sub] = $search_tree;
377 $ldap_starttls[$sub] = $starttls;
378 } elsif ( $options[0] =~ /^(data_dir|attachment_dir|org_logo|signout_page|icon_theme_def)$/ ) {
379 ${ $options[0] } = &change_to_rel_path($options[1]);
380 } else {
381 ${ $options[0] } = $options[1];
382 }
383 }
384 }
385 close FILE;
386
387 # RPC template sets aren't included in user interface skin list,
388 # so add the one from the config file here
389 #
390 if ($rpc_templateset =~ /_rpc$/) {
391 $templateset_name[$#templateset_name + 1] = $rpc_templateset;
392 $templateset_id[$#templateset_id + 1] = $rpc_templateset;
393 }
394
395 # FIXME: unknown introduction date
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 );
399 $pop_before_smtp_host = '' if ( !$pop_before_smtp_host );
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 );
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 );
413 $provider_name = '' if ( !$provider_name || $provider_name eq 'SquirrelMail');
414 $no_list_for_subscribe = 'false' if ( !$no_list_for_subscribe );
415 $allow_charset_search = 'true' if ( !$allow_charset_search );
416 $allow_advanced_search = 0 if ( !$allow_advanced_search) ;
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 );
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
424 # since 1.2.0
425 $hide_sm_attributions = 'false' if ( !$hide_sm_attributions );
426 # since 1.2.5
427 $edit_identity = 'true' if ( !$edit_identity );
428 $edit_name = 'true' if ( !$edit_name );
429 # since 1.4.23/1.5.2
430 $edit_reply_to = 'true' if ( !$edit_reply_to );
431
432 # since 1.4.0
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 );
437
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
444 # since 1.5.0
445 $show_alternative_names = 'false' if ( !$show_alternative_names );
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 );
449 $aggressive_decoding = 'false' if ( !$aggressive_decoding );
450 # available only in 1.5.0 and 1.5.1
451 # $advanced_tree = 'false' if ( !$advanced_tree );
452 $use_php_recode = 'false' if ( !$use_php_recode );
453 $use_php_iconv = 'false' if ( !$use_php_iconv );
454 $buffer_output = 'false' if ( !$buffer_output );
455
456 # since 1.5.1
457 $use_icons = 'false' if ( !$use_icons );
458 $use_iframe = 'false' if ( !$use_iframe );
459 $lossy_encoding = 'false' if ( !$lossy_encoding );
460 $allow_remote_configtest = 'false' if ( !$allow_remote_configtest );
461 $secured_config = 'true' if ( !$secured_config );
462 $sq_https_port = 443 if ( !$sq_https_port );
463 $sq_ignore_http_x_forwarded_headers = 'true' if ( !$sq_ignore_http_x_forwarded_headers );
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
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 );
476 $encode_header_key = '' if ( !$encode_header_key );
477 $hide_auth_header = 'false' if ( !$hide_auth_header );
478 $time_zone_type = '0' if ( !$time_zone_type );
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 );
482
483 # add qmail-inject test here for backwards compatibility
484 if ( !$sendmail_args && $sendmail_path =~ /qmail-inject/ ) {
485 $sendmail_args = '';
486 } elsif ( !$sendmail_args ) {
487 $sendmail_args = '-i -t';
488 }
489
490 $default_fontsize = '' if ( !$default_fontsize);
491 $default_fontset = '' if ( !$default_fontset);
492 if ( !%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
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 );
503
504 # since 1.5.2
505 $abook_file_line_length = 2048 if ( !$abook_file_line_length );
506 $config_location_base = '' if ( !$config_location_base );
507 $smtp_sitewide_user = '' if ( !$smtp_sitewide_user );
508 $smtp_sitewide_pass = '' if ( !$smtp_sitewide_pass );
509 $icon_theme_def = '' if ( !$icon_theme_def );
510 $disable_plugins = 'false' if ( !$disable_plugins );
511 $disable_plugins_user = '' if ( !$disable_plugins_user );
512 $only_secure_cookies = 'true' if ( !$only_secure_cookies );
513 $disable_security_tokens = 'false' if ( !$disable_security_tokens );
514 $check_referrer = '' if ( !$check_referrer );
515 $ask_user_info = 'true' if ( !$ask_user_info );
516 $use_transparent_security_image = 'true' if ( !$use_transparent_security_image );
517 $display_imap_login_error = 'false' if ( !$display_imap_login_error );
518 $allow_svg_display = 'false' if ( !$allow_svg_display );
519 $block_svg_download = 'false' if ( !$block_svg_download );
520 $fix_broken_base64_encoded_messages = 'false' if ( !$fix_broken_base64_encoded_messages );
521
522 if ( $ARGV[0] eq '--install-plugin' ) {
523 print "Activating plugin " . $ARGV[1] . "\n";
524 if ( -d "../plugins/" . $ARGV[1]) {
525 push @plugins, $ARGV[1];
526 save_data();
527 exit(0);
528 } else {
529 print "No such plugin.\n";
530 exit(1);
531 }
532 } elsif ( $ARGV[0] eq '--remove-plugin' ) {
533 print "Removing plugin " . $ARGV[1] . "\n";
534 foreach $plugin (@plugins) {
535 if ( $plugin ne $ARGV[1] ) {
536 push @newplugins, $plugin;
537 }
538 }
539 @plugins = @newplugins;
540 save_data();
541 exit(0);
542 } elsif ( $ARGV[0] eq '--update-plugins' or $ARGV[0] eq '-u') {
543 build_plugin_hook_array();
544 exit(0);
545 } elsif ( $ARGV[0] eq '--help' or $ARGV[0] eq '-h') {
546 print "SquirrelMail Configuration Script\n";
547 print "Usage:\n";
548 print " * No arguments: initiates the configuration dialog\n";
549 print " * --install-plugin <plugin> : activates the specified plugin\n";
550 print " * --remove-plugin <plugin> : deactivates the specified plugin\n";
551 print " * --update-plugins , -u : rebuilds plugin_hooks.php according\n";
552 print " to plugins activated in config.php\n";
553 print " * --help , -h : Displays this help\n";
554 print "\n";
555 exit(0);
556 }
557
558
559
560 ####################################################################################
561
562 # used in multiple places, define once
563 $list_supported_imap_servers =
564 " bincimap = Binc IMAP server\n" .
565 " courier = Courier IMAP server\n" .
566 " cyrus = Cyrus IMAP server\n" .
567 " dovecot = Dovecot Secure IMAP server\n" .
568 " exchange = Microsoft Exchange IMAP server\n" .
569 " hmailserver = hMailServer\n" .
570 " macosx = Mac OS X Mailserver\n" .
571 " mercury32 = Mercury/32\n" .
572 " uw = University of Washington's IMAP server\n" .
573 " gmail = IMAP access to Google mail (Gmail) accounts\n";
574
575 #####################################################################################
576 if ( $config_use_color == 1 ) {
577 $WHT = "\x1B[1m";
578 $NRM = "\x1B[0m";
579 } else {
580 $WHT = "";
581 $NRM = "";
582 $config_use_color = 2;
583 }
584
585 # lists can be printed in more than one column; default is just one
586 #
587 $columns = 1;
588
589 # try to get screen width dynamically if possible; default to 80
590 # (user can override with "w#" command)
591 #
592 eval { require "sys/ioctl.ph" };
593 if ($@
594 || !defined &TIOCGWINSZ
595 || !open(TTY, "+</dev/tty")
596 || !ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
597 $screen_width = 80;
598 } else {
599 ($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
600 $screen_width = $col;
601 }
602
603 while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) {
604 clear_screen();
605 print $WHT. "SquirrelMail Configuration : " . $NRM;
606 if ( $config == 1 ) { print "Read: config.php"; }
607 elsif ( $config == 2 ) { print "Read: config_default.php"; }
608 print "\nConfig version $print_config_version; SquirrelMail version $sm_version\n";
609 print "---------------------------------------------------------\n";
610
611 if ( $menu == 0 ) {
612 print $WHT. "Main Menu --\n" . $NRM;
613 print "1. Organization Preferences\n";
614 print "2. Server Settings\n";
615 print "3. Folder Defaults\n";
616 print "4. General Options\n";
617 print "5. User Interface\n";
618 print "6. Address Books\n";
619 print "7. Message of the Day (MOTD)\n";
620 print "8. Plugins\n";
621 print "9. Database\n";
622 print "10. Language settings\n";
623 print "11. Tweaks\n";
624 print "\n";
625 print "D. Set pre-defined settings for specific IMAP servers\n";
626 print "\n";
627 } elsif ( $menu == 1 ) {
628 print $WHT. "Organization Preferences\n" . $NRM;
629 print "1. Organization Name : $WHT$org_name$NRM\n";
630 print "2. Organization Logo : $WHT$org_logo$NRM\n";
631 print "3. Org. Logo Width/Height : $WHT($org_logo_width/$org_logo_height)$NRM\n";
632 print "4. Organization Title : $WHT$org_title$NRM\n";
633 print "5. Signout Page : $WHT$signout_page$NRM\n";
634 print "6. Top Frame : $WHT$frame_top$NRM\n";
635 print "7. Provider link : $WHT$provider_uri$NRM\n";
636 print "8. Provider link text : $WHT$provider_name$NRM\n";
637
638 print "\n";
639 print "R Return to Main Menu\n";
640 } elsif ( $menu == 2 ) {
641 print $WHT. "Server Settings\n\n" . $NRM;
642 print $WHT . "General" . $NRM . "\n";
643 print "-------\n";
644 print "1. Domain : $WHT$domain$NRM\n";
645 print "2. Invert Time : $WHT$invert_time$NRM\n";
646 print "3. Sendmail or SMTP : $WHT";
647 if ( lc($useSendmail) eq 'true' ) {
648 print "Sendmail";
649 } else {
650 print "SMTP";
651 }
652 print "$NRM\n";
653 print "\n";
654
655 if ( $show_imap_settings ) {
656 print $WHT . "IMAP Settings". $NRM . "\n--------------\n";
657 print "4. IMAP Server : $WHT$imapServerAddress$NRM\n";
658 print "5. IMAP Port : $WHT$imapPort$NRM\n";
659 print "6. Authentication type : $WHT$imap_auth_mech$NRM\n";
660 print "7. Secure IMAP (TLS) : $WHT" . display_use_tls($use_imap_tls) . "$NRM\n";
661 print "8. Server software : $WHT$imap_server_type$NRM\n";
662 print "9. Delimiter : $WHT$optional_delimiter$NRM\n";
663 print "\n";
664 } elsif ( $show_smtp_settings ) {
665 if ( lc($useSendmail) eq 'true' ) {
666 print $WHT . "Sendmail" . $NRM . "\n--------\n";
667 print "4. Sendmail Path : $WHT$sendmail_path$NRM\n";
668 print "5. Sendmail arguments : $WHT$sendmail_args$NRM\n";
669 print "6. Header encryption key : $WHT$encode_header_key$NRM\n";
670 print "\n";
671 } else {
672 print $WHT . "SMTP Settings" . $NRM . "\n-------------\n";
673 print "4. SMTP Server : $WHT$smtpServerAddress$NRM\n";
674 print "5. SMTP Port : $WHT$smtpPort$NRM\n";
675 print "6. POP before SMTP : $WHT$pop_before_smtp$NRM\n";
676 print "7. SMTP Authentication : $WHT$smtp_auth_mech" . display_smtp_sitewide_userpass() ."$NRM\n";
677 print "8. Secure SMTP (TLS) : $WHT" . display_use_tls($use_smtp_tls) . "$NRM\n";
678 print "9. Header encryption key : $WHT$encode_header_key$NRM\n";
679 print "\n";
680 }
681 }
682
683 if ($show_imap_settings == 0) {
684 print "A. Update IMAP Settings : ";
685 print "$WHT$imapServerAddress$NRM:";
686 print "$WHT$imapPort$NRM ";
687 print "($WHT$imap_server_type$NRM)\n";
688 }
689 if ($show_smtp_settings == 0) {
690 if ( lc($useSendmail) eq 'true' ) {
691 print "B. Change Sendmail Config : $WHT$sendmail_path$NRM\n";
692 } else {
693 print "B. Update SMTP Settings : ";
694 print "$WHT$smtpServerAddress$NRM:";
695 print "$WHT$smtpPort$NRM\n";
696 }
697 }
698 if ( $show_smtp_settings || $show_imap_settings )
699 {
700 print "H. Hide " .
701 ($show_imap_settings ? "IMAP Server" :
702 (lc($useSendmail) eq 'true') ? "Sendmail" : "SMTP") . " Settings\n";
703 }
704
705 print "\n";
706 print "R Return to Main Menu\n";
707 } elsif ( $menu == 3 ) {
708 print $WHT. "Folder Defaults\n" . $NRM;
709 print "1. Default Folder Prefix : $WHT$default_folder_prefix$NRM\n";
710 print "2. Show Folder Prefix Option : $WHT$show_prefix_option$NRM\n";
711 print "3. Trash Folder : $WHT$trash_folder$NRM\n";
712 print "4. Sent Folder : $WHT$sent_folder$NRM\n";
713 print "5. Drafts Folder : $WHT$draft_folder$NRM\n";
714 print "6. By default, move to trash : $WHT$default_move_to_trash$NRM\n";
715 print "7. By default, save sent messages : $WHT$default_move_to_sent$NRM\n";
716 print "8. By default, save as draft : $WHT$default_save_as_draft$NRM\n";
717 print "9. List Special Folders First : $WHT$list_special_folders_first$NRM\n";
718 print "10. Show Special Folders Color : $WHT$use_special_folder_color$NRM\n";
719 print "11. Auto Expunge : $WHT$auto_expunge$NRM\n";
720 print "12. Default Sub. of INBOX : $WHT$default_sub_of_inbox$NRM\n";
721 print "13. Show 'Contain Sub.' Option : $WHT$show_contain_subfolders_option$NRM\n";
722 print "14. Default Unseen Notify : $WHT$default_unseen_notify$NRM\n";
723 print "15. Default Unseen Type : $WHT$default_unseen_type$NRM\n";
724 print "16. Auto Create Special Folders : $WHT$auto_create_special$NRM\n";
725 print "17. Folder Delete Bypasses Trash : $WHT$delete_folder$NRM\n";
726 print "18. Enable /NoSelect folder fix : $WHT$noselect_fix_enable$NRM\n";
727 print "\n";
728 print "R Return to Main Menu\n";
729 } elsif ( $menu == 4 ) {
730 print $WHT. "General Options\n" . $NRM;
731 print "1. Data Directory : $WHT$data_dir$NRM\n";
732 print "2. Attachment Directory : $WHT$attachment_dir$NRM\n";
733 print "3. Directory Hash Level : $WHT$dir_hash_level$NRM\n";
734 print "4. Default Left Size : $WHT$default_left_size$NRM\n";
735 print "5. Usernames in Lowercase : $WHT$force_username_lowercase$NRM\n";
736 print "6. Allow use of priority : $WHT$default_use_priority$NRM\n";
737 print "7. Hide SM attributions : $WHT$hide_sm_attributions$NRM\n";
738 print "8. Allow use of receipts : $WHT$default_use_mdn$NRM\n";
739 print "9. Allow editing of identity : $WHT$edit_identity$NRM\n";
740 print " Allow editing of name : $WHT$edit_name$NRM\n";
741 print " Allow editing of reply-to : $WHT$edit_reply_to$NRM\n";
742 print " Remove username from header : $WHT$hide_auth_header$NRM\n";
743 print "10. Disable server thread sort : $WHT$disable_thread_sort$NRM\n";
744 print "11. Disable server-side sorting : $WHT$disable_server_sort$NRM\n";
745 print "12. Allow server charset search : $WHT$allow_charset_search$NRM\n";
746 print "13. Allow advanced search : $WHT$allow_advanced_search$NRM\n";
747 print "14. PHP session name : $WHT$session_name$NRM\n";
748 print "15. Time zone configuration : $WHT$time_zone_type$NRM\n";
749 print "16. Location base : $WHT$config_location_base$NRM\n";
750 print "17. Only secure cookies if poss. : $WHT$only_secure_cookies$NRM\n";
751 print "18. Disable secure forms : $WHT$disable_security_tokens$NRM\n";
752 print "19. Page referal requirement : $WHT$check_referrer$NRM\n";
753 print "20. Security image : $WHT" . (lc($use_transparent_security_image) eq 'true' ? 'Transparent' : 'Textual') . "$NRM\n";
754 print "21. Display login error from IMAP: $WHT$display_imap_login_error$NRM\n";
755 print "22. Show inline SVG objects : $WHT$allow_svg_display$NRM\n";
756 print "23. Block downloading SVG objects: $WHT$block_svg_download$NRM\n";
757 print "24. Fix broken base64 messages : $WHT$fix_broken_base64_encoded_messages$NRM\n";
758 print "\n";
759 print "R Return to Main Menu\n";
760 } elsif ( $menu == 5 ) {
761 print $WHT. "User Interface\n" . $NRM;
762 print "1. Use Icons? : $WHT$use_icons$NRM\n";
763 # print "3. Default Icon Set : $WHT$icon_theme_def$NRM\n";
764 print "2. Default font size : $WHT$default_fontsize$NRM\n";
765 print "3. Manage template sets (skins)\n";
766 print "4. Manage user themes\n";
767 print "5. Manage font sets\n";
768 print "6. Manage icon themes\n";
769
770 print "\n";
771 print "R Return to Main Menu\n";
772 } elsif ( $menu == 6 ) {
773 print $WHT. "Address Books\n" . $NRM;
774 print "1. Change LDAP Servers\n";
775 for ( $count = 0 ; $count <= $#ldap_host ; $count++ ) {
776 print " > $ldap_host[$count]\n";
777 }
778 print "2. Use Javascript address book search : $WHT$default_use_javascript_addr_book$NRM\n";
779 print "3. Global address book file : $WHT$abook_global_file$NRM\n";
780 print "4. Allow writing into global file address book : $WHT$abook_global_file_writeable$NRM\n";
781 print "5. Allow listing of global file address book : $WHT$abook_global_file_listing$NRM\n";
782 print "6. Allowed address book line length : $WHT$abook_file_line_length$NRM\n";
783 print "\n";
784 print "R Return to Main Menu\n";
785 } elsif ( $menu == 7 ) {
786 print $WHT. "Message of the Day (MOTD)\n" . $NRM;
787 print "\n$motd\n";
788 print "\n";
789 print "1 Edit the MOTD\n";
790 print "\n";
791 print "R Return to Main Menu\n";
792 } elsif ( $menu == 8 ) {
793 if (lc($disable_plugins) eq 'true' && $disable_plugins_user ne '') {
794 print $WHT. "Plugins (WARNING: All plugins are currently disabled\n for the user \"$disable_plugins_user\"!)\n" . $NRM;
795 } elsif (lc($disable_plugins) eq 'true') {
796 print $WHT. "Plugins (WARNING: All plugins are currently disabled!)\n" . $NRM;
797 } else {
798 print $WHT. "Plugins\n" . $NRM;
799 }
800 print " Installed Plugins\n";
801 if ($columns > 1) {
802 $num = print_multi_col_list(1, $columns, $screen_width, 1, @plugins);
803 } else {
804 $num = 0;
805 for ( $count = 0 ; $count <= $#plugins ; $count++ ) {
806 $num = $count + 1;
807 $english_name = get_plugin_english_name($plugins[$count]);
808 if ( $english_name eq "" ) {
809 print " $WHT$num.$NRM $plugins[$count]" . get_plugin_version($plugins[$count]) . "\n";
810 } else {
811 print " $WHT$num.$NRM $english_name ($plugins[$count])" . get_plugin_version($plugins[$count]) . "\n";
812 }
813 }
814 }
815 print "\n Available Plugins:\n";
816 opendir( DIR, "../plugins" );
817 @files = sort(readdir(DIR));
818 $pos = 0;
819 @unused_plugins = ();
820 for ( $i = 0 ; $i <= $#files ; $i++ ) {
821 if ( -d "../plugins/" . $files[$i] && $files[$i] !~ /^\./ && $files[$i] ne ".svn" ) {
822 $match = 0;
823 for ( $k = 0 ; $k <= $#plugins ; $k++ ) {
824 if ( $plugins[$k] eq $files[$i] ) {
825 $match = 1;
826 }
827 }
828 if ( $match == 0 ) {
829 $unused_plugins[$pos] = $files[$i];
830 $pos++;
831 }
832 }
833 }
834
835 if ($columns > 1) {
836 $num = print_multi_col_list($num + 1, $columns, $screen_width, 1, @unused_plugins);
837 } else {
838 for ( $i = 0 ; $i <= $#unused_plugins ; $i++ ) {
839 $num = $num + 1;
840 $english_name = get_plugin_english_name($unused_plugins[$i]);
841 if ( $english_name eq "" ) {
842 print " $WHT$num.$NRM $unused_plugins[$i]" . get_plugin_version($unused_plugins[$i]) . "\n";
843 } else {
844 print " $WHT$num.$NRM $english_name ($unused_plugins[$i])" . get_plugin_version($unused_plugins[$i]) . "\n";
845 }
846 }
847 }
848 closedir DIR;
849
850 print "\n";
851 if (lc($disable_plugins) eq 'true' && $disable_plugins_user ne '') {
852 print "E Enable active plugins (all plugins currently\n disabled for the user \"$disable_plugins_user\")\n";
853 } elsif (lc($disable_plugins) eq 'true') {
854 print "E Enable active plugins (all plugins currently\n disabled)\n";
855 } else {
856 print "D Disable all plugins\n";
857 }
858 print "U Set the user for whom plugins can be disabled\n";
859 print "R Return to Main Menu\n";
860 print "C# List plugins in <#> number of columns\n";
861 print "W# Change screen width to <#> (currently $screen_width)\n";
862 } elsif ( $menu == 9 ) {
863 print $WHT. "Database\n" . $NRM;
864 print "1. DSN for Address Book : $WHT$addrbook_dsn$NRM\n";
865 print "2. Table for Address Book : $WHT$addrbook_table$NRM\n";
866 print "\n";
867 print "3. DSN for Preferences : $WHT$prefs_dsn$NRM\n";
868 print "4. Table for Preferences : $WHT$prefs_table$NRM\n";
869 print "5. Field for username : $WHT$prefs_user_field$NRM ($prefs_user_size)\n";
870 print "6. Field for prefs key : $WHT$prefs_key_field$NRM ($prefs_key_size)\n";
871 print "7. Field for prefs value : $WHT$prefs_val_field$NRM ($prefs_val_size)\n";
872 print "\n";
873 print "8. DSN for Global Address Book : $WHT$addrbook_global_dsn$NRM\n";
874 print "9. Table for Global Address Book : $WHT$addrbook_global_table$NRM\n";
875 print "10. Allow writing into Global Address Book : $WHT$addrbook_global_writeable$NRM\n";
876 print "11. Allow listing of Global Address Book : $WHT$addrbook_global_listing$NRM\n";
877 print "\n";
878 print "R Return to Main Menu\n";
879 } elsif ( $menu == 10 ) {
880 print $WHT. "Language settings\n" . $NRM;
881 print "1. Default Language : $WHT$squirrelmail_default_language$NRM\n";
882 print "2. Default Charset : $WHT$default_charset$NRM\n";
883 print "3. Show alternative language names : $WHT$show_alternative_names$NRM\n";
884 print "4. Enable aggressive decoding : $WHT$aggressive_decoding$NRM\n";
885 print "5. Enable lossy encoding : $WHT$lossy_encoding$NRM\n";
886 print "\n";
887 print "R Return to Main Menu\n";
888 } elsif ( $menu == 11 ) {
889 print $WHT. "Interface tweaks\n" . $NRM;
890 print "1. Display html mails in iframe : $WHT$use_iframe$NRM\n";
891 print "2. Ask user info on first login : $WHT$ask_user_info$NRM\n";
892 print "\n";
893 print $WHT. "PHP tweaks\n" . $NRM;
894 print "4. Use php recode functions : $WHT$use_php_recode$NRM\n";
895 print "5. Use php iconv functions : $WHT$use_php_iconv$NRM\n";
896 print "6. Buffer all output : $WHT$buffer_output$NRM\n";
897 print "\n";
898 print $WHT. "Configuration tweaks\n" . $NRM;
899 print "7. Allow remote configtest : $WHT$allow_remote_configtest$NRM\n";
900 print "8. Debug mode : $WHT$sm_debug_mode$NRM\n";
901 print "9. Secured configuration mode : $WHT$secured_config$NRM\n";
902 print "10. HTTPS port : $WHT$sq_https_port$NRM\n";
903 print "11. Ignore HTTP_X_FORWARDED headers: $WHT$sq_ignore_http_x_forwarded_headers$NRM\n";
904 print "\n";
905 print "R Return to Main Menu\n";
906 }
907 if ( $config_use_color == 1 ) {
908 print "C Turn color off\n";
909 } else {
910 print "C Turn color on\n";
911 }
912 print "S Save data\n";
913 print "Q Quit\n";
914
915 print "\n";
916 print "Command >> " . $WHT;
917 $command = <STDIN>;
918 $command =~ s/[\n\r]//g;
919 $command =~ tr/A-Z/a-z/;
920 print "$NRM\n";
921
922 # Read the commands they entered.
923 if ( $command eq "r" ) {
924 $menu = 0;
925 } elsif ( $command eq "s" ) {
926 save_data();
927 print "Press enter to continue...";
928 $tmp = <STDIN>;
929 $saved = 1;
930 } elsif ( ( $command eq "q" ) && ( $saved == 0 ) ) {
931 print "You have not saved your data.\n";
932 print "Save? [" . $WHT . "Y" . $NRM . "/n]: ";
933 $save = <STDIN>;
934 if ( ( $save =~ /^y/i ) || ( $save =~ /^\s*$/ ) ) {
935 save_data();
936 }
937 } elsif ( $command eq "c" ) {
938 if ( $config_use_color == 1 ) {
939 $config_use_color = 2;
940 $WHT = "";
941 $NRM = "";
942 } else {
943 $config_use_color = 1;
944 $WHT = "\x1B[1m";
945 $NRM = "\x1B[0m";
946 }
947 } elsif ( $command =~ /^w([0-9]+)/ ) {
948 $screen_width = $1;
949 } elsif ( $command eq "d" && $menu == 0 ) {
950 set_defaults();
951 } else {
952 $saved = 0;
953 if ( $menu == 0 ) {
954 if ( ( $command > 0 ) && ( $command < 12 ) ) {
955 $menu = $command;
956 }
957 } elsif ( $menu == 1 ) {
958 if ( $command == 1 ) { $org_name = command1(); }
959 elsif ( $command == 2 ) { $org_logo = command2(); }
960 elsif ( $command == 3 ) { ($org_logo_width,$org_logo_height) = command2a(); }
961 elsif ( $command == 4 ) { $org_title = command3(); }
962 elsif ( $command == 5 ) { $signout_page = command4(); }
963 elsif ( $command == 6 ) { $frame_top = command6(); }
964 elsif ( $command == 7 ) { $provider_uri = command7(); }
965 elsif ( $command == 8 ) { $provider_name = command8(); }
966
967 } elsif ( $menu == 2 ) {
968 if ( $command eq "a" ) { $show_imap_settings = 1; $show_smtp_settings = 0; }
969 elsif ( $command eq "b" ) { $show_imap_settings = 0; $show_smtp_settings = 1; }
970 elsif ( $command eq "h" ) { $show_imap_settings = 0; $show_smtp_settings = 0; }
971 elsif ( $command <= 3 ) {
972 if ( $command == 1 ) { $domain = command11(); }
973 elsif ( $command == 2 ) { $invert_time = command110(); }
974 elsif ( $command == 3 ) { $useSendmail = command14(); }
975 $show_imap_settings = 0; $show_smtp_settings = 0;
976 } elsif ( $show_imap_settings ) {
977 if ( $command == 4 ) { $imapServerAddress = command12(); }
978 elsif ( $command == 5 ) { $imapPort = command13(); }
979 elsif ( $command == 6 ) { $imap_auth_mech = command112a(); }
980 elsif ( $command == 7 ) { $use_imap_tls = command_use_tls("IMAP",$use_imap_tls); }
981 elsif ( $command == 8 ) { $imap_server_type = command19(); }
982 elsif ( $command == 9 ) { $optional_delimiter = command111(); }
983 } elsif ( $show_smtp_settings && lc($useSendmail) eq 'true' ) {
984 if ( $command == 4 ) { $sendmail_path = command15(); }
985 elsif ( $command == 5 ) { $sendmail_args = command_sendmail_args(); }
986 elsif ( $command == 6 ) { $encode_header_key = command114(); }
987 } elsif ( $show_smtp_settings ) {
988 if ( $command == 4 ) { $smtpServerAddress = command16(); }
989 elsif ( $command == 5 ) { $smtpPort = command17(); }
990 elsif ( $command == 6 ) { $pop_before_smtp = command18a(); }
991 elsif ( $command == 7 ) { $smtp_auth_mech = command112b(); }
992 elsif ( $command == 8 ) { $use_smtp_tls = command_use_tls("SMTP",$use_smtp_tls); }
993 elsif ( $command == 9 ) { $encode_header_key = command114(); }
994 }
995 } elsif ( $menu == 3 ) {
996 if ( $command == 1 ) { $default_folder_prefix = command21(); }
997 elsif ( $command == 2 ) { $show_prefix_option = command22(); }
998 elsif ( $command == 3 ) { $trash_folder = command23a(); }
999 elsif ( $command == 4 ) { $sent_folder = command23b(); }
1000 elsif ( $command == 5 ) { $draft_folder = command23c(); }
1001 elsif ( $command == 6 ) { $default_move_to_trash = command24a(); }
1002 elsif ( $command == 7 ) { $default_move_to_sent = command24b(); }
1003 elsif ( $command == 8 ) { $default_save_as_draft = command24c(); }
1004 elsif ( $command == 9 ) { $list_special_folders_first = command27(); }
1005 elsif ( $command == 10 ) { $use_special_folder_color = command28(); }
1006 elsif ( $command == 11 ) { $auto_expunge = command29(); }
1007 elsif ( $command == 12 ) { $default_sub_of_inbox = command210(); }
1008 elsif ( $command == 13 ) { $show_contain_subfolders_option = command211(); }
1009 elsif ( $command == 14 ) { $default_unseen_notify = command212(); }
1010 elsif ( $command == 15 ) { $default_unseen_type = command213(); }
1011 elsif ( $command == 16 ) { $auto_create_special = command214(); }
1012 elsif ( $command == 17 ) { $delete_folder = command215(); }
1013 elsif ( $command == 18 ) { $noselect_fix_enable = command216(); }
1014 } elsif ( $menu == 4 ) {
1015 if ( $command == 1 ) { $data_dir = command33a(); }
1016 elsif ( $command == 2 ) { $attachment_dir = command33b(); }
1017 elsif ( $command == 3 ) { $dir_hash_level = command33c(); }
1018 elsif ( $command == 4 ) { $default_left_size = command35(); }
1019 elsif ( $command == 5 ) { $force_username_lowercase = command36(); }
1020 elsif ( $command == 6 ) { $default_use_priority = command37(); }
1021 elsif ( $command == 7 ) { $hide_sm_attributions = command38(); }
1022 elsif ( $command == 8 ) { $default_use_mdn = command39(); }
1023 elsif ( $command == 9 ) { $edit_identity = command310(); }
1024 elsif ( $command == 10 ) { $disable_thread_sort = command312(); }
1025 elsif ( $command == 11 ) { $disable_server_sort = command313(); }
1026 elsif ( $command == 12 ) { $allow_charset_search = command314(); }
1027 elsif ( $command == 13 ) { $allow_advanced_search = command316(); }
1028 elsif ( $command == 14 ) { $session_name = command317(); }
1029 elsif ( $command == 15 ) { $time_zone_type = command318(); }
1030 elsif ( $command == 16 ) { $config_location_base = command_config_location_base(); }
1031 elsif ( $command == 17 ) { $only_secure_cookies = command319(); }
1032 elsif ( $command == 18 ) { $disable_security_tokens = command320(); }
1033 elsif ( $command == 19 ) { $check_referrer = command321(); }
1034 elsif ( $command == 20 ) { $use_transparent_security_image = command322(); }
1035 elsif ( $command == 21 ) { $display_imap_login_error = command323(); }
1036 elsif ( $command == 22 ) { $allow_svg_display = command324(); }
1037 elsif ( $command == 23 ) { $block_svg_download = command325(); }
1038 elsif ( $command == 24 ) { $fix_broken_base64_encoded_messages = command326(); }
1039 } elsif ( $menu == 5 ) {
1040 if ( $command == 1 ) { $use_icons = commandB3(); }
1041 # elsif ( $command == 3 ) { $icon_theme_def = command53(); }
1042 elsif ( $command == 2 ) { $default_fontsize = command_default_fontsize(); }
1043 elsif ( $command == 3 ) { $templateset_default = command_templates(); }
1044 elsif ( $command == 4 ) { command_userThemes(); }
1045 elsif ( $command == 5 ) { command_fontsets(); }
1046 elsif ( $command == 6 ) { command_iconSets(); }
1047 } elsif ( $menu == 6 ) {
1048 if ( $command == 1 ) { command61(); }
1049 elsif ( $command == 2 ) { command62(); }
1050 elsif ( $command == 3 ) { $abook_global_file=command63(); }
1051 elsif ( $command == 4 ) { command64(); }
1052 elsif ( $command == 5 ) { command65(); }
1053 elsif ( $command == 6 ) { command_abook_file_line_length(); }
1054 } elsif ( $menu == 7 ) {
1055 if ( $command == 1 ) { $motd = command71(); }
1056 } elsif ( $menu == 8 ) {
1057 if ( $command =~ /^[0-9]+/ ) { @plugins = command81(); }
1058 elsif ( $command eq "u" ) { $disable_plugins_user = command82(); }
1059 elsif ( $command eq "d" ) { $disable_plugins = 'true'; }
1060 elsif ( $command eq "e" ) { $disable_plugins = 'false'; }
1061 elsif ( $command =~ /^c([0-9]+)/ ) { $columns = $1; }
1062 } elsif ( $menu == 9 ) {
1063 if ( $command == 1 ) { $addrbook_dsn = command91(); }
1064 elsif ( $command == 2 ) { $addrbook_table = command92(); }
1065 elsif ( $command == 3 ) { $prefs_dsn = command93(); }
1066 elsif ( $command == 4 ) { $prefs_table = command94(); }
1067 elsif ( $command == 5 ) { $prefs_user_field = command95(); }
1068 elsif ( $command == 6 ) { $prefs_key_field = command96(); }
1069 elsif ( $command == 7 ) { $prefs_val_field = command97(); }
1070 elsif ( $command == 8 ) { $addrbook_global_dsn = command98(); }
1071 elsif ( $command == 9 ) { $addrbook_global_table = command99(); }
1072 elsif ( $command == 10 ) { $addrbook_global_writeable = command910(); }
1073 elsif ( $command == 11 ) { $addrbook_global_listing = command911(); }
1074 } elsif ( $menu == 10 ) {
1075 if ( $command == 1 ) { $squirrelmail_default_language = commandA1(); }
1076 elsif ( $command == 2 ) { $default_charset = commandA2(); }
1077 elsif ( $command == 3 ) { $show_alternative_names = commandA3(); }
1078 elsif ( $command == 4 ) { $aggressive_decoding = commandA4(); }
1079 elsif ( $command == 5 ) { $lossy_encoding = commandA5(); }
1080 } elsif ( $menu == 11 ) {
1081 if ( $command == 1 ) { $use_iframe = commandB2(); }
1082 elsif ( $command == 2 ) { $ask_user_info = command_ask_user_info(); }
1083 elsif ( $command == 4 ) { $use_php_recode = commandB4(); }
1084 elsif ( $command == 5 ) { $use_php_iconv = commandB5(); }
1085 elsif ( $command == 6 ) { $buffer_output = commandB6(); }
1086 elsif ( $command == 7 ) { $allow_remote_configtest = commandB7(); }
1087 elsif ( $command == 8 ) { $sm_debug_mode = commandB8(); }
1088 elsif ( $command == 9 ) { $secured_config = commandB9(); }
1089 elsif ( $command == 10 ) { $sq_https_port = commandB10(); }
1090 elsif ( $command == 11 ) { $sq_ignore_http_x_forwarded_headers = commandB11(); }
1091 }
1092 }
1093 }
1094
1095 # we exit here
1096 print "\nExiting conf.pl.\n".
1097 "You might want to test your configuration by browsing to\n".
1098 "http://your-squirrelmail-location/src/configtest.php\n".
1099 "Happy SquirrelMailing!\n\n";
1100
1101
1102 ####################################################################################
1103
1104 # org_name
1105 sub command1 {
1106 print "We have tried to make the name SquirrelMail as transparent as\n";
1107 print "possible. If you set up an organization name, most places where\n";
1108 print "SquirrelMail would take credit will be credited to your organization.\n";
1109 print "\n";
1110 print "If your Organization Name includes a '\$', please precede it with a \\. \n";
1111 print "Other '\$' will be considered the beginning of a variable that\n";
1112 print "must be defined before the \$org_name is printed.\n";
1113 print "\n";
1114 print "[$WHT$org_name$NRM]: $WHT";
1115 $new_org_name = <STDIN>;
1116 if ( $new_org_name eq "\n" ) {
1117 $new_org_name = $org_name;
1118 } else {
1119 $new_org_name =~ s/[\r\n]//g;
1120 $new_org_name =~ s/\"/&quot;/g;
1121 }
1122 return $new_org_name;
1123 }
1124
1125 # org_logo
1126 sub command2 {
1127 print "Your organization's logo is an image that will be displayed at\n";
1128 print "different times throughout SquirrelMail. ";
1129 print "\n";
1130 print "Please be aware of the following: \n";
1131 print " - Relative URLs are relative to the config dir\n";
1132 print " to use the default logo, use ../images/sm_logo.png\n";
1133 print " - To specify a logo defined outside the SquirrelMail source tree\n";
1134 print " use the absolute URL the webserver would use to include the file\n";
1135 print " e.g. http://example.com/images/mylogo.gif or /images/mylogo.jpg\n";
1136 print "\n";
1137 print "[$WHT$org_logo$NRM]: $WHT";
1138 $new_org_logo = <STDIN>;
1139 if ( $new_org_logo eq "\n" ) {
1140 $new_org_logo = $org_logo;
1141 } else {
1142 $new_org_logo =~ s/[\r\n]//g;
1143 }
1144 return $new_org_logo;
1145 }
1146
1147 # org_logo_width
1148 sub command2a {
1149 print "Your organization's logo is an image that will be displayed at\n";
1150 print "different times throughout SquirrelMail. Width\n";
1151 print "and Height of your logo image. Use '0' to disable.\n";
1152 print "\n";
1153 print "Width: [$WHT$org_logo_width$NRM]: $WHT";
1154 $new_org_logo_width = <STDIN>;
1155 $new_org_logo_width =~ tr/0-9//cd; # only want digits!
1156 if ( $new_org_logo_width eq '' ) {
1157 $new_org_logo_width = $org_logo_width;
1158 }
1159 if ( $new_org_logo_width > 0 ) {
1160 print "Height: [$WHT$org_logo_height$NRM]: $WHT";
1161 $new_org_logo_height = <STDIN>;
1162 $new_org_logo_height =~ tr/0-9//cd; # only want digits!
1163 if( $new_org_logo_height eq '' ) {
1164 $new_org_logo_height = $org_logo_height;
1165 }
1166 } else {
1167 $new_org_logo_height = 0;
1168 }
1169 return ($new_org_logo_width, $new_org_logo_height);
1170 }
1171
1172 # org_title
1173 sub command3 {
1174 print "A title is what is displayed at the top of the browser window in\n";
1175 print "the titlebar. Usually this will end up looking something like:\n";
1176 print "\"Netscape: $org_title\"\n";
1177 print "\n";
1178 print "If your Organization Title includes a '\$', please precede it with a \\. \n";
1179 print "Other '\$' will be considered the beginning of a variable that\n";
1180 print "must be defined before the \$org_title is printed.\n";
1181 print "\n";
1182 print "[$WHT$org_title$NRM]: $WHT";
1183 $new_org_title = <STDIN>;
1184 if ( $new_org_title eq "\n" ) {
1185 $new_org_title = $org_title;
1186 } else {
1187 $new_org_title =~ s/[\r\n]//g;
1188 $new_org_title =~ s/\"/\'/g;
1189 }
1190 return $new_org_title;
1191 }
1192
1193 # signout_page
1194 sub command4 {
1195 print "When users click the Sign Out button they will be logged out and\n";
1196 print "then sent to signout_page. If signout_page is left empty,\n";
1197 print "(hit space and then return) they will be taken, as normal,\n";
1198 print "to the default and rather sparse SquirrelMail signout page.\n";
1199 print "\n";
1200 print "[$WHT$signout_page$NRM]: $WHT";
1201 $new_signout_page = <STDIN>;
1202 if ( $new_signout_page eq "\n" ) {
1203 $new_signout_page = $signout_page;
1204 } else {
1205 $new_signout_page =~ s/[\r\n]//g;
1206 $new_signout_page =~ s/^\s+$//g;
1207 }
1208 return $new_signout_page;
1209 }
1210
1211 # Default top frame
1212 sub command6 {
1213 print "SquirrelMail defaults to using the whole of the browser window.\n";
1214 print "This allows you to keep it within a specified frame. The default\n";
1215 print "is '_top'\n";
1216 print "\n";
1217 print "[$WHT$frame_top$NRM]: $WHT";
1218 $new_frame_top = <STDIN>;
1219 if ( $new_frame_top eq "\n" ) {
1220 $new_frame_top = '_top';
1221 } else {
1222 $new_frame_top =~ s/[\r\n]//g;
1223 $new_frame_top =~ s/^\s+$//g;
1224 }
1225 return $new_frame_top;
1226 }
1227
1228 # Default link to provider
1229 sub command7 {
1230 print "Here you can set the link on the top-right of the message list.\n";
1231 print "If empty, it will not be displayed.\n";
1232 print "\n";
1233 print "[$WHT$provider_uri$NRM]: $WHT";
1234 $new_provider_uri = <STDIN>;
1235 if ( $new_provider_uri eq "\n" ) {
1236 $new_provider_uri = '';
1237 } else {
1238 $new_provider_uri =~ s/[\r\n]//g;
1239 $new_provider_uri =~ s/^\s+$//g;
1240 }
1241 return $new_provider_uri;
1242 }
1243
1244 sub command8 {
1245 print "Here you can set the name of the link on the top-right of the message list.\n";
1246 print "The default is empty (do not display anything).'\n";
1247 print "\n";
1248 print "[$WHT$provider_name$NRM]: $WHT";
1249 $new_provider_name = <STDIN>;
1250 if ( $new_provider_name eq "\n" ) {
1251 $new_provider_name = '';
1252 } else {
1253 $new_provider_name =~ s/[\r\n]//g;
1254 $new_provider_name =~ s/^\s+$//g;
1255 $new_provider_name =~ s/\'/\\'/g;
1256 }
1257 return $new_provider_name;
1258 }
1259
1260 ####################################################################################
1261
1262 # domain
1263 sub command11 {
1264 print "The domain name is the suffix at the end of all email addresses. If\n";
1265 print "for example, your email address is jdoe\@example.com, then your domain\n";
1266 print "would be example.com.\n";
1267 print "\n";
1268 print "[$WHT$domain$NRM]: $WHT";
1269 $new_domain = <STDIN>;
1270 if ( $new_domain eq "\n" ) {
1271 $new_domain = $domain;
1272 } else {
1273 $new_domain =~ s/\s//g;
1274 }
1275 return $new_domain;
1276 }
1277
1278 # imapServerAddress
1279 sub command12 {
1280 print "This is the hostname where your IMAP server can be contacted.\n";
1281 print "[$WHT$imapServerAddress$NRM]: $WHT";
1282 $new_imapServerAddress = <STDIN>;
1283 if ( $new_imapServerAddress eq "\n" ) {
1284 $new_imapServerAddress = $imapServerAddress;
1285 } else {
1286 $new_imapServerAddress =~ s/[\r\n]//g;
1287 }
1288 return $new_imapServerAddress;
1289 }
1290
1291 # imapPort
1292 sub command13 {
1293 print "This is the port that your IMAP server is on. Usually this is 143.\n";
1294 print "[$WHT$imapPort$NRM]: $WHT";
1295 $new_imapPort = <STDIN>;
1296 if ( $new_imapPort eq "\n" ) {
1297 $new_imapPort = $imapPort;
1298 } else {
1299 $new_imapPort =~ s/[\r\n]//g;
1300 }
1301 return $new_imapPort;
1302 }
1303
1304 # useSendmail
1305 sub command14 {
1306 print "You now need to choose the method that you will use for sending\n";
1307 print "messages in SquirrelMail. You can either connect to an SMTP server\n";
1308 print "or use sendmail directly.\n";
1309 if ( lc($useSendmail) eq 'true' ) {
1310 $default_value = "1";
1311 } else {
1312 $default_value = "2";
1313 }
1314 print "\n";
1315 print " 1. Sendmail\n";
1316 print " 2. SMTP\n";
1317 print "Your choice [1/2] [$WHT$default_value$NRM]: $WHT";
1318 $use_sendmail = <STDIN>;
1319 if ( ( $use_sendmail =~ /^1\n/i )
1320 || ( ( $use_sendmail =~ /^\n/ ) && ( $default_value eq "1" ) ) ) {
1321 $useSendmail = 'true';
1322 } else {
1323 $useSendmail = 'false';
1324 }
1325 return $useSendmail;
1326 }
1327
1328 # sendmail_path
1329 sub command15 {
1330 print "Specify where the sendmail executable is located. Usually /usr/sbin/sendmail\n";
1331 print "[$WHT$sendmail_path$NRM]: $WHT";
1332 $new_sendmail_path = <STDIN>;
1333 if ( $new_sendmail_path eq "\n" ) {
1334 $new_sendmail_path = $sendmail_path;
1335 } else {
1336 $new_sendmail_path =~ s/[\r\n]//g;
1337 }
1338 return $new_sendmail_path;
1339 }
1340
1341 # Extra sendmail arguments
1342 sub command_sendmail_args {
1343 print "Specify additional sendmail program arguments.\n";
1344 print "\n";
1345 print "Make sure that arguments are supported by your sendmail program. -f argument \n";
1346 print "is added automatically by SquirrelMail scripts. Variable defaults to standard\n";
1347 print "/usr/sbin/sendmail arguments. If you use qmail-inject, nbsmtp or any other \n";
1348 print "sendmail wrapper, which does not support -i and -t arguments, set variable to\n";
1349 print "empty string or use arguments suitable for your mailer.\n";
1350 print "\n";
1351 print "[$WHT$sendmail_args$NRM]: $WHT";
1352 $new_sendmail_args = <STDIN>;
1353 if ( $new_sendmail_args eq "\n" ) {
1354 $new_sendmail_args = $sendmail_args;
1355 } else {
1356 # strip linefeeds and crs.
1357 $new_sendmail_args =~ s/[\r\n]//g;
1358 }
1359 return trim($new_sendmail_args);
1360 }
1361
1362 # smtpServerAddress
1363 sub command16 {
1364 print "This is the hostname of your SMTP server.\n";
1365 print "[$WHT$smtpServerAddress$NRM]: $WHT";
1366 $new_smtpServerAddress = <STDIN>;
1367 if ( $new_smtpServerAddress eq "\n" ) {
1368 $new_smtpServerAddress = $smtpServerAddress;
1369 } else {
1370 $new_smtpServerAddress =~ s/[\r\n]//g;
1371 }
1372 return $new_smtpServerAddress;
1373 }
1374
1375 # smtpPort
1376 sub command17 {
1377 print "This is the port to connect to for SMTP. Usually 25.\n";
1378 print "[$WHT$smtpPort$NRM]: $WHT";
1379 $new_smtpPort = <STDIN>;
1380 if ( $new_smtpPort eq "\n" ) {
1381 $new_smtpPort = $smtpPort;
1382 } else {
1383 $new_smtpPort =~ s/[\r\n]//g;
1384 }
1385 return $new_smtpPort;
1386 }
1387
1388 # pop before SMTP
1389 sub command18a {
1390 print "Do you wish to use POP3 before SMTP? Your server must\n";
1391 print "support this in order for SquirrelMail to work with it.\n";
1392
1393 $YesNo = 'n';
1394 $YesNo = 'y' if ( lc($pop_before_smtp) eq 'true' );
1395
1396 print "Use POP before SMTP (y/n) [$WHT$YesNo$NRM]: $WHT";
1397
1398 $new_pop_before_smtp = <STDIN>;
1399 $new_pop_before_smtp =~ tr/yn//cd;
1400 if ( $new_pop_before_smtp eq "y" ) {
1401 $new_pop_before_smtp = "true";
1402 } elsif ( $new_pop_before_smtp eq "n" ) {
1403 $new_pop_before_smtp = "false";
1404 } else {
1405 $new_pop_before_smtp = $pop_before_smtp;
1406 }
1407
1408 # if using POP before SMTP, allow setting of custom POP server address
1409 if ($new_pop_before_smtp eq "true") {
1410 print "$NRM\nIf the address of the POP server is not the same as\n";
1411 print "your SMTP server, you may specify it here. Leave blank (to\n";
1412 print "clear this, enter only spaces) to use the same address as\n";
1413 print "your SMTP server.\n";
1414 print "POP before SMTP server address [$WHT$pop_before_smtp_host$NRM]: $WHT";
1415
1416 $new_pop_before_smtp_host = <STDIN>;
1417 if ( $new_pop_before_smtp_host eq "\n" ) {
1418 $new_pop_before_smtp_host = $pop_before_smtp_host;
1419 } elsif ($new_pop_before_smtp_host =~ /^\s+$/) {
1420 $new_pop_before_smtp_host = '';
1421 } else {
1422 $new_pop_before_smtp_host =~ s/[\r|\n]//g;
1423 }
1424 $pop_before_smtp_host = $new_pop_before_smtp_host;
1425 }
1426
1427 return $new_pop_before_smtp;
1428 }
1429
1430 # imap_server_type
1431 sub command19 {
1432 print "Each IMAP server has its own quirks. As much as we tried to stick\n";
1433 print "to standards, it doesn't help much if the IMAP server doesn't follow\n";
1434 print "the same principles. We have made some work-arounds for some of\n";
1435 print "these servers. If you would like to use them, please select your\n";
1436 print "IMAP server. If you do not wish to use these work-arounds, you can\n";
1437 print "set this to \"other\", and none will be used.\n";
1438 print $list_supported_imap_servers;
1439 print "\n";
1440 print " other = Not one of the above servers\n";
1441 print "\n";
1442 print "[$WHT$imap_server_type$NRM]: $WHT";
1443 $new_imap_server_type = <STDIN>;
1444
1445 if ( $new_imap_server_type eq "\n" ) {
1446 $new_imap_server_type = $imap_server_type;
1447 } else {
1448 $new_imap_server_type =~ s/[\r\n]//g;
1449 }
1450 return $new_imap_server_type;
1451 }
1452
1453 # invert_time
1454 sub command110 {
1455 print "Sometimes the date of messages sent is messed up (off by a few hours\n";
1456 print "on some machines). Typically this happens if the system doesn't support\n";
1457 print "tm_gmtoff. It will happen only if your time zone is \"negative\".\n";
1458 print "This most often occurs on Solaris 7 machines in the United States.\n";
1459 print "By default, this is off. It should be kept off unless problems surface\n";
1460 print "about the time that messages are sent.\n";
1461 print " no = Do NOT fix time -- almost always correct\n";
1462 print " yes = Fix the time for this system\n";
1463
1464 $YesNo = 'n';
1465 $YesNo = 'y' if ( lc($invert_time) eq 'true' );
1466
1467 print "Fix the time for this system (y/n) [$WHT$YesNo$NRM]: $WHT";
1468
1469 $new_invert_time = <STDIN>;
1470 $new_invert_time =~ tr/yn//cd;
1471 return 'true' if ( $new_invert_time eq "y" );
1472 return 'false' if ( $new_invert_time eq "n" );
1473 return $invert_time;
1474 }
1475
1476 sub command111 {
1477 print "This is the delimiter that your IMAP server uses to distinguish between\n";
1478 print "folders. For example, Cyrus uses '.' as the delimiter and a complete\n";
1479 print "folder would look like 'INBOX.Friends.Bob', while UW uses '/' and would\n";
1480 print "look like 'INBOX/Friends/Bob'. Normally this should be left at 'detect'\n";
1481 print "but if you are sure you know what delimiter your server uses, you can\n";
1482 print "specify it here.\n";
1483 print "\nTo have it autodetect the delimiter, set it to 'detect'.\n\n";
1484 print "[$WHT$optional_delimiter$NRM]: $WHT";
1485 $new_optional_delimiter = <STDIN>;
1486
1487 if ( $new_optional_delimiter eq "\n" ) {
1488 $new_optional_delimiter = $optional_delimiter;
1489 } else {
1490 $new_optional_delimiter =~ s/[\r\n]//g;
1491 }
1492 return $new_optional_delimiter;
1493 }
1494 # IMAP authentication type
1495 # Possible values: login, plain, cram-md5, digest-md5
1496 # Now offers to detect supported mechs, assuming server & port are set correctly
1497
1498 sub command112a {
1499 if ($use_imap_tls ne "0") {
1500 # 1. Script does not handle TLS.
1501 # 2. Server does not have to declare all supported authentication mechs when
1502 # STARTTLS is used. Supported mechs are declared only after STARTTLS.
1503 print "Auto-detection of login methods is unavailable when using TLS or STARTTLS.\n";
1504 } else {
1505 print "If you have already set the hostname and port number, I can try to\n";
1506 print "detect the mechanisms your IMAP server supports.\n";
1507 print "I will try to detect CRAM-MD5 and DIGEST-MD5 support. I can't test\n";
1508 print "for \"login\" or \"plain\" without knowing a username and password.\n";
1509 print "Auto-detecting is optional - you can safely say \"n\" here.\n";
1510 print "\nTry to detect supported mechanisms? [y/N]: ";
1511 $inval=<STDIN>;
1512 chomp($inval);
1513 if ($inval =~ /^y\b/i) {
1514 # Yes, let's try to detect.
1515 print "Trying to detect IMAP capabilities...\n";
1516 my $host = $imapServerAddress . ':'. $imapPort;
1517 print "CRAM-MD5:\t";
1518 my $tmp = detect_auth_support('IMAP',$host,'CRAM-MD5');
1519 if (defined($tmp)) {
1520 if ($tmp eq 'YES') {
1521 print "$WHT SUPPORTED$NRM\n";
1522 } else {
1523 print "$WHT NOT SUPPORTED$NRM\n";
1524 }
1525 } else {
1526 print $WHT . " ERROR DETECTING$NRM\n";
1527 }
1528
1529 print "DIGEST-MD5:\t";
1530 $tmp = detect_auth_support('IMAP',$host,'DIGEST-MD5');
1531 if (defined($tmp)) {
1532 if ($tmp eq 'YES') {
1533 print "$WHT SUPPORTED$NRM\n";
1534 } else {
1535 print "$WHT NOT SUPPORTED$NRM\n";
1536 }
1537 } else {
1538 print $WHT . " ERROR DETECTING$NRM\n";
1539 }
1540
1541 }
1542 }
1543 print "\nWhat authentication mechanism do you want to use for IMAP connections?\n\n";
1544 print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n";
1545 print $WHT . "plain" . $NRM . " - SASL PLAIN. If you need this, you already know it.\n";
1546 print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext methods.\n";
1547 print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n";
1548 print "\n*** YOUR IMAP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n";
1549 print "If you don't understand or are unsure, you probably want \"login\"\n\n";
1550 print "login, plain, cram-md5, or digest-md5 [$WHT$imap_auth_mech$NRM]: $WHT";
1551 $inval=<STDIN>;
1552 chomp($inval);
1553 if ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) || ($inval =~ /^login\b/i) || ($inval =~ /^plain\b/i)) {
1554 return lc($inval);
1555 } else {
1556 # user entered garbage or default value so nothing needs to be set
1557 return $imap_auth_mech;
1558 }
1559 }
1560
1561
1562 # SMTP authentication type
1563 # Possible choices: none, login, plain, cram-md5, digest-md5
1564 sub command112b {
1565 if ($use_smtp_tls ne "0") {
1566 print "Auto-detection of login methods is unavailable when using TLS or STARTTLS.\n";
1567 } elsif (eval ("use IO::Socket; 1")) {
1568 # try loading IO::Socket module
1569 print "If you have already set the hostname and port number, I can try to\n";
1570 print "automatically detect some of the mechanisms your SMTP server supports.\n";
1571 print "Auto-detection is *optional* - you can safely say \"n\" here.\n";
1572 print "\nTry to detect auth mechanisms? [y/N]: ";
1573 $inval=<STDIN>;
1574 chomp($inval);
1575 if ($inval =~ /^y\b/i) {
1576 # Yes, let's try to detect.
1577 print "Trying to detect supported methods (SMTP)...\n";
1578
1579 # Special case!
1580 # Check none by trying to relay to junk@microsoft.com
1581 $host = $smtpServerAddress . ':' . $smtpPort;
1582 my $sock = IO::Socket::INET->new($host);
1583 print "Testing none:\t\t$WHT";
1584 if (!defined($sock)) {
1585 print " ERROR TESTING\n";
1586 close $sock;
1587 } else {
1588 $got = <$sock>; # Discard greeting
1589 print $sock "HELO $domain\r\n";
1590 $got = <$sock>; # Discard
1591 print $sock "MAIL FROM:<tester\@squirrelmail.org>\r\n";
1592 $got = <$sock>; # Discard
1593 print $sock "RCPT TO:<junk\@microsoft.com\r\n";
1594 $got = <$sock>; # This is the important line
1595 if ($got =~ /^250\b/) { # SMTP will relay without auth
1596 print "SUPPORTED$NRM\n";
1597 } else {
1598 print "NOT SUPPORTED$NRM\n";
1599 }
1600 print $sock "RSET\r\n";
1601 print $sock "QUIT\r\n";
1602 close $sock;
1603 }
1604
1605 # Try login (SquirrelMail default)
1606 print "Testing login:\t\t";
1607 $tmp=detect_auth_support('SMTP',$host,'LOGIN');
1608 if (defined($tmp)) {
1609 if ($tmp eq 'YES') {
1610 print $WHT . "SUPPORTED$NRM\n";
1611 } else {
1612 print $WHT . "NOT SUPPORTED$NRM\n";
1613 }
1614 } else {
1615 print $WHT . "ERROR DETECTING$NRM\n";
1616 }
1617
1618 # Try plain
1619 print "Testing plain:\t\t";
1620 $tmp=detect_auth_support('SMTP',$host,'PLAIN');
1621 if (defined($tmp)) {
1622 if ($tmp eq 'YES') {
1623 print $WHT . "SUPPORTED$NRM\n";
1624 } else {
1625 print $WHT . "NOT SUPPORTED$NRM\n";
1626 }
1627 } else {
1628 print $WHT . "ERROR DETECTING$NRM\n";
1629 }
1630
1631 # Try CRAM-MD5
1632 print "Testing CRAM-MD5:\t";
1633 $tmp=detect_auth_support('SMTP',$host,'CRAM-MD5');
1634 if (defined($tmp)) {
1635 if ($tmp eq 'YES') {
1636 print $WHT . "SUPPORTED$NRM\n";
1637 } else {
1638 print $WHT . "NOT SUPPORTED$NRM\n";
1639 }
1640 } else {
1641 print $WHT . "ERROR DETECTING$NRM\n";
1642 }
1643
1644
1645 print "Testing DIGEST-MD5:\t";
1646 $tmp=detect_auth_support('SMTP',$host,'DIGEST-MD5');
1647 if (defined($tmp)) {
1648 if ($tmp eq 'YES') {
1649 print $WHT . "SUPPORTED$NRM\n";
1650 } else {
1651 print $WHT . "NOT SUPPORTED$NRM\n";
1652 }
1653 } else {
1654 print $WHT . "ERROR DETECTING$NRM\n";
1655 }
1656 }
1657 }
1658 print "\nWhat authentication mechanism do you want to use for SMTP connections?\n";
1659 print $WHT . "none" . $NRM . " - Your SMTP server does not require authorization.\n";
1660 print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n";
1661 print $WHT . "plain" . $NRM . " - SASL PLAIN. Plaintext. If you can do better, you probably should.\n";
1662 print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext.\n";
1663 print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n";
1664 print $WHT . "\n*** YOUR SMTP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n" . $NRM;
1665 print "If you don't understand or are unsure, you probably want \"none\"\n\n";
1666 print "none, login, plain, cram-md5, or digest-md5 [$WHT$smtp_auth_mech$NRM]: $WHT";
1667 $inval=<STDIN>;
1668 chomp($inval);
1669 if ($inval =~ /^none\b/i) {
1670 # remove sitewide smtp authentication information
1671 $smtp_sitewide_user = '';
1672 $smtp_sitewide_pass = '';
1673 # SMTP doesn't necessarily require logins
1674 return "none";
1675 } elsif ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) ||
1676 ($inval =~ /^login\b/i) || ($inval =~/^plain\b/i)) {
1677 command_smtp_sitewide_userpass($inval);
1678 return lc($inval);
1679 } elsif (trim($inval) eq '') {
1680 # user selected default value
1681 command_smtp_sitewide_userpass($smtp_auth_mech);
1682 return $smtp_auth_mech;
1683 } else {
1684 # user entered garbage
1685 return $smtp_auth_mech;
1686 }
1687 }
1688
1689 sub command_smtp_sitewide_userpass($) {
1690 # get first function argument
1691 my $auth_mech = shift(@_);
1692 my $default, $tmp;
1693 $auth_mech = lc(trim($auth_mech));
1694 if ($auth_mech eq 'none') {
1695 return;
1696 }
1697 print "SMTP authentication uses IMAP username and password by default.\n";
1698 print "\n";
1699 print "Would you like to use other login and password for all SquirrelMail \n";
1700 print "SMTP connections?";
1701 if ($smtp_sitewide_user ne '') {
1702 $default = 'y';
1703 print " [Y/n]:";
1704 } else {
1705 $default = 'n';
1706 print " [y/N]:";
1707 }
1708 $tmp=<STDIN>;
1709 $tmp = trim($tmp);
1710
1711 if ($tmp eq '') {
1712 $tmp = $default;
1713 } else {
1714 $tmp = lc($tmp);
1715 }
1716
1717 if ($tmp eq 'n') {
1718 $smtp_sitewide_user = '';
1719 $smtp_sitewide_pass = '';
1720 } elsif ($tmp eq 'y') {
1721 print "Enter username [$smtp_sitewide_user]:";
1722 my $new_user = <STDIN>;
1723 $new_user = trim($new_user);
1724 if ($new_user ne '') {
1725 $smtp_sitewide_user = $new_user;
1726 }
1727 if ($smtp_sitewide_user ne '') {
1728 print "If you don't enter any password, current sitewide password will be used.\n";
1729 print "If you enter space, password will be set to empty string.\n";
1730 print "Enter password:";
1731 my $new_pass = <STDIN>;
1732 if ($new_pass ne "\n") {
1733 $smtp_sitewide_pass = trim($new_pass);
1734 }
1735 } else {
1736 print "Invalid input. You must set username used for SMTP authentication.\n";
1737 print "Click enter to continue\n";
1738 $tmp = <STDIN>;
1739 }
1740 } else {
1741 print "Invalid input\n";
1742 print "Click enter to continue\n";
1743 $tmp = <STDIN>;
1744 }
1745 }
1746
1747 # Sub adds information about SMTP authentication type to menu
1748 sub display_smtp_sitewide_userpass() {
1749 my $ret = '';
1750 if ($smtp_auth_mech ne 'none') {
1751 if ($smtp_sitewide_user ne '') {
1752 $ret = ' (with custom username and password)';
1753 } else {
1754 $ret = ' (with IMAP username and password)';
1755 }
1756 }
1757 return $ret;
1758 }
1759
1760 # TLS
1761 # This sub is reused for IMAP and SMTP
1762 # Args: service name, default value
1763 sub command_use_tls {
1764 my($default_val,$service,$inval);
1765 $service=$_[0];
1766 $default_val=$_[1];
1767 print "TLS (Transport Layer Security) encrypts the traffic between server and client.\n";
1768 print "STARTTLS extensions allow to start encryption on existing plain text connection.\n";
1769 print "These options add specific PHP and IMAP server configuration requirements.\n";
1770 print "See SquirrelMail documentation about connection security.\n";
1771 print "\n";
1772 print "If your " . $service . " server is localhost, you can safely disable this.\n";
1773 print "If it is remote, you may wish to seriously consider enabling this.\n";
1774 $valid_input=0;
1775 while ($valid_input eq 0) {
1776 print "\nSelect connection security model:\n";
1777 print " 0 - Use plain text connection\n";
1778 print " 1 - Use TLS connection\n";
1779 print " 2 - Use STARTTLS extension\n";
1780 print "Select [$default_val]: ";
1781 $inval=<STDIN>;
1782 $inval=trim($inval);
1783 if ($inval =~ /^[012]$/ || $inval eq '') {
1784 $valid_input = 1;
1785 }
1786 }
1787 if ($inval ne '') {$default_val = $inval};
1788 return $default_val;
1789 }
1790
1791 # This sub is used to display human readable text for
1792 # $use_imap_tls and $use_smtp_tls values in conf.pl menu
1793 sub display_use_tls($) {
1794 my $val = shift(@_);
1795 my $ret = 'disabled';
1796 if ($val eq '2') {
1797 $ret = 'STARTTLS';
1798 } elsif ($val eq '1') {
1799 $ret = 'TLS';
1800 }
1801 return $ret;
1802 }
1803
1804 # $encode_header_key
1805 sub command114 {
1806 print "This encryption key allows the hiding of SquirrelMail Received:\n";
1807 print "headers in outbound messages. SquirrelMail uses the encryption\n";
1808 print "key to encode the username, remote address, and proxied address\n";
1809 print "and then stores that encoded information in X-Squirrel-* headers.\n";
1810 print "\n";
1811 print "Warning: the encryption function used to accomplish this is not\n";
1812 print "bulletproof. When used with a static encryption key as it is here,\n";
1813 print "it provides only minimal security and the encoded user information\n";
1814 print "in the X-Squirrel-* headers can be decoded quickly by a skilled\n";
1815 print "attacker.\n";
1816 print "\n";
1817 print "When you need to inspect an email sent from your system with the\n";
1818 print "X-Squirrel-* headers, you can decode the user information therein\n";
1819 print "by using the decrypt_headers.php script found in the SquirrelMail\n";
1820 print "contrib/ directory. You'll need the encryption key that you\n";
1821 print "defined here when doing so.\n";
1822 print "\n";
1823 print "Enter encryption key: ";
1824 $new_encode_header_key = <STDIN>;
1825 if ( $new_encode_header_key eq "\n" ) {
1826 $new_encode_header_key = $encode_header_key;
1827 } else {
1828 $new_encode_header_key =~ s/[\r\n]//g;
1829 }
1830 return $new_encode_header_key;
1831 }
1832
1833 # MOTD
1834 sub command71 {
1835 print "\nYou can now create the welcome message that is displayed\n";
1836 print "every time a user logs on. You can use HTML or just plain\n";
1837 print
1838 "text. If you do not wish to have one, just make it blank.\n\n(Type @ on a blank line to exit)\n";
1839
1840 $new_motd = "";
1841 do {
1842 print "] ";
1843 $line = <STDIN>;
1844 $line =~ s/[\r\n]//g;
1845 if ( $line ne "@" ) {
1846 $line =~ s/ /\&nbsp;\&nbsp;/g;
1847 $line =~ s/\t/\&nbsp;\&nbsp;\&nbsp;\&nbsp;/g;
1848 $line =~ s/$/ /;
1849 $line =~ s/\"/\\\"/g;
1850
1851 $new_motd = $new_motd . $line;
1852 }
1853 } while ( $line ne "@" );
1854 return $new_motd;
1855 }
1856
1857 ################# PLUGINS ###################
1858
1859 sub command81 {
1860 $command =~ s/[\s\n\r]*//g;
1861 if ( $command > 0 ) {
1862 $command = $command - 1;
1863 if ( $command <= $#plugins ) {
1864 @newplugins = ();
1865 $ct = 0;
1866 while ( $ct <= $#plugins ) {
1867 if ( $ct != $command ) {
1868 @newplugins = ( @newplugins, $plugins[$ct] );
1869 }
1870 $ct++;
1871 }
1872 @plugins = @newplugins;
1873 } elsif ( $command <= $#plugins + $#unused_plugins + 1 ) {
1874 $num = $command - $#plugins - 1;
1875 @newplugins = @plugins;
1876 $ct = 0;
1877 while ( $ct <= $#unused_plugins ) {
1878 if ( $ct == $num ) {
1879 @newplugins = ( @newplugins, $unused_plugins[$ct] );
1880 }
1881 $ct++;
1882 }
1883 @plugins = @newplugins;
1884 }
1885 }
1886 return @plugins;
1887 }
1888
1889 # disable_plugins_user
1890 sub command82 {
1891 print "When all active plugins are disabled, they can be disabled only\n";
1892 print "for the one user named here. If left blank, plugins will be\n";
1893 print "disabled for ALL users. This setting has no effect if plugins\n";
1894 print "are not disabled.\n";
1895 print "\n";
1896 print "This must be the exact IMAP login name for the desired user.\n";
1897 print "\n";
1898 print "[$WHT$disable_plugins_user$NRM]: $WHT";
1899 $new_disable_plugins_user = <STDIN>;
1900 if ( $new_disable_plugins_user eq "\n" ) {
1901 $new_disable_plugins_user = $disable_plugins_user;
1902 } else {
1903 $new_disable_plugins_user =~ s/[\r\n]//g;
1904 }
1905 return $new_disable_plugins_user;
1906 }
1907
1908 ################# FOLDERS ###################
1909
1910 # default_folder_prefix
1911 sub command21 {
1912 print "Some IMAP servers (UW, for example) store mail and folders in\n";
1913 print "your user space in a separate subdirectory. This is where you\n";
1914 print "specify what that directory is.\n";
1915 print "\n";
1916 print "EXAMPLE: mail/";
1917 print "\n";
1918 print "NOTE: If you use Cyrus, or some server that would not use this\n";
1919 print " option, you must set this to 'none'.\n";
1920 print "\n";
1921 print "[$WHT$default_folder_prefix$NRM]: $WHT";
1922 $new_default_folder_prefix = <STDIN>;
1923
1924 if ( $new_default_folder_prefix eq "\n" ) {
1925 $new_default_folder_prefix = $default_folder_prefix;
1926 } else {
1927 $new_default_folder_prefix =~ s/[\r\n]//g;
1928 }
1929 if ( ( $new_default_folder_prefix =~ /^\s*$/ ) || ( $new_default_folder_prefix =~ m/^none$/i ) ) {
1930 $new_default_folder_prefix = "";
1931 } else {
1932 # add the trailing delimiter only if we know what the server is.
1933 if (($imap_server_type eq 'cyrus' and
1934 $optional_delimiter eq 'detect') or
1935 ($imap_server_type eq 'courier' and
1936 $optional_delimiter eq 'detect')) {
1937 $new_default_folder_prefix =~ s/\.*$/\./;
1938 } elsif ($imap_server_type eq 'uw' and
1939 $optional_delimiter eq 'detect') {
1940 $new_default_folder_prefix =~ s/\/*$/\//;
1941 }
1942 }
1943 return $new_default_folder_prefix;
1944 }
1945
1946 # Show Folder Prefix
1947 sub command22 {
1948 print "It is possible to set up the default folder prefix as a user\n";
1949 print "specific option, where each user can specify what their mail\n";
1950 print "folder is. If you set this to false, they will never see the\n";
1951 print "option, but if it is true, this option will appear in the\n";
1952 print "'options' section.\n";
1953 print "\n";
1954 print "NOTE: You set the default folder prefix in option '1' of this\n";
1955 print " section. That will be the default if the user doesn't\n";
1956 print " specify anything different.\n";
1957 print "\n";
1958
1959 if ( lc($show_prefix_option) eq 'true' ) {
1960 $default_value = "y";
1961 } else {
1962 $default_value = "n";
1963 }
1964 print "\n";
1965 print "Show option (y/n) [$WHT$default_value$NRM]: $WHT";
1966 $new_show = <STDIN>;
1967 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
1968 $show_prefix_option = 'true';
1969 } else {
1970 $show_prefix_option = 'false';
1971 }
1972 return $show_prefix_option;
1973 }
1974
1975 # Trash Folder
1976 sub command23a {
1977 print "You can now specify where the default trash folder is located.\n";
1978 print "On servers where you do not want this, you can set it to anything\n";
1979 print "and set option 6 to false.\n";
1980 print "\n";
1981 print "This is relative to where the rest of your email is kept. You do\n";
1982 print "not need to worry about their mail directory. If this folder\n";
1983 print "would be ~/mail/trash on the filesystem, you only need to specify\n";
1984 print "that this is 'trash', and be sure to put 'mail/' in option 1.\n";
1985 print "\n";
1986
1987 print "[$WHT$trash_folder$NRM]: $WHT";
1988 $new_trash_folder = <STDIN>;
1989 if ( $new_trash_folder eq "\n" ) {
1990 $new_trash_folder = $trash_folder;
1991 } else {
1992 if (check_imap_folder($new_trash_folder)) {
1993 $new_trash_folder =~ s/[\r\n]//g;
1994 } else {
1995 $new_trash_folder = $trash_folder;
1996 }
1997 }
1998 return $new_trash_folder;
1999 }
2000
2001 # Sent Folder
2002 sub command23b {
2003 print "This is where messages that are sent will be stored. SquirrelMail\n";
2004 print "by default puts a copy of all outgoing messages in this folder.\n";
2005 print "\n";
2006 print "This is relative to where the rest of your email is kept. You do\n";
2007 print "not need to worry about their mail directory. If this folder\n";
2008 print "would be ~/mail/sent on the filesystem, you only need to specify\n";
2009 print "that this is 'sent', and be sure to put 'mail/' in option 1.\n";
2010 print "\n";
2011
2012 print "[$WHT$sent_folder$NRM]: $WHT";
2013 $new_sent_folder = <STDIN>;
2014 if ( $new_sent_folder eq "\n" ) {
2015 $new_sent_folder = $sent_folder;
2016 } else {
2017 if (check_imap_folder($new_sent_folder)) {
2018 $new_sent_folder =~ s/[\r\n]//g;
2019 } else {
2020 $new_sent_folder = $sent_folder;
2021 }
2022 }
2023 return $new_sent_folder;
2024 }
2025
2026 # Draft Folder
2027 sub command23c {
2028 print "You can now specify where the default draft folder is located.\n";
2029 print "On servers where you do not want this, you can set it to anything\n";
2030 print "and set option 9 to false.\n";
2031 print "\n";
2032 print "This is relative to where the rest of your email is kept. You do\n";
2033 print "not need to worry about their mail directory. If this folder\n";
2034 print "would be ~/mail/drafts on the filesystem, you only need to specify\n";
2035 print "that this is 'drafts', and be sure to put 'mail/' in option 1.\n";
2036 print "\n";
2037
2038 print "[$WHT$draft_folder$NRM]: $WHT";
2039 $new_draft_folder = <STDIN>;
2040 if ( $new_draft_folder eq "\n" ) {
2041 $new_draft_folder = $draft_folder;
2042 } else {
2043 if (check_imap_folder($new_draft_folder)) {
2044 $new_draft_folder =~ s/[\r\n]//g;
2045 } else {
2046 $new_draft_folder = $draft_folder;
2047 }
2048 }
2049 return $new_draft_folder;
2050 }
2051
2052 # default move to trash
2053 sub command24a {
2054 print "By default, should messages get moved to the trash folder? You\n";
2055 print "can specify the default trash folder in option 3. If this is set\n";
2056 print "to false, messages will get deleted immediately without moving\n";
2057 print "to the trash folder.\n";
2058 print "\n";
2059 print "Trash folder is currently: $trash_folder\n";
2060 print "\n";
2061
2062 if ( lc($default_move_to_trash) eq 'true' ) {
2063 $default_value = "y";
2064 } else {
2065 $default_value = "n";
2066 }
2067 print "By default, move to trash (y/n) [$WHT$default_value$NRM]: $WHT";
2068 $new_show = <STDIN>;
2069 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2070 $default_move_to_trash = 'true';
2071 } else {
2072 $default_move_to_trash = 'false';
2073 }
2074 return $default_move_to_trash;
2075 }
2076
2077 # default move to sent (save sent messages)
2078 sub command24b {
2079 print "By default, should copies of outgoing messages get saved in the\n";
2080 print "sent folder? You can specify the default sent folder in option 4.\n";
2081 print "If this is set to false, messages will get sent and no copy will\n";
2082 print "be made.\n";
2083 print "\n";
2084 print "Sent folder is currently: $sent_folder\n";
2085 print "\n";
2086
2087 if ( lc($default_move_to_sent) eq 'true' ) {
2088 $default_value = "y";
2089 } else {
2090 $default_value = "n";
2091 }
2092 print "By default, save sent messages (y/n) [$WHT$default_value$NRM]: $WHT";
2093 $new_show = <STDIN>;
2094 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2095 $default_move_to_sent = 'true';
2096 } else {
2097 $default_move_to_sent = 'false';
2098 }
2099 return $default_move_to_sent;
2100 }
2101
2102 # default save as draft
2103 sub command24c {
2104 print "By default, should the save to draft option be shown? You can\n";
2105 print "specify the default drafts folder in option 5. If this is set\n";
2106 print "to false, users will not be shown the save to draft option.\n";
2107 print "\n";
2108 print "Drafts folder is currently: $draft_folder\n";
2109 print "\n";
2110
2111 if ( lc($default_save_as_draft) eq 'true' ) {
2112 $default_value = "y";
2113 } else {
2114 $default_value = "n";
2115 }
2116 print "By default, save as draft (y/n) [$WHT$default_value$NRM]: $WHT";
2117 $new_show = <STDIN>;
2118 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2119 $default_save_as_draft = 'true';
2120 } else {
2121 $default_save_as_draft = 'false';
2122 }
2123 return $default_save_as_draft;
2124 }
2125
2126 # List special folders first
2127 sub command27 {
2128 print "SquirrelMail has what we call 'special folders' that are not\n";
2129 print "manipulated and viewed like normal folders. Some examples of\n";
2130 print "these folders would be INBOX, Trash, Sent, etc. This option\n";
2131 print "Simply asks if you want these folders listed first in the folder\n";
2132 print "listing.\n";
2133 print "\n";
2134
2135 if ( lc($list_special_folders_first) eq 'true' ) {
2136 $default_value = "y";
2137 } else {
2138 $default_value = "n";
2139 }
2140 print "\n";
2141 print "List first (y/n) [$WHT$default_value$NRM]: $WHT";
2142 $new_show = <STDIN>;
2143 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2144 $list_special_folders_first = 'true';
2145 } else {
2146 $list_special_folders_first = 'false';
2147 }
2148 return $list_special_folders_first;
2149 }
2150
2151 # Show special folders color
2152 sub command28 {
2153 print "SquirrelMail has what we call 'special folders' that are not\n";
2154 print "manipulated and viewed like normal folders. Some examples of\n";
2155 print "these folders would be INBOX, Trash, Sent, etc. This option\n";
2156 print "wants to know if we should display special folders in a\n";
2157 print "color than the other folders.\n";
2158 print "\n";
2159
2160 if ( lc($use_special_folder_color) eq 'true' ) {
2161 $default_value = "y";
2162 } else {
2163 $default_value = "n";
2164 }
2165 print "\n";
2166 print "Show color (y/n) [$WHT$default_value$NRM]: $WHT";
2167 $new_show = <STDIN>;
2168 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2169 $use_special_folder_color = 'true';
2170 } else {
2171 $use_special_folder_color = 'false';
2172 }
2173 return $use_special_folder_color;
2174 }
2175
2176 # Auto expunge
2177 sub command29 {
2178 print "The way that IMAP handles deleting messages is as follows. You\n";
2179 print "mark the message as deleted, and then to 'really' delete it, you\n";
2180 print "expunge it. This option asks if you want to just have messages\n";
2181 print "marked as deleted, or if you want SquirrelMail to expunge the \n";
2182 print "messages too.\n";
2183 print "\n";
2184
2185 if ( lc($auto_expunge) eq 'true' ) {
2186 $default_value = "y";
2187 } else {
2188 $default_value = "n";
2189 }
2190 print "Auto expunge (y/n) [$WHT$default_value$NRM]: $WHT";
2191 $new_show = <STDIN>;
2192 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2193 $auto_expunge = 'true';
2194 } else {
2195 $auto_expunge = 'false';
2196 }
2197 return $auto_expunge;
2198 }
2199
2200 # Default sub of inbox
2201 sub command210 {
2202 print "Some IMAP servers (Cyrus) have all folders as subfolders of INBOX.\n";
2203 print "This can cause some confusion in folder creation for users when\n";
2204 print "they try to create folders and don't put it as a subfolder of INBOX\n";
2205 print "and get permission errors. This option asks if you want folders\n";
2206 print "to be subfolders of INBOX by default.\n";
2207 print "\n";
2208
2209 if ( lc($default_sub_of_inbox) eq 'true' ) {
2210 $default_value = "y";
2211 } else {
2212 $default_value = "n";
2213 }
2214 print "Default sub of INBOX (y/n) [$WHT$default_value$NRM]: $WHT";
2215 $new_show = <STDIN>;
2216 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2217 $default_sub_of_inbox = 'true';
2218 } else {
2219 $default_sub_of_inbox = 'false';
2220 }
2221 return $default_sub_of_inbox;
2222 }
2223
2224 # Show contain subfolder option
2225 sub command211 {
2226 print "Some IMAP servers (UW) make it so that there are two types of\n";
2227 print "folders. Those that contain messages, and those that contain\n";
2228 print "subfolders. If this is the case for your server, set this to\n";
2229 print "true, and it will ask the user whether the folder they are\n";
2230 print "creating contains subfolders or messages.\n";
2231 print "\n";
2232
2233 if ( lc($show_contain_subfolders_option) eq 'true' ) {
2234 $default_value = "y";
2235 } else {
2236 $default_value = "n";
2237 }
2238 print "Show option (y/n) [$WHT$default_value$NRM]: $WHT";
2239 $new_show = <STDIN>;
2240 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2241 $show_contain_subfolders_option = 'true';
2242 } else {
2243 $show_contain_subfolders_option = 'false';
2244 }
2245 return $show_contain_subfolders_option;
2246 }
2247
2248 # Default Unseen Notify
2249 sub command212 {
2250 print "This option specifies where the users will receive notification\n";
2251 print "about unseen messages by default. This is of course an option that\n";
2252 print "can be changed on a user level.\n";
2253 print " 1 = No notification\n";
2254 print " 2 = Only on the INBOX\n";
2255 print " 3 = On all folders\n";
2256 print "\n";
2257
2258 print "Which one should be default (1,2,3)? [$WHT$default_unseen_notify$NRM]: $WHT";
2259 $new_show = <STDIN>;
2260 if ( $new_show =~ /^[123]\n/i ) {
2261 $default_unseen_notify = $new_show;
2262 }
2263 $default_unseen_notify =~ s/[\r\n]//g;
2264 return $default_unseen_notify;
2265 }
2266
2267 # Default Unseen Type
2268 sub command213 {
2269 print "Here you can define the default way that unseen messages will be displayed\n";
2270 print "to the user in the folder listing on the left side.\n";
2271 print " 1 = Only unseen messages (4)\n";
2272 print " 2 = Unseen and Total messages (4/27)\n";
2273 print "\n";
2274
2275 print "Which one should be default (1,2)? [$WHT$default_unseen_type$NRM]: $WHT";
2276 $new_show = <STDIN>;
2277 if ( $new_show =~ /^[12]\n/i ) {
2278 $default_unseen_type = $new_show;
2279 }
2280 $default_unseen_type =~ s/[\r\n]//g;
2281 return $default_unseen_type;
2282 }
2283
2284 # Auto create special folders
2285 sub command214 {
2286 print "Would you like the Sent, Trash, and Drafts folders to be created\n";
2287 print "automatically print for you when a user logs in? If the user\n";
2288 print "accidentally deletes their special folders, this option will\n";
2289 print "automatically create it again for them.\n";
2290 print "\n";
2291
2292 if ( lc($auto_create_special) eq 'true' ) {
2293 $default_value = "y";
2294 } else {
2295 $default_value = "n";
2296 }
2297 print "Auto create special folders? (y/n) [$WHT$default_value$NRM]: $WHT";
2298 $new_show = <STDIN>;
2299 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2300 $auto_create_special = 'true';
2301 } else {
2302 $auto_create_special = 'false';
2303 }
2304 return $auto_create_special;
2305 }
2306
2307 # Automatically delete folders
2308 sub command215 {
2309 if ( $imap_server_type eq "uw" ) {
2310 print "UW IMAP servers will not allow folders containing mail to also contain folders.\n";
2311 print "Deleting folders will bypass the trash folder and be immediately deleted\n\n";
2312 print "If this is not the correct value for your server,\n";
2313 print "please use option D on the Main Menu to configure your server correctly.\n\n";
2314 print "Press enter to continue...\n";
2315 $new_delete = <STDIN>;
2316 $delete_folder = 'true';
2317 } else {
2318 if ( $imap_server_type eq "courier" ) {
2319 print "Courier (or Courier-IMAP) IMAP servers may not support ";
2320 print "subfolders of Trash. \n";
2321 print "Specifically, if Courier is set to always move messages to Trash, \n";
2322 print "Trash will be treated by Courier as a special folder that does not \n";
2323 print "allow subfolders. \n\n";
2324 print "Please verify your Courier configuration, and test folder deletion \n";
2325 print "when changing this setting.\n\n";
2326 }
2327
2328 print "Are subfolders of the Trash supported by your IMAP server?\n";
2329 print "If so, should deleted folders be sent to Trash?\n";
2330 print "If not, say no (deleted folders should not be sent to Trash)\n\n";
2331 # reversal of logic.
2332 # question was: Should folders be automatically deleted instead of sent to trash..
2333 # we've changed the question to make it more clear,
2334 # and are here handling that to avoid changing the answers..
2335 if ( lc($delete_folder) eq 'true' ) {
2336 $default_value = "n";
2337 } else {
2338 $default_value = "y";
2339 }
2340 print "Send deleted folders to Trash? (y/n) [$WHT$default_value$NRM]: $WHT";
2341 $new_delete = <STDIN>;
2342 if ( ( $new_delete =~ /^y\n/i ) || ( ( $new_delete =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2343 $delete_folder = 'false';
2344 } else {
2345 $delete_folder = 'true';
2346 }
2347 }
2348 return $delete_folder;
2349 }
2350
2351 #noselect fix
2352 sub command216 {
2353 print "Some IMAP servers allow subfolders to exist even if the parent\n";
2354 print "folders do not. This fixes some problems with the folder list\n";
2355 print "when this is the case, causing the /NoSelect folders to be displayed\n";
2356 print "\n";
2357
2358 if ( lc($noselect_fix_enable) eq 'true' ) {
2359 $default_value = "y";
2360 } else {
2361 $default_value = "n";
2362 }
2363 print "enable noselect fix? (y/n) [$WHT$noselect_fix_enable$NRM]: $WHT";
2364 $noselect_fix_enable = <STDIN>;
2365 if ( ( $noselect_fix_enable =~ /^y\n/i ) || ( ( $noselect_fix_enable =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2366 $noselect_fix_enable = 'true';
2367 } else {
2368 $noselect_fix_enable = 'false';
2369 }
2370 return $noselect_fix_enable;
2371 }
2372 ############# GENERAL OPTIONS #####################
2373
2374 # Data directory
2375 sub command33a {
2376 print "Specify the location for your data directory.\n";
2377 print "You need to create this directory yourself.\n";
2378 print "The path name can be absolute or relative (to the config directory).\n";
2379 print "Here are two examples:\n";
2380 print " Absolute: /var/local/squirrelmail/data/\n";
2381 print " Relative: ../data/\n";
2382 print "Relative paths to directories outside of the SquirrelMail distribution\n";
2383 print "will be converted to their absolute path equivalents in config.php.\n\n";
2384 print "Note: There are potential security risks with having a writeable directory\n";
2385 print "under the web server's root directory (ex: /home/httpd/html).\n";
2386 print "For this reason, it is recommended to put the data directory\n";
2387 print "in an alternate location of your choice. \n";
2388 print "\n";
2389
2390 print "[$WHT$data_dir$NRM]: $WHT";
2391 $new_data_dir = <STDIN>;
2392 if ( $new_data_dir eq "\n" ) {
2393 $new_data_dir = $data_dir;
2394 } else {
2395 $new_data_dir =~ s/[\r\n]//g;
2396 }
2397 if ( $new_data_dir =~ /^\s*$/ ) {
2398 $new_data_dir = "";
2399 } else {
2400 $new_data_dir =~ s/\/*$//g;
2401 $new_data_dir =~ s/$/\//g;
2402 }
2403 return $new_data_dir;
2404 }
2405
2406 # Attachment directory
2407 sub command33b {
2408 print "Path to directory used for storing attachments while a mail is\n";
2409 print "being composed. The path name can be absolute or relative (to the\n";
2410 print "config directory). Here are two examples:\n";
2411 print " Absolute: /var/local/squirrelmail/attach/\n";
2412 print " Relative: ../attach/\n";
2413 print "Relative paths to directories outside of the SquirrelMail distribution\n";
2414 print "will be converted to their absolute path equivalents in config.php.\n\n";
2415 print "Note: There are a few security considerations regarding this\n";
2416 print "directory:\n";
2417 print " 1. It should have the permission 733 (rwx-wx-wx) to make it\n";
2418 print " impossible for a random person with access to the webserver\n";
2419 print " to list files in this directory. Confidential data might\n";
2420 print " be laying around in there.\n";
2421 print " Depending on your user:group assignments, 730 (rwx-wx---)\n";
2422 print " may be possible, and more secure (e.g. root:apache)\n";
2423 print " 2. Since the webserver is not able to list the files in the\n";
2424 print " content is also impossible for the webserver to delete files\n";
2425 print " lying around there for too long.\n";
2426 print " 3. It should probably be another directory than the data\n";
2427 print " directory specified in option 3.\n";
2428 print "\n";
2429
2430 print "[$WHT$attachment_dir$NRM]: $WHT";
2431 $new_attachment_dir = <STDIN>;
2432 if ( $new_attachment_dir eq "\n" ) {
2433 $new_attachment_dir = $attachment_dir;
2434 } else {
2435 $new_attachment_dir =~ s/[\r\n]//g;
2436 }
2437 if ( $new_attachment_dir =~ /^\s*$/ ) {
2438 $new_attachment_dir = "";
2439 } else {
2440 $new_attachment_dir =~ s/\/*$//g;
2441 $new_attachment_dir =~ s/$/\//g;
2442 }
2443 return $new_attachment_dir;
2444 }
2445
2446 sub command33c {
2447 print "The directory hash level setting allows you to configure the level\n";
2448 print "of hashing that SquirrelMail employs in your data and attachment\n";
2449 print "directories. This value must be an integer ranging from 0 to 4.\n";
2450 print "When this value is set to 0, SquirrelMail will simply store all\n";
2451 print "files as normal in the data and attachment directories. However,\n";
2452 print "when set to a value from 1 to 4, a simple hashing scheme will be\n";
2453 print "used to organize the files in this directory. In short, the crc32\n";
2454 print "value for a username will be computed. Then, up to the first 4\n";
2455 print "digits of the hash, as set by this configuration value, will be\n";
2456 print "used to directory hash the files for that user in the data and\n";
2457 print "attachment directory. This allows for better performance on\n";
2458 print "servers with larger numbers of users.\n";
2459 print "\n";
2460
2461 print "[$WHT$dir_hash_level$NRM]: $WHT";
2462 $new_dir_hash_level = <STDIN>;
2463 if ( $new_dir_hash_level eq "\n" ) {
2464 $new_dir_hash_level = $dir_hash_level;
2465 } else {
2466 $new_dir_hash_level =~ s/[\r\n]//g;
2467 }
2468 if ( ( int($new_dir_hash_level) < 0 )
2469 || ( int($new_dir_hash_level) > 4 )
2470 || !( int($new_dir_hash_level) eq $new_dir_hash_level ) ) {
2471 print "Invalid Directory Hash Level.\n";
2472 print "Value must be an integer ranging from 0 to 4\n";
2473 print "Hit enter to continue.\n";
2474 $enter_key = <STDIN>;
2475
2476 $new_dir_hash_level = $dir_hash_level;
2477 }
2478
2479 return $new_dir_hash_level;
2480 }
2481
2482 sub command35 {
2483 print "This is the default size (in pixels) of the left folder list.\n";
2484 print "Default is 200, but you can set it to whatever you wish. This\n";
2485 print "is a user preference, so this will only show up as their default.\n";
2486 print "\n";
2487 print "[$WHT$default_left_size$NRM]: $WHT";
2488 $new_default_left_size = <STDIN>;
2489 if ( $new_default_left_size eq "\n" ) {
2490 $new_default_left_size = $default_left_size;
2491 } else {
2492 $new_default_left_size =~ s/[\r\n]//g;
2493 }
2494 return $new_default_left_size;
2495 }
2496
2497 sub command36 {
2498 print "Some IMAP servers only have lowercase letters in the usernames\n";
2499 print "but they still allow people with uppercase to log in. This\n";
2500 print "causes a problem with the user's preference files. This option\n";
2501 print "transparently changes all usernames to lowercase.";
2502 print "\n";
2503
2504 if ( lc($force_username_lowercase) eq 'true' ) {
2505 $default_value = "y";
2506 } else {
2507 $default_value = "n";
2508 }
2509 print "Convert usernames to lowercase (y/n) [$WHT$default_value$NRM]: $WHT";
2510 $new_show = <STDIN>;
2511 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2512 return 'true';
2513 }
2514 return 'false';
2515 }
2516
2517 sub command37 {
2518 print "";
2519 print "\n";
2520
2521 if ( lc($default_use_priority) eq 'true' ) {
2522 $default_value = "y";
2523 } else {
2524 $default_value = "n";
2525 }
2526
2527 print "Allow users to specify priority of outgoing mail (y/n) [$WHT$default_value$NRM]: $WHT";
2528 $new_show = <STDIN>;
2529 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2530 return 'true';
2531 }
2532 return 'false';
2533 }
2534
2535 sub command38 {
2536 print "";
2537 print "\n";
2538
2539 if ( lc($hide_sm_attributions) eq 'true' ) {
2540 $default_value = "y";
2541 } else {
2542 $default_value = "n";
2543 }
2544
2545 print "Hide SM attributions (y/n) [$WHT$default_value$NRM]: $WHT";
2546 $new_show = <STDIN>;
2547 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2548 return 'true';
2549 }
2550 return 'false';
2551 }
2552
2553 sub command39 {
2554 print "";
2555 print "\n";
2556
2557 if ( lc($default_use_mdn) eq 'true' ) {
2558 $default_value = "y";
2559 } else {
2560 $default_value = "n";
2561 }
2562
2563 print "Enable support for read/delivery receipt support (y/n) [$WHT$default_value$NRM]: $WHT";
2564 $new_show = <STDIN>;
2565 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2566 return 'true';
2567 }
2568 return 'false';
2569 }
2570
2571
2572 sub command310 {
2573 print " In loosely managed environments, you may want to allow users
2574 to edit their full name and email address. In strictly managed
2575 environments, you may want to force users to use the name
2576 and email address assigned to them.
2577
2578 'y' - allow a user to edit their full name and email address,
2579 'n' - users must use the assigned values.
2580
2581 ";
2582
2583 if ( lc($edit_identity) eq 'true' ) {
2584 $default_value = "y";
2585 } else {
2586 $default_value = "n";
2587 }
2588 print "Allow editing of user's identity? (y/n) [$WHT$default_value$NRM]: $WHT";
2589 $new_edit = <STDIN>;
2590 if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2591 $edit_identity = 'true';
2592 $edit_name = 'true';
2593 $edit_reply_to = 'true';
2594 $hide_auth_header = command311c();
2595 } else {
2596 $edit_identity = 'false';
2597 $edit_name = command311();
2598 $edit_reply_to = command311b();
2599 $hide_auth_header = command311c();
2600 }
2601 return $edit_identity;
2602 }
2603
2604 sub command311 {
2605 print "$NRM";
2606 print "\n Given that users are not allowed to modify their
2607 email address, can they edit their full name?
2608
2609 ";
2610
2611 if ( lc($edit_name) eq 'true' ) {
2612 $default_value = "y";
2613 } else {
2614 $default_value = "n";
2615 }
2616 print "Allow the user to edit their full name? (y/n) [$WHT$default_value$NRM]: $WHT";
2617 $new_edit = <STDIN>;
2618 if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2619 $edit_name = 'true';
2620 } else {
2621 $edit_name = 'false';
2622 }
2623 return $edit_name;
2624 }
2625
2626 sub command311b {
2627 print "$NRM";
2628 print "\n Given that users are not allowed to modify their
2629 email address, can they edit their reply-to address?
2630
2631 ";
2632
2633 if ( lc($edit_reply_to) eq 'true' ) {
2634 $default_value = "y";
2635 } else {
2636 $default_value = "n";
2637 }
2638 print "Allow the user to edit their reply-to address? (y/n) [$WHT$default_value$NRM]: $WHT";
2639 $new_edit = <STDIN>;
2640 if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2641 $edit_reply_to = 'true';
2642 } else {
2643 $edit_reply_to = 'false';
2644 }
2645 return $edit_reply_to;
2646 }
2647
2648 sub command311c {
2649 print "$NRM";
2650 print "\n SquirrelMail adds username information to every outgoing email in
2651 order to prevent possible sender forging by users that are allowed
2652 to change their email and/or full name.
2653
2654 You can remove user information from this header (y) if you think
2655 that it violates privacy or security.
2656
2657 Note: If users are allowed to change their email addresses, this
2658 setting will make it difficult to determine who sent what where.
2659 Use at your own risk.
2660
2661 Note: If you have defined a header encryption key in your SMTP or
2662 Sendmail settings (see the \"Server Settings\" option page), this
2663 setting is ignored because all user information in outgoing messages
2664 is encoded.
2665
2666 ";
2667
2668 if ( lc($hide_auth_header) eq "true" ) {
2669 $default_value = "y";
2670 } else {
2671 $default_value = "n";
2672 }
2673 print "Remove username from email headers? (y/n) [$WHT$default_value$NRM]: $WHT";
2674 $new_header = <STDIN>;
2675 if ( ( $new_header =~ /^y\n/i ) || ( ( $new_header =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2676 $hide_auth_header = "true";
2677 } else {
2678 $hide_auth_header = "false";
2679 }
2680 return $hide_auth_header;
2681 }
2682
2683 sub command312 {
2684 print "This option allows you to disable server side thread sorting if your server \n";
2685 print "declares THREAD support, but you don't want to provide threading options \n";
2686 print "to end users or THREAD extension is broken or extension does not work with \n";
2687 print "options used by SquirrelMail. Option is not used, if THREAD extension is \n";
2688 print "not declared in IMAP CAPABILITY.\n";
2689 print "\n";
2690
2691 if ( lc($disable_thread_sort) eq 'true' ) {
2692 $default_value = "y";
2693 } else {
2694 $default_value = "n";
2695 }
2696 print "Disable server side thread sorting? (y/n) [$WHT$default_value$NRM]: $WHT";
2697 $disable_thread_sort = <STDIN>;
2698 if ( ( $disable_thread_sort =~ /^y\n/i ) || ( ( $disable_thread_sort =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2699 $disable_thread_sort = 'true';
2700 } else {
2701 $disable_thread_sort = 'false';
2702 }
2703 return $disable_thread_sort;
2704 }
2705
2706 sub command313 {
2707 print "This option allows you to disable server side sorting if your server declares \n";
2708 print "SORT support, but SORT extension is broken or does not work with options \n";
2709 print "used by SquirrelMail. Option is not used, if SORT extension is not declared \n";
2710 print "in IMAP CAPABILITY.\n";
2711 print "\n";
2712 print "It is strongly recommended to keep server side sorting enabled, if your ";
2713 print "IMAP server supports it.";
2714 print "\n";
2715
2716 if ( lc($disable_server_sort) eq 'true' ) {
2717 $default_value = "y";
2718 } else {
2719 $default_value = "n";
2720 }
2721 print "Disable server-side sorting? (y/n) [$WHT$default_value$NRM]: $WHT";
2722 $disable_server_sort = <STDIN>;
2723 if ( ( $disable_server_sort =~ /^y\n/i ) || ( ( $disable_server_sort =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2724 $disable_server_sort = 'true';
2725 } else {
2726 $disable_server_sort = 'false';
2727 }
2728 return $disable_server_sort;
2729 }
2730
2731 sub command314 {
2732 print "This option allows you to choose if SM uses charset search\n";
2733 print "Your IMAP server must support the SEARCH CHARSET command for this to work\n";
2734 print "\n";
2735
2736 if ( lc($allow_charset_search) eq 'true' ) {
2737 $default_value = "y";
2738 } else {
2739 $default_value = "n";
2740 }
2741 print "Allow charset searching? (y/n) [$WHT$default_value$NRM]: $WHT";
2742 $allow_charset_search = <STDIN>;
2743 if ( ( $allow_charset_search =~ /^y\n/i ) || ( ( $allow_charset_search =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2744 $allow_charset_search = 'true';
2745 } else {
2746 $allow_charset_search = 'false';
2747 }
2748 return $allow_charset_search;
2749 }
2750
2751 # command315 (UID support) obsoleted.
2752
2753 # advanced search option
2754 sub command316 {
2755 print "This option allows you to control the use of advanced search form.\n";
2756 print " 0 = enable basic search only\n";
2757 print " 1 = enable advanced search only\n";
2758 print " 2 = enable both\n";
2759 print "\n";
2760
2761 print "Allowed search (0,1,2)? [$WHT$allow_advanced_search$NRM]: $WHT";
2762 $new_allow_advanced_search = <STDIN>;
2763 if ( $new_allow_advanced_search =~ /^[012]\n/i ) {
2764 $allow_advanced_search = $new_allow_advanced_search;
2765 }
2766 $allow_advanced_search =~ s/[\r\n]//g;
2767 return $allow_advanced_search;
2768 }
2769
2770
2771 sub command317 {
2772 print "This option allows you to change the name of the PHP session used\n";
2773 print "by SquirrelMail. Unless you know what you are doing, you probably\n";
2774 print "don't need or want to change this from the default of SQMSESSID.\n";
2775 print "[$WHT$session_name$NRM]: $WHT";
2776 $new_session_name = <STDIN>;
2777 chomp($new_session_name);
2778 if ( $new_session_name eq "" ) {
2779 $new_session_name = $session_name;
2780 }
2781 return $new_session_name;
2782 }
2783
2784 # time zone config (since 1.5.1)
2785 sub command318 {
2786 print "This option allows you to control the use of time zones.\n";
2787 print " 0 = (default) standard, GNU C time zone names\n";
2788 print " 1 = strict, generic time zone codes with offsets\n";
2789 print " 2 = custom, GNU C time zones loaded from config/timezones.php\n";
2790 print " 3 = custom strict, generic time zone codes with offsets loaded \n";
2791 print " from config/timezones.php\n";
2792 print "See SquirrelMail documentation about format of config/timezones.php file.\n";
2793 print "\n";
2794
2795 print "Desired time zone configuration (0,1,2,3)? [$WHT$time_zone_type$NRM]: $WHT";
2796 $new_time_zone_type = <STDIN>;
2797 if ( $new_time_zone_type =~ /^[0123]\n/i ) {
2798 $time_zone_type = $new_time_zone_type;
2799 } else {
2800 print "\nInvalid configuration value.\n";
2801 print "\nPress enter to continue...";
2802 $tmp = <STDIN>;
2803 }
2804 $time_zone_type =~ s/[\r\n]//g;
2805 return $time_zone_type;
2806 }
2807
2808 # set the location base for redirects (since 1.5.2)
2809 sub command_config_location_base {
2810 print "Here you can set the base part of the SquirrelMail URL.\n";
2811 print "It is normally autodetected but if that fails, use this\n";
2812 print "option to override.\n";
2813 print "It should contain only the protocol and hostname/port parts\n";
2814 print "of the URL; the full path will be appended automatically.\n\n";
2815 print "Examples:\nhttp://webmail.example.org\nhttp://webmail.example.com:8080\nhttps://webmail.example.com:6691\n\n";
2816 print "Do not add any path elements.\n";
2817
2818 print "URL base? [" .$WHT."autodetect$NRM]: $WHT";
2819 $new_config_location_base = <STDIN>;
2820 chomp($new_config_location_base);
2821 $config_location_base = $new_config_location_base;
2822
2823 return $config_location_base;
2824 }