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