Proofreading.
[squirrelmail.git] / config / conf.pl
CommitLineData
23afd0bd 1#!/usr/bin/env perl
bbd30ac8 2# conf.pl
bbd30ac8 3#
47ccfad4 4# Copyright (c) 1999-2006 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############################################################
6614128e 11$conf_pl_version = "1.4.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############################################################
bbd30ac8 46# First, lets read in the data already in there...
598294a7 47############################################################
eaace00e 48if ( -e "config.php" ) {
49 open( FILE, "config.php" );
50 while ( $line = <FILE> ) {
51 $line =~ s/^\s+//;
52 $line =~ s/^\$//;
53 $var = $line;
54
55 $var =~ s/=/EQUALS/;
85645192 56 if ( $var =~ /^([a-z])/i ) {
eaace00e 57 @o = split ( /\s*EQUALS\s*/, $var );
58 if ( $o[0] eq "config_version" ) {
85645192 59 $o[1] =~ s/[\n\r]//g;
60 $o[1] =~ s/[\'\"];\s*$//;
eaace00e 61 $o[1] =~ s/;$//;
85645192 62 $o[1] =~ s/^[\'\"]//;
eaace00e 63
64 $config_version = $o[1];
65 close(FILE);
66 }
67 }
68 }
69 close(FILE);
70
71 if ( $config_version ne $conf_pl_version ) {
f8c17cdd 72 clear_screen();
eaace00e 73 print $WHT. "WARNING:\n" . $NRM;
74 print " The file \"config/config.php\" was found, but it is for\n";
75 print " an older version of SquirrelMail. It is possible to still\n";
76 print " read the defaults from this file but be warned that many\n";
77 print " preferences change between versions. It is recommended that\n";
78 print " you start with a clean config.php for each upgrade that you\n";
79 print " do. To do this, just move config/config.php out of the way.\n";
80 print "\n";
81 print "Continue loading with the old config.php [y/N]? ";
82 $ctu = <STDIN>;
83
84 if ( ( $ctu !~ /^y\n/i ) || ( $ctu =~ /^\n/ ) ) {
85 exit;
86 }
87
88 print "\nDo you want me to stop warning you [y/N]? ";
89 $ctu = <STDIN>;
90 if ( $ctu =~ /^y\n/i ) {
91 $print_config_version = $conf_pl_version;
92 } else {
93 $print_config_version = $config_version;
94 }
95 } else {
96 $print_config_version = $config_version;
97 }
98
99 $config = 1;
100 open( FILE, "config.php" );
101} elsif ( -e "config_default.php" ) {
102 open( FILE, "config_default.php" );
103 while ( $line = <FILE> ) {
104 $line =~ s/^\s+//;
105 $line =~ s/^\$//;
106 $var = $line;
107
108 $var =~ s/=/EQUALS/;
85645192 109 if ( $var =~ /^([a-z])/i ) {
eaace00e 110 @o = split ( /\s*EQUALS\s*/, $var );
111 if ( $o[0] eq "config_version" ) {
85645192 112 $o[1] =~ s/[\n\r]//g;
113 $o[1] =~ s/[\'\"];\s*$//;
eaace00e 114 $o[1] =~ s/;$//;
85645192 115 $o[1] =~ s/^[\'\"]//;
eaace00e 116
117 $config_version = $o[1];
118 close(FILE);
119 }
120 }
121 }
122 close(FILE);
123
124 if ( $config_version ne $conf_pl_version ) {
f8c17cdd 125 clear_screen();
eaace00e 126 print $WHT. "WARNING:\n" . $NRM;
127 print " You are trying to use a 'config_default.php' from an older\n";
128 print " version of SquirrelMail. This is HIGHLY unrecommended. You\n";
129 print " should get the 'config_default.php' that matches the version\n";
130 print " of SquirrelMail that you are running. You can get this from\n";
131 print " the SquirrelMail web page by going to the following URL:\n";
132 print " http://www.squirrelmail.org.\n";
133 print "\n";
134 print "Continue loading with old config_default.php (a bad idea) [y/N]? ";
135 $ctu = <STDIN>;
136
137 if ( ( $ctu !~ /^y\n/i ) || ( $ctu =~ /^\n/ ) ) {
138 exit;
139 }
140
141 print "\nDo you want me to stop warning you [y/N]? ";
142 $ctu = <STDIN>;
143 if ( $ctu =~ /^y\n/i ) {
144 $print_config_version = $conf_pl_version;
145 } else {
146 $print_config_version = $config_version;
147 }
148 } else {
149 $print_config_version = $config_version;
150 }
151 $config = 2;
152 open( FILE, "config_default.php" );
1e0628fb 153} else {
eaace00e 154 print "No configuration file found. Please get config_default.php\n";
155 print "or config.php before running this again. This program needs\n";
156 print "a default config file to get default values.\n";
157 exit;
bbd30ac8 158}
159
a3439b27 160# Read and parse the current configuration file
161# (either config.php or config_default.php).
eaace00e 162while ( $line = <FILE> ) {
598294a7 163 $line =~ s/^\s+//;
eaace00e 164 $line =~ s/^\$//;
165 $var = $line;
166
167 $var =~ s/=/EQUALS/;
85645192 168 if ( $var =~ /^([a-z])/i ) {
eaace00e 169 @options = split ( /\s*EQUALS\s*/, $var );
85645192 170 $options[1] =~ s/[\n\r]//g;
171 $options[1] =~ s/[\'\"];\s*$//;
eaace00e 172 $options[1] =~ s/;$//;
85645192 173 $options[1] =~ s/^[\'\"]//;
ed65d11b 174 # de-escape escaped strings
175 $options[1] =~ s/\\'/'/g;
176 $options[1] =~ s/\\\\/\\/g;
eaace00e 177
85645192 178 if ( $options[0] =~ /^theme\[[0-9]+\]\[['"]PATH['"]\]/ ) {
eaace00e 179 $sub = $options[0];
85645192 180 $sub =~ s/\]\[['"]PATH['"]\]//;
eaace00e 181 $sub =~ s/.*\[//;
182 if ( -e "../themes" ) {
183 $options[1] =~ s/^\.\.\/config/\.\.\/themes/;
a3439b27 184 }
8bd9e0dd 185 $theme_path[$sub] = &change_to_rel_path($options[1]);
85645192 186 } elsif ( $options[0] =~ /^theme\[[0-9]+\]\[['"]NAME['"]\]/ ) {
eaace00e 187 $sub = $options[0];
85645192 188 $sub =~ s/\]\[['"]NAME['"]\]//;
eaace00e 189 $sub =~ s/.*\[//;
190 $theme_name[$sub] = $options[1];
85bacb8f 191 } elsif ( $options[0] =~ /^aTemplateSet\[[0-9]+\]\[['"]PATH['"]\]/ ) {
192 $sub = $options[0];
193 $sub =~ s/\]\[['"]PATH['"]\]//;
194 $sub =~ s/.*\[//;
195 if ( -e "../templates" ) {
196 $options[1] =~ s/^\.\.\/config/\.\.\/templates/;
197 }
198 $templateset_path[$sub] = &change_to_rel_path($options[1]);
199 } elsif ( $options[0] =~ /^aTemplateSet\[[0-9]+\]\[['"]NAME['"]\]/ ) {
200 $sub = $options[0];
201 $sub =~ s/\]\[['"]NAME['"]\]//;
202 $sub =~ s/.*\[//;
203 $templateset_name[$sub] = $options[1];
a1b036d6 204 } elsif ( $options[0] =~ /^plugins\[[0-9]*\]/ ) {
eaace00e 205 $sub = $options[0];
206 $sub =~ s/\]//;
207 $sub =~ s/^plugins\[//;
a1b036d6 208 if ($sub eq '') {
209 push @plugins, $options[1];
210 } else {
211 $plugins[$sub] = $options[1];
212 }
81132de8 213 } elsif ($options[0] =~ /^fontsets\[\'[a-z]*\'\]/) {
214 # parse associative $fontsets array
215 $sub = $options[0];
216 $sub =~ s/\'\]//;
217 $sub =~ s/^fontsets\[\'//;
218 $fontsets{$sub} = $options[1];
eaace00e 219 } elsif ( $options[0] =~ /^ldap_server\[[0-9]+\]/ ) {
220 $sub = $options[0];
221 $sub =~ s/\]//;
222 $sub =~ s/^ldap_server\[//;
223 $continue = 0;
224 while ( ( $tmp = <FILE> ) && ( $continue != 1 ) ) {
225 if ( $tmp =~ /\);\s*$/ ) {
226 $continue = 1;
227 }
228
85645192 229 if ( $tmp =~ /^\s*[\'\"]host[\'\"]/i ) {
230 $tmp =~ s/^\s*[\'\"]host[\'\"]\s*=>\s*[\'\"]//i;
231 $tmp =~ s/[\'\"],?\s*$//;
232 $tmp =~ s/[\'\"]\);\s*$//;
eaace00e 233 $host = $tmp;
85645192 234 } elsif ( $tmp =~ /^\s*[\'\"]base[\'\"]/i ) {
235 $tmp =~ s/^\s*[\'\"]base[\'\"]\s*=>\s*[\'\"]//i;
236 $tmp =~ s/[\'\"],?\s*$//;
237 $tmp =~ s/[\'\"]\);\s*$//;
eaace00e 238 $base = $tmp;
85645192 239 } elsif ( $tmp =~ /^\s*[\'\"]charset[\'\"]/i ) {
240 $tmp =~ s/^\s*[\'\"]charset[\'\"]\s*=>\s*[\'\"]//i;
241 $tmp =~ s/[\'\"],?\s*$//;
242 $tmp =~ s/[\'\"]\);\s*$//;
eaace00e 243 $charset = $tmp;
85645192 244 } elsif ( $tmp =~ /^\s*[\'\"]port[\'\"]/i ) {
245 $tmp =~ s/^\s*[\'\"]port[\'\"]\s*=>\s*[\'\"]?//i;
246 $tmp =~ s/[\'\"]?,?\s*$//;
247 $tmp =~ s/[\'\"]?\);\s*$//;
eaace00e 248 $port = $tmp;
85645192 249 } elsif ( $tmp =~ /^\s*[\'\"]maxrows[\'\"]/i ) {
250 $tmp =~ s/^\s*[\'\"]maxrows[\'\"]\s*=>\s*[\'\"]?//i;
251 $tmp =~ s/[\'\"]?,?\s*$//;
252 $tmp =~ s/[\'\"]?\);\s*$//;
eaace00e 253 $maxrows = $tmp;
43397658 254 } elsif ( $tmp =~ /^\s*[\'\"]filter[\'\"]/i ) {
255 $tmp =~ s/^\s*[\'\"]filter[\'\"]\s*=>\s*[\'\"]?//i;
256 $tmp =~ s/[\'\"]?,?\s*$//;
257 $tmp =~ s/[\'\"]?\);\s*$//;
258 $filter = $tmp;
85645192 259 } elsif ( $tmp =~ /^\s*[\'\"]name[\'\"]/i ) {
260 $tmp =~ s/^\s*[\'\"]name[\'\"]\s*=>\s*[\'\"]//i;
261 $tmp =~ s/[\'\"],?\s*$//;
262 $tmp =~ s/[\'\"]\);\s*$//;
eaace00e 263 $name = $tmp;
85645192 264 } elsif ( $tmp =~ /^\s*[\'\"]binddn[\'\"]/i ) {
265 $tmp =~ s/^\s*[\'\"]binddn[\'\"]\s*=>\s*[\'\"]//i;
266 $tmp =~ s/[\'\"],?\s*$//;
267 $tmp =~ s/[\'\"]\);\s*$//;
30e9932c 268 $binddn = $tmp;
85645192 269 } elsif ( $tmp =~ /^\s*[\'\"]bindpw[\'\"]/i ) {
270 $tmp =~ s/^\s*[\'\"]bindpw[\'\"]\s*=>\s*[\'\"]//i;
271 $tmp =~ s/[\'\"],?\s*$//;
272 $tmp =~ s/[\'\"]\);\s*$//;
30e9932c 273 $bindpw = $tmp;
85645192 274 } elsif ( $tmp =~ /^\s*[\'\"]protocol[\'\"]/i ) {
275 $tmp =~ s/^\s*[\'\"]protocol[\'\"]\s*=>\s*[\'\"]?//i;
276 $tmp =~ s/[\'\"]?,?\s*$//;
277 $tmp =~ s/[\'\"]?\);\s*$//;
30e9932c 278 $protocol = $tmp;
43397658 279 } elsif ( $tmp =~ /^\s*[\'\"]limit_scope[\'\"]/i ) {
280 $tmp =~ s/^\s*[\'\"]limit_scope[\'\"]\s*=>\s*[\'\"]?//i;
281 $tmp =~ s/[\'\"]?,?\s*$//;
282 $tmp =~ s/[\'\"]?\);\s*$//;
283 $limit_scope = $tmp;
327e2d96 284 } elsif ( $tmp =~ /^\s*[\'\"]listing[\'\"]/i ) {
285 $tmp =~ s/^\s*[\'\"]listing[\'\"]\s*=>\s*[\'\"]?//i;
286 $tmp =~ s/[\'\"]?,?\s*$//;
287 $tmp =~ s/[\'\"]?\);\s*$//;
288 $listing = $tmp;
593370a4 289 } elsif ( $tmp =~ /^\s*[\'\"]search_tree[\'\"]/i ) {
290 $tmp =~ s/^\s*[\'\"]search_tree[\'\"]\s*=>\s*[\'\"]?//i;
291 $tmp =~ s/[\'\"]?,?\s*$//;
292 $tmp =~ s/[\'\"]?\);\s*$//;
293 $search_tree = $tmp;
294 } elsif ( $tmp =~ /^\s*[\'\"]starttls[\'\"]/i ) {
295 $tmp =~ s/^\s*[\'\"]starttls[\'\"]\s*=>\s*[\'\"]?//i;
296 $tmp =~ s/[\'\"]?,?\s*$//;
297 $tmp =~ s/[\'\"]?\);\s*$//;
298 $starttls = $tmp;
eaace00e 299 }
a3439b27 300 }
eaace00e 301 $ldap_host[$sub] = $host;
302 $ldap_base[$sub] = $base;
303 $ldap_name[$sub] = $name;
304 $ldap_port[$sub] = $port;
305 $ldap_maxrows[$sub] = $maxrows;
43397658 306 $ldap_filter[$sub] = $filter;
eaace00e 307 $ldap_charset[$sub] = $charset;
30e9932c 308 $ldap_binddn[$sub] = $binddn;
309 $ldap_bindpw[$sub] = $bindpw;
310 $ldap_protocol[$sub] = $protocol;
43397658 311 $ldap_limit_scope[$sub] = $limit_scope;
327e2d96 312 $ldap_listing[$sub] = $listing;
593370a4 313 $ldap_search_tree[$sub] = $search_tree;
314 $ldap_starttls[$sub] = $starttls;
8bd9e0dd 315 } elsif ( $options[0] =~ /^(data_dir|attachment_dir|theme_css|org_logo|signout_page)$/ ) {
316 ${ $options[0] } = &change_to_rel_path($options[1]);
eaace00e 317 } else {
318 ${ $options[0] } = $options[1];
319 }
320 }
bbd30ac8 321}
1a7a2fcc 322close FILE;
0ae4c1f2 323
a15f9d93 324# FIXME: unknown introduction date
35aaf666 325$useSendmail = 'false' if ( lc($useSendmail) ne 'true' );
326$sendmail_path = "/usr/sbin/sendmail" if ( !$sendmail_path );
327$pop_before_smtp = 'false' if ( !$pop_before_smtp );
328$default_unseen_notify = 2 if ( !$default_unseen_notify );
329$default_unseen_type = 1 if ( !$default_unseen_type );
330$config_use_color = 0 if ( !$config_use_color );
331$invert_time = 'false' if ( !$invert_time );
332$force_username_lowercase = 'false' if ( !$force_username_lowercase );
333$optional_delimiter = "detect" if ( !$optional_delimiter );
334$auto_create_special = 'false' if ( !$auto_create_special );
335$default_use_priority = 'true' if ( !$default_use_priority );
336$hide_sm_attributions = 'false' if ( !$hide_sm_attributions );
337$default_use_mdn = 'true' if ( !$default_use_mdn );
338$delete_folder = 'false' if ( !$delete_folder );
339$noselect_fix_enable = 'false' if ( !$noselect_fix_enable );
340$frame_top = "_top" if ( !$frame_top );
341$provider_uri = '' if ( !$provider_uri );
342$provider_name = '' if ( !$provider_name );
343$edit_identity = 'true' if ( !$edit_identity );
344$edit_name = 'true' if ( !$edit_name );
35aaf666 345$no_list_for_subscribe = 'false' if ( !$no_list_for_subscribe );
346$allow_charset_search = 'true' if ( !$allow_charset_search );
66bfb27b 347$allow_advanced_search = 0 if ( !$allow_advanced_search) ;
35aaf666 348$prefs_user_field = 'user' if ( !$prefs_user_field );
349$prefs_key_field = 'prefkey' if ( !$prefs_key_field );
350$prefs_val_field = 'prefval' if ( !$prefs_val_field );
a15f9d93 351$session_name = 'SQMSESSID' if ( !$session_name );
352$skip_SM_header = 'false' if ( !$skip_SM_header );
353$default_use_javascript_addr_book = 'false' if (! $default_use_javascript_addr_book);
354
355# since 1.4.0
35aaf666 356$use_smtp_tls= 'false' if ( !$use_smtp_tls);
357$smtp_auth_mech = 'none' if ( !$smtp_auth_mech );
358$use_imap_tls = 'false' if ( !$use_imap_tls );
359$imap_auth_mech = 'login' if ( !$imap_auth_mech );
81132de8 360
71d3f882 361# since 1.5.0
35aaf666 362$show_alternative_names = 'false' if ( !$show_alternative_names );
5ba5dc8e 363# $available_languages option available only in 1.5.0. removed due to $languages
364# implementation changes. options are provided by limit_languages plugin
365# $available_languages = 'all' if ( !$available_languages );
f03f6ee7 366$aggressive_decoding = 'false' if ( !$aggressive_decoding );
35aaf666 367$advanced_tree = 'false' if ( !$advanced_tree );
35aaf666 368$use_php_recode = 'false' if ( !$use_php_recode );
369$use_php_iconv = 'false' if ( !$use_php_iconv );
81132de8 370
71d3f882 371# since 1.5.1
372$use_icons = 'false' if ( !$use_icons );
ef6ad2a1 373$use_iframe = 'false' if ( !$use_iframe );
71d3f882 374$lossy_encoding = 'false' if ( !$lossy_encoding );
375$allow_remote_configtest = 'false' if ( !$allow_remote_configtest );
376$addrbook_global_table = 'global_abook' if ( !$addrbook_global_table );
377$addrbook_global_writeable = 'false' if ( !$addrbook_global_writeable );
378$addrbook_global_listing = 'false' if ( !$addrbook_global_listing );
379$abook_global_file = '' if ( !$abook_global_file);
380$abook_global_file_writeable = 'false' if ( !$abook_global_file_writeable);
381$abook_global_file_listing = 'true' if ( !$abook_global_file_listing );
432db2fc 382$encode_header_key = '' if ( !$encode_header_key );
383$hide_auth_header = 'false' if ( !$hide_auth_header );
ee20a285 384$time_zone_type = '0' if ( !$time_zone_type );
06316c07 385$prefs_user_size = 128 if ( !$prefs_user_size );
386$prefs_key_size = 64 if ( !$prefs_key_size );
387$prefs_val_size = 65536 if ( !$prefs_val_size );
81132de8 388
fd7ab795 389# add qmail-inject test here for backwards compatibility
85bacb8f 390if ( !$sendmail_args && $sendmail_path =~ /qmail-inject/ ) {
fd7ab795 391 $sendmail_args = '';
392} elsif ( !$sendmail_args ) {
393 $sendmail_args = '-i -t';
394}
39d3ec89 395
81132de8 396$default_fontsize = '' if ( !$default_fontsize);
397$default_fontset = '' if ( !$default_fontset);
398if ( !%fontsets) {
399 %fontsets = ('serif', 'serif',
400 'sans', 'helvetica,arial,sans-serif',
401 'comicsans', 'comic sans ms,sans-serif',
402 'tahoma', 'tahoma,sans-serif',
403 'verasans', 'bitstream vera sans,verdana,sans-serif');
404}
405
a15f9d93 406# $use_imap_tls and $use_smtp_tls are switched to integer since 1.5.1
407$use_imap_tls = 0 if ( $use_imap_tls eq 'false');
408$use_imap_tls = 1 if ( $use_imap_tls eq 'true');
409$use_smtp_tls = 0 if ( $use_smtp_tls eq 'false');
410$use_smtp_tls = 1 if ( $use_smtp_tls eq 'true');
801da708 411# sorting options changed names and reversed values in 1.5.1
412$disable_thread_sort = 'false' if ( !$disable_thread_sort );
413$disable_server_sort = 'false' if ( !$disable_server_sort );
81132de8 414
eaace00e 415if ( $ARGV[0] eq '--install-plugin' ) {
416 print "Activating plugin " . $ARGV[1] . "\n";
ebd13f55 417 push @plugins, $ARGV[1];
418 save_data();
419 exit(0);
eaace00e 420} elsif ( $ARGV[0] eq '--remove-plugin' ) {
421 print "Removing plugin " . $ARGV[1] . "\n";
ebd13f55 422 foreach $plugin (@plugins) {
eaace00e 423 if ( $plugin ne $ARGV[1] ) {
424 push @newplugins, $plugin;
ebd13f55 425 }
426 }
427 @plugins = @newplugins;
428 save_data();
429 exit(0);
430}
431
5b6ae78a 432#####################################################################################
eaace00e 433if ( $config_use_color == 1 ) {
434 $WHT = "\x1B[37;1m";
435 $NRM = "\x1B[0m";
0ecb47e5 436} else {
eaace00e 437 $WHT = "";
438 $NRM = "";
439 $config_use_color = 2;
440}
441
8b5c49cd 442while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) {
f8c17cdd 443 clear_screen();
eaace00e 444 print $WHT. "SquirrelMail Configuration : " . $NRM;
445 if ( $config == 1 ) { print "Read: config.php"; }
446 elsif ( $config == 2 ) { print "Read: config_default.php"; }
447 print " ($print_config_version)\n";
448 print "---------------------------------------------------------\n";
449
450 if ( $menu == 0 ) {
451 print $WHT. "Main Menu --\n" . $NRM;
452 print "1. Organization Preferences\n";
453 print "2. Server Settings\n";
454 print "3. Folder Defaults\n";
455 print "4. General Options\n";
85bacb8f 456 print "5. Templates\n";
4272758c 457 print "6. Address Books\n";
eaace00e 458 print "7. Message of the Day (MOTD)\n";
459 print "8. Plugins\n";
460 print "9. Database\n";
598294a7 461 print "10. Language settings\n";
462 print "11. Tweaks\n";
eaace00e 463 print "\n";
464 print "D. Set pre-defined settings for specific IMAP servers\n";
465 print "\n";
466 } elsif ( $menu == 1 ) {
467 print $WHT. "Organization Preferences\n" . $NRM;
b6e0c3b6 468 print "1. Organization Name : $WHT$org_name$NRM\n";
469 print "2. Organization Logo : $WHT$org_logo$NRM\n";
470 print "3. Org. Logo Width/Height : $WHT($org_logo_width/$org_logo_height)$NRM\n";
471 print "4. Organization Title : $WHT$org_title$NRM\n";
472 print "5. Signout Page : $WHT$signout_page$NRM\n";
39d3ec89 473 print "6. Top Frame : $WHT$frame_top$NRM\n";
474 print "7. Provider link : $WHT$provider_uri$NRM\n";
475 print "8. Provider name : $WHT$provider_name$NRM\n";
0ae4c1f2 476
eaace00e 477 print "\n";
dcc1cc82 478 print "R Return to Main Menu\n";
eaace00e 479 } elsif ( $menu == 2 ) {
47a29326 480 print $WHT. "Server Settings\n\n" . $NRM;
481 print $WHT . "General" . $NRM . "\n";
482 print "-------\n";
483 print "1. Domain : $WHT$domain$NRM\n";
484 print "2. Invert Time : $WHT$invert_time$NRM\n";
485 print "3. Sendmail or SMTP : $WHT";
35aaf666 486 if ( lc($useSendmail) eq 'true' ) {
eaace00e 487 print "Sendmail";
488 } else {
489 print "SMTP";
490 }
491 print "$NRM\n";
47a29326 492 print "\n";
598294a7 493
47a29326 494 if ( $show_imap_settings ) {
495 print $WHT . "IMAP Settings". $NRM . "\n--------------\n";
496 print "4. IMAP Server : $WHT$imapServerAddress$NRM\n";
497 print "5. IMAP Port : $WHT$imapPort$NRM\n";
498 print "6. Authentication type : $WHT$imap_auth_mech$NRM\n";
499 print "7. Secure IMAP (TLS) : $WHT$use_imap_tls$NRM\n";
500 print "8. Server software : $WHT$imap_server_type$NRM\n";
501 print "9. Delimiter : $WHT$optional_delimiter$NRM\n";
502 print "\n";
503 } elsif ( $show_smtp_settings ) {
35aaf666 504 if ( lc($useSendmail) eq 'true' ) {
47a29326 505 print $WHT . "Sendmail" . $NRM . "\n--------\n";
506 print "4. Sendmail Path : $WHT$sendmail_path$NRM\n";
fd7ab795 507 print "5. Sendmail arguments : $WHT$sendmail_args$NRM\n";
508 print "6. Header encryption key : $WHT$encode_header_key$NRM\n";
47a29326 509 print "\n";
510 } else {
511 print $WHT . "SMTP Settings" . $NRM . "\n-------------\n";
512 print "4. SMTP Server : $WHT$smtpServerAddress$NRM\n";
513 print "5. SMTP Port : $WHT$smtpPort$NRM\n";
514 print "6. POP before SMTP : $WHT$pop_before_smtp$NRM\n";
515 print "7. SMTP Authentication : $WHT$smtp_auth_mech$NRM\n";
516 print "8. Secure SMTP (TLS) : $WHT$use_smtp_tls$NRM\n";
432db2fc 517 print "9. Header encryption key : $WHT$encode_header_key$NRM\n";
47a29326 518 print "\n";
519 }
eaace00e 520 }
47a29326 521
522 if ($show_imap_settings == 0) {
523 print "A. Update IMAP Settings : ";
524 print "$WHT$imapServerAddress$NRM:";
525 print "$WHT$imapPort$NRM ";
526 print "($WHT$imap_server_type$NRM)\n";
598294a7 527 }
47a29326 528 if ($show_smtp_settings == 0) {
35aaf666 529 if ( lc($useSendmail) eq 'true' ) {
47a29326 530 print "B. Change Sendmail Config : $WHT$sendmail_path$NRM\n";
531 } else {
532 print "B. Update SMTP Settings : ";
533 print "$WHT$smtpServerAddress$NRM:";
534 print "$WHT$smtpPort$NRM\n";
535 }
536 }
537 if ( $show_smtp_settings || $show_imap_settings )
538 {
598294a7 539 print "H. Hide " .
540 ($show_imap_settings ? "IMAP Server" :
35aaf666 541 (lc($useSendmail) eq 'true') ? "Sendmail" : "SMTP") . " Settings\n";
47a29326 542 }
598294a7 543
eaace00e 544 print "\n";
dcc1cc82 545 print "R Return to Main Menu\n";
eaace00e 546 } elsif ( $menu == 3 ) {
547 print $WHT. "Folder Defaults\n" . $NRM;
548 print "1. Default Folder Prefix : $WHT$default_folder_prefix$NRM\n";
549 print "2. Show Folder Prefix Option : $WHT$show_prefix_option$NRM\n";
550 print "3. Trash Folder : $WHT$trash_folder$NRM\n";
551 print "4. Sent Folder : $WHT$sent_folder$NRM\n";
552 print "5. Drafts Folder : $WHT$draft_folder$NRM\n";
553 print "6. By default, move to trash : $WHT$default_move_to_trash$NRM\n";
554 print "7. By default, move to sent : $WHT$default_move_to_sent$NRM\n";
555 print "8. By default, save as draft : $WHT$default_save_as_draft$NRM\n";
556 print "9. List Special Folders First : $WHT$list_special_folders_first$NRM\n";
557 print "10. Show Special Folders Color : $WHT$use_special_folder_color$NRM\n";
558 print "11. Auto Expunge : $WHT$auto_expunge$NRM\n";
559 print "12. Default Sub. of INBOX : $WHT$default_sub_of_inbox$NRM\n";
560 print "13. Show 'Contain Sub.' Option : $WHT$show_contain_subfolders_option$NRM\n";
561 print "14. Default Unseen Notify : $WHT$default_unseen_notify$NRM\n";
562 print "15. Default Unseen Type : $WHT$default_unseen_type$NRM\n";
563 print "16. Auto Create Special Folders : $WHT$auto_create_special$NRM\n";
2eec12b5 564 print "17. Folder Delete Bypasses Trash : $WHT$delete_folder$NRM\n";
ca85aabe 565 print "18. Enable /NoSelect folder fix : $WHT$noselect_fix_enable$NRM\n";
eaace00e 566 print "\n";
dcc1cc82 567 print "R Return to Main Menu\n";
eaace00e 568 } elsif ( $menu == 4 ) {
569 print $WHT. "General Options\n" . $NRM;
39d3ec89 570 print "1. Data Directory : $WHT$data_dir$NRM\n";
571 print "2. Attachment Directory : $WHT$attachment_dir$NRM\n";
572 print "3. Directory Hash Level : $WHT$dir_hash_level$NRM\n";
573 print "4. Default Left Size : $WHT$default_left_size$NRM\n";
574 print "5. Usernames in Lowercase : $WHT$force_username_lowercase$NRM\n";
575 print "6. Allow use of priority : $WHT$default_use_priority$NRM\n";
576 print "7. Hide SM attributions : $WHT$hide_sm_attributions$NRM\n";
577 print "8. Allow use of receipts : $WHT$default_use_mdn$NRM\n";
432db2fc 578 print "9. Allow editing of identity : $WHT$edit_identity$NRM\n";
579 print " Allow editing of name : $WHT$edit_name$NRM\n";
580 print " Remove username from header : $WHT$hide_auth_header$NRM\n";
11e00010 581 print "10. Disable server thread sort : $WHT$disable_thread_sort$NRM\n";
582 print "11. Disable server-side sorting : $WHT$disable_server_sort$NRM\n";
39d3ec89 583 print "12. Allow server charset search : $WHT$allow_charset_search$NRM\n";
de74555e 584 print "13. Allow advanced search : $WHT$allow_advanced_search$NRM\n";
66bfb27b 585 print "14. PHP session name : $WHT$session_name$NRM\n";
ee20a285 586 print "15. Time zone configuration : $WHT$time_zone_type$NRM\n";
eaace00e 587 print "\n";
dcc1cc82 588 print "R Return to Main Menu\n";
eaace00e 589 } elsif ( $menu == 5 ) {
590 print $WHT. "Themes\n" . $NRM;
85bacb8f 591 print "1. Change Template set\n";
592# for ( $count = 0 ; $count <= $#theme_name/2 ; $count++ ) {
593# $temp_name = $theme_name[$count*2];
594# printf " %s%*s %s\n", $temp_name,
595# 40 - length($temp_name), " ",
596# $theme_name[($count*2)+1];
597# }
eaace00e 598 print "2. CSS File : $WHT$theme_css$NRM\n";
81132de8 599 print "3. Default font size: $WHT$default_fontsize$NRM\n";
600 print "4. Change available font sets\n";
85bacb8f 601 print "5. Change Themes\n";
602
eaace00e 603 print "\n";
dcc1cc82 604 print "R Return to Main Menu\n";
eaace00e 605 } elsif ( $menu == 6 ) {
4272758c 606 print $WHT. "Address Books\n" . $NRM;
607 print "1. Change LDAP Servers\n";
eaace00e 608 for ( $count = 0 ; $count <= $#ldap_host ; $count++ ) {
609 print " > $ldap_host[$count]\n";
610 }
71d3f882 611 print "2. Use Javascript address book search : $WHT$default_use_javascript_addr_book$NRM\n";
ee20a285 612 print "3. Global address book file : $WHT$abook_global_file$NRM\n";
4272758c 613 print "4. Allow writing into global file address book : $WHT$abook_global_file_writeable$NRM\n";
71d3f882 614 print "5. Allow listing of global file address book : $WHT$abook_global_file_listing$NRM\n";
eaace00e 615 print "\n";
dcc1cc82 616 print "R Return to Main Menu\n";
eaace00e 617 } elsif ( $menu == 7 ) {
618 print $WHT. "Message of the Day (MOTD)\n" . $NRM;
619 print "\n$motd\n";
620 print "\n";
621 print "1 Edit the MOTD\n";
622 print "\n";
dcc1cc82 623 print "R Return to Main Menu\n";
eaace00e 624 } elsif ( $menu == 8 ) {
625 print $WHT. "Plugins\n" . $NRM;
626 print " Installed Plugins\n";
627 $num = 0;
628 for ( $count = 0 ; $count <= $#plugins ; $count++ ) {
629 $num = $count + 1;
630 print " $num. $plugins[$count]\n";
631 }
632 print "\n Available Plugins:\n";
633 opendir( DIR, "../plugins" );
634 @files = readdir(DIR);
635 $pos = 0;
636 @unused_plugins = ();
637 for ( $i = 0 ; $i <= $#files ; $i++ ) {
638 if ( -d "../plugins/" . $files[$i] && $files[$i] !~ /^\./ && $files[$i] ne "CVS" ) {
639 $match = 0;
640 for ( $k = 0 ; $k <= $#plugins ; $k++ ) {
641 if ( $plugins[$k] eq $files[$i] ) {
642 $match = 1;
643 }
644 }
645 if ( $match == 0 ) {
646 $unused_plugins[$pos] = $files[$i];
647 $pos++;
648 }
1a7a2fcc 649 }
eaace00e 650 }
651
652 for ( $i = 0 ; $i <= $#unused_plugins ; $i++ ) {
653 $num = $num + 1;
654 print " $num. $unused_plugins[$i]\n";
655 }
656 closedir DIR;
657
eaace00e 658 print "\n";
dcc1cc82 659 print "R Return to Main Menu\n";
eaace00e 660 } elsif ( $menu == 9 ) {
661 print $WHT. "Database\n" . $NRM;
662 print "1. DSN for Address Book : $WHT$addrbook_dsn$NRM\n";
663 print "2. Table for Address Book : $WHT$addrbook_table$NRM\n";
99a6c222 664 print "\n";
eaace00e 665 print "3. DSN for Preferences : $WHT$prefs_dsn$NRM\n";
666 print "4. Table for Preferences : $WHT$prefs_table$NRM\n";
06316c07 667 print "5. Field for username : $WHT$prefs_user_field$NRM ($prefs_user_size)\n";
668 print "6. Field for prefs key : $WHT$prefs_key_field$NRM ($prefs_key_size)\n";
669 print "7. Field for prefs value : $WHT$prefs_val_field$NRM ($prefs_val_size)\n";
eaace00e 670 print "\n";
30e9932c 671 print "8. DSN for Global Address Book : $WHT$addrbook_global_dsn$NRM\n";
672 print "9. Table for Global Address Book : $WHT$addrbook_global_table$NRM\n";
673 print "10. Allow writing into Global Address Book : $WHT$addrbook_global_writeable$NRM\n";
674 print "11. Allow listing of Global Address Book : $WHT$addrbook_global_listing$NRM\n";
675 print "\n";
dcc1cc82 676 print "R Return to Main Menu\n";
39d3ec89 677 } elsif ( $menu == 10 ) {
35aaf666 678 print $WHT. "Language settings\n" . $NRM;
679 print "1. Default Language : $WHT$squirrelmail_default_language$NRM\n";
680 print "2. Default Charset : $WHT$default_charset$NRM\n";
681 print "3. Show alternative language names : $WHT$show_alternative_names$NRM\n";
5ba5dc8e 682 print "4. Enable aggressive decoding : $WHT$aggressive_decoding$NRM\n";
683 print "5. Enable lossy encoding : $WHT$lossy_encoding$NRM\n";
35aaf666 684 print "\n";
dcc1cc82 685 print "R Return to Main Menu\n";
39d3ec89 686 } elsif ( $menu == 11 ) {
35aaf666 687 print $WHT. "Interface tweaks\n" . $NRM;
74d6a0d9 688 print "1. Advanced tree : $WHT$advanced_tree$NRM\n";
689 print "2. Display html mails in iframe : $WHT$use_iframe$NRM\n";
690 print "3. Use Icons : $WHT$use_icons$NRM\n";
35aaf666 691 print "\n";
692 print $WHT. "PHP tweaks\n" . $NRM;
74d6a0d9 693 print "4. Use php recode functions : $WHT$use_php_recode$NRM\n";
694 print "5. Use php iconv functions : $WHT$use_php_iconv$NRM\n";
71d3f882 695 print "\n";
696 print $WHT. "Configuration tweaks\n" . $NRM;
74d6a0d9 697 print "6. Allow remote configtest : $WHT$allow_remote_configtest$NRM\n";
35aaf666 698 print "\n";
dcc1cc82 699 print "R Return to Main Menu\n";
eaace00e 700 }
701 if ( $config_use_color == 1 ) {
1ef64acb 702 print "C Turn color off\n";
eaace00e 703 } else {
1ef64acb 704 print "C Turn color on\n";
eaace00e 705 }
dcc1cc82 706 print "S Save data\n";
707 print "Q Quit\n";
eaace00e 708
709 print "\n";
710 print "Command >> " . $WHT;
711 $command = <STDIN>;
85645192 712 $command =~ s/[\n\r]//g;
eaace00e 713 $command =~ tr/A-Z/a-z/;
714 print "$NRM\n";
715
716 # Read the commands they entered.
717 if ( $command eq "r" ) {
718 $menu = 0;
719 } elsif ( $command eq "s" ) {
720 save_data();
721 print "Press enter to continue...";
722 $tmp = <STDIN>;
723 $saved = 1;
724 } elsif ( ( $command eq "q" ) && ( $saved == 0 ) ) {
725 print "You have not saved your data.\n";
726 print "Save? [" . $WHT . "Y" . $NRM . "/n]: ";
727 $save = <STDIN>;
728 if ( ( $save =~ /^y/i ) || ( $save =~ /^\s*$/ ) ) {
729 save_data();
730 }
731 } elsif ( $command eq "c" ) {
732 if ( $config_use_color == 1 ) {
733 $config_use_color = 2;
734 $WHT = "";
735 $NRM = "";
736 } else {
737 $config_use_color = 1;
738 $WHT = "\x1B[37;1m";
739 $NRM = "\x1B[0m";
740 }
741 } elsif ( $command eq "d" && $menu == 0 ) {
742 set_defaults();
743 } else {
744 $saved = 0;
745 if ( $menu == 0 ) {
39d3ec89 746 if ( ( $command > 0 ) && ( $command < 12 ) ) {
eaace00e 747 $menu = $command;
1a7a2fcc 748 }
eaace00e 749 } elsif ( $menu == 1 ) {
750 if ( $command == 1 ) { $org_name = command1(); }
751 elsif ( $command == 2 ) { $org_logo = command2(); }
b6e0c3b6 752 elsif ( $command == 3 ) { ($org_logo_width,$org_logo_height) = command2a(); }
753 elsif ( $command == 4 ) { $org_title = command3(); }
754 elsif ( $command == 5 ) { $signout_page = command4(); }
39d3ec89 755 elsif ( $command == 6 ) { $frame_top = command6(); }
756 elsif ( $command == 7 ) { $provider_uri = command7(); }
757 elsif ( $command == 8 ) { $provider_name = command8(); }
0ae4c1f2 758
eaace00e 759 } elsif ( $menu == 2 ) {
47a29326 760 if ( $command eq "a" ) { $show_imap_settings = 1; $show_smtp_settings = 0; }
761 elsif ( $command eq "b" ) { $show_imap_settings = 0; $show_smtp_settings = 1; }
762 elsif ( $command eq "h" ) { $show_imap_settings = 0; $show_smtp_settings = 0; }
763 elsif ( $command <= 3 ) {
764 if ( $command == 1 ) { $domain = command11(); }
765 elsif ( $command == 2 ) { $invert_time = command110(); }
766 elsif ( $command == 3 ) { $useSendmail = command14(); }
767 $show_imap_settings = 0; $show_smtp_settings = 0;
768 } elsif ( $show_imap_settings ) {
769 if ( $command == 4 ) { $imapServerAddress = command12(); }
770 elsif ( $command == 5 ) { $imapPort = command13(); }
b47821fb 771 elsif ( $command == 6 ) { $imap_auth_mech = command112a(); }
a15f9d93 772 elsif ( $command == 7 ) { $use_imap_tls = command_use_tls("IMAP",$use_imap_tls); }
47a29326 773 elsif ( $command == 8 ) { $imap_server_type = command19(); }
774 elsif ( $command == 9 ) { $optional_delimiter = command111(); }
35aaf666 775 } elsif ( $show_smtp_settings && lc($useSendmail) eq 'true' ) {
432db2fc 776 if ( $command == 4 ) { $sendmail_path = command15(); }
fd7ab795 777 elsif ( $command == 5 ) { $sendmail_args = command_sendmail_args(); }
778 elsif ( $command == 6 ) { $encode_header_key = command114(); }
47a29326 779 } elsif ( $show_smtp_settings ) {
780 if ( $command == 4 ) { $smtpServerAddress = command16(); }
781 elsif ( $command == 5 ) { $smtpPort = command17(); }
782 elsif ( $command == 6 ) { $pop_before_smtp = command18a(); }
b47821fb 783 elsif ( $command == 7 ) { $smtp_auth_mech = command112b(); }
a15f9d93 784 elsif ( $command == 8 ) { $use_smtp_tls = command_use_tls("SMTP",$use_smtp_tls); }
432db2fc 785 elsif ( $command == 9 ) { $encode_header_key = command114(); }
47a29326 786 }
eaace00e 787 } elsif ( $menu == 3 ) {
788 if ( $command == 1 ) { $default_folder_prefix = command21(); }
789 elsif ( $command == 2 ) { $show_prefix_option = command22(); }
790 elsif ( $command == 3 ) { $trash_folder = command23a(); }
791 elsif ( $command == 4 ) { $sent_folder = command23b(); }
792 elsif ( $command == 5 ) { $draft_folder = command23c(); }
793 elsif ( $command == 6 ) { $default_move_to_trash = command24a(); }
794 elsif ( $command == 7 ) { $default_move_to_sent = command24b(); }
795 elsif ( $command == 8 ) { $default_save_as_draft = command24c(); }
796 elsif ( $command == 9 ) { $list_special_folders_first = command27(); }
797 elsif ( $command == 10 ) { $use_special_folder_color = command28(); }
798 elsif ( $command == 11 ) { $auto_expunge = command29(); }
799 elsif ( $command == 12 ) { $default_sub_of_inbox = command210(); }
800 elsif ( $command == 13 ) { $show_contain_subfolders_option = command211(); }
801 elsif ( $command == 14 ) { $default_unseen_notify = command212(); }
802 elsif ( $command == 15 ) { $default_unseen_type = command213(); }
803 elsif ( $command == 16 ) { $auto_create_special = command214(); }
804 elsif ( $command == 17 ) { $delete_folder = command215(); }
ca85aabe 805 elsif ( $command == 18 ) { $noselect_fix_enable = command216(); }
eaace00e 806 } elsif ( $menu == 4 ) {
39d3ec89 807 if ( $command == 1 ) { $data_dir = command33a(); }
808 elsif ( $command == 2 ) { $attachment_dir = command33b(); }
809 elsif ( $command == 3 ) { $dir_hash_level = command33c(); }
810 elsif ( $command == 4 ) { $default_left_size = command35(); }
811 elsif ( $command == 5 ) { $force_username_lowercase = command36(); }
812 elsif ( $command == 6 ) { $default_use_priority = command37(); }
813 elsif ( $command == 7 ) { $hide_sm_attributions = command38(); }
814 elsif ( $command == 8 ) { $default_use_mdn = command39(); }
ee20a285 815 elsif ( $command == 9 ) { $edit_identity = command310(); }
11e00010 816 elsif ( $command == 10 ) { $disable_thread_sort = command312(); }
817 elsif ( $command == 11 ) { $disable_server_sort = command313(); }
39d3ec89 818 elsif ( $command == 12 ) { $allow_charset_search = command314(); }
de74555e 819 elsif ( $command == 13 ) { $allow_advanced_search = command316(); }
820 elsif ( $command == 14 ) { $session_name = command317(); }
ee20a285 821 elsif ( $command == 15 ) { $time_zone_type = command318(); }
eaace00e 822 } elsif ( $menu == 5 ) {
85bacb8f 823 if ( $command == 1 ) { $templateset_default = command_templates(); }
eaace00e 824 elsif ( $command == 2 ) { $theme_css = command42(); }
81132de8 825 elsif ( $command == 3 ) { $default_fontsize = command_default_fontsize(); }
826 elsif ( $command == 4 ) { command_fontsets(); }
85bacb8f 827 elsif ( $command == 5 ) { command41(); }
eaace00e 828 } elsif ( $menu == 6 ) {
829 if ( $command == 1 ) { command61(); }
830 elsif ( $command == 2 ) { command62(); }
4272758c 831 elsif ( $command == 3 ) { $abook_global_file=command63(); }
832 elsif ( $command == 4 ) { command64(); }
71d3f882 833 elsif ( $command == 5 ) { command65(); }
eaace00e 834 } elsif ( $menu == 7 ) {
835 if ( $command == 1 ) { $motd = command71(); }
836 } elsif ( $menu == 8 ) {
837 if ( $command =~ /^[0-9]+/ ) { @plugins = command81(); }
eaace00e 838 } elsif ( $menu == 9 ) {
99a6c222 839 if ( $command == 1 ) { $addrbook_dsn = command91(); }
840 elsif ( $command == 2 ) { $addrbook_table = command92(); }
841 elsif ( $command == 3 ) { $prefs_dsn = command93(); }
842 elsif ( $command == 4 ) { $prefs_table = command94(); }
843 elsif ( $command == 5 ) { $prefs_user_field = command95(); }
844 elsif ( $command == 6 ) { $prefs_key_field = command96(); }
845 elsif ( $command == 7 ) { $prefs_val_field = command97(); }
30e9932c 846 elsif ( $command == 8 ) { $addrbook_global_dsn = command98(); }
847 elsif ( $command == 9 ) { $addrbook_global_table = command99(); }
848 elsif ( $command == 10 ) { $addrbook_global_writeable = command910(); }
849 elsif ( $command == 11 ) { $addrbook_global_listing = command911(); }
39d3ec89 850 } elsif ( $menu == 10 ) {
851 if ( $command == 1 ) { $squirrelmail_default_language = commandA1(); }
5ba5dc8e 852 elsif ( $command == 2 ) { $default_charset = commandA2(); }
dcc1cc82 853 elsif ( $command == 3 ) { $show_alternative_names = commandA3(); }
5ba5dc8e 854 elsif ( $command == 4 ) { $aggressive_decoding = commandA4(); }
855 elsif ( $command == 5 ) { $lossy_encoding = commandA5(); }
39d3ec89 856 } elsif ( $menu == 11 ) {
857 if ( $command == 1 ) { $advanced_tree = commandB1(); }
74d6a0d9 858 if ( $command == 2 ) { $use_iframe = commandB2(); }
6395c46d 859 elsif ( $command == 3 ) { $use_icons = commandB3(); }
860 elsif ( $command == 4 ) { $use_php_recode = commandB4(); }
861 elsif ( $command == 5 ) { $use_php_iconv = commandB5(); }
71d3f882 862 elsif ( $command == 6 ) { $allow_remote_configtest = commandB6(); }
eaace00e 863 }
864 }
828b4753 865}
866
cbd6543c 867# we exit here
868print "\nExiting conf.pl.\n".
35aaf666 869 "You might want to test your configuration by browsing to\n".
870 "http://your-squirrelmail-location/src/configtest.php\n".
871 "Happy SquirrelMailing!\n\n";
cbd6543c 872
873
828b4753 874####################################################################################
875
5b6ae78a 876# org_name
877sub command1 {
eaace00e 878 print "We have tried to make the name SquirrelMail as transparent as\n";
879 print "possible. If you set up an organization name, most places where\n";
880 print "SquirrelMail would take credit will be credited to your organization.\n";
881 print "\n";
360ef370 882 print "If your Organization Name includes a '\$', please precede it with a \\. \n";
883 print "Other '\$' will be considered the beginning of a variable that\n";
884 print "must be defined before the \$org_name is printed.\n";
360ef370 885 print "\n";
eaace00e 886 print "[$WHT$org_name$NRM]: $WHT";
887 $new_org_name = <STDIN>;
888 if ( $new_org_name eq "\n" ) {
889 $new_org_name = $org_name;
890 } else {
85645192 891 $new_org_name =~ s/[\r\n]//g;
35aaf666 892 $new_org_name =~ s/\"/&quot;/g;
eaace00e 893 }
894 return $new_org_name;
5b6ae78a 895}
896
897# org_logo
898sub command2 {
eaace00e 899 print "Your organization's logo is an image that will be displayed at\n";
25be56ab 900 print "different times throughout SquirrelMail. ";
901 print "\n";
902 print "Please be aware of the following: \n";
903 print " - Relative URLs are relative to the config dir\n";
904 print " to use the default logo, use ../images/sm_logo.png\n";
905 print " - To specify a logo defined outside the SquirrelMail source tree\n";
906 print " use the absolute URL the webserver would use to include the file\n";
5d28b77e 907 print " e.g. http://www.example.com/images/mylogo.gif or /images/mylogo.jpg\n";
eaace00e 908 print "\n";
909 print "[$WHT$org_logo$NRM]: $WHT";
910 $new_org_logo = <STDIN>;
911 if ( $new_org_logo eq "\n" ) {
912 $new_org_logo = $org_logo;
913 } else {
85645192 914 $new_org_logo =~ s/[\r\n]//g;
eaace00e 915 }
916 return $new_org_logo;
5b6ae78a 917}
918
b6e0c3b6 919# org_logo_width
920sub command2a {
921 print "Your organization's logo is an image that will be displayed at\n";
922 print "different times throughout SquirrelMail. Width\n";
923 print "and Height of your logo image. Use '0' to disable.\n";
924 print "\n";
925 print "Width: [$WHT$org_logo_width$NRM]: $WHT";
926 $new_org_logo_width = <STDIN>;
927 $new_org_logo_width =~ tr/0-9//cd; # only want digits!
928 if ( $new_org_logo_width eq '' ) {
929 $new_org_logo_width = $org_logo_width;
930 }
0e21688d 931 if ( $new_org_logo_width > 0 ) {
932 print "Height: [$WHT$org_logo_height$NRM]: $WHT";
933 $new_org_logo_height = <STDIN>;
934 $new_org_logo_height =~ tr/0-9//cd; # only want digits!
e03345e1 935 if( $new_org_logo_height eq '' ) {
35aaf666 936 $new_org_logo_height = $org_logo_height;
937 }
00c4b08d 938 } else {
0e21688d 939 $new_org_logo_height = 0;
b6e0c3b6 940 }
941 return ($new_org_logo_width, $new_org_logo_height);
942}
943
5b6ae78a 944# org_title
945sub command3 {
eaace00e 946 print "A title is what is displayed at the top of the browser window in\n";
947 print "the titlebar. Usually this will end up looking something like:\n";
948 print "\"Netscape: $org_title\"\n";
949 print "\n";
360ef370 950 print "If your Organization Title includes a '\$', please precede it with a \\. \n";
951 print "Other '\$' will be considered the beginning of a variable that\n";
952 print "must be defined before the \$org_title is printed.\n";
8b5c49cd 953 print "\$version, for example can be used, and will print the\n";
360ef370 954 print "string representing the current SquirrelMail version.\n";
955 print "\n";
eaace00e 956 print "[$WHT$org_title$NRM]: $WHT";
957 $new_org_title = <STDIN>;
958 if ( $new_org_title eq "\n" ) {
959 $new_org_title = $org_title;
960 } else {
85645192 961 $new_org_title =~ s/[\r\n]//g;
35aaf666 962 $new_org_title =~ s/\"/\'/g;
eaace00e 963 }
964 return $new_org_title;
5b6ae78a 965}
5b6ae78a 966
f923b93d 967# signout_page
968sub command4 {
eaace00e 969 print "When users click the Sign Out button they will be logged out and\n";
970 print "then sent to signout_page. If signout_page is left empty,\n";
971 print "(hit space and then return) they will be taken, as normal,\n";
972 print "to the default and rather sparse SquirrelMail signout page.\n";
973 print "\n";
974 print "[$WHT$signout_page$NRM]: $WHT";
975 $new_signout_page = <STDIN>;
976 if ( $new_signout_page eq "\n" ) {
977 $new_signout_page = $signout_page;
978 } else {
85645192 979 $new_signout_page =~ s/[\r\n]//g;
eaace00e 980 $new_signout_page =~ s/^\s+$//g;
981 }
982 return $new_signout_page;
6ef7145f 983}
984
80e86e94 985# Default top frame
986sub command6 {
987 print "SquirrelMail defaults to using the whole of the browser window.\n";
988 print "This allows you to keep it within a specified frame. The default\n";
989 print "is '_top'\n";
990 print "\n";
991 print "[$WHT$frame_top$NRM]: $WHT";
992 $new_frame_top = <STDIN>;
eaace00e 993 if ( $new_frame_top eq "\n" ) {
80e86e94 994 $new_frame_top = '_top';
995 } else {
85645192 996 $new_frame_top =~ s/[\r\n]//g;
80e86e94 997 $new_frame_top =~ s/^\s+$//g;
998 }
999 return $new_frame_top;
1000}
1001
0ae4c1f2 1002# Default link to provider
1003sub command7 {
1004 print "Here you can set the link on the right of the page.\n";
8b5c49cd 1005 print "If empty, it will link to the SquirrelMail About page.\n";
0ae4c1f2 1006 print "\n";
1007 print "[$WHT$provider_uri$NRM]: $WHT";
1008 $new_provider_uri = <STDIN>;
1009 if ( $new_provider_uri eq "\n" ) {
8b5c49cd 1010 $new_provider_uri = '';
0ae4c1f2 1011 } else {
85645192 1012 $new_provider_uri =~ s/[\r\n]//g;
0ae4c1f2 1013 $new_provider_uri =~ s/^\s+$//g;
1014 }
7b6563c0 1015 return $new_provider_uri;
0ae4c1f2 1016}
1017
1018sub command8 {
1019 print "Here you can set the name of the link on the right of the page.\n";
1020 print "The default is 'SquirrelMail/'\n";
1021 print "\n";
1022 print "[$WHT$provider_name$NRM]: $WHT";
1023 $new_provider_name = <STDIN>;
1024 if ( $new_provider_name eq "\n" ) {
1025 $new_provider_name = 'SquirrelMail';
1026 } else {
85645192 1027 $new_provider_name =~ s/[\r\n]//g;
0ae4c1f2 1028 $new_provider_name =~ s/^\s+$//g;
1029 }
7b6563c0 1030 return $new_provider_name;
0ae4c1f2 1031}
1032
828b4753 1033####################################################################################
5b6ae78a 1034
828b4753 1035# domain
1036sub command11 {
e1e4f932 1037 print "The domain name is the suffix at the end of all email addresses. If\n";
5d28b77e 1038 print "for example, your email address is jdoe\@example.com, then your domain\n";
1039 print "would be example.com.\n";
eaace00e 1040 print "\n";
1041 print "[$WHT$domain$NRM]: $WHT";
1042 $new_domain = <STDIN>;
1043 if ( $new_domain eq "\n" ) {
1044 $new_domain = $domain;
1045 } else {
85645192 1046 $new_domain =~ s/[\r\n]//g;
eaace00e 1047 }
1048 return $new_domain;
828b4753 1049}
5b6ae78a 1050
828b4753 1051# imapServerAddress
1052sub command12 {
47a29326 1053 print "This is the hostname where your IMAP server can be contacted.\n";
eaace00e 1054 print "[$WHT$imapServerAddress$NRM]: $WHT";
1055 $new_imapServerAddress = <STDIN>;
1056 if ( $new_imapServerAddress eq "\n" ) {
1057 $new_imapServerAddress = $imapServerAddress;
1058 } else {
85645192 1059 $new_imapServerAddress =~ s/[\r\n]//g;
eaace00e 1060 }
1061 return $new_imapServerAddress;
828b4753 1062}
5b6ae78a 1063
828b4753 1064# imapPort
1065sub command13 {
eaace00e 1066 print "This is the port that your IMAP server is on. Usually this is 143.\n";
1067 print "[$WHT$imapPort$NRM]: $WHT";
1068 $new_imapPort = <STDIN>;
1069 if ( $new_imapPort eq "\n" ) {
1070 $new_imapPort = $imapPort;
1071 } else {
85645192 1072 $new_imapPort =~ s/[\r\n]//g;
eaace00e 1073 }
1074 return $new_imapPort;
828b4753 1075}
1076
1077# useSendmail
1078sub command14 {
eaace00e 1079 print "You now need to choose the method that you will use for sending\n";
1080 print "messages in SquirrelMail. You can either connect to an SMTP server\n";
1081 print "or use sendmail directly.\n";
35aaf666 1082 if ( lc($useSendmail) eq 'true' ) {
eaace00e 1083 $default_value = "1";
1084 } else {
1085 $default_value = "2";
1086 }
1087 print "\n";
1088 print " 1. Sendmail\n";
1089 print " 2. SMTP\n";
1090 print "Your choice [1/2] [$WHT$default_value$NRM]: $WHT";
1091 $use_sendmail = <STDIN>;
1092 if ( ( $use_sendmail =~ /^1\n/i )
1093 || ( ( $use_sendmail =~ /^\n/ ) && ( $default_value eq "1" ) ) ) {
35aaf666 1094 $useSendmail = 'true';
eaace00e 1095 } else {
35aaf666 1096 $useSendmail = 'false';
eaace00e 1097 }
1098 return $useSendmail;
828b4753 1099}
5b6ae78a 1100
828b4753 1101# sendmail_path
1102sub command15 {
eaace00e 1103 print "Specify where the sendmail executable is located. Usually /usr/sbin/sendmail\n";
1104 print "[$WHT$sendmail_path$NRM]: $WHT";
1105 $new_sendmail_path = <STDIN>;
1106 if ( $new_sendmail_path eq "\n" ) {
1107 $new_sendmail_path = $sendmail_path;
1108 } else {
85645192 1109 $new_sendmail_path =~ s/[\r\n]//g;
eaace00e 1110 }
1111 return $new_sendmail_path;
828b4753 1112}
5b6ae78a 1113
fd7ab795 1114# Extra sendmail arguments
1115sub command_sendmail_args {
1116 print "Specify additional sendmail program arguments.\n";
1117 print "\n";
1118 print "Make sure that arguments are supported by your sendmail program. -f argument \n";
1119 print "is added automatically by SquirrelMail scripts. Variable defaults to standard\n";
1120 print "/usr/sbin/sendmail arguments. If you use qmail-inject, nbsmtp or any other \n";
1121 print "sendmail wrapper, which does not support -i and -t arguments, set variable to\n";
85bacb8f 1122 print "empty string or use arguments suitable for your mailer.\n";
fd7ab795 1123 print "\n";
1124 print "[$WHT$sendmail_args$NRM]: $WHT";
1125 $new_sendmail_args = <STDIN>;
1126 if ( $new_sendmail_args eq "\n" ) {
1127 $new_sendmail_args = $sendmail_args;
1128 } else {
1129 # strip linefeeds and crs.
1130 $new_sendmail_args =~ s/[\r\n]//g;
1131 }
1132 return trim($new_sendmail_args);
1133}
1134
828b4753 1135# smtpServerAddress
1136sub command16 {
47a29326 1137 print "This is the hostname of your SMTP server.\n";
eaace00e 1138 print "[$WHT$smtpServerAddress$NRM]: $WHT";
1139 $new_smtpServerAddress = <STDIN>;
1140 if ( $new_smtpServerAddress eq "\n" ) {
1141 $new_smtpServerAddress = $smtpServerAddress;
1142 } else {
85645192 1143 $new_smtpServerAddress =~ s/[\r\n]//g;
eaace00e 1144 }
1145 return $new_smtpServerAddress;
828b4753 1146}
1147
1148# smtpPort
1149sub command17 {
eaace00e 1150 print "This is the port to connect to for SMTP. Usually 25.\n";
1151 print "[$WHT$smtpPort$NRM]: $WHT";
1152 $new_smtpPort = <STDIN>;
1153 if ( $new_smtpPort eq "\n" ) {
1154 $new_smtpPort = $smtpPort;
1155 } else {
85645192 1156 $new_smtpPort =~ s/[\r\n]//g;
eaace00e 1157 }
1158 return $new_smtpPort;
bbd30ac8 1159}
d2f4c914 1160
598294a7 1161# authenticated server
a93b12ba 1162sub command18 {
47a29326 1163 return;
35aaf666 1164 # This sub disabled by tassium - it has been replaced with smtp_auth_mech
eaace00e 1165 print "Do you wish to use an authenticated SMTP server? Your server must\n";
1166 print "support this in order for SquirrelMail to work with it. We implemented\n";
1167 print "it according to RFC 2554.\n";
1168
1169 $YesNo = 'n';
35aaf666 1170 $YesNo = 'y' if ( lc($use_authenticated_smtp) eq 'true' );
eaace00e 1171
1172 print "Use authenticated SMTP server (y/n) [$WHT$YesNo$NRM]: $WHT";
1173
1174 $new_use_authenticated_smtp = <STDIN>;
1175 $new_use_authenticated_smtp =~ tr/yn//cd;
35aaf666 1176 return 'true' if ( $new_use_authenticated_smtp eq "y" );
1177 return 'false' if ( $new_use_authenticated_smtp eq "n" );
eaace00e 1178 return $use_authenticated_smtp;
1179}
d2f4c914 1180
2044f95a 1181# pop before SMTP
1182sub command18a {
1183 print "Do you wish to use POP3 before SMTP? Your server must\n";
1184 print "support this in order for SquirrelMail to work with it.\n";
1185
1186 $YesNo = 'n';
35aaf666 1187 $YesNo = 'y' if ( lc($pop_before_smtp) eq 'true' );
2044f95a 1188
1189 print "Use pop before SMTP (y/n) [$WHT$YesNo$NRM]: $WHT";
1190
1191 $new_pop_before_smtp = <STDIN>;
1192 $new_pop_before_smtp =~ tr/yn//cd;
35aaf666 1193 return 'true' if ( $new_pop_before_smtp eq "y" );
1194 return 'false' if ( $new_pop_before_smtp eq "n" );
2044f95a 1195 return $pop_before_smtp;
1196}
1197
598294a7 1198# imap_server_type
d2f4c914 1199sub command19 {
eaace00e 1200 print "Each IMAP server has its own quirks. As much as we tried to stick\n";
1201 print "to standards, it doesn't help much if the IMAP server doesn't follow\n";
1202 print "the same principles. We have made some work-arounds for some of\n";
1203 print "these servers. If you would like to use them, please select your\n";
1204 print "IMAP server. If you do not wish to use these work-arounds, you can\n";
1205 print "set this to \"other\", and none will be used.\n";
a33764f6 1206 print " courier = Courier IMAP server\n";
b39825f0 1207 print " cyrus = Cyrus IMAP server\n";
a33764f6 1208 print " dovecot = Dovecot Secure IMAP server\n";
b39825f0 1209 print " exchange = Microsoft Exchange IMAP server\n";
b39825f0 1210 print " hmailserver = hMailServer\n";
a33764f6 1211 print " macosx = Mac OS X Mailserver\n";
67a24f8a 1212 print " mercury32 = Mercury Mail Transport System\n";
a33764f6 1213 print " uw = University of Washington's IMAP server\n";
1214 print "\n";
b39825f0 1215 print " other = Not one of the above servers\n";
a33764f6 1216 print "\n";
eaace00e 1217 print "[$WHT$imap_server_type$NRM]: $WHT";
1218 $new_imap_server_type = <STDIN>;
1219
1220 if ( $new_imap_server_type eq "\n" ) {
1221 $new_imap_server_type = $imap_server_type;
1222 } else {
85645192 1223 $new_imap_server_type =~ s/[\r\n]//g;
eaace00e 1224 }
1225 return $new_imap_server_type;
a93b12ba 1226}
3f8fe68e 1227
d47b2518 1228# invert_time
d2f4c914 1229sub command110 {
eaace00e 1230 print "Sometimes the date of messages sent is messed up (off by a few hours\n";
1231 print "on some machines). Typically this happens if the system doesn't support\n";
1232 print "tm_gmtoff. It will happen only if your time zone is \"negative\".\n";
1233 print "This most often occurs on Solaris 7 machines in the United States.\n";
1234 print "By default, this is off. It should be kept off unless problems surface\n";
1235 print "about the time that messages are sent.\n";
1236 print " no = Do NOT fix time -- almost always correct\n";
1237 print " yes = Fix the time for this system\n";
1238
1239 $YesNo = 'n';
35aaf666 1240 $YesNo = 'y' if ( lc($invert_time) eq 'true' );
eaace00e 1241
1242 print "Fix the time for this system (y/n) [$WHT$YesNo$NRM]: $WHT";
1243
1244 $new_invert_time = <STDIN>;
1245 $new_invert_time =~ tr/yn//cd;
35aaf666 1246 return 'true' if ( $new_invert_time eq "y" );
1247 return 'false' if ( $new_invert_time eq "n" );
eaace00e 1248 return $invert_time;
1249}
d47b2518 1250
d2f4c914 1251sub command111 {
eaace00e 1252 print "This is the delimiter that your IMAP server uses to distinguish between\n";
1253 print "folders. For example, Cyrus uses '.' as the delimiter and a complete\n";
1254 print "folder would look like 'INBOX.Friends.Bob', while UW uses '/' and would\n";
1255 print "look like 'INBOX/Friends/Bob'. Normally this should be left at 'detect'\n";
1256 print "but if you are sure you know what delimiter your server uses, you can\n";
1257 print "specify it here.\n";
1258 print "\nTo have it autodetect the delimiter, set it to 'detect'.\n\n";
1259 print "[$WHT$optional_delimiter$NRM]: $WHT";
1260 $new_optional_delimiter = <STDIN>;
1261
1262 if ( $new_optional_delimiter eq "\n" ) {
1263 $new_optional_delimiter = $optional_delimiter;
1264 } else {
85645192 1265 $new_optional_delimiter =~ s/[\r\n]//g;
eaace00e 1266 }
1267 return $new_optional_delimiter;
40ba4d36 1268}
b47821fb 1269# IMAP authentication type
33feaaec 1270# Possible values: login, plain, cram-md5, digest-md5
b47821fb 1271# Now offers to detect supported mechs, assuming server & port are set correctly
1272
1273sub command112a {
80e3fcf8 1274 if ($use_imap_tls =~ /^true\b/i) {
1275 print "Auto-detection of login methods is unavailable when using TLS.\n";
1276 } else {
35aaf666 1277 print "If you have already set the hostname and port number, I can try to\n";
1278 print "detect the mechanisms your IMAP server supports.\n";
1279 print "I will try to detect CRAM-MD5 and DIGEST-MD5 support. I can't test\n";
1280 print "for \"login\" or \"plain\" without knowing a username and password.\n";
1281 print "Auto-detecting is optional - you can safely say \"n\" here.\n";
1282 print "\nTry to detect supported mechanisms? [y/N]: ";
1283 $inval=<STDIN>;
1284 chomp($inval);
1285 if ($inval =~ /^y\b/i) {
1286 # Yes, let's try to detect.
1287 print "Trying to detect IMAP capabilities...\n";
1288 my $host = $imapServerAddress . ':'. $imapPort;
1289 print "CRAM-MD5:\t";
1290 my $tmp = detect_auth_support('IMAP',$host,'CRAM-MD5');
1291 if (defined($tmp)) {
1292 if ($tmp eq 'YES') {
1293 print "$WHT SUPPORTED$NRM\n";
1294 } else {
1295 print "$WHT NOT SUPPORTED$NRM\n";
1296 }
80e3fcf8 1297 } else {
35aaf666 1298 print $WHT . " ERROR DETECTING$NRM\n";
1299 }
1300
1301 print "DIGEST-MD5:\t";
1302 $tmp = detect_auth_support('IMAP',$host,'DIGEST-MD5');
1303 if (defined($tmp)) {
1304 if ($tmp eq 'YES') {
1305 print "$WHT SUPPORTED$NRM\n";
1306 } else {
1307 print "$WHT NOT SUPPORTED$NRM\n";
1308 }
1309 } else {
1310 print $WHT . " ERROR DETECTING$NRM\n";
1311 }
598294a7 1312
35aaf666 1313 }
598294a7 1314 }
35aaf666 1315 print "\nWhat authentication mechanism do you want to use for IMAP connections?\n\n";
1316 print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n";
33feaaec 1317 print $WHT . "plain" . $NRM . " - SASL PLAIN. If you need this, you already know it.\n";
35aaf666 1318 print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext methods.\n";
1319 print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n";
1320 print "\n*** YOUR IMAP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n";
1321 print "If you don't understand or are unsure, you probably want \"login\"\n\n";
1322 print "login, plain, cram-md5, or digest-md5 [$WHT$imap_auth_mech$NRM]: $WHT";
b47821fb 1323 $inval=<STDIN>;
1324 chomp($inval);
33feaaec 1325 if ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) || ($inval =~ /^login\b/i) || ($inval =~ /^plain\b/i)) {
b47821fb 1326 return lc($inval);
1327 } else {
1328 # user entered garbage or default value so nothing needs to be set
1329 return $imap_auth_mech;
1330 }
1331}
40ba4d36 1332
598294a7 1333
b47821fb 1334# SMTP authentication type
1335# Possible choices: none, plain, cram-md5, digest-md5
1336sub command112b {
80e3fcf8 1337 if ($use_smtp_tls =~ /^true\b/i) {
1338 print "Auto-detection of login methods is unavailable when using TLS.\n";
1339 } else {
1340 print "If you have already set the hostname and port number, I can try to\n";
1341 print "automatically detect some of the mechanisms your SMTP server supports.\n";
35aaf666 1342 print "Auto-detection is *optional* - you can safely say \"n\" here.\n";
80e3fcf8 1343 print "\nTry to detect auth mechanisms? [y/N]: ";
1344 $inval=<STDIN>;
1345 chomp($inval);
1346 if ($inval =~ /^y\b/i) {
35aaf666 1347 # Yes, let's try to detect.
1348 print "Trying to detect supported methods (SMTP)...\n";
598294a7 1349
35aaf666 1350 # Special case!
1351 # Check none by trying to relay to junk@microsoft.com
1352 $host = $smtpServerAddress . ':' . $smtpPort;
1353 use IO::Socket;
1354 my $sock = IO::Socket::INET->new($host);
1355 print "Testing none:\t\t$WHT";
1356 if (!defined($sock)) {
1357 print " ERROR TESTING\n";
1358 close $sock;
1359 } else {
5d28b77e 1360 print $sock "HELO $domain\r\n";
35aaf666 1361 $got = <$sock>; # Discard
5d28b77e 1362 print $sock "MAIL FROM:<tester\@squirrelmail.org>\r\n";
1363 $got = <$sock>; # Discard
1364 print $sock "RCPT TO:<junk\@microsoft.com\r\n";
35aaf666 1365 $got = <$sock>; # This is the important line
1366 if ($got =~ /^250\b/) { # SMTP will relay without auth
1367 print "SUPPORTED$NRM\n";
1368 } else {
1369 print "NOT SUPPORTED$NRM\n";
1370 }
5d28b77e 1371 print $sock "RSET\r\n";
1372 print $sock "QUIT\r\n";
35aaf666 1373 close $sock;
1374 }
1375 # Try login (SquirrelMail default)
1376 print "Testing login:\t\t";
1377 $tmp=detect_auth_support('SMTP',$host,'LOGIN');
1378 if (defined($tmp)) {
1379 if ($tmp eq 'YES') {
1380 print $WHT . "SUPPORTED$NRM\n";
1381 } else {
1382 print $WHT . "NOT SUPPORTED$NRM\n";
1383 }
1384 } else {
1385 print $WHT . "ERROR DETECTING$NRM\n";
1386 }
598294a7 1387
35aaf666 1388 # Try CRAM-MD5
80e3fcf8 1389 print "Testing CRAM-MD5:\t";
1390 $tmp=detect_auth_support('SMTP',$host,'CRAM-MD5');
1391 if (defined($tmp)) {
1392 if ($tmp eq 'YES') {
1393 print $WHT . "SUPPORTED$NRM\n";
1394 } else {
1395 print $WHT . "NOT SUPPORTED$NRM\n";
1396 }
1397 } else {
1398 print $WHT . "ERROR DETECTING$NRM\n";
b47821fb 1399 }
598294a7 1400
80e3fcf8 1401
1402 print "Testing DIGEST-MD5:\t";
1403 $tmp=detect_auth_support('SMTP',$host,'DIGEST-MD5');
1404 if (defined($tmp)) {
1405 if ($tmp eq 'YES') {
1406 print $WHT . "SUPPORTED$NRM\n";
1407 } else {
1408 print $WHT . "NOT SUPPORTED$NRM\n";
1409 }
1410 } else {
1411 print $WHT . "ERROR DETECTING$NRM\n";
b47821fb 1412 }
598294a7 1413 }
80e3fcf8 1414 }
1415 print "\nWhat authentication mechanism do you want to use for SMTP connections?\n";
b47821fb 1416 print $WHT . "none" . $NRM . " - Your SMTP server does not require authorization.\n";
fe0b18b3 1417 print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n";
33feaaec 1418 print $WHT . "plain" . $NRM . " - SASL PLAIN. You already know it if you need this.\n";
639c7164 1419 print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext.\n";
1420 print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n";
fe0b18b3 1421 print $WHT . "\n*** YOUR SMTP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n" . $NRM;
b47821fb 1422 print "If you don't understand or are unsure, you probably want \"none\"\n\n";
fe0b18b3 1423 print "none, login, cram-md5, or digest-md5 [$WHT$smtp_auth_mech$NRM]: $WHT";
47a29326 1424 $inval=<STDIN>;
1425 chomp($inval);
b47821fb 1426 if ($inval =~ /^none\b/i) {
47a29326 1427 # SMTP doesn't necessarily require logins
1428 return "none";
1429 }
598294a7 1430 if ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) ||
33feaaec 1431 ($inval =~ /^login\b/i) || ($inval =~/^plain\b/i)) {
47a29326 1432 return lc($inval);
1433 } else {
b47821fb 1434 # user entered garbage, or default value so nothing needs to be set
35aaf666 1435 return $smtp_auth_mech;
47a29326 1436 }
1437}
1438
1439# TLS
1440# This sub is reused for IMAP and SMTP
1441# Args: service name, default value
a15f9d93 1442sub command_use_tls {
35aaf666 1443 my($default_val,$service,$inval);
1444 $service=$_[0];
1445 $default_val=$_[1];
1446 print "TLS (Transport Layer Security) encrypts the traffic between server and client.\n";
a15f9d93 1447 print "STARTTLS extensions allow to start encryption on existing plain text connection.\n";
1448 print "These options add specific PHP and IMAP server configuration requirements.\n";
1449 print "See SquirrelMail documentation about connection security.\n";
1450 print "\n";
1451 print "If your " . $service . " server is localhost, you can safely disable this.\n";
35aaf666 1452 print "If it is remote, you may wish to seriously consider enabling this.\n";
a15f9d93 1453 $valid_input=0;
1454 while ($valid_input eq 0) {
1455 print "\nSelect connection security model:\n";
1456 print " 0 - Use plain text connection\n";
1457 print " 1 - Use TLS connection\n";
1458 print " 2 - Use STARTTLS extension\n";
1459 print "Select [$default_val]: ";
1460 $inval=<STDIN>;
1461 $inval=trim($inval);
1462 if ($inval =~ /^[012]$/ || $inval eq '') {
1463 $valid_input = 1;
1464 }
47a29326 1465 }
a15f9d93 1466 if ($inval ne '') {$default_val = $inval};
47a29326 1467 return $default_val;
35aaf666 1468}
47a29326 1469
432db2fc 1470# $encode_header_key
35aaf666 1471sub command114{
432db2fc 1472 print "Encryption key allows to hide SquirrelMail Received: headers\n";
1473 print "in outbound messages. Interface uses encryption key to encode\n";
1474 print "username, remote address and proxied address, then stores encoded\n";
1475 print "information in X-Squirrel-* headers.\n";
1476 print "\n";
1477 print "Warning: used encryption function is not bulletproof. When used\n";
1478 print "with static encryption keys, it provides only minimal security\n";
1479 print "measures and information can be decoded quickly.\n";
1480 print "\n";
1481 print "Encoded information can be decoded with decrypt_headers.php script\n";
1482 print "from SquirrelMail contrib/ directory.\n";
1483 print "\n";
1484 print "Enter encryption key: ";
1485 $new_encode_header_key = <STDIN>;
1486 if ( $new_encode_header_key eq "\n" ) {
1487 $new_encode_header_key = $encode_header_key;
1488 } else {
1489 $new_encode_header_key =~ s/[\r\n]//g;
1490 }
1491 return $new_encode_header_key;
35aaf666 1492}
47a29326 1493
3f8fe68e 1494# MOTD
1495sub command71 {
eaace00e 1496 print "\nYou can now create the welcome message that is displayed\n";
1497 print "every time a user logs on. You can use HTML or just plain\n";
dcc1cc82 1498 print
1499"text. If you do not wish to have one, just make it blank.\n\n(Type @ on a blank line to exit)\n";
eaace00e 1500
1501 $new_motd = "";
1502 do {
1503 print "] ";
1504 $line = <STDIN>;
85645192 1505 $line =~ s/[\r\n]//g;
eaace00e 1506 if ( $line ne "@" ) {
1507 $line =~ s/ /\&nbsp;\&nbsp;/g;
1508 $line =~ s/\t/\&nbsp;\&nbsp;\&nbsp;\&nbsp;/g;
1509 $line =~ s/$/ /;
8278a58d 1510 $line =~ s/\"/\\\"/g;
eaace00e 1511
1512 $new_motd = $new_motd . $line;
1513 }
1514 } while ( $line ne "@" );
1515 return $new_motd;
3f8fe68e 1516}
911ad01c 1517
9d0c7bee 1518################# PLUGINS ###################
1519
1520sub command81 {
85645192 1521 $command =~ s/[\s\n\r]*//g;
eaace00e 1522 if ( $command > 0 ) {
1523 $command = $command - 1;
1524 if ( $command <= $#plugins ) {
1525 @newplugins = ();
1526 $ct = 0;
1527 while ( $ct <= $#plugins ) {
1528 if ( $ct != $command ) {
1529 @newplugins = ( @newplugins, $plugins[$ct] );
1530 }
1531 $ct++;
9d0c7bee 1532 }
eaace00e 1533 @plugins = @newplugins;
1534 } elsif ( $command <= $#plugins + $#unused_plugins + 1 ) {
1535 $num = $command - $#plugins - 1;
1536 @newplugins = @plugins;
1537 $ct = 0;
1538 while ( $ct <= $#unused_plugins ) {
1539 if ( $ct == $num ) {
1540 @newplugins = ( @newplugins, $unused_plugins[$ct] );
eaace00e 1541 }
1542 $ct++;
9d0c7bee 1543 }
eaace00e 1544 @plugins = @newplugins;
1545 }
1546 }
1547 return @plugins;
1548}
9d0c7bee 1549
911ad01c 1550################# FOLDERS ###################
1551
1552# default_folder_prefix
1553sub command21 {
eaace00e 1554 print "Some IMAP servers (UW, for example) store mail and folders in\n";
1555 print "your user space in a separate subdirectory. This is where you\n";
1556 print "specify what that directory is.\n";
1557 print "\n";
1558 print "EXAMPLE: mail/";
1559 print "\n";
1560 print "NOTE: If you use Cyrus, or some server that would not use this\n";
1561 print " option, you must set this to 'none'.\n";
1562 print "\n";
1563 print "[$WHT$default_folder_prefix$NRM]: $WHT";
1564 $new_default_folder_prefix = <STDIN>;
1565
1566 if ( $new_default_folder_prefix eq "\n" ) {
1567 $new_default_folder_prefix = $default_folder_prefix;
1568 } else {
d52532d5 1569 $new_default_folder_prefix =~ s/[\r\n]//g;
eaace00e 1570 }
d52532d5 1571 if ( ( $new_default_folder_prefix =~ /^\s*$/ ) || ( $new_default_folder_prefix =~ m/^none$/i ) ) {
eaace00e 1572 $new_default_folder_prefix = "";
1573 } else {
d52532d5 1574 # add the trailing delimiter only if we know what the server is.
ce9f808b 1575 if (($imap_server_type eq 'cyrus' and
1576 $optional_delimiter eq 'detect') or
1577 ($imap_server_type eq 'courier' and
1578 $optional_delimiter eq 'detect')) {
d52532d5 1579 $new_default_folder_prefix =~ s/\.*$/\./;
ce9f808b 1580 } elsif ($imap_server_type eq 'uw' and
1581 $optional_delimiter eq 'detect') {
d52532d5 1582 $new_default_folder_prefix =~ s/\/*$/\//;
0e21688d 1583 }
eaace00e 1584 }
1585 return $new_default_folder_prefix;
911ad01c 1586}
1587
1588# Show Folder Prefix
1589sub command22 {
eaace00e 1590 print "It is possible to set up the default folder prefix as a user\n";
1591 print "specific option, where each user can specify what their mail\n";
1592 print "folder is. If you set this to false, they will never see the\n";
1593 print "option, but if it is true, this option will appear in the\n";
1594 print "'options' section.\n";
1595 print "\n";
1596 print "NOTE: You set the default folder prefix in option '1' of this\n";
1597 print " section. That will be the default if the user doesn't\n";
1598 print " specify anything different.\n";
1599 print "\n";
1600
35aaf666 1601 if ( lc($show_prefix_option) eq 'true' ) {
eaace00e 1602 $default_value = "y";
1603 } else {
1604 $default_value = "n";
1605 }
1606 print "\n";
1607 print "Show option (y/n) [$WHT$default_value$NRM]: $WHT";
1608 $new_show = <STDIN>;
1609 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1610 $show_prefix_option = 'true';
eaace00e 1611 } else {
35aaf666 1612 $show_prefix_option = 'false';
eaace00e 1613 }
1614 return $show_prefix_option;
911ad01c 1615}
1616
598294a7 1617# Trash Folder
f7b1b3b1 1618sub command23a {
eaace00e 1619 print "You can now specify where the default trash folder is located.\n";
1620 print "On servers where you do not want this, you can set it to anything\n";
1621 print "and set option 6 to false.\n";
1622 print "\n";
1623 print "This is relative to where the rest of your email is kept. You do\n";
1624 print "not need to worry about their mail directory. If this folder\n";
1625 print "would be ~/mail/trash on the filesystem, you only need to specify\n";
1626 print "that this is 'trash', and be sure to put 'mail/' in option 1.\n";
1627 print "\n";
1628
1629 print "[$WHT$trash_folder$NRM]: $WHT";
1630 $new_trash_folder = <STDIN>;
1631 if ( $new_trash_folder eq "\n" ) {
1632 $new_trash_folder = $trash_folder;
1633 } else {
85645192 1634 $new_trash_folder =~ s/[\r\n]//g;
eaace00e 1635 }
1636 return $new_trash_folder;
911ad01c 1637}
1638
598294a7 1639# Sent Folder
f7b1b3b1 1640sub command23b {
eaace00e 1641 print "This is where messages that are sent will be stored. SquirrelMail\n";
1642 print "by default puts a copy of all outgoing messages in this folder.\n";
1643 print "\n";
1644 print "This is relative to where the rest of your email is kept. You do\n";
1645 print "not need to worry about their mail directory. If this folder\n";
1646 print "would be ~/mail/sent on the filesystem, you only need to specify\n";
1647 print "that this is 'sent', and be sure to put 'mail/' in option 1.\n";
1648 print "\n";
1649
1650 print "[$WHT$sent_folder$NRM]: $WHT";
1651 $new_sent_folder = <STDIN>;
1652 if ( $new_sent_folder eq "\n" ) {
1653 $new_sent_folder = $sent_folder;
1654 } else {
85645192 1655 $new_sent_folder =~ s/[\r\n]//g;
eaace00e 1656 }
1657 return $new_sent_folder;
911ad01c 1658}
1659
598294a7 1660# Draft Folder
f7b1b3b1 1661sub command23c {
eaace00e 1662 print "You can now specify where the default draft folder is located.\n";
1663 print "On servers where you do not want this, you can set it to anything\n";
1664 print "and set option 9 to false.\n";
1665 print "\n";
1666 print "This is relative to where the rest of your email is kept. You do\n";
1667 print "not need to worry about their mail directory. If this folder\n";
1668 print "would be ~/mail/drafts on the filesystem, you only need to specify\n";
1669 print "that this is 'drafts', and be sure to put 'mail/' in option 1.\n";
1670 print "\n";
1671
1672 print "[$WHT$draft_folder$NRM]: $WHT";
1673 $new_draft_folder = <STDIN>;
1674 if ( $new_draft_folder eq "\n" ) {
1675 $new_draft_folder = $draft_folder;
1676 } else {
85645192 1677 $new_draft_folder =~ s/[\r\n]//g;
eaace00e 1678 }
1679 return $new_draft_folder;
f7b1b3b1 1680}
1681
598294a7 1682# default move to trash
f7b1b3b1 1683sub command24a {
eaace00e 1684 print "By default, should messages get moved to the trash folder? You\n";
1685 print "can specify the default trash folder in option 3. If this is set\n";
1686 print "to false, messages will get deleted immediately without moving\n";
1687 print "to the trash folder.\n";
1688 print "\n";
1689 print "Trash folder is currently: $trash_folder\n";
1690 print "\n";
1691
35aaf666 1692 if ( lc($default_move_to_trash) eq 'true' ) {
eaace00e 1693 $default_value = "y";
1694 } else {
1695 $default_value = "n";
1696 }
1697 print "By default, move to trash (y/n) [$WHT$default_value$NRM]: $WHT";
1698 $new_show = <STDIN>;
1699 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1700 $default_move_to_trash = 'true';
eaace00e 1701 } else {
35aaf666 1702 $default_move_to_trash = 'false';
eaace00e 1703 }
1704 return $default_move_to_trash;
2f287147 1705}
1706
598294a7 1707# default move to sent
f7b1b3b1 1708sub command24b {
eaace00e 1709 print "By default, should messages get moved to the sent folder? You\n";
1710 print "can specify the default sent folder in option 4. If this is set\n";
1711 print "to false, messages will get sent and no copy will be made.\n";
1712 print "\n";
6517cfd0 1713 print "Sent folder is currently: $sent_folder\n";
eaace00e 1714 print "\n";
1715
35aaf666 1716 if ( lc($default_move_to_sent) eq 'true' ) {
eaace00e 1717 $default_value = "y";
1718 } else {
1719 $default_value = "n";
1720 }
1721 print "By default, move to sent (y/n) [$WHT$default_value$NRM]: $WHT";
1722 $new_show = <STDIN>;
1723 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1724 $default_move_to_sent = 'true';
eaace00e 1725 } else {
35aaf666 1726 $default_move_to_sent = 'false';
eaace00e 1727 }
1728 return $default_move_to_sent;
2f287147 1729}
1730
f7b1b3b1 1731# default save as draft
1732sub command24c {
eaace00e 1733 print "By default, should the save to draft option be shown? You can\n";
1734 print "specify the default drafts folder in option 5. If this is set\n";
1735 print "to false, users will not be shown the save to draft option.\n";
1736 print "\n";
1737 print "Drafts folder is currently: $draft_folder\n";
1738 print "\n";
1739
35aaf666 1740 if ( lc($default_move_to_draft) eq 'true' ) {
eaace00e 1741 $default_value = "y";
1742 } else {
1743 $default_value = "n";
1744 }
1745 print "By default, save as draft (y/n) [$WHT$default_value$NRM]: $WHT";
1746 $new_show = <STDIN>;
1747 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1748 $default_save_as_draft = 'true';
eaace00e 1749 } else {
35aaf666 1750 $default_save_as_draft = 'false';
eaace00e 1751 }
1752 return $default_save_as_draft;
f7b1b3b1 1753}
1754
598294a7 1755# List special folders first
2f287147 1756sub command27 {
eaace00e 1757 print "SquirrelMail has what we call 'special folders' that are not\n";
1758 print "manipulated and viewed like normal folders. Some examples of\n";
1759 print "these folders would be INBOX, Trash, Sent, etc. This option\n";
1760 print "Simply asks if you want these folders listed first in the folder\n";
1761 print "listing.\n";
1762 print "\n";
1763
35aaf666 1764 if ( lc($list_special_folders_first) eq 'true' ) {
eaace00e 1765 $default_value = "y";
1766 } else {
1767 $default_value = "n";
1768 }
1769 print "\n";
1770 print "List first (y/n) [$WHT$default_value$NRM]: $WHT";
1771 $new_show = <STDIN>;
1772 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1773 $list_special_folders_first = 'true';
eaace00e 1774 } else {
35aaf666 1775 $list_special_folders_first = 'false';
eaace00e 1776 }
1777 return $list_special_folders_first;
911ad01c 1778}
1779
598294a7 1780# Show special folders color
2f287147 1781sub command28 {
eaace00e 1782 print "SquirrelMail has what we call 'special folders' that are not\n";
1783 print "manipulated and viewed like normal folders. Some examples of\n";
1784 print "these folders would be INBOX, Trash, Sent, etc. This option\n";
1785 print "wants to know if we should display special folders in a\n";
1786 print "color than the other folders.\n";
1787 print "\n";
1788
35aaf666 1789 if ( lc($use_special_folder_color) eq 'true' ) {
eaace00e 1790 $default_value = "y";
1791 } else {
1792 $default_value = "n";
1793 }
1794 print "\n";
1795 print "Show color (y/n) [$WHT$default_value$NRM]: $WHT";
1796 $new_show = <STDIN>;
1797 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1798 $use_special_folder_color = 'true';
eaace00e 1799 } else {
35aaf666 1800 $use_special_folder_color = 'false';
eaace00e 1801 }
1802 return $use_special_folder_color;
911ad01c 1803}
1804
598294a7 1805# Auto expunge
2f287147 1806sub command29 {
eaace00e 1807 print "The way that IMAP handles deleting messages is as follows. You\n";
1808 print "mark the message as deleted, and then to 'really' delete it, you\n";
1809 print "expunge it. This option asks if you want to just have messages\n";
1810 print "marked as deleted, or if you want SquirrelMail to expunge the \n";
1811 print "messages too.\n";
1812 print "\n";
1813
35aaf666 1814 if ( lc($auto_expunge) eq 'true' ) {
eaace00e 1815 $default_value = "y";
1816 } else {
1817 $default_value = "n";
1818 }
1819 print "Auto expunge (y/n) [$WHT$default_value$NRM]: $WHT";
1820 $new_show = <STDIN>;
1821 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1822 $auto_expunge = 'true';
eaace00e 1823 } else {
35aaf666 1824 $auto_expunge = 'false';
eaace00e 1825 }
1826 return $auto_expunge;
911ad01c 1827}
1828
598294a7 1829# Default sub of inbox
2f287147 1830sub command210 {
eaace00e 1831 print "Some IMAP servers (Cyrus) have all folders as subfolders of INBOX.\n";
1832 print "This can cause some confusion in folder creation for users when\n";
1833 print "they try to create folders and don't put it as a subfolder of INBOX\n";
1834 print "and get permission errors. This option asks if you want folders\n";
1835 print "to be subfolders of INBOX by default.\n";
1836 print "\n";
1837
35aaf666 1838 if ( lc($default_sub_of_inbox) eq 'true' ) {
eaace00e 1839 $default_value = "y";
1840 } else {
1841 $default_value = "n";
1842 }
1843 print "Default sub of INBOX (y/n) [$WHT$default_value$NRM]: $WHT";
1844 $new_show = <STDIN>;
1845 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1846 $default_sub_of_inbox = 'true';
eaace00e 1847 } else {
35aaf666 1848 $default_sub_of_inbox = 'false';
eaace00e 1849 }
1850 return $default_sub_of_inbox;
911ad01c 1851}
1852
598294a7 1853# Show contain subfolder option
2f287147 1854sub command211 {
eaace00e 1855 print "Some IMAP servers (UW) make it so that there are two types of\n";
1856 print "folders. Those that contain messages, and those that contain\n";
1857 print "subfolders. If this is the case for your server, set this to\n";
1858 print "true, and it will ask the user whether the folder they are\n";
1859 print "creating contains subfolders or messages.\n";
1860 print "\n";
1861
35aaf666 1862 if ( lc($show_contain_subfolders_option) eq 'true' ) {
eaace00e 1863 $default_value = "y";
1864 } else {
1865 $default_value = "n";
1866 }
1867 print "Show option (y/n) [$WHT$default_value$NRM]: $WHT";
1868 $new_show = <STDIN>;
1869 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1870 $show_contain_subfolders_option = 'true';
eaace00e 1871 } else {
35aaf666 1872 $show_contain_subfolders_option = 'false';
eaace00e 1873 }
1874 return $show_contain_subfolders_option;
911ad01c 1875}
1876
598294a7 1877# Default Unseen Notify
24fc5dd2 1878sub command212 {
eaace00e 1879 print "This option specifies where the users will receive notification\n";
1880 print "about unseen messages by default. This is of course an option that\n";
1881 print "can be changed on a user level.\n";
1882 print " 1 = No notification\n";
1883 print " 2 = Only on the INBOX\n";
1884 print " 3 = On all folders\n";
1885 print "\n";
1886
1887 print "Which one should be default (1,2,3)? [$WHT$default_unseen_notify$NRM]: $WHT";
1888 $new_show = <STDIN>;
85645192 1889 if ( $new_show =~ /^[123]\n/i ) {
eaace00e 1890 $default_unseen_notify = $new_show;
1891 }
85645192 1892 $default_unseen_notify =~ s/[\r\n]//g;
eaace00e 1893 return $default_unseen_notify;
24fc5dd2 1894}
1895
598294a7 1896# Default Unseen Type
24fc5dd2 1897sub command213 {
eaace00e 1898 print "Here you can define the default way that unseen messages will be displayed\n";
1899 print "to the user in the folder listing on the left side.\n";
1900 print " 1 = Only unseen messages (4)\n";
1901 print " 2 = Unseen and Total messages (4/27)\n";
1902 print "\n";
1903
1904 print "Which one should be default (1,2)? [$WHT$default_unseen_type$NRM]: $WHT";
1905 $new_show = <STDIN>;
85645192 1906 if ( $new_show =~ /^[12]\n/i ) {
eaace00e 1907 $default_unseen_type = $new_show;
1908 }
85645192 1909 $default_unseen_type =~ s/[\r\n]//g;
eaace00e 1910 return $default_unseen_type;
24fc5dd2 1911}
1912
f7bfc9de 1913# Auto create special folders
1914sub command214 {
eaace00e 1915 print "Would you like the Sent, Trash, and Drafts folders to be created\n";
1916 print "automatically print for you when a user logs in? If the user\n";
1917 print "accidentally deletes their special folders, this option will\n";
1918 print "automatically create it again for them.\n";
1919 print "\n";
1920
35aaf666 1921 if ( lc($auto_create_special) eq 'true' ) {
eaace00e 1922 $default_value = "y";
1923 } else {
1924 $default_value = "n";
1925 }
1926 print "Auto create special folders? (y/n) [$WHT$default_value$NRM]: $WHT";
1927 $new_show = <STDIN>;
1928 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1929 $auto_create_special = 'true';
eaace00e 1930 } else {
35aaf666 1931 $auto_create_special = 'false';
eaace00e 1932 }
1933 return $auto_create_special;
f7bfc9de 1934}
1935
598294a7 1936# Automatically delete folders
4e85a37f 1937sub command215 {
d04165f3 1938 if ( $imap_server_type eq "uw" ) {
1939 print "UW IMAP servers will not allow folders containing mail to also contain folders.\n";
1940 print "Deleting folders will bypass the trash folder and be immediately deleted\n\n";
98468fba 1941 print "If this is not the correct value for your server,\n";
1942 print "please use option D on the Main Menu to configure your server correctly.\n\n";
2eec12b5 1943 print "Press any key to continue...\n";
1944 $new_delete = <STDIN>;
35aaf666 1945 $delete_folder = 'true';
598294a7 1946 } else {
d04165f3 1947 if ( $imap_server_type eq "courier" ) {
1948 print "Courier (or Courier-IMAP) IMAP servers may not support ";
1949 print "subfolders of Trash. \n";
1950 print "Specifically, if Courier is set to always move messages to Trash, \n";
1951 print "Trash will be treated by Courier as a special folder that does not \n";
1952 print "allow subfolders. \n\n";
1953 print "Please verify your Courier configuration, and test folder deletion \n";
598294a7 1954 print "when changing this setting.\n\n";
d04165f3 1955 }
1956
1957 print "Are subfolders of the Trash supported by your IMAP server?\n";
1958 print "If so, should deleted folders be sent to Trash?\n";
1959 print "If not, say no (deleted folders should not be sent to Trash)\n\n";
1960 # reversal of logic.
1961 # question was: Should folders be automatically deleted instead of sent to trash..
598294a7 1962 # we've changed the question to make it more clear,
1963 # and are here handling that to avoid changing the answers..
35aaf666 1964 if ( lc($delete_folder) eq 'true' ) {
2eec12b5 1965 $default_value = "n";
d04165f3 1966 } else {
1967 $default_value = "y";
2eec12b5 1968 }
d04165f3 1969 print "Send deleted folders to Trash? (y/n) [$WHT$default_value$NRM]: $WHT";
2eec12b5 1970 $new_delete = <STDIN>;
1971 if ( ( $new_delete =~ /^y\n/i ) || ( ( $new_delete =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1972 $delete_folder = 'false';
d04165f3 1973 } else {
35aaf666 1974 $delete_folder = 'true';
2eec12b5 1975 }
eaace00e 1976 }
1977 return $delete_folder;
1978}
24fc5dd2 1979
ca85aabe 1980#noselect fix
1981sub command216 {
1982 print "Some IMAP server allow subfolders to exist even if the parent\n";
1983 print "folders do not. This fixes some problems with the folder list\n";
1984 print "when this is the case, causing the /NoSelect folders to be displayed\n";
1985 print "\n";
1986
35aaf666 1987 if ( lc($noselect_fix_enable) eq 'true' ) {
ca85aabe 1988 $default_value = "y";
1989 } else {
1990 $default_value = "n";
1991 }
1992 print "enable noselect fix? (y/n) [$WHT$noselect_fix_enable$NRM]: $WHT";
1993 $noselect_fix_enable = <STDIN>;
1994 if ( ( $noselect_fix_enable =~ /^y\n/i ) || ( ( $noselect_fix_enable =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 1995 $noselect_fix_enable = 'true';
ca85aabe 1996 } else {
35aaf666 1997 $noselect_fix_enable = 'false';
ca85aabe 1998 }
1999 return $noselect_fix_enable;
2000}
ccfb2029 2001############# GENERAL OPTIONS #####################
2002
ccfb2029 2003# Data directory
3392dc86 2004sub command33a {
e6566358 2005 print "Specify the location for your data directory.\n";
368ab966 2006 print "You need to create this directory yourself.\n";
e6566358 2007 print "The path name can be absolute or relative (to the config directory).\n";
368ab966 2008 print "Here are two examples:\n";
2009 print " Absolute: /var/local/squirrelmail/data/\n";
598294a7 2010 print " Relative: ../data/\n";
8bd9e0dd 2011 print "Relative paths to directories outside of the SquirrelMail distribution\n";
e6566358 2012 print "will be converted to their absolute path equivalents in config.php.\n\n";
30e9932c 2013 print "Note: There are potential security risks with having a writeable directory\n";
e6566358 2014 print "under the web server's root directory (ex: /home/httpd/html).\n";
2015 print "For this reason, it is recommended to put the data directory\n";
2eec12b5 2016 print "in an alternate location of your choice. \n";
2017 print "\n";
2018
eaace00e 2019 print "[$WHT$data_dir$NRM]: $WHT";
2020 $new_data_dir = <STDIN>;
2021 if ( $new_data_dir eq "\n" ) {
2022 $new_data_dir = $data_dir;
2023 } else {
85645192 2024 $new_data_dir =~ s/[\r\n]//g;
eaace00e 2025 }
2026 if ( $new_data_dir =~ /^\s*$/ ) {
2027 $new_data_dir = "";
2028 } else {
2029 $new_data_dir =~ s/\/*$//g;
2030 $new_data_dir =~ s/$/\//g;
2031 }
2032 return $new_data_dir;
ccfb2029 2033}
2034
2035# Attachment directory
3392dc86 2036sub command33b {
eaace00e 2037 print "Path to directory used for storing attachments while a mail is\n";
368ab966 2038 print "being composed. The path name can be absolute or relative (to the\n";
2039 print "config directory). Here are two examples:\n";
2040 print " Absolute: /var/local/squirrelmail/attach/\n";
e6566358 2041 print " Relative: ../attach/\n";
2042 print "Relative paths to directories outside of the SquirrelMail distribution\n";
2043 print "will be converted to their absolute path equivalents in config.php.\n\n";
2044 print "Note: There are a few security considerations regarding this\n";
eaace00e 2045 print "directory:\n";
2046 print " 1. It should have the permission 733 (rwx-wx-wx) to make it\n";
2047 print " impossible for a random person with access to the webserver\n";
2048 print " to list files in this directory. Confidential data might\n";
2049 print " be laying around in there.\n";
e6566358 2050 print " Depending on your user:group assignments, 730 (rwx-wx---)\n";
2051 print " may be possible, and more secure (e.g. root:apache)\n";
eaace00e 2052 print " 2. Since the webserver is not able to list the files in the\n";
2053 print " content is also impossible for the webserver to delete files\n";
2054 print " lying around there for too long.\n";
2055 print " 3. It should probably be another directory than the data\n";
2056 print " directory specified in option 3.\n";
2057 print "\n";
2058
2059 print "[$WHT$attachment_dir$NRM]: $WHT";
2060 $new_attachment_dir = <STDIN>;
2061 if ( $new_attachment_dir eq "\n" ) {
2062 $new_attachment_dir = $attachment_dir;
2063 } else {
85645192 2064 $new_attachment_dir =~ s/[\r\n]//g;
eaace00e 2065 }
2066 if ( $new_attachment_dir =~ /^\s*$/ ) {
2067 $new_attachment_dir = "";
2068 } else {
2069 $new_attachment_dir =~ s/\/*$//g;
2070 $new_attachment_dir =~ s/$/\//g;
2071 }
2072 return $new_attachment_dir;
ccfb2029 2073}
2074
3392dc86 2075sub command33c {
eaace00e 2076 print "The directory hash level setting allows you to configure the level\n";
598294a7 2077 print "of hashing that SquirrelMail employs in your data and attachment\n";
eaace00e 2078 print "directories. This value must be an integer ranging from 0 to 4.\n";
598294a7 2079 print "When this value is set to 0, SquirrelMail will simply store all\n";
eaace00e 2080 print "files as normal in the data and attachment directories. However,\n";
2081 print "when set to a value from 1 to 4, a simple hashing scheme will be\n";
2082 print "used to organize the files in this directory. In short, the crc32\n";
2083 print "value for a username will be computed. Then, up to the first 4\n";
2084 print "digits of the hash, as set by this configuration value, will be\n";
2085 print "used to directory hash the files for that user in the data and\n";
2086 print "attachment directory. This allows for better performance on\n";
2087 print "servers with larger numbers of users.\n";
2088 print "\n";
2089
2090 print "[$WHT$dir_hash_level$NRM]: $WHT";
2091 $new_dir_hash_level = <STDIN>;
2092 if ( $new_dir_hash_level eq "\n" ) {
2093 $new_dir_hash_level = $dir_hash_level;
2094 } else {
85645192 2095 $new_dir_hash_level =~ s/[\r\n]//g;
eaace00e 2096 }
2097 if ( ( int($new_dir_hash_level) < 0 )
2098 || ( int($new_dir_hash_level) > 4 )
2099 || !( int($new_dir_hash_level) eq $new_dir_hash_level ) ) {
2100 print "Invalid Directory Hash Level.\n";
2101 print "Value must be an integer ranging from 0 to 4\n";
2102 print "Hit enter to continue.\n";
2103 $enter_key = <STDIN>;
2104
2105 $new_dir_hash_level = $dir_hash_level;
2106 }
2107
2108 return $new_dir_hash_level;
3392dc86 2109}
ccfb2029 2110
2111sub command35 {
eaace00e 2112 print "This is the default size (in pixels) of the left folder list.\n";
2113 print "Default is 200, but you can set it to whatever you wish. This\n";
2114 print "is a user preference, so this will only show up as their default.\n";
2115 print "\n";
2116 print "[$WHT$default_left_size$NRM]: $WHT";
2117 $new_default_left_size = <STDIN>;
2118 if ( $new_default_left_size eq "\n" ) {
2119 $new_default_left_size = $default_left_size;
2120 } else {
85645192 2121 $new_default_left_size =~ s/[\r\n]//g;
eaace00e 2122 }
2123 return $new_default_left_size;
ccfb2029 2124}
2125
985f7c88 2126sub command36 {
eaace00e 2127 print "Some IMAP servers only have lowercase letters in the usernames\n";
2128 print "but they still allow people with uppercase to log in. This\n";
2129 print "causes a problem with the user's preference files. This option\n";
2130 print "transparently changes all usernames to lowercase.";
2131 print "\n";
2132
35aaf666 2133 if ( lc($force_username_lowercase) eq 'true' ) {
eaace00e 2134 $default_value = "y";
2135 } else {
2136 $default_value = "n";
2137 }
2138 print "Convert usernames to lowercase (y/n) [$WHT$default_value$NRM]: $WHT";
2139 $new_show = <STDIN>;
2140 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2141 return 'true';
eaace00e 2142 }
35aaf666 2143 return 'false';
985f7c88 2144}
2145
0d15cd19 2146sub command37 {
eaace00e 2147 print "";
2148 print "\n";
985f7c88 2149
35aaf666 2150 if ( lc($default_use_priority) eq 'true' ) {
eaace00e 2151 $default_value = "y";
2152 } else {
2153 $default_value = "n";
2154 }
2155
2156 print "Allow users to specify priority of outgoing mail (y/n) [$WHT$default_value$NRM]: $WHT";
2157 $new_show = <STDIN>;
2158 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2159 return 'true';
eaace00e 2160 }
35aaf666 2161 return 'false';
826b7f71 2162}
2163
eaace00e 2164sub command38 {
2165 print "";
2166 print "\n";
2167
35aaf666 2168 if ( lc($default_hide_attribution) eq 'true' ) {
eaace00e 2169 $default_value = "y";
2170 } else {
2171 $default_value = "n";
2172 }
2173
2174 print "Hide SM attributions (y/n) [$WHT$default_value$NRM]: $WHT";
2175 $new_show = <STDIN>;
2176 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2177 return 'true';
eaace00e 2178 }
35aaf666 2179 return 'false';
eaace00e 2180}
826b7f71 2181
8c21da0c 2182sub command39 {
eaace00e 2183 print "";
2184 print "\n";
2185
35aaf666 2186 if ( lc($default_use_mdn) eq 'true' ) {
eaace00e 2187 $default_value = "y";
2188 } else {
2189 $default_value = "n";
2190 }
2191
2192 print "Enable support for read/delivery receipt support (y/n) [$WHT$default_value$NRM]: $WHT";
2193 $new_show = <STDIN>;
2194 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2195 return 'true';
eaace00e 2196 }
35aaf666 2197 return 'false';
8c21da0c 2198}
2199
432db2fc 2200
8a7d0669 2201sub command310 {
85bacb8f 2202 print " In loosely managed environments, you may want to allow users
2203 to edit their full name and email address. In strictly managed
bb08da84 2204 environments, you may want to force users to use the name
2205 and email address assigned to them.
85bacb8f 2206
bb08da84 2207 'y' - allow a user to edit their full name and email address,
2208 'n' - users must use the assigned values.
85bacb8f 2209
bb08da84 2210 ";
eaace00e 2211
35aaf666 2212 if ( lc($edit_identity) eq 'true' ) {
8a7d0669 2213 $default_value = "y";
2214 } else {
2215 $default_value = "n";
2216 }
2eec12b5 2217 print "Allow editing of user's identity? (y/n) [$WHT$default_value$NRM]: $WHT";
8a7d0669 2218 $new_edit = <STDIN>;
eaace00e 2219 if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2220 $edit_identity = 'true';
2221 $edit_name = 'true';
bb08da84 2222 $hide_auth_header = command311b();
8a7d0669 2223 } else {
35aaf666 2224 $edit_identity = 'false';
2eec12b5 2225 $edit_name = command311();
432db2fc 2226 $hide_auth_header = command311b();
8a7d0669 2227 }
2228 return $edit_identity;
2229}
2230
2231sub command311 {
85bacb8f 2232 print " Given that users are not allowed to modify their
bb08da84 2233 email address, can they edit their full name?
85bacb8f 2234
bb08da84 2235 ";
8a7d0669 2236
35aaf666 2237 if ( lc($edit_name) eq 'true' ) {
8a7d0669 2238 $default_value = "y";
2239 } else {
2240 $default_value = "n";
2241 }
bb08da84 2242 print "Allow the user to edit their full name? (y/n) [$WHT$default_value$NRM]: $WHT";
8a7d0669 2243 $new_edit = <STDIN>;
eaace00e 2244 if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2245 $edit_name = 'true';
8a7d0669 2246 } else {
35aaf666 2247 $edit_name = 'false';
8a7d0669 2248 }
2249 return $edit_name;
2250}
8c21da0c 2251
432db2fc 2252sub command311b {
bb08da84 2253 print " SquirrelMail adds username information to every sent email
85bacb8f 2254 in order to prevent possible sender forging when users are allowed
bb08da84 2255 to change their email and/or full name.
2256
85bacb8f 2257 You can remove user information from this header (y), if you think that
2258 it violates privacy or security.
2259
2260 Note: If users are allowed to change their email addresses,
bb08da84 2261 this setting will make it difficult to determine who sent what where.
2262 Use at your own risk.
85bacb8f 2263
bb08da84 2264 ";
85bacb8f 2265
432db2fc 2266 if ( lc($hide_auth_header) eq "true" ) {
2267 $default_value = "y";
2268 } else {
2269 $default_value = "n";
2270 }
2271 print "Remove username from email headers? (y/n) [$WHT$default_value$NRM]: $WHT";
2272 $new_header = <STDIN>;
2273 if ( ( $new_header =~ /^y\n/i ) || ( ( $new_header =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2274 $hide_auth_header = "true";
2275 } else {
2276 $hide_auth_header = "false";
2277 }
bb08da84 2278 return $hide_auth_header;
432db2fc 2279}
2280
7c612fdd 2281sub command312 {
801da708 2282 print "This option allows to disable server side thread sorting if your server \n";
2283 print "declares THREAD support, but you don't want to provide threading options \n";
2284 print "to end users or THREAD extension is broken or extension does not work with \n";
2285 print "options used by SquirrelMail. Option is not used, if THREAD extension is \n";
2286 print "not declared in IMAP CAPABILITY.\n";
7c612fdd 2287 print "\n";
2288
801da708 2289 if ( lc($disable_thread_sort) eq 'true' ) {
7c612fdd 2290 $default_value = "y";
2291 } else {
2292 $default_value = "n";
2293 }
801da708 2294 print "Disable server side thread sorting? (y/n) [$WHT$default_value$NRM]: $WHT";
11e00010 2295 $disable_thread_sort = <STDIN>;
2296 if ( ( $disable_thread_sort =~ /^y\n/i ) || ( ( $disable_thread_sort =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2297 $disable_thread_sort = 'true';
7c612fdd 2298 } else {
11e00010 2299 $disable_thread_sort = 'false';
7c612fdd 2300 }
11e00010 2301 return $disable_thread_sort;
7c612fdd 2302}
2303
aa0da530 2304sub command313 {
801da708 2305 print "This option allows to disable server side sorting if your server declares \n";
2306 print "SORT support, but SORT extension is broken or does not work with options \n";
2307 print "used by SquirrelMail. Option is not used, if SORT extension is not declared \n";
2308 print "in IMAP CAPABILITY.\n";
2309 print "\n";
2310 print "It is strongly recommended to keep server side sorting enabled, if your ";
2311 print "IMAP server supports it.";
aa0da530 2312 print "\n";
2313
11e00010 2314 if ( lc($disable_server_sort) eq 'true' ) {
aa0da530 2315 $default_value = "y";
2316 } else {
2317 $default_value = "n";
2318 }
801da708 2319 print "Disable server-side sorting? (y/n) [$WHT$default_value$NRM]: $WHT";
11e00010 2320 $disable_server_sort = <STDIN>;
2321 if ( ( $disable_server_sort =~ /^y\n/i ) || ( ( $disable_server_sort =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
2322 $disable_server_sort = 'true';
aa0da530 2323 } else {
11e00010 2324 $disable_server_sort = 'false';
aa0da530 2325 }
11e00010 2326 return $disable_server_sort;
aa0da530 2327}
2328
65ffb3ce 2329sub command314 {
2330 print "This option allows you to choose if SM uses charset search\n";
2331 print "Your IMAP server must support the SEARCH CHARSET command for this to work\n";
2332 print "\n";
2333
35aaf666 2334 if ( lc($allow_charset_search) eq 'true' ) {
65ffb3ce 2335 $default_value = "y";
2336 } else {
2337 $default_value = "n";
2338 }
2339 print "Allow charset searching? (y/n) [$WHT$default_value$NRM]: $WHT";
2340 $allow_charset_search = <STDIN>;
2341 if ( ( $allow_charset_search =~ /^y\n/i ) || ( ( $allow_charset_search =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 2342 $allow_charset_search = 'true';
65ffb3ce 2343 } else {
35aaf666 2344 $allow_charset_search = 'false';
65ffb3ce 2345 }
2346 return $allow_charset_search;
2347}
2348
4ecd3a70 2349# command315 (UID support) obsoleted.
3c7ee482 2350
de74555e 2351# advanced search option
6c499577 2352sub command316 {
66bfb27b 2353 print "This option allows you to control the use of advanced search form.\n";
0f1b00b8 2354 print " 0 = enable basic search only\n";
2355 print " 1 = enable advanced search only\n";
2356 print " 2 = enable both\n";
2357 print "\n";
2358
2359 print "Allowed search (0,1,2)? [$WHT$allow_advanced_search$NRM]: $WHT";
2360 $new_allow_advanced_search = <STDIN>;
85645192 2361 if ( $new_allow_advanced_search =~ /^[012]\n/i ) {
0f1b00b8 2362 $allow_advanced_search = $new_allow_advanced_search;
de74555e 2363 }
85645192 2364 $allow_advanced_search =~ s/[\r\n]//g;
66bfb27b 2365 return $allow_advanced_search;
de74555e 2366}
2367
2368
2369sub command317 {
35aaf666 2370 print "This option allows you to change the name of the PHP session used\n";
2371 print "by SquirrelMail. Unless you know what you are doing, you probably\n";
2372 print "don't need or want to change this from the default of SQMSESSID.\n";
6c499577 2373 print "[$WHT$session_name$NRM]: $WHT";
2374 $new_session_name = <STDIN>;
35aaf666 2375 chomp($new_session_name);
6614128e 2376 if ( $new_session_name eq "" ) {
6c499577 2377 $new_session_name = $session_name;
2378 }
2379 return $new_session_name;
2380}
2381
ee20a285 2382# time zone config (since 1.5.1)
2383sub command318 {
2384 print "This option allows you to control the use of time zones.\n";
2385 print " 0 = (default) standard, GNU C time zone names\n";
2386 print " 1 = strict, generic time zone codes with offsets\n";
2387 print " 2 = custom, GNU C time zones loaded from config/timezones.php\n";
2388 print " 3 = custom strict, generic time zone codes with offsets loaded \n";
2389 print " from config/timezones.php\n";
2390 print "See SquirrelMail documentation about format of config/timezones.php file.\n";
2391 print "\n";
2392
2393 print "Used time zone configuration (0,1,2,3)? [$WHT$time_zone_type$NRM]: $WHT";
2394 $new_time_zone_type = <STDIN>;
2395 if ( $new_time_zone_type =~ /^[0123]\n/i ) {
2396 $time_zone_type = $new_time_zone_type;
2397 } else {
2398 print "\nInvalid configuration value.\n";
2399 print "\nPress enter to continue...";
2400 $tmp = <STDIN>;
2401 }
2402 $time_zone_type =~ s/[\r\n]//g;
2403 return $time_zone_type;
2404}
dcc1cc82 2405
65ffb3ce 2406
ccfb2029 2407sub command41 {
2eec12b5 2408 print "\nDefine the themes that you wish to use. If you have added ";
2409 print "a theme of your own, just follow the instructions (?) about how to add ";
eaace00e 2410 print "them. You can also change the default theme.\n";
2411 print "[theme] command (?=help) > ";
2412 $input = <STDIN>;
85645192 2413 $input =~ s/[\r\n]//g;
eaace00e 2414 while ( $input ne "d" ) {
2415 if ( $input =~ /^\s*l\s*/i ) {
2416 $count = 0;
2417 while ( $count <= $#theme_name ) {
2418 if ( $count == $theme_default ) {
2419 print " *";
2420 } else {
2421 print " ";
2422 }
2eec12b5 2423 if ( $count < 10 ) {
2424 print " ";
2425 }
eaace00e 2426 $name = $theme_name[$count];
2eec12b5 2427 $num_spaces = 35 - length($name);
eaace00e 2428 for ( $i = 0 ; $i < $num_spaces ; $i++ ) {
2429 $name = $name . " ";
2430 }
2431
2432 print " $count. $name";
2433 print "($theme_path[$count])\n";
2434
2435 $count++;
ccfb2029 2436 }
eaace00e 2437 } elsif ( $input =~ /^\s*m\s*[0-9]+/i ) {
2438 $old_def = $theme_default;
2439 $theme_default = $input;
2440 $theme_default =~ s/^\s*m\s*//;
2441 if ( ( $theme_default > $#theme_name ) || ( $theme_default < 0 ) ) {
2442 print "Cannot set default theme to $theme_default. That theme does not exist.\n";
2443 $theme_default = $old_def;
ccfb2029 2444 }
eaace00e 2445 } elsif ( $input =~ /^\s*\+/ ) {
2446 print "What is the name of this theme: ";
2447 $name = <STDIN>;
85645192 2448 $name =~ s/[\r\n]//g;
eaace00e 2449 $theme_name[ $#theme_name + 1 ] = $name;
2450 print "Be sure to put ../themes/ before the filename.\n";
2451 print "What file is this stored in (ex: ../themes/default_theme.php): ";
2452 $name = <STDIN>;
85645192 2453 $name =~ s/[\r\n]//g;
eaace00e 2454 $theme_path[ $#theme_path + 1 ] = $name;
2455 } elsif ( $input =~ /^\s*-\s*[0-9]?/ ) {
2456 if ( $input =~ /[0-9]+\s*$/ ) {
2457 $rem_num = $input;
2458 $rem_num =~ s/^\s*-\s*//g;
2459 $rem_num =~ s/\s*$//;
2460 } else {
2461 $rem_num = $#theme_name;
ccfb2029 2462 }
eaace00e 2463 if ( $rem_num == $theme_default ) {
2464 print "You cannot remove the default theme!\n";
2465 } else {
2466 $count = 0;
2467 @new_theme_name = ();
2468 @new_theme_path = ();
2469 while ( $count <= $#theme_name ) {
2470 if ( $count != $rem_num ) {
2471 @new_theme_name = ( @new_theme_name, $theme_name[$count] );
2472 @new_theme_path = ( @new_theme_path, $theme_path[$count] );
2473 }
2474 $count++;
2475 }
2476 @theme_name = @new_theme_name;
2477 @theme_path = @new_theme_path;
2478 if ( $theme_default > $rem_num ) {
2479 $theme_default--;
2480 }
8442ac08 2481 }
eaace00e 2482 } elsif ( $input =~ /^\s*t\s*/i ) {
2483 print "\nStarting detection...\n\n";
2484
2485 opendir( DIR, "../themes" );
2486 @files = grep { /\.php$/i } readdir(DIR);
2487 $cnt = 0;
2488 while ( $cnt <= $#files ) {
2489 $filename = "../themes/" . $files[$cnt];
2490 if ( $filename ne "../themes/index.php" ) {
2491 $found = 0;
2492 for ( $x = 0 ; $x <= $#theme_path ; $x++ ) {
2493 if ( $theme_path[$x] eq $filename ) {
2494 $found = 1;
2495 }
2496 }
2497 if ( $found != 1 ) {
2498 print "** Found theme: $filename\n";
2499 print " What is its name? ";
2500 $nm = <STDIN>;
85645192 2501 $nm =~ s/[\n\r]//g;
eaace00e 2502 $theme_name[ $#theme_name + 1 ] = $nm;
2503 $theme_path[ $#theme_path + 1 ] = $filename;
2504 }
2505 }
2506 $cnt++;
8442ac08 2507 }
eaace00e 2508 print "\n";
2509 for ( $cnt = 0 ; $cnt <= $#theme_path ; $cnt++ ) {
2510 $filename = $theme_path[$cnt];
2511 if ( !( -e $filename ) ) {
2512 print " Removing $filename (file not found)\n";
2513 $offset = 0;
2514 @new_theme_name = ();
2515 @new_theme_path = ();
2516 for ( $x = 0 ; $x < $#theme_path ; $x++ ) {
2517 if ( $theme_path[$x] eq $filename ) {
2518 $offset = 1;
2519 }
2520 if ( $offset == 1 ) {
2521 $new_theme_name[$x] = $theme_name[ $x + 1 ];
2522 $new_theme_path[$x] = $theme_path[ $x + 1 ];
2523 } else {
2524 $new_theme_name[$x] = $theme_name[$x];
2525 $new_theme_path[$x] = $theme_path[$x];
2526 }
2527 }
2528 @theme_name = @new_theme_name;
2529 @theme_path = @new_theme_path;
2530 }
2531 }
2532 print "\nDetection complete!\n\n";
2533
2534 closedir DIR;
2535 } elsif ( $input =~ /^\s*\?\s*/ ) {
2536 print ".-------------------------.\n";
2537 print "| t (detect themes) |\n";
2538 print "| + (add theme) |\n";
2539 print "| - N (remove theme) |\n";
2540 print "| m N (mark default) |\n";
2541 print "| l (list themes) |\n";
2542 print "| d (done) |\n";
2543 print "`-------------------------'\n";
2544 }
2545 print "[theme] command (?=help) > ";
2546 $input = <STDIN>;
85645192 2547 $input =~ s/[\r\n]//g;
eaace00e 2548 }
2549}
ccfb2029 2550
85bacb8f 2551sub command_templates {
2552 print "\nDefine the template sets that you wish to use. If you have added ";
2553 print "a template set of your own, just follow the instructions (?) about how to add ";
2554 print "them. You can also change the default template.\n";
2555
2556 print "\n Available Templates:\n";
2557
2558 $count = 0;
2559 while ( $count <= $#templateset_name ) {
2560 if ( $count == $templateset_default ) {
2561 print " *";
2562 } else {
2563 print " ";
2564 }
2565 if ( $count < 10 ) {
2566 print " ";
2567 }
2568 $name = $templateset_name[$count];
2569 $num_spaces = 35 - length($name);
2570 for ( $i = 0 ; $i < $num_spaces ; $i++ ) {
2571 $name = $name . " ";
2572 }
2573
2574 print " $count. $name";
2575 print "($templateset_path[$count])\n";
2576
2577 $count++;
2578 }
2579
2580# opendir( DIR, "../templates" );
2581# @files = readdir(DIR);
2582# $pos = 0;
2583#
2584# while ( $cnt <= $#files ) {
2585# if ( -d "../templates/" . $files[$i] && $files[$i] !~ /^\./ && $files[$i] ne "CVS" ) {
2586# $filename = "../templates/" . $files[$cnt];
2587# $found = 0;
2588# for ( $x = 0 ; $x <= $#templateset_path ; $x++ ) {
2589# if ( $theme_path[$x] eq $filename ) {
2590# $found = 1;
2591# }
2592# }
2593# }
2594# $cnt++;
2595# }
2596# for ( $i = 0 ; $i <= $#files ; $i++ ) {
2597# if ( -d "../templates/" . $files[$i] && $files[$i] !~ /^\./ && $files[$i] ne "CVS" ) {
2598# $match = 0;
2599# for ( $k = 0 ; $k <= $#aTemplateSets ; $k++ ) {
2600# if ( $aTemplateSets[$chosen] eq $files[$i] ) {
2601# $match = 1;
2602# }
2603# }
2604# if ( $match == 0 ) {
2605# $unused_plugins[$pos] = $files[$i];
2606# $pos++;
2607# }
2608# }
2609# }
2610#
2611# for ( $i = 0 ; $i <= $#unused_plugins ; $i++ ) {
2612# $num = $num + 1;
2613# print " $num. $unused_plugins[$i]\n";
2614# }
2615# closedir DIR;
2616
2617 print "\n";
2618 print ".--------------------------------.\n";
2619 print "| t (detect templates set) |\n";
2620 print "| + (add template set) |\n";
2621 print "| - N (remove template set) |\n";
2622 print "| m N (mark template set) |\n";
2623 print "| l (list template set) |\n";
2624 print "| d (done) |\n";
2625 print "`--------------------------------'\n";
2626 print "\n[template set] command (?=help) > ";
2627
2628 $input = <STDIN>;
2629 $input =~ s/[\r\n]//g;
2630 while ( $input ne "d" ) {
2631 if ( $input =~ /^\s*l\s*/i ) {
2632 $count = 0;
2633 while ( $count <= $#templateset_name ) {
2634 if ( $count == $templateset_default ) {
2635 print " *";
2636 } else {
2637 print " ";
2638 }
2639 if ( $count < 10 ) {
2640 print " ";
2641 }
2642 $name = $templateset_name[$count];
2643 $num_spaces = 35 - length($name);
2644 for ( $i = 0 ; $i < $num_spaces ; $i++ ) {
2645 $name = $name . " ";
2646 }
2647
2648 print " $count. $name";
2649 print "($templateset_path[$count])\n";
2650
2651 $count++;
2652 }
2653 } elsif ( $input =~ /^\s*m\s*[0-9]+/i ) {
2654 $old_def = $templateset_default;
2655 $templateset_default = $input;
2656 $templateset_default =~ s/^\s*m\s*//;
2657 if ( ( $templateset_default > $#templateset_name ) || ( $templateset_default < 0 ) ) {
2658 print "Cannot set default template set to $templateset_default. That template set does not exist.\n";
2659 $templateset_default = $old_def;
2660 }
2661 } elsif ( $input =~ /^\s*\+/ ) {
2662 print "What is the name of this template: ";
2663 $name = <STDIN>;
2664 $name =~ s/[\r\n]//g;
2665 $templateset_name[ $#templateset_name + 1 ] = $name;
2666 print "Be sure to put ../templates/ before the dirname.\n";
2667 print "What file is this stored in (ex: ../templates/default/): ";
2668 $name = <STDIN>;
2669 $name =~ s/[\r\n]//g;
2670 $templateset_path[ $#templateset_path + 1 ] = $name;
2671 } elsif ( $input =~ /^\s*t\s*/i ) {
2672 print "\nStarting detection...\n\n";
2673 opendir( DIR, "../templates" );
2674 @files = readdir(DIR);
2675 $cnt = 0;
2676 $detected = 0;
2677 while ( $cnt <= $#files ) {
2678 if ( -d "../templates/" . $files[$cnt] && $files[$cnt] !~ /^\./ && $files[$cnt] ne "CVS" ) {
2679 $filename = "../templates/" . $files[$cnt]. "/";
2680 $found = 0;
2681 for ( $x = 0 ; $x <= $#templateset_path ; $x++ ) {
2682 if ( $templateset_path[$x] eq $filename ) {
2683 $found = 1;
2684 }
2685 }
2686 if ( $found != 1 && $detected == 0) {
2687 $templateset_path[ $#templateset_path + 1 ] = $filename;
2688 $templateset_name[ $#templateset_name + 1 ] = "Default template";
2689 $aTemplateSet[ $#templateset_name + 1 ] = "Default template";
2690 $aTemplateSet[ $#templateset_path + 1 ] = $filename;
2691 } elsif ( $found != 1) {
2692 print "** Found template set: $filename\n";
2693 print " What is it's name? ";
2694 $nm = <STDIN>;
2695 $nm =~ s/[\n\r]//g;
2696 $templateset_path[ $#templateset_path + 1 ] = $filename;
2697 $templateset_name[ $#templateset_name + 1 ] = $nm;
2698
2699 $aTemplateSet[ $#templateset_name + 1 ] = $nm;
2700 $aTemplateSet[ $#templateset_path + 1 ] = $filename;
2701 }
2702 $detected++;
2703 }
2704 $cnt++;
2705 }
2706 print "\n";
2707 for ( $cnt = 0 ; $cnt <= $#templateset_path ; $cnt++ ) {
2708 $filename = $templateset_path[$cnt];
2709 if ( !(-d $filename) ) {
2710 print " Removing $filename (file not found)\n";
2711 $offset = 0;
2712 @new_templateset_name = ();
2713 @new_templateset_path = ();
2714 for ( $x = 0 ; $x < $#templateset_path ; $x++ ) {
2715 if ( $templateset_path[$x] eq $filename ) {
2716 $offset = 1;
2717 }
2718 if ( $offset == 1 ) {
2719 $new_templateset_name[$x] = $templateset_name[ $x + 1 ];
2720 $new_theme_path[$x] = $templateset_path[ $x + 1 ];
2721 } else {
2722 $new_templateset_name[$x] = $templateset_name[$x];
2723 $new_templateset_path[$x] = $templateset_path[$x];
2724 }
2725 }
2726 @templateset_name = @new_templateset_name;
2727 @templateset_path = @new_templateset_path;
2728 }
2729 }
2730 print "\nDetection complete!\n\n";
2731
2732 closedir DIR;
2733 } elsif ( $input =~ /^\s*-\s*[0-9]?/ ) {
2734 if ( $input =~ /[0-9]+\s*$/ ) {
2735 $rem_num = $input;
2736 $rem_num =~ s/^\s*-\s*//g;
2737 $rem_num =~ s/\s*$//;
2738 } else {
2739 $rem_num = $#templateset_name;
2740 }
2741 if ( $rem_num == $templateset_default ) {
2742 print "You cannot remove the default template set!\n";
2743 } else {
2744 $count = 0;
2745 @new_templateset_name = ();
2746 @new_templateset_path = ();
2747 while ( $count <= $#templateset_name ) {
2748 if ( $count != $rem_num ) {
2749 @new_templateset_name = ( @new_templateset_name, $templateset_name[$count] );
2750 @new_templateset_path = ( @new_templateset_path, $templateset_path[$count] );
2751 }
2752 $count++;
2753 }
2754 @templateset_name = @new_templateset_name;
2755 @templateset_path = @new_templateset_path;
2756 if ( $templateset_default > $rem_num ) {
2757 $templateset_default--;
2758 }
2759 }
2760 } elsif ( $input =~ /^\s*\?\s*/ ) {
2761 print ".--------------------------------.\n";
2762 print "| t (detect templates set) |\n";
2763 print "| + (add template set) |\n";
2764 print "| - N (remove template set) |\n";
2765 print "| m N (mark template set) |\n";
2766 print "| l (list template set) |\n";
2767 print "| d (done) |\n";
2768 print "`--------------------------------'\n";
2769 }
2770 print "[template set] command (?=help) > ";
2771 $input = <STDIN>;
2772 $input =~ s/[\r\n]//g;
2773 }
2774 return $templateset_default;
2775}
2776
2777
6f3bfa54 2778# Theme - CSS file
2779sub command42 {
eaace00e 2780 print "You may specify a cascading style-sheet (CSS) file to be included\n";
2781 print "on each html page generated by SquirrelMail. The CSS file is useful\n";
2782 print "for specifying a site-wide font. If you're not familiar with CSS\n";
2783 print "files, leave this blank.\n";
2784 print "\n";
2785 print "To clear out an existing value, just type a space for the input.\n";
2786 print "\n";
25be56ab 2787 print "Please be aware of the following: \n";
2788 print " - Relative URLs are relative to the config dir\n";
2789 print " to use the themes directory, use ../themes/css/newdefault.css\n";
2790 print " - To specify a css file defined outside the SquirrelMail source tree\n";
2791 print " use the absolute URL the webserver would use to include the file\n";
2792 print " e.g. http://some.host.com/css/mystyle.css or /css/mystyle.css\n";
8bd9e0dd 2793 print "\n";
eaace00e 2794 print "[$WHT$theme_css$NRM]: $WHT";
2795 $new_theme_css = <STDIN>;
6f3bfa54 2796
eaace00e 2797 if ( $new_theme_css eq "\n" ) {
2798 $new_theme_css = $theme_css;
2799 } else {
85645192 2800 $new_theme_css =~ s/[\r\n]//g;
eaace00e 2801 }
2802 $new_theme_css =~ s/^\s*//;
2803 return $new_theme_css;
2804}
6f3bfa54 2805
81132de8 2806# sets default font size option
2807sub command_default_fontsize {
2808 print "Enter default font size [$WHT$$default_fontsize$NRM]: $WHT";
2809 $new_size = <STDIN>;
2810 if ( $new_size eq "\n" ) {
2811 $new_size = $size;
2812 } else {
2813 $new_size =~ s/[\r\n]//g;
2814 }
2815 return $new_size;
2816}
2817
2818# controls available fontsets
2819sub command_fontsets {
2820 # Greeting
2821 print "You can control fontsets available to end users here.\n";
2822 # set initial $input value
2823 $input = 'l';
2824 while ( $input ne "x" ) {
2825 if ( $input =~ /^\s*a\s*/i ) {
2826 # add new fontset
2827 print "\nFontset name: ";
2828 $name = <STDIN>;
2829 if (! $fontsets{trim($name)}) {
2830 print "Fontset string: ";
2831 $value = <STDIN>;
2832 $fontsets{trim($name)} = trim($value);
2833 } else {
2834 print "\nERROR: Such fontset already exists.\n";
2835 }
2836 } elsif ( $input =~ /^\s*e\s*/i ) {
2837 # edit existing fontset
2838 print "\nFontset name: ";
2839 $name = <STDIN>;
2840 if (! $fontsets{trim($name)}) {
2841 print "\nERROR: No such fontset.\n";
2842 } else {
2843 print "Fontset string [$fontsets{trim($name)}]: ";
2844 $value = <STDIN>;
2845 $fontsets{trim($name)} = trim($value);
2846 }
2847 } elsif ( $input =~ /^\s*d\s*/ ) {
2848 # delete existing fontset
2849 print "\nFontset name: ";
2850 $name = <STDIN>;
2851 if (! $fontsets{trim($name)}) {
2852 print "\nERROR: No such fontset.\n";
2853 } else {
2854 delete $fontsets{trim($name)};
2855 }
2856 } elsif ( $input =~ /^\s*l\s*/ ) {
2857 # list fontsets
2858 print "\nConfigured fontsets:\n";
2859 while (($fontset_name, $fontset_string) = each(%fontsets)) {
2860 print " $fontset_name = $fontset_string\n";
2861 }
2862 print "Default fontset: $default_fontset\n";
2863 } elsif ( $input =~ /^\s*m\s*/ ) {
2864 # set default fontset
2865 print "\nSet default fontset [$default_fontset]: ";
2866 $name = <STDIN>;
2867 if (trim($name) ne '' and ! $fontsets{trim($name)}) {
2868 print "\nERROR: No such fontset.\n";
2869 } else {
2870 $default_fontset = trim($name);
2871 }
2872 } else {
2873 # print available commands on any other input
2874 print "\nAvailable commands:\n";
2875 print " a - Adds new fontset.\n";
2876 print " d - Deletes existing fontset.\n";
2877 print " e - Edits existing fontset.\n";
2878 print " h or ? - Shows this help screen.\n";
2879 print " l - Lists available fontsets.\n";
2880 print " m - Sets default fontset.\n";
2881 print " x - Exits fontset editor mode.\n";
2882 }
2883 print "\nCommand [fontsets] (a,d,e,h,?=help,l,m,x)> ";
2884 $input = <STDIN>;
2885 $input =~ s/[\r\n]//g;
2886 }
2887}
2888
1e0628fb 2889sub command61 {
eaace00e 2890 print "You can now define different LDAP servers.\n";
2891 print "[ldap] command (?=help) > ";
2892 $input = <STDIN>;
85645192 2893 $input =~ s/[\r\n]//g;
eaace00e 2894 while ( $input ne "d" ) {
2895 if ( $input =~ /^\s*l\s*/i ) {
2896 $count = 0;
2897 while ( $count <= $#ldap_host ) {
2898 print "$count. $ldap_host[$count]\n";
2899 print " base: $ldap_base[$count]\n";
2900 if ( $ldap_charset[$count] ) {
2901 print " charset: $ldap_charset[$count]\n";
2902 }
2903 if ( $ldap_port[$count] ) {
2904 print " port: $ldap_port[$count]\n";
2905 }
2906 if ( $ldap_name[$count] ) {
2907 print " name: $ldap_name[$count]\n";
2908 }
2909 if ( $ldap_maxrows[$count] ) {
2910 print " maxrows: $ldap_maxrows[$count]\n";
2911 }
43397658 2912 if ( $ldap_filter[$count] ) {
2913 print " filter: $ldap_filter[$count]\n";
2914 }
30e9932c 2915 if ( $ldap_binddn[$count] ) {
2916 print " binddn: $ldap_binddn[$count]\n";
2917 if ( $ldap_bindpw[$count] ) {
2918 print " bindpw: $ldap_bindpw[$count]\n";
2919 }
2920 }
43397658 2921 if ( $ldap_protocol[$count] ) {
30e9932c 2922 print " protocol: $ldap_protocol[$count]\n";
2923 }
43397658 2924 if ( $ldap_limit_scope[$count] ) {
2925 print " limit_scope: $ldap_limit_scope[$count]\n";
2926 }
327e2d96 2927 if ( $ldap_listing[$count] ) {
2928 print " listing: $ldap_listing[$count]\n";
2929 }
593370a4 2930 if ( $ldap_search_tree[$count] ) {
2931 print " search_tree: $ldap_search_tree[$count]\n";
2932 }
2933 if ( $ldap_starttls[$count] ) {
2934 print " starttls: $ldap_starttls[$count]\n";
2935 }
30e9932c 2936
eaace00e 2937 print "\n";
2938 $count++;
a93b12ba 2939 }
eaace00e 2940 } elsif ( $input =~ /^\s*\+/ ) {
2941 $sub = $#ldap_host + 1;
2942
2943 print "First, we need to have the hostname or the IP address where\n";
2944 print "this LDAP server resides. Example: ldap.bigfoot.com\n";
2945 print "hostname: ";
2946 $name = <STDIN>;
85645192 2947 $name =~ s/[\r\n]//g;
eaace00e 2948 $ldap_host[$sub] = $name;
2949
2950 print "\n";
2951
2952 print "Next, we need the server root (base dn). For this, an empty\n";
2953 print "string is allowed.\n";
2954 print "Example: ou=member_directory,o=netcenter.com\n";
2955 print "base: ";
2956 $name = <STDIN>;
85645192 2957 $name =~ s/[\r\n]//g;
eaace00e 2958 $ldap_base[$sub] = $name;
2959
2960 print "\n";
2961
2962 print "This is the TCP/IP port number for the LDAP server. Default\n";
2963 print "port is 389. This is optional. Press ENTER for default.\n";
2964 print "port: ";
2965 $name = <STDIN>;
85645192 2966 $name =~ s/[\r\n]//g;
eaace00e 2967 $ldap_port[$sub] = $name;
2968
2969 print "\n";
2970
2971 print "This is the charset for the server. Default is utf-8. This\n";
2972 print "is also optional. Press ENTER for default.\n";
2973 print "charset: ";
2974 $name = <STDIN>;
85645192 2975 $name =~ s/[\r\n]//g;
eaace00e 2976 $ldap_charset[$sub] = $name;
2977
2978 print "\n";
2979
2980 print "This is the name for the server, used to tag the results of\n";
2981 print "the search. Default it \"LDAP: hostname\". Press ENTER for default\n";
2982 print "name: ";
2983 $name = <STDIN>;
85645192 2984 $name =~ s/[\r\n]//g;
eaace00e 2985 $ldap_name[$sub] = $name;
2986
2987 print "\n";
2988
2989 print "You can specify the maximum number of rows in the search result.\n";
327e2d96 2990 print "Default value is equal to 250 rows. Press ENTER for default.\n";
eaace00e 2991 print "maxrows: ";
2992 $name = <STDIN>;
85645192 2993 $name =~ s/[\r\n]//g;
eaace00e 2994 $ldap_maxrows[$sub] = $name;
2995
43397658 2996
2997 print "\n";
2998
30e9932c 2999 print "If your LDAP server does not like anonymous logins, you can specify bind DN.\n";
3000 print "Default is none, anonymous bind. Press ENTER for default.\n";
3001 print "binddn: ";
3002 $name = <STDIN>;
85645192 3003 $name =~ s/[\r\n]//g;
30e9932c 3004 $ldap_binddn[$sub] = $name;
3005
3006 print "\n";
3007
3008 if ( $ldap_binddn[$sub] ne '' ) {
3009
3010 print "Now, please specify password for that DN.\n";
3011 print "bindpw: ";
3012 $name = <STDIN>;
85645192 3013 $name =~ s/[\r\n]//g;
30e9932c 3014 $ldap_bindpw[$sub] = $name;
3015
3016 print "\n";
3017 }
3018
43397658 3019 print "You can specify bind protocol version here.\n";
30e9932c 3020 print "Default protocol version depends on your php ldap settings.\n";
43397658 3021 print "Press ENTER for default.\n";
30e9932c 3022 print "protocol: ";
3023 $name = <STDIN>;
85645192 3024 $name =~ s/[\r\n]//g;
30e9932c 3025 $ldap_protocol[$sub] = $name;
3026
3027 print "\n";
3028
327e2d96 3029 print "This configuration section allows to set some rarely used\n";
3030 print "options and options specific to some LDAP implementations.\n";
43397658 3031 print "\n";
327e2d96 3032 print "Do you want to set advanced LDAP directory settings? (y/N):";
3033 $ldap_advanced_settings = <STDIN>;
3034 if ( $ldap_advanced_settings =~ /^y\n/i ) {
3035 $ldap_advanced_settings = 'true';
43397658 3036 } else {
327e2d96 3037 $ldap_advanced_settings = 'false';
43397658 3038 }
43397658 3039
327e2d96 3040 if ($ldap_advanced_settings eq 'true') {
3041 print "\n";
3042
3043 print "You can control LDAP directory listing here. This option can\n";
3044 print "be useful if you run small LDAP server and want to provide listing\n";
3045 print "of all addresses stored in LDAP to users of webmail interface.\n";
3046 print "Number of displayed entries is limited by maxrows setting.\n";
3047 print "\n";
3048 print "Don't enable this option for public LDAP directories.\n";
3049 print "This feature is experimental.\n";
3050 print "\n";
3051 print "Allow listing of LDAP directory? (y/N):";
3052 $name = <STDIN>;
3053 if ( $name =~ /^y\n/i ) {
3054 $name = 'true';
3055 } else {
3056 $name = 'false';
3057 }
3058 $ldap_listing[$sub] = $name;
3059
3060 print "\n";
3061
3062 print "You can specify an additional search filter.\n";
3063 print "This could be something like \"(objectclass=posixAccount)\".\n";
3064 print "No filtering is performed by default. Press ENTER for default.\n";
3065 print "filter: ";
3066 $name = <STDIN>;
3067 $name =~ s/[\r|\n]//g;
3068 $ldap_filter[$sub] = $name;
3069
3070 print "\n";
3071
3072 print "You can control search scope here.\n";
3073 print "This option is specific to Microsoft ADS implementation.\n";
3074 print "It requires use of v3 or newer LDAP protocol.\n";
3075 print "Don't enable it, if you use other LDAP server.\n";
3076 print "\n";
3077 print "Limit ldap scope? (y/N):";
3078 $name = <STDIN>;
3079 if ( $name =~ /^y\n/i ) {
3080 $name = 'true';
3081 } else {
3082 $name = 'false';
3083 }
3084 $ldap_limit_scope[$sub] = $name;
593370a4 3085
3086 print "\n";
3087
3088 print "You can control ldap search type here.\n";
3089 print "Addresses can be searched in entire LDAP subtree (default)\n";
3090 print "or only first level entries are returned.\n";
3091 print "\n";
3092 print "Search entire LDAP subtree? (Y/n):";
3093 $name = <STDIN>;
3094 if ( $name =~ /^n\n/i ) {
3095 $name = 'false';
3096 } else {
3097 $name = 'true';
3098 }
3099 $ldap_search_tree[$sub] = $name;
3100
3101 print "\n";
3102
3103 print "You can control use of StartTLS on LDAP connection here.\n";
3104 print "This option requires use of v3 or newer LDAP protocol and php 4.2+.\n";
3105 print "\n";
3106 print "Use StartTLS? (y/N):";
3107 $name = <STDIN>;
3108 if ( $name =~ /^y\n/i ) {
3109 $name = 'true';
3110 } else {
3111 $name = 'false';
3112 }
3113 $ldap_starttls[$sub] = $name;
327e2d96 3114 }
43397658 3115 print "\n";
3116
eaace00e 3117 } elsif ( $input =~ /^\s*-\s*[0-9]?/ ) {
3118 if ( $input =~ /[0-9]+\s*$/ ) {
3119 $rem_num = $input;
3120 $rem_num =~ s/^\s*-\s*//g;
3121 $rem_num =~ s/\s*$//;
3122 } else {
3123 $rem_num = $#ldap_host;
3124 }
3125 $count = 0;
3126 @new_ldap_host = ();
3127 @new_ldap_base = ();
3128 @new_ldap_port = ();
3129 @new_ldap_name = ();
3130 @new_ldap_charset = ();
3131 @new_ldap_maxrows = ();
43397658 3132 @new_ldap_filter = ();
30e9932c 3133 @new_ldap_bindpw = ();
3134 @new_ldap_binddn = ();
3135 @new_ldap_protocol = ();
43397658 3136 @new_ldap_limit_scope = ();
327e2d96 3137 @new_ldap_listing = ();
593370a4 3138 @new_ldap_search_tree = ();
3139 @new_ldap_starttls = ();
eaace00e 3140
3141 while ( $count <= $#ldap_host ) {
3142 if ( $count != $rem_num ) {
3143 @new_ldap_host = ( @new_ldap_host, $ldap_host[$count] );
3144 @new_ldap_base = ( @new_ldap_base, $ldap_base[$count] );
3145 @new_ldap_port = ( @new_ldap_port, $ldap_port[$count] );
3146 @new_ldap_name = ( @new_ldap_name, $ldap_name[$count] );
3147 @new_ldap_charset = ( @new_ldap_charset, $ldap_charset[$count] );
3148 @new_ldap_maxrows = ( @new_ldap_maxrows, $ldap_maxrows[$count] );
43397658 3149 @new_ldap_filter = ( @new_ldap_filter, $ldap_filter[$count] );
30e9932c 3150 @new_ldap_binddn = ( @new_ldap_binddn, $ldap_binddn[$count] );
3151 @new_ldap_bindpw = ( @new_ldap_bindpw, $ldap_bindpw[$count] );
3152 @new_ldap_protocol = ( @new_ldap_protocol, $ldap_protocol[$count] );
43397658 3153 @new_ldap_limit_scope = ( @new_ldap_limit_scope, $ldap_limit_scope[$count] );
327e2d96 3154 @new_ldap_listing = ( @new_ldap_listing, $ldap_listing[$count] );
593370a4 3155 @new_ldap_search_tree = ( @new_ldap_search_tree, $ldap_search_tree[$count] );
3156 @new_ldap_starttls = ( @new_ldap_starttls, $ldap_starttls[$count] );
eaace00e 3157 }
3158 $count++;
1e0628fb 3159 }
eaace00e 3160 @ldap_host = @new_ldap_host;
3161 @ldap_base = @new_ldap_base;
3162 @ldap_port = @new_ldap_port;
3163 @ldap_name = @new_ldap_name;
3164 @ldap_charset = @new_ldap_charset;
3165 @ldap_maxrows = @new_ldap_maxrows;
43397658 3166 @ldap_filter = @new_ldap_filter;
30e9932c 3167 @ldap_binddn = @new_ldap_binddn;
3168 @ldap_bindpw = @new_ldap_bindpw;
3169 @ldap_protocol = @new_ldap_protocol;
43397658 3170 @ldap_limit_scope = @new_ldap_limit_scope;
327e2d96 3171 @ldap_listing = @new_ldap_listing;
593370a4 3172 @ldap_search_tree = @new_ldap_search_tree;
3173 @ldap_starttls = @new_ldap_starttls;
30e9932c 3174
eaace00e 3175 } elsif ( $input =~ /^\s*\?\s*/ ) {
3176 print ".-------------------------.\n";
3177 print "| + (add host) |\n";
3178 print "| - N (remove host) |\n";
3179 print "| l (list hosts) |\n";
3180 print "| d (done) |\n";
3181 print "`-------------------------'\n";
3182 }
3183 print "[ldap] command (?=help) > ";
3184 $input = <STDIN>;
85645192 3185 $input =~ s/[\r\n]//g;
eaace00e 3186 }
3187}
1e0628fb 3188
3806fa52 3189sub command62 {
eaace00e 3190 print "Some of our developers have come up with very good javascript interface\n";
3191 print "for searching through address books, however, our original goals said\n";
3192 print "that we would be 100% HTML. In order to make it possible to use their\n";
3193 print "interface, and yet stick with our goals, we have also written a plain\n";
3194 print "HTML version of the search. Here, you can choose which version to use.\n";
3195 print "\n";
3196 print "This is just the default value. It is also a user option that each\n";
3197 print "user can configure individually\n";
3198 print "\n";
3199
35aaf666 3200 if ( lc($default_use_javascript_addr_book) eq 'true' ) {
eaace00e 3201 $default_value = "y";
3202 } else {
35aaf666 3203 $default_use_javascript_addr_book = 'false';
eaace00e 3204 $default_value = "n";
3205 }
3206 print "Use javascript version by default (y/n) [$WHT$default_value$NRM]: $WHT";
3207 $new_show = <STDIN>;
3208 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 3209 $default_use_javascript_addr_book = 'true';
eaace00e 3210 } else {
35aaf666 3211 $default_use_javascript_addr_book = 'false';
eaace00e 3212 }
3213 return $default_use_javascript_addr_book;
3806fa52 3214}
1e0628fb 3215
4272758c 3216# global filebased address book
3217sub command63 {
3218 print "If you want to use global file address book, then you\n";
3219 print "must set this option to a valid value. If option does\n";
3220 print "not have path elements, system assumes that file is\n";
3221 print "stored in data directory. If relative path is set, it is\n";
598294a7 3222 print "relative to main SquirrelMail directory. If value is empty,\n";
4272758c 3223 print "address book is not enabled.\n";
3224 print "\n";
3225
3226 print "[$WHT$abook_global_file$NRM]: $WHT";
3227 $new_abook_global_file = <STDIN>;
3228 if ( $new_abook_global_file eq "\n" ) {
3229 $new_abook_global_file = $abook_global_file;
3230 } else {
3231 $new_abook_global_file =~ s/[\r\n]//g;
3232 }
3233 return $new_abook_global_file;
3234}
3235
3236# writing into global filebased abook control
3237sub command64 {
7eb64c3e 3238 print "This setting controls writing into global file address\n";
3239 print "book options. Address book file must be writeable by\n";
3240 print "webserver's user, if you want to enable this option.\n";
4272758c 3241 print "\n";
3242
3243 if ( lc($abook_global_file_writeable) eq 'true' ) {
3244 $default_value = "y";
3245 } else {
3246 $abook_global_file_writeable = 'false';
3247 $default_value = "n";
3248 }
7eb64c3e 3249 print "Allow writing into global file address book (y/n) [$WHT$default_value$NRM]: $WHT";
4272758c 3250 $new_show = <STDIN>;
3251 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
3252 $abook_global_file_writeable = 'true';
3253 } else {
3254 $abook_global_file_writeable = 'false';
3255 }
3256 return $abook_global_file_writeable;
3257}
3258
71d3f882 3259# listing of global filebased abook control
3260sub command65 {
3261 print "This setting controls listing of global file address\n";
3262 print "book in addresses page.\n";
3263 print "\n";
3264
3265 if ( lc($abook_global_file_listing) eq 'true' ) {
3266 $default_value = "y";
3267 } else {
3268 $abook_global_file_listing = 'false';
3269 $default_value = "n";
3270 }
3271 print "Allow listing of global file address book (y/n) [$WHT$default_value$NRM]: $WHT";
3272 $new_show = <STDIN>;
3273 if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
3274 $abook_global_file_listing = 'true';
3275 } else {
3276 $abook_global_file_listing = 'false';
3277 }
3278 return $abook_global_file_listing;
3279}
3280
497203d4 3281sub command91 {
eaace00e 3282 print "If you want to store your users address book details in a database then\n";
3283 print "you need to set this DSN to a valid value. The format for this is:\n";
3284 print "mysql://user:pass\@hostname/dbname\n";
3285 print "Where mysql can be one of the databases PHP supports, the most common\n";
3286 print "of these are mysql, msql and pgsql\n";
3287 print "If the DSN is left empty (hit space and then return) the database\n";
3288 print "related code for address books will not be used\n";
3289 print "\n";
3290
3291 if ( $addrbook_dsn eq "" ) {
3292 $default_value = "Disabled";
3293 } else {
3294 $default_value = $addrbook_dsn;
3295 }
3296 print "[$WHT$addrbook_dsn$NRM]: $WHT";
3297 $new_dsn = <STDIN>;
3298 if ( $new_dsn eq "\n" ) {
3299 $new_dsn = "";
3300 } else {
85645192 3301 $new_dsn =~ s/[\r\n]//g;
eaace00e 3302 $new_dsn =~ s/^\s+$//g;
3303 }
3304 return $new_dsn;
497203d4 3305}
ccfb2029 3306
4f40a59d 3307sub command92 {
eaace00e 3308 print "This is the name of the table you want to store the address book\n";
3309 print "data in, it defaults to 'address'\n";
3310 print "\n";
3311 print "[$WHT$addrbook_table$NRM]: $WHT";
3312 $new_table = <STDIN>;
3313 if ( $new_table eq "\n" ) {
3314 $new_table = $addrbook_table;
3315 } else {
85645192 3316 $new_table =~ s/[\r\n]//g;
eaace00e 3317 }
3318 return $new_table;
4f40a59d 3319}
3320
3499f99f 3321sub command93 {
3322 print "If you want to store your users preferences in a database then\n";
3323 print "you need to set this DSN to a valid value. The format for this is:\n";
3324 print "mysql://user:pass\@hostname/dbname\n";
3325 print "Where mysql can be one of the databases PHP supports, the most common\n";
3326 print "of these are mysql, msql and pgsql\n";
3327 print "If the DSN is left empty (hit space and then return) the database\n";
3328 print "related code for address books will not be used\n";
3329 print "\n";
3330
eaace00e 3331 if ( $prefs_dsn eq "" ) {
3499f99f 3332 $default_value = "Disabled";
3333 } else {
3334 $default_value = $prefs_dsn;
3335 }
3336 print "[$WHT$prefs_dsn$NRM]: $WHT";
3337 $new_dsn = <STDIN>;
eaace00e 3338 if ( $new_dsn eq "\n" ) {
3499f99f 3339 $new_dsn = "";
3340 } else {
85645192 3341 $new_dsn =~ s/[\r\n]//g;
3499f99f 3342 $new_dsn =~ s/^\s+$//g;
3343 }
3344 return $new_dsn;
3345}
3346
3347sub command94 {
3348 print "This is the name of the table you want to store the preferences\n";
99a6c222 3349 print "data in, it defaults to 'userprefs'\n";
3499f99f 3350 print "\n";
3351 print "[$WHT$prefs_table$NRM]: $WHT";
3352 $new_table = <STDIN>;
eaace00e 3353 if ( $new_table eq "\n" ) {
3499f99f 3354 $new_table = $prefs_table;
3355 } else {
85645192 3356 $new_table =~ s/[\r\n]//g;
3499f99f 3357 }
3358 return $new_table;
eaace00e 3359}
3499f99f 3360
99a6c222 3361sub command95 {
3362 print "This is the name of the field in which you want to store the\n";
3363 print "username of the person the prefs are for. It default to 'user'\n";
3364 print "which clashes with a reserved keyword in PostgreSQL so this\n";
3365 print "will need to be changed for that database at least\n";
3366 print "\n";
3367 print "[$WHT$prefs_user_field$NRM]: $WHT";
3368 $new_field = <STDIN>;
3369 if ( $new_field eq "\n" ) {
3370 $new_field = $prefs_user_field;
3371 } else {
85645192 3372 $new_field =~ s/[\r\n]//g;
99a6c222 3373 }
06316c07 3374 $prefs_user_size = db_pref_size($prefs_user_size);
99a6c222 3375 return $new_field;
3376}
3377
3378sub command96 {
3379 print "This is the name of the field in which you want to store the\n";
3380 print "preferences keyword. It defaults to 'prefkey'\n";
3381 print "\n";
3382 print "[$WHT$prefs_key_field$NRM]: $WHT";
3383 $new_field = <STDIN>;
3384 if ( $new_field eq "\n" ) {
3385 $new_field = $prefs_key_field;
3386 } else {
85645192 3387 $new_field =~ s/[\r\n]//g;
99a6c222 3388 }
06316c07 3389 $prefs_key_size = db_pref_size($prefs_key_size);
99a6c222 3390 return $new_field;
3391}
3392
3393sub command97 {
3394 print "This is the name of the field in which you want to store the\n";
3395 print "preferences value. It defaults to 'prefval'\n";
3396 print "\n";
3397 print "[$WHT$prefs_val_field$NRM]: $WHT";
3398 $new_field = <STDIN>;
3399 if ( $new_field eq "\n" ) {
3400 $new_field = $prefs_val_field;
3401 } else {
85645192 3402 $new_field =~ s/[\r\n]//g;
99a6c222 3403 }
06316c07 3404 $prefs_val_size = db_pref_size($prefs_val_size);
99a6c222 3405 return $new_field;
3406}
3407
06316c07 3408# routine is used to set database field limits
3409# it needs one argument
3410sub db_pref_size() {
3411 my ($size) = $_[0];
3412 print "\nDatabase fields have size limits.\n";
3413 print "\n";
3414 print "What limit is set for this field? [$WHT$size$NRM]: $WHT";
3415 $new_size = <STDIN>;
3416 if ( $new_size eq "\n" ) {
3417 $new_size = $size;
3418 } else {
3419 $new_size =~ s/[\r\n]//g;
3420 }
3421 return $new_size;
3422}
3423
30e9932c 3424sub command98 {
3425 print "If you want to store your global address book in a database then\n";
3426 print "you need to set this DSN to a valid value. The format for this is:\n";
3427 print "mysql://user:pass\@hostname/dbname\n";
3428 print "Where mysql can be one of the databases PHP supports, the most common\n";
3429 print "of these are mysql, msql and pgsql\n";
3430 print "If the DSN is left empty (hit space and then return) the database\n";
3431 print "related code for global SQL address book will not be used\n";
3432 print "\n";
3433
3434 if ( $addrbook_global_dsn eq "" ) {
3435 $default_value = "Disabled";
3436 } else {
3437 $default_value = $addrbook_global_dsn;
3438 }
3439 print "[$WHT$addrbook_global_dsn$NRM]: $WHT";
3440 $new_dsn = <STDIN>;
3441 if ( $new_dsn eq "\n" ) {
3442 $new_dsn = "";
3443 } else {
85645192 3444 $new_dsn =~ s/[\r\n]//g;
30e9932c 3445 $new_dsn =~ s/^\s+$//g;
3446 }
3447 return $new_dsn;
3448}
3449
3450sub command99 {
3451 print "This is the name of the table you want to store the global address book\n";
6e00b127 3452 print "data in. Default table name is 'global_abook'. Address book uses same\n";
3453 print "database format as personal address book.\n";
30e9932c 3454 print "\n";
3455 print "[$WHT$addrbook_global_table$NRM]: $WHT";
3456 $new_table = <STDIN>;
3457 if ( $new_table eq "\n" ) {
3458 $new_table = $addrbook_global_table;
3459 } else {
85645192 3460 $new_table =~ s/[\r\n]//g;
30e9932c 3461 }
3462 return $new_table;
3463}
3464
3465sub command910 {
3466 print "This option controls users\' ability to add or modify records stored \n";
3467 print "in global address book\n";
3468
35aaf666 3469 if ( lc($addrbook_global_writeable) eq 'true' ) {
30e9932c 3470 $default_value = "y";
3471 } else {
3472 $default_value = "n";
3473 }
3474 print "Allow writing into global address book? (y/n) [$WHT$default_value$NRM]: $WHT";
3475 $addrbook_global_writeable = <STDIN>;
3476 if ( ( $addrbook_global_writeable =~ /^y\n/i ) || ( ( $addrbook_global_writeable =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 3477 $addrbook_global_writeable = 'true';
30e9932c 3478 } else {
35aaf666 3479 $addrbook_global_writeable = 'false';
30e9932c 3480 }
3481 return $addrbook_global_writeable;
3482}
3483
3484sub command911 {
3485 print "Enable this option if you want to see listing of addresses stored \n";
3486 print "in global address book\n";
3487
35aaf666 3488 if ( lc($addrbook_global_listing) eq 'true' ) {
30e9932c 3489 $default_value = "y";
3490 } else {
3491 $default_value = "n";
3492 }
3493 print "Allow listing of global address book? (y/n) [$WHT$default_value$NRM]: $WHT";
3494 $addrbook_global_listing = <STDIN>;
3495 if ( ( $addrbook_global_listing =~ /^y\n/i ) || ( ( $addrbook_global_listing =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 3496 $addrbook_global_listing = 'true';
30e9932c 3497 } else {
35aaf666 3498 $addrbook_global_listing = 'false';
30e9932c 3499 }
3500 return $addrbook_global_listing;
3501}
3502
3503
39d3ec89 3504# Default language
3505sub commandA1 {
3506 print "SquirrelMail attempts to set the language in many ways. If it\n";
3507 print "can not figure it out in another way, it will default to this\n";
3508 print "language. Please use the code for the desired language.\n";
3509 print "\n";
3510 print "[$WHT$squirrelmail_default_language$NRM]: $WHT";
3511 $new_squirrelmail_default_language = <STDIN>;
3512 if ( $new_squirrelmail_default_language eq "\n" ) {
3513 $new_squirrelmail_default_language = $squirrelmail_default_language;
3514 } else {
85645192 3515 $new_squirrelmail_default_language =~ s/[\r\n]//g;
39d3ec89 3516 $new_squirrelmail_default_language =~ s/^\s+$//g;
3517 }
3518 return $new_squirrelmail_default_language;
3519}
3520# Default Charset
3521sub commandA2 {
fe48c808 3522 print "This option controls what character set is used when sending\n";
3523 print "mail and when sending HTML to the browser. Option works only\n";
3524 print "with US English (en_US) translation. Other translations use\n";
3525 print "charsets that are set in functions/i18n.php.\n";
39d3ec89 3526 print "\n";
3527
3528 print "[$WHT$default_charset$NRM]: $WHT";
3529 $new_default_charset = <STDIN>;
3530 if ( $new_default_charset eq "\n" ) {
3531 $new_default_charset = $default_charset;
3532 } else {
85645192 3533 $new_default_charset =~ s/[\r\n]//g;
39d3ec89 3534 }
3535 return $new_default_charset;
3536}
3537# Alternative language names
3538sub commandA3 {
3539 print "Enable this option if you want to see localized language names in\n";
5ba5dc8e 3540 print "language selection box. Note, that this option can trigger\n";
3541 print "installation of foreign language support modules in some browsers.\n";
39d3ec89 3542 print "\n";
3543
35aaf666 3544 if ( lc($show_alternative_names) eq 'true' ) {
39d3ec89 3545 $default_value = "y";
3546 } else {
3547 $default_value = "n";
3548 }
3549 print "Show alternative language names? (y/n) [$WHT$default_value$NRM]: $WHT";
3550 $show_alternative_names = <STDIN>;
3551 if ( ( $show_alternative_names =~ /^y\n/i ) || ( ( $show_alternative_names =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 3552 $show_alternative_names = 'true';
39d3ec89 3553 } else {
35aaf666 3554 $show_alternative_names = 'false';
39d3ec89 3555 }
3556 return $show_alternative_names;
3557}
5ba5dc8e 3558
f03f6ee7 3559# Aggressive decoding
5ba5dc8e 3560sub commandA4 {
39d3ec89 3561 print "Enable this option if you want to use CPU and memory intensive decoding\n";
3562 print "functions. This option allows reading multibyte charset, that are used\n";
3563 print "in Eastern Asia. SquirrelMail will try to use recode functions here,\n";
3564 print "even when you have disabled use of recode in Tweaks section.\n";
3565 print "\n";
3566
f03f6ee7 3567 if ( lc($aggressive_decoding) eq 'true' ) {
39d3ec89 3568 $default_value = "y";
3569 } else {
3570 $default_value = "n";
3571 }
f03f6ee7 3572 print "Enable aggressive decoding? (y/n) [$WHT$default_value$NRM]: $WHT";
3573 $aggressive_decoding = <STDIN>;
3574 if ( ( $aggressive_decoding =~ /^y\n/i ) || ( ( $aggressive_decoding =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
3575 $aggressive_decoding = 'true';
39d3ec89 3576 } else {
f03f6ee7 3577 $aggressive_decoding = 'false';
39d3ec89 3578 }
f03f6ee7 3579 return $aggressive_decoding;
39d3ec89 3580}
3581
6d3689f5 3582# Lossy encoding
5ba5dc8e 3583sub commandA5 {
6d3689f5 3584 print "Enable this option if you want to allow lossy charset encoding in message\n";
f03f6ee7 3585 print "composition pages. This option allows charset conversions when output\n";
3586 print "charset does not support all symbols used in original charset. Symbols\n";
3587 print "unsupported by output charset will be replaced with question marks.\n";
3588 print "\n";
3589
6d3689f5 3590 if ( lc($lossy_encoding) eq 'true' ) {
f03f6ee7 3591 $default_value = "y";
3592 } else {
3593 $default_value = "n";
3594 }
6d3689f5 3595 print "Enable lossy encoding? (y/n) [$WHT$default_value$NRM]: $WHT";
3596 $lossy_encoding = <STDIN>;
3597 if ( ( $lossy_encoding =~ /^y\n/i ) || ( ( $lossy_encoding =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
3598 $lossy_encoding = 'true';
f03f6ee7 3599 } else {
6d3689f5 3600 $lossy_encoding = 'false';
f03f6ee7 3601 }
6d3689f5 3602 return $lossy_encoding;
f03f6ee7 3603}
3604
3605
39d3ec89 3606# Advanced tree
3607sub commandB1 {
3608 print "Enable this option if you want to use DHTML based folder listing.\n";
3609 print "Code is experimental, works only with some browsers and there might\n";
3610 print "be some glitches.\n";
3611 print "\n";
3612
35aaf666 3613 if ( lc($advanced_tree) eq 'true' ) {
39d3ec89 3614 $default_value = "y";
3615 } else {
3616 $default_value = "n";
3617 }
3618 print "Use advanced tree in folder listing? (y/n) [$WHT$default_value$NRM]: $WHT";
3619 $advanced_tree = <STDIN>;
3620 if ( ( $advanced_tree =~ /^y\n/i ) || ( ( $advanced_tree =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 3621 $advanced_tree = 'true';
39d3ec89 3622 } else {
35aaf666 3623 $advanced_tree = 'false';
39d3ec89 3624 }
3625 return $advanced_tree;
3626}
74d6a0d9 3627# display html emails in iframe
3628sub commandB2 {
3629 print "This option can enable html email rendering inside iframe.\n";
3630 print "Inline frames are used in order to provide sandbox environment";
3631 print "for html code included in html formated emails.";
3632 print "Option is experimental and might have glitches in some parts of code.";
3633 print "\n";
3634
3635 if ( lc($use_iframe) eq 'true' ) {
3636 $default_value = "y";
3637 } else {
3638 $default_value = "n";
3639 }
3640 print "Display html emails in iframe? (y/n) [$WHT$default_value$NRM]: $WHT";
3641 $use_iframe = <STDIN>;
3642 if ( ( $use_iframe =~ /^y\n/i ) || ( ( $use_iframe =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
3643 $use_iframe = 'true';
3644 } else {
3645 $use_iframe = 'false';
3646 }
3647 return $use_iframe;
3648}
6395c46d 3649# use icons
39d3ec89 3650sub commandB3 {
6395c46d 3651 print "Enabling this option will cause icons to be used instead of text\n";
3652 print "markers next to each message in mailbox lists that represent\n";
3653 print "new, read, flagged, and deleted messages, as well as those that\n";
3654 print "have been replied to and forwarded. Icons are also used next to\n";
3655 print "(un)expanded folders in the folder list (Oldway = false). These\n";
3656 print "icons are quite small, but will obviously be more of a resource\n";
3657 print "drain than text markers.\n";
3658 print "\n";
3659
35aaf666 3660 if ( lc($use_icons) eq 'true' ) {
6395c46d 3661 $default_value = "y";
3662 } else {
3663 $default_value = "n";
3664 }
3665 print "Use icons? (y/n) [$WHT$default_value$NRM]: $WHT";
3666 $use_icons = <STDIN>;
3667 if ( ( $use_icons =~ /^y\n/i ) || ( ( $use_icons =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 3668 $use_icons = 'true';
6395c46d 3669 } else {
35aaf666 3670 $use_icons = 'false';
6395c46d 3671 }
3672 return $use_icons;
3673}
3674# php recode
3675sub commandB4 {
39d3ec89 3676 print "Enable this option if you want to use php recode functions to read\n";
3677 print "emails written in charset that differs from the one that is set in\n";
3678 print "translation selected by user. Code is experimental, it might cause\n";
3679 print "errors, if email contains charset unsupported by recode or if your\n";
3680 print "php does not have recode support.\n";
3681 print "\n";
3682
35aaf666 3683 if ( lc($use_php_recode) eq 'true' ) {
39d3ec89 3684 $default_value = "y";
3685 } else {
3686 $default_value = "n";
3687 }
ad9d110a 3688 print "Use php recode functions? (y/n) [$WHT$default_value$NRM]: $WHT";
39d3ec89 3689 $use_php_recode = <STDIN>;
3690 if ( ( $use_php_recode =~ /^y\n/i ) || ( ( $use_php_recode =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 3691 $use_php_recode = 'true';
39d3ec89 3692 } else {
35aaf666 3693 $use_php_recode = 'false';
39d3ec89 3694 }
3695 return $use_php_recode;
3696}
3697# php iconv
6395c46d 3698sub commandB5 {
39d3ec89 3699 print "Enable this option if you want to use php iconv functions to read\n";
3700 print "emails written in charset that differs from the one that is set in\n";
3701 print "translation selected by user. Code is experimental, it works only\n";
3702 print "with translations that use utf-8 charset. Code might cause errors,\n";
3703 print "if email contains charset unsupported by iconv or if your php does\n";
3704 print "not have iconv support.\n";
3705 print "\n";
3706
35aaf666 3707 if ( lc($use_php_iconv) eq 'true' ) {
39d3ec89 3708 $default_value = "y";
3709 } else {
3710 $default_value = "n";
3711 }
ad9d110a 3712 print "Use php iconv functions? (y/n) [$WHT$default_value$NRM]: $WHT";
39d3ec89 3713 $use_php_iconv = <STDIN>;
3714 if ( ( $use_php_iconv =~ /^y\n/i ) || ( ( $use_php_iconv =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
35aaf666 3715 $use_php_iconv = 'true';
39d3ec89 3716 } else {
35aaf666 3717 $use_php_iconv = 'false';
39d3ec89 3718 }
3719 return $use_php_iconv;
3720}
3721
71d3f882 3722# configtest block
3723sub commandB6 {
3724 print "Enable this option if you want to check SquirrelMail configuration\n";
3725 print "remotely with configtest.php script.\n";
3726 print "\n";
3727
3728 if ( lc($allow_remote_configtest) eq 'true' ) {
3729 $default_value = "y";
3730 } else {
3731 $default_value = "n";
3732 }
3733 print "Allow remote configuration tests? (y/n) [$WHT$default_value$NRM]: $WHT";
3734 $allow_remote_configtest = <STDIN>;
3735 if ( ( $allow_remote_configtest =~ /^y\n/i ) || ( ( $allow_remote_configtest =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
3736 $allow_remote_configtest = 'true';
3737 } else {
3738 $allow_remote_configtest = 'false';
3739 }
3740 return $allow_remote_configtest;
3741}
3742
3743
39d3ec89 3744
ccfb2029 3745sub save_data {
ebd13f55 3746 $tab = " ";
eaace00e 3747 if ( open( CF, ">config.php" ) ) {
ebd13f55 3748 print CF "<?php\n";
3749 print CF "\n";
eaace00e 3750
ebd13f55 3751 print CF "/**\n";
3752 print CF " * SquirrelMail Configuration File\n";
3753 print CF " * Created using the configure script, conf.pl\n";
3754 print CF " */\n";
3755 print CF "\n";
93c06fa2 3756 print CF "global \$version;\n";
598294a7 3757
ebd13f55 3758 if ($print_config_version) {
eaace00e 3759 print CF "\$config_version = '$print_config_version';\n";
ebd13f55 3760 }
35aaf666 3761 # integer
254ded61 3762 print CF "\$config_use_color = $config_use_color;\n";
ebd13f55 3763 print CF "\n";
598294a7 3764
35aaf666 3765 # string
d756b071 3766 print CF "\$org_name = \"$org_name\";\n";
254ded61 3767 # string
35aaf666 3768 print CF "\$org_logo = " . &change_to_SM_path($org_logo) . ";\n";
b6e0c3b6 3769 $org_logo_width |= 0;
3770 $org_logo_height |= 0;
35aaf666 3771 # string
6c2d0a35 3772 print CF "\$org_logo_width = '$org_logo_width';\n";
3773 # string
35aaf666 3774 print CF "\$org_logo_height = '$org_logo_height';\n";
3775 # string that can contain variables.
12947430 3776 print CF "\$org_title = \"$org_title\";\n";
35aaf666 3777 # string
8bd9e0dd 3778 print CF "\$signout_page = " . &change_to_SM_path($signout_page) . ";\n";
35aaf666 3779 # string
3d043efc 3780 print CF "\$frame_top = '$frame_top';\n";
ebd13f55 3781 print CF "\n";
eaace00e 3782
0ae4c1f2 3783 print CF "\$provider_uri = '$provider_uri';\n";
3784 print CF "\n";
3785
3786 print CF "\$provider_name = '$provider_name';\n";
3787 print CF "\n";
3788
35aaf666 3789 # string that can contain variables
254ded61 3790 print CF "\$motd = \"$motd\";\n";
ebd13f55 3791 print CF "\n";
598294a7 3792
35aaf666 3793 # string
ebd13f55 3794 print CF "\$squirrelmail_default_language = '$squirrelmail_default_language';\n";
35aaf666 3795 # string
39d3ec89 3796 print CF "\$default_charset = '$default_charset';\n";
35aaf666 3797 # boolean
6cbbd722 3798 print CF "\$show_alternative_names = $show_alternative_names;\n";
35aaf666 3799 # boolean
f03f6ee7 3800 print CF "\$aggressive_decoding = $aggressive_decoding;\n";
3801 # boolean
6d3689f5 3802 print CF "\$lossy_encoding = $lossy_encoding;\n";
ebd13f55 3803 print CF "\n";
eaace00e 3804
35aaf666 3805 # string
ebd13f55 3806 print CF "\$domain = '$domain';\n";
35aaf666 3807 # string
ebd13f55 3808 print CF "\$imapServerAddress = '$imapServerAddress';\n";
35aaf666 3809 # integer
254ded61 3810 print CF "\$imapPort = $imapPort;\n";
35aaf666 3811 # boolean
254ded61 3812 print CF "\$useSendmail = $useSendmail;\n";
35aaf666 3813 # string
ebd13f55 3814 print CF "\$smtpServerAddress = '$smtpServerAddress';\n";
35aaf666 3815 # integer
254ded61 3816 print CF "\$smtpPort = $smtpPort;\n";
35aaf666 3817 # string
ebd13f55 3818 print CF "\$sendmail_path = '$sendmail_path';\n";
fd7ab795 3819 # string
3820 print CF "\$sendmail_args = '$sendmail_args';\n";
35aaf666 3821 # boolean
47a29326 3822# print CF "\$use_authenticated_smtp = $use_authenticated_smtp;\n";
35aaf666 3823 # boolean
254ded61 3824 print CF "\$pop_before_smtp = $pop_before_smtp;\n";
35aaf666 3825 # string
ebd13f55 3826 print CF "\$imap_server_type = '$imap_server_type';\n";
35aaf666 3827 # boolean
374726c9 3828 print CF "\$invert_time = $invert_time;\n";
35aaf666 3829 # string
ebd13f55 3830 print CF "\$optional_delimiter = '$optional_delimiter';\n";
432db2fc 3831 # string
3832 print CF "\$encode_header_key = '$encode_header_key';\n";
ebd13f55 3833 print CF "\n";
eaace00e 3834
81132de8 3835 # string
ebd13f55 3836 print CF "\$default_folder_prefix = '$default_folder_prefix';\n";
81132de8 3837 # string
ebd13f55 3838 print CF "\$trash_folder = '$trash_folder';\n";
81132de8 3839 # string
ebd13f55 3840 print CF "\$sent_folder = '$sent_folder';\n";
81132de8 3841 # string
ebd13f55 3842 print CF "\$draft_folder = '$draft_folder';\n";
81132de8 3843 # boolean
254ded61 3844 print CF "\$default_move_to_trash = $default_move_to_trash;\n";
81132de8 3845 # boolean
254ded61 3846 print CF "\$default_move_to_sent = $default_move_to_sent;\n";
81132de8 3847 # boolean
254ded61 3848 print CF "\$default_save_as_draft = $default_save_as_draft;\n";
81132de8 3849 # boolean
254ded61 3850 print CF "\$show_prefix_option = $show_prefix_option;\n";
81132de8 3851 # boolean
254ded61 3852 print CF "\$list_special_folders_first = $list_special_folders_first;\n";
81132de8 3853 # boolean
254ded61 3854 print CF "\$use_special_folder_color = $use_special_folder_color;\n";
81132de8 3855 # boolean
254ded61 3856 print CF "\$auto_expunge = $auto_expunge;\n";
81132de8 3857 # boolean
254ded61 3858 print CF "\$default_sub_of_inbox = $default_sub_of_inbox;\n";
81132de8 3859 # boolean
254ded61 3860 print CF "\$show_contain_subfolders_option = $show_contain_subfolders_option;\n";
81132de8 3861 # integer
254ded61 3862 print CF "\$default_unseen_notify = $default_unseen_notify;\n";
81132de8 3863 # integer
254ded61 3864 print CF "\$default_unseen_type = $default_unseen_type;\n";
81132de8 3865 # boolean
254ded61 3866 print CF "\$auto_create_special = $auto_create_special;\n";
81132de8 3867 # boolean
254ded61 3868 print CF "\$delete_folder = $delete_folder;\n";
81132de8 3869 # boolean
ca85aabe 3870 print CF "\$noselect_fix_enable = $noselect_fix_enable;\n";
3871
ebd13f55 3872 print CF "\n";
eaace00e 3873
81132de8 3874 # string
8bd9e0dd 3875 print CF "\$data_dir = " . &change_to_SM_path($data_dir) . ";\n";
81132de8 3876 # string that can contain a variable
8bd9e0dd 3877 print CF "\$attachment_dir = " . &change_to_SM_path($attachment_dir) . ";\n";
81132de8 3878 # integer
254ded61 3879 print CF "\$dir_hash_level = $dir_hash_level;\n";
81132de8 3880 # string
80519ece 3881 print CF "\$default_left_size = '$default_left_size';\n";
81132de8 3882 # boolean
254ded61 3883 print CF "\$force_username_lowercase = $force_username_lowercase;\n";
81132de8 3884 # boolean
254ded61 3885 print CF "\$default_use_priority = $default_use_priority;\n";
81132de8 3886 # boolean
254ded61 3887 print CF "\$hide_sm_attributions = $hide_sm_attributions;\n";
81132de8 3888 # boolean
254ded61 3889 print CF "\$default_use_mdn = $default_use_mdn;\n";
81132de8 3890 # boolean
254ded61 3891 print CF "\$edit_identity = $edit_identity;\n";
81132de8 3892 # boolean
254ded61 3893 print CF "\$edit_name = $edit_name;\n";
81132de8 3894 # boolean
432db2fc 3895 print CF "\$hide_auth_header = $hide_auth_header;\n";
81132de8 3896 # boolean
11e00010 3897 print CF "\$disable_thread_sort = $disable_thread_sort;\n";
81132de8 3898 # boolean
11e00010 3899 print CF "\$disable_server_sort = $disable_server_sort;\n";
81132de8 3900 # boolean
3c7ee482 3901 print CF "\$allow_charset_search = $allow_charset_search;\n";
81132de8 3902 # integer
0f1b00b8 3903 print CF "\$allow_advanced_search = $allow_advanced_search;\n";
ebd13f55 3904 print CF "\n";
ee20a285 3905 # integer
3906 print CF "\$time_zone_type = $time_zone_type;\n";
3907 print CF "\n";
598294a7 3908
81132de8 3909 # all plugins are strings
eaace00e 3910 for ( $ct = 0 ; $ct <= $#plugins ; $ct++ ) {
a1b036d6 3911 print CF "\$plugins[] = '$plugins[$ct]';\n";
ebd13f55 3912 }
3913 print CF "\n";
eaace00e 3914
81132de8 3915 # strings
8bd9e0dd 3916 print CF "\$theme_css = " . &change_to_SM_path($theme_css) . ";\n";
81132de8 3917 if ( $theme_default eq '' ) { $theme_default = '0'; }
57c6fabc 3918 print CF "\$theme_default = $theme_default;\n";
3919
eaace00e 3920 for ( $count = 0 ; $count <= $#theme_name ; $count++ ) {
8bd9e0dd 3921 print CF "\$theme[$count]['PATH'] = " . &change_to_SM_path($theme_path[$count]) . ";\n";
ed65d11b 3922 # escape theme name so it can contain single quotes.
3923 $esc_name = $theme_name[$count];
3924 $esc_name =~ s/\\/\\\\/g;
3925 $esc_name =~ s/'/\\'/g;
3926 print CF "\$theme[$count]['NAME'] = '$esc_name';\n";
ebd13f55 3927 }
3928 print CF "\n";
eaace00e 3929
85bacb8f 3930 if ( $templateset_default eq '' ) { $templateset_default = '0'; }
3931 print CF "\$templateset_default = $templateset_default;\n";
3932
3933 for ( $count = 0 ; $count <= $#templateset_name ; $count++ ) {
3934 print CF "\$aTemplateSet[$count]['PATH'] = " . &change_to_SM_path($templateset_path[$count]) . ";\n";
3935 # escape theme name so it can contain single quotes.
3936 $esc_name = $templateset_name[$count];
3937 $esc_name =~ s/\\/\\\\/g;
3938 $esc_name =~ s/'/\\'/g;
3939 print CF "\$aTemplateSet[$count]['NAME'] = '$esc_name';\n";
3940 }
3941 print CF "\n";
3942
3943
81132de8 3944 # integer
3945 print CF "\$default_fontsize = '$default_fontsize';\n";
3946 # string
3947 print CF "\$default_fontset = '$default_fontset';\n";
3948 print CF "\n";
3949 # assoc. array (maybe initial value should be set somewhere else)
3950 print CF '$fontsets = array();'."\n";
3951 while (($fontset_name, $fontset_value) = each(%fontsets)) {
3952 print CF "\$fontsets\['$fontset_name'\] = '$fontset_value';\n";
3953 }
3954 print CF "\n";
3955
96862638 3956 ## Address books
3957 # boolean
ebd13f55 3958 print CF "\$default_use_javascript_addr_book = $default_use_javascript_addr_book;\n";
eaace00e 3959 for ( $count = 0 ; $count <= $#ldap_host ; $count++ ) {
3960 print CF "\$ldap_server[$count] = array(\n";
81132de8 3961 # string
eaace00e 3962 print CF " 'host' => '$ldap_host[$count]',\n";
81132de8 3963 # string
eaace00e 3964 print CF " 'base' => '$ldap_base[$count]'";
3965 if ( $ldap_name[$count] ) {
3966 print CF ",\n";
81132de8 3967 # string
eaace00e 3968 print CF " 'name' => '$ldap_name[$count]'";
3969 }
3970 if ( $ldap_port[$count] ) {
3971 print CF ",\n";
81132de8 3972 # integer
254ded61 3973 print CF " 'port' => $ldap_port[$count]";
eaace00e 3974 }
3975 if ( $ldap_charset[$count] ) {
3976 print CF ",\n";
81132de8 3977 # string
eaace00e 3978 print CF " 'charset' => '$ldap_charset[$count]'";
3979 }
3980 if ( $ldap_maxrows[$count] ) {
3981 print CF ",\n";
81132de8 3982 # integer
254ded61 3983 print CF " 'maxrows' => $ldap_maxrows[$count]";
eaace00e 3984 }
43397658 3985 # string
3986 if ( $ldap_filter[$count] ) {
3987 print CF ",\n";
3988 print CF " 'filter' => '$ldap_filter[$count]'";
3989 }
30e9932c 3990 if ( $ldap_binddn[$count] ) {
3991 print CF ",\n";
3992 # string
3993 print CF " 'binddn' => '$ldap_binddn[$count]'";
3994 if ( $ldap_bindpw[$count] ) {
3995 print CF ",\n";
3996 # string
3997 print CF " 'bindpw' => '$ldap_bindpw[$count]'";
3998 }
3999 }
4000 if ( $ldap_protocol[$count] ) {
4001 print CF ",\n";
327e2d96 4002 # integer
30e9932c 4003 print CF " 'protocol' => $ldap_protocol[$count]";
4004 }
43397658 4005 if ( $ldap_limit_scope[$count] ) {
4006 print CF ",\n";
4007 # boolean
4008 print CF " 'limit_scope' => $ldap_limit_scope[$count]";
4009 }
327e2d96 4010 if ( $ldap_listing[$count] ) {
4011 print CF ",\n";
4012 # boolean
4013 print CF " 'listing' => $ldap_listing[$count]";
4014 }
593370a4 4015 if ( $ldap_search_tree[$count] ) {
4016 print CF ",\n";
4017 # integer
4018 print CF " 'search_tree' => $ldap_search_tree[$count]";
4019 }
4020 if ( $ldap_listing[$count] ) {
4021 print CF ",\n";
4022 # boolean
4023 print CF " 'starttls' => $ldap_starttls[$count]";
4024 }
eaace00e 4025 print CF "\n";
4026 print CF ");\n";
4027 print CF "\n";
ebd13f55 4028 }
b622e1b8 4029
81132de8 4030 # string
4f40a59d 4031 print CF "\$addrbook_dsn = '$addrbook_dsn';\n";
81132de8 4032 # string
4f40a59d 4033 print CF "\$addrbook_table = '$addrbook_table';\n\n";
81132de8 4034 # string
3499f99f 4035 print CF "\$prefs_dsn = '$prefs_dsn';\n";
81132de8 4036 # string
99a6c222 4037 print CF "\$prefs_table = '$prefs_table';\n";
81132de8 4038 # string
99a6c222 4039 print CF "\$prefs_user_field = '$prefs_user_field';\n";
81132de8 4040 # integer
06316c07 4041 print CF "\$prefs_user_size = $prefs_user_size;\n";
81132de8 4042 # string
99a6c222 4043 print CF "\$prefs_key_field = '$prefs_key_field';\n";
81132de8 4044 # integer
06316c07 4045 print CF "\$prefs_key_size = $prefs_key_size;\n";
81132de8 4046 # string
06316c07 4047 print CF "\$prefs_val_field = '$prefs_val_field';\n";
81132de8 4048 # integer
06316c07 4049 print CF "\$prefs_val_size = $prefs_val_size;\n\n";
81132de8 4050 # string
30e9932c 4051 print CF "\$addrbook_global_dsn = '$addrbook_global_dsn';\n";
81132de8 4052 # string
30e9932c 4053 print CF "\$addrbook_global_table = '$addrbook_global_table';\n";
81132de8 4054 # boolean
4272758c 4055 print CF "\$addrbook_global_writeable = $addrbook_global_writeable;\n";
81132de8 4056 # boolean
30e9932c 4057 print CF "\$addrbook_global_listing = $addrbook_global_listing;\n\n";
81132de8 4058 # string
4272758c 4059 print CF "\$abook_global_file = '$abook_global_file';\n";
81132de8 4060 # boolean
4272758c 4061 print CF "\$abook_global_file_writeable = $abook_global_file_writeable;\n\n";
81132de8 4062 # boolean
71d3f882 4063 print CF "\$abook_global_file_listing = $abook_global_file_listing;\n\n";
81132de8 4064 # boolean
6395c46d 4065 print CF "\$no_list_for_subscribe = $no_list_for_subscribe;\n";
47a29326 4066
81132de8 4067 # string
6395c46d 4068 print CF "\$smtp_auth_mech = '$smtp_auth_mech';\n";
81132de8 4069 # string
6395c46d 4070 print CF "\$imap_auth_mech = '$imap_auth_mech';\n";
81132de8 4071 # boolean
6395c46d 4072 print CF "\$use_imap_tls = $use_imap_tls;\n";
81132de8 4073 # boolean
6395c46d 4074 print CF "\$use_smtp_tls = $use_smtp_tls;\n";
81132de8 4075 # string
6395c46d 4076 print CF "\$session_name = '$session_name';\n";
6c499577 4077
81132de8 4078 print CF "\n";
35aaf666 4079
81132de8 4080 # boolean
4081 print CF "\$advanced_tree = $advanced_tree;\n";
4082 print CF "\n";
4083 # boolean
4084 print CF "\$use_iframe = $use_iframe;\n";
4085 print CF "\n";
4086 # boolean
4087 print CF "\$use_icons = $use_icons;\n";
4088 print CF "\n";
4089 # boolean
4090 print CF "\$use_php_recode = $use_php_recode;\n";
4091 print CF "\n";
4092 # boolean
4093 print CF "\$use_php_iconv = $use_php_iconv;\n";
4094 print CF "\n";
4095 # boolean
4096 print CF "\$allow_remote_configtest = $allow_remote_configtest;\n";
4097 print CF "\n";
85bacb8f 4098
35aaf666 4099 print CF "\@include SM_PATH . 'config/config_local.php';\n";
598294a7 4100
35aaf666 4101 print CF "\n/**\n";
4102 print CF " * Make sure there are no characters after the PHP closing\n";
4103 print CF " * tag below (including newline characters and whitespace).\n";
4104 print CF " * Otherwise, that character will cause the headers to be\n";
4105 print CF " * sent and regular output to begin, which will majorly screw\n";
4106 print CF " * things up when we try to send more headers later.\n";
4107 print CF " */\n";
4108 print CF "?>";
598294a7 4109
35aaf666 4110 close CF;
ebd13f55 4111
35aaf666 4112 print "Data saved in config.php\n";
ebd13f55 4113 } else {
4114 print "Error saving config.php: $!\n";
4115 }
911ad01c 4116}
a93b12ba 4117
4118sub set_defaults {
f8c17cdd 4119 clear_screen();
eaace00e 4120 print $WHT. "SquirrelMail Configuration : " . $NRM;
4121 if ( $config == 1 ) { print "Read: config.php"; }
4122 elsif ( $config == 2 ) { print "Read: config_default.php"; }
4123 print "\n";
4124 print "---------------------------------------------------------\n";
4125
4126 print "While we have been building SquirrelMail, we have discovered some\n";
4127 print "preferences that work better with some servers that don't work so\n";
4128 print "well with others. If you select your IMAP server, this option will\n";
4129 print "set some pre-defined settings for that server.\n";
4130 print "\n";
4131 print "Please note that you will still need to go through and make sure\n";
4132 print "everything is correct. This does not change everything. There are\n";
4133 print "only a few settings that this will change.\n";
4134 print "\n";
4135
4136 $continue = 0;
4137 while ( $continue != 1 ) {
4138 print "Please select your IMAP server:\n";
e498ebbd 4139 print " bincimap = Binc IMAP server\n";
a33764f6 4140 print " courier = Courier IMAP server\n";
b39825f0 4141 print " cyrus = Cyrus IMAP server\n";
a33764f6 4142 print " dovecot = Dovecot Secure IMAP server\n";
b39825f0 4143 print " exchange = Microsoft Exchange IMAP server\n";
b39825f0 4144 print " hmailserver = hMailServer\n";
a33764f6 4145 print " macosx = Mac OS X Mailserver\n";
b39825f0 4146 print " mercury32 = Mercury/32\n";
a33764f6 4147 print " uw = University of Washington's IMAP server\n";
4148 print "\n";
b39825f0 4149 print " quit = Do not change anything\n";
a33764f6 4150 print "\n";
eaace00e 4151 print "Command >> ";
4152 $server = <STDIN>;
85645192 4153 $server =~ s/[\r\n]//g;
eaace00e 4154
e498ebbd 4155 # variable is used to display additional messages.
4156 $message = "";
4157
eaace00e 4158 print "\n";
4159 if ( $server eq "cyrus" ) {
4160 $imap_server_type = "cyrus";
4161 $default_folder_prefix = "";
4162 $trash_folder = "INBOX.Trash";
4163 $sent_folder = "INBOX.Sent";
4164 $draft_folder = "INBOX.Drafts";
4165 $show_prefix_option = false;
4166 $default_sub_of_inbox = true;
4167 $show_contain_subfolders_option = false;
4168 $optional_delimiter = ".";
4169 $disp_default_folder_prefix = "<none>";
b79b84c2 4170 $force_username_lowercase = false;
eaace00e 4171
4172 $continue = 1;
4173 } elsif ( $server eq "uw" ) {
4174 $imap_server_type = "uw";
4175 $default_folder_prefix = "mail/";
4176 $trash_folder = "Trash";
4177 $sent_folder = "Sent";
4178 $draft_folder = "Drafts";
4179 $show_prefix_option = true;
4180 $default_sub_of_inbox = false;
4181 $show_contain_subfolders_option = true;
4182 $optional_delimiter = "/";
4183 $disp_default_folder_prefix = $default_folder_prefix;
2eec12b5 4184 $delete_folder = true;
b79b84c2 4185 $force_username_lowercase = true;
598294a7 4186
eaace00e 4187 $continue = 1;
4188 } elsif ( $server eq "exchange" ) {
4189 $imap_server_type = "exchange";
4190 $default_folder_prefix = "";
4191 $default_sub_of_inbox = true;
4192 $trash_folder = "INBOX/Deleted Items";
4193 $sent_folder = "INBOX/Sent Items";
4194 $drafts_folder = "INBOX/Drafts";
4195 $show_prefix_option = false;
4196 $show_contain_subfolders_option = false;
4197 $optional_delimiter = "detect";
4198 $disp_default_folder_prefix = "<none>";
b79b84c2 4199 $force_username_lowercase = true;
eaace00e 4200
4201 $continue = 1;
4202 } elsif ( $server eq "courier" ) {
4203 $imap_server_type = "courier";
4204 $default_folder_prefix = "INBOX.";
4205 $trash_folder = "Trash";
4206 $sent_folder = "Sent";
4207 $draft_folder = "Drafts";
4208 $show_prefix_option = false;
4209 $default_sub_of_inbox = false;
4210 $show_contain_subfolders_option = false;
4211 $optional_delimiter = ".";
4212 $disp_default_folder_prefix = $default_folder_prefix;
2eec12b5 4213 $delete_folder = true;
b79b84c2 4214 $force_username_lowercase = false;
598294a7 4215
cfe486a7 4216 $continue = 1;
4217 } elsif ( $server eq "macosx" ) {
4218 $imap_server_type = "macosx";
4219 $default_folder_prefix = "INBOX/";
4220 $trash_folder = "Trash";
4221 $sent_folder = "Sent";
4222 $draft_folder = "Drafts";
4223 $show_prefix_option = false;
4224 $default_sub_of_inbox = true;
4225 $show_contain_subfolders_option = false;
4226 $optional_delimiter = "detect";
4227 $allow_charset_search = false;
4228 $disp_default_folder_prefix = $default_folder_prefix;
eaace00e 4229
063ed2b1 4230 $continue = 1;
b39825f0 4231 } elsif ( $server eq "hmailserver" ) {
4232 $imap_server_type = "hmailserver";
946b11e9 4233 $default_folder_prefix = "";
4234 $trash_folder = "INBOX.Trash";
4235 $sent_folder = "INBOX.Sent";
4236 $draft_folder = "INBOX.Drafts";
4237 $show_prefix_option = false;
4238 $default_sub_of_inbox = true;
4239 $show_contain_subfolders_option = false;
4240 $optional_delimiter = "detect";
4241 $allow_charset_search = false;
4242 $disp_default_folder_prefix = $default_folder_prefix;
e50f5ac2 4243 $delete_folder = false;
4244 $force_username_lowercase = false;
b39825f0 4245
e50f5ac2 4246 $continue = 1;
063ed2b1 4247 } elsif ( $server eq "mercury32" ) {
4248 $imap_server_type = "mercury32";
4249 $default_folder_prefix = "";
67a24f8a 4250 $trash_folder = "Trash";
4251 $sent_folder = "Sent";
4252 $draft_folder = "Drafts";
063ed2b1 4253 $show_prefix_option = false;
4254 $default_sub_of_inbox = true;
4255 $show_contain_subfolders_option = true;
4256 $optional_delimiter = "detect";
4257 $delete_folder = true;
4258 $force_username_lowercase = true;
4259
a33764f6 4260 $continue = 1;
4261 } elsif ( $server eq "dovecot" ) {
4262 $imap_server_type = "dovecot";
4263 $default_folder_prefix = "";
4264 $trash_folder = "Trash";
4265 $sent_folder = "Sent";
4266 $draft_folder = "Drafts";
4267 $show_prefix_option = false;
4268 $default_sub_of_inbox = false;
4269 $show_contain_subfolders_option = false;
4270 $delete_folder = false;
4271 $force_username_lowercase = true;
4272 $optional_delimiter = "detect";
4273 $disp_default_folder_prefix = "<none>";
4274
e498ebbd 4275 $continue = 1;
4276 } elsif ( $server eq "bincimap" ) {
4277 $imap_server_type = "bincimap";
4278 $default_folder_prefix = "INBOX/";
4279 $trash_folder = "Trash";
4280 $sent_folder = "Sent";
4281 $draft_folder = "Drafts";
4282 $show_prefix_option = false;
4283 $default_sub_of_inbox = false;
4284 $show_contain_subfolders_option = false;
4285 $delete_folder = true;
4286 $force_username_lowercase = false;
4287 $optional_delimiter = "detect";
4288 $disp_default_folder_prefix = $default_folder_prefix;
4289
4290 # Default folder prefix depends on used depot.
4291 $message = "\nIf you use IMAPdir depot, you must set default folder prefix to empty string.\n";
4292
eaace00e 4293 $continue = 1;
4294 } elsif ( $server eq "quit" ) {
4295 $continue = 1;
4296 } else {
4297 $disp_default_folder_prefix = $default_folder_prefix;
4298 print "Unrecognized server: $server\n";
4299 print "\n";
4300 }
4301
4302 print " imap_server_type = $imap_server_type\n";
4303 print " default_folder_prefix = $disp_default_folder_prefix\n";
4304 print " trash_folder = $trash_folder\n";
4305 print " sent_folder = $sent_folder\n";
4306 print " draft_folder = $draft_folder\n";
4307 print " show_prefix_option = $show_prefix_option\n";
4308 print " default_sub_of_inbox = $default_sub_of_inbox\n";
4309 print "show_contain_subfolders_option = $show_contain_subfolders_option\n";
4310 print " optional_delimiter = $optional_delimiter\n";
2eec12b5 4311 print " delete_folder = $delete_folder\n";
b79b84c2 4312 print " force_username_lowercase = $force_username_lowercase\n";
e498ebbd 4313
4314 print "$message";
eaace00e 4315 }
b79b84c2 4316 print "\nPress enter to continue...";
eaace00e 4317 $tmp = <STDIN>;
a93b12ba 4318}
8bd9e0dd 4319
8bd9e0dd 4320# This subroutine corrects relative paths to ensure they
4321# will work within the SM space. If the path falls within
598294a7 4322# the SM directory tree, the SM_PATH variable will be
8bd9e0dd 4323# prepended to the path, if not, then the path will be
e6566358 4324# converted to an absolute path, e.g.
2222aed0 4325# '../images/logo.gif' --> SM_PATH . 'images/logo.gif'
a2a74376 4326# '../../someplace/data' --> '/absolute/path/someplace/data'
2222aed0 4327# 'images/logo.gif' --> SM_PATH . 'config/images/logo.gif'
4328# '/absolute/path/logo.gif' --> '/absolute/path/logo.gif'
4329# 'http://whatever/' --> 'http://whatever'
b72da239 4330# $some_var/path --> "$some_var/path"
8bd9e0dd 4331sub change_to_SM_path() {
4332 my ($old_path) = @_;
4333 my $new_path = '';
4334 my @rel_path;
4335 my @abs_path;
4336 my $subdir;
4337
4338 # If the path is absolute, don't bother.
4339 return "\'" . $old_path . "\'" if ( $old_path eq '');
a28a56da 4340 return "\'" . $old_path . "\'" if ( $old_path =~ /^(\/|http)/ );
d3fb3870 4341 return "\'" . $old_path . "\'" if ( $old_path =~ /^\w:\// );
25be56ab 4342 return $old_path if ( $old_path =~ /^\'(\/|http)/ );
d3fb3870 4343 return $old_path if ( $old_path =~ /^\'\w:\// );
b72da239 4344 return $old_path if ( $old_path =~ /^SM_PATH/);
598294a7 4345
b72da239 4346 if ( $old_path =~ /^\$/ ) {
4347 # check if it's a single var, or a $var/path combination
4348 # if it's $var/path, enclose in ""
4349 if ( $old_path =~ /\// ) {
4350 return '"'.$old_path.'"';
4351 }
4352 return $old_path;
4353 }
598294a7 4354
25be56ab 4355 # Remove remaining '
4356 $old_path =~ s/\'//g;
598294a7 4357
8bd9e0dd 4358 # For relative paths, split on '../'
4359 @rel_path = split(/\.\.\//, $old_path);
4360
4361 if ( $#rel_path > 1 ) {
4362 # more than two levels away. Make it absolute.
a2a74376 4363 @abs_path = split(/\//, $dir);
598294a7 4364
a2a74376 4365 # Lop off the relative pieces of the absolute path..
4366 for ( $i = 0; $i <= $#rel_path; $i++ ) {
4367 pop @abs_path;
4368 shift @rel_path;
4369 }
4370 push @abs_path, @rel_path;
1df76076 4371 $new_path = "\'" . join('/', @abs_path) . "\'";
8bd9e0dd 4372 } elsif ( $#rel_path > 0 ) {
4373 # it's within the SM tree, prepend SM_PATH
4374 $new_path = $old_path;
4375 $new_path =~ s/^\.\.\//SM_PATH . \'/;
25be56ab 4376 $new_path .= "\'";
8bd9e0dd 4377 } else {
4378 # Last, it's a relative path without any leading '.'
598294a7 4379 # Prepend SM_PATH and config, since the paths are
35aaf666 4380 # relative to the config directory
e6566358 4381 $new_path = "SM_PATH . \'config/" . $old_path . "\'";
8bd9e0dd 4382 }
8bd9e0dd 4383 return $new_path;
4384}
4385
e6566358 4386
4387# Change SM_PATH to admin-friendly version, e.g.:
4388# SM_PATH . 'images/logo.gif' --> '../images/logo.gif'
4389# SM_PATH . 'config/some.php' --> 'some.php'
4390# '/absolute/path/logo.gif' --> '/absolute/path/logo.gif'
4391# 'http://whatever/' --> 'http://whatever'
8bd9e0dd 4392sub change_to_rel_path() {
4393 my ($old_path) = @_;
e6566358 4394 my $new_path = $old_path;
8bd9e0dd 4395
4396 if ( $old_path =~ /^SM_PATH/ ) {
8bd9e0dd 4397 $new_path =~ s/^SM_PATH . \'/\.\.\//;
b72da239 4398 $new_path =~ s/\.\.\/config\///;
8bd9e0dd 4399 }
4400
4401 return $new_path;
4402}
b47821fb 4403
4404sub detect_auth_support {
4405# Attempts to auto-detect if a specific auth mechanism is supported.
4406# Called by 'command112a' and 'command112b'
4407# ARGS: service-name (IMAP or SMTP), host:port, mech-name (ie. CRAM-MD5)
4408
35aaf666 4409 # Misc setup
4410 use IO::Socket;
4411 my $service = shift;
4412 my $host = shift;
4413 my $mech = shift;
4414 # Sanity checks
4415 if ((!defined($service)) or (!defined($host)) or (!defined($mech))) {
4416 # Error - wrong # of args
4417 print "BAD ARGS!\n";
4418 return undef;
4419 }
598294a7 4420
35aaf666 4421 if ($service eq 'SMTP') {
5d28b77e 4422 $cmd = "AUTH $mech\r\n";
4423 $logout = "QUIT\r\n";
35aaf666 4424 } elsif ($service eq 'IMAP') {
4425 $cmd = "A01 AUTHENTICATE $mech\n";
4426 $logout = "C01 LOGOUT\n";
4427 } else {
4428 # unknown service - whoops.
4429 return undef;
4430 }
4431
4432 # Get this show on the road
b47821fb 4433 my $sock=IO::Socket::INET->new($host);
4434 if (!defined($sock)) {
4435 # Connect failed
4436 return undef;
4437 }
35aaf666 4438 my $discard = <$sock>; # Server greeting/banner - who cares..
4439
4440 if ($service eq 'SMTP') {
4441 # Say hello first..
5d28b77e 4442 print $sock "HELO $domain\r\n";
35aaf666 4443 $discard = <$sock>; # Yeah yeah, you're happy to see me..
4444 }
4445 print $sock $cmd;
4446
4447 my $response = <$sock>;
4448 chomp($response);
4449 if (!defined($response)) {
4450 return undef;
4451 }
4452
4453 # So at this point, we have a response, and it is (hopefully) valid.
4454 if ($service eq 'SMTP') {
4455 if (($response =~ /^535/) or ($response =~/^502/)) {
4456 # Not supported
5d28b77e 4457 print $sock $logout;
35aaf666 4458 close $sock;
4459 return 'NO';
4460 } elsif ($response =~ /^503/) {
4461 #Something went wrong
4462 return undef;
4463 }
4464 } elsif ($service eq 'IMAP') {
4465 if ($response =~ /^A01/) {
4466 # Not supported
5d28b77e 4467 print $sock $logout;
35aaf666 4468 close $sock;
4469 return 'NO';
4470 }
4471 } else {
4472 # Unknown service - this shouldn't be able to happen.
4473 close $sock;
4474 return undef;
4475 }
4476
4477 # If it gets here, the mech is supported
4478 print $sock "*\n"; # Attempt to cancel authentication
4479 print $sock $logout; # Try to log out, but we don't really care if this fails
4480 close $sock;
4481 return 'YES';
b47821fb 4482}
f8c17cdd 4483
fd7ab795 4484# trims whitespace
4485# Example code from O'Reilly Perl Cookbook
4486sub trim {
4487 my @out = @_;
4488 for (@out) {
4489 s/^\s+//;
4490 s/\s+$//;
4491 }
4492 return wantarray ? @out : $out[0];
4493}
4494
f8c17cdd 4495sub clear_screen() {
4496 if ( $^O =~ /^mswin/i) {
4497 system "cls";
4498 } else {
4499 system "clear";
4500 }
4501}