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