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