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