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