X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=config%2Fconf.pl;h=34dfa4b1656e64ef905443d170ed4dee5dfc969c;hb=a2a74376fb26163e260c38ef46df314a3522bae6;hp=7502fb982ea4f5855787bd841126c7eb4482c8ac;hpb=a28a56da34d2b30fcc5fd139f8187b4fe1105433;p=squirrelmail.git diff --git a/config/conf.pl b/config/conf.pl index 7502fb98..34dfa4b1 100755 --- a/config/conf.pl +++ b/config/conf.pl @@ -40,6 +40,7 @@ if ( defined( $ENV{'PATH_INFO'} ) ############################################################ use Cwd; $dir = cwd(); + ############################################################ # First, lets read in the data already in there... @@ -68,7 +69,7 @@ if ( -e "config.php" ) { close(FILE); if ( $config_version ne $conf_pl_version ) { - system "clear"; + clear_screen(); print $WHT. "WARNING:\n" . $NRM; print " The file \"config/config.php\" was found, but it is for\n"; print " an older version of SquirrelMail. It is possible to still\n"; @@ -121,7 +122,7 @@ if ( -e "config.php" ) { close(FILE); if ( $config_version ne $conf_pl_version ) { - system "clear"; + clear_screen(); print $WHT. "WARNING:\n" . $NRM; print " You are trying to use a 'config_default.php' from an older\n"; print " version of SquirrelMail. This is HIGHLY unrecommended. You\n"; @@ -346,7 +347,7 @@ if ( !$use_imap_tls ) { } if ( !$imap_auth_mech ) { - $imap_auth_mech = 'plain'; + $imap_auth_mech = 'login'; } if (!$session_name ) { @@ -381,7 +382,7 @@ if ( $config_use_color == 1 ) { } while ( ( $command ne "q" ) && ( $command ne "Q" ) ) { - system "clear"; + clear_screen(); print $WHT. "SquirrelMail Configuration : " . $NRM; if ( $config == 1 ) { print "Read: config.php"; } elsif ( $config == 2 ) { print "Read: config_default.php"; } @@ -498,7 +499,7 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) ) { print "14. Default Unseen Notify : $WHT$default_unseen_notify$NRM\n"; print "15. Default Unseen Type : $WHT$default_unseen_type$NRM\n"; print "16. Auto Create Special Folders : $WHT$auto_create_special$NRM\n"; - print "17. Don't move folders into Trash : $WHT$delete_folder$NRM\n"; + print "17. Folder Delete Bypasses Trash : $WHT$delete_folder$NRM\n"; print "18. Enable /NoSelect folder fix : $WHT$noselect_fix_enable$NRM\n"; print "\n"; print "R Return to Main Menu\n"; @@ -513,22 +514,22 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) ) { print "7. Allow use of priority : $WHT$default_use_priority$NRM\n"; print "8. Hide SM attributions : $WHT$hide_sm_attributions$NRM\n"; print "9. Allow use of receipts : $WHT$default_use_mdn$NRM\n"; - print "10. Allow editing of identity : $WHT$edit_identity$NRM\n"; + print "10. Allow editing of identity : $WHT$edit_identity$NRM/$WHT$edit_name$NRM\n"; print "11. Allow server thread sort : $WHT$allow_thread_sort$NRM\n"; print "12. Allow server-side sorting : $WHT$allow_server_sort$NRM\n"; - if ( lc($edit_identity) eq "false" ) { - print "13. Allow editing of name : $WHT$edit_name$NRM\n"; - } - print "14. Allow server charset search : $WHT$allow_charset_search$NRM\n"; - print "15. Enable UID support : $WHT$uid_support$NRM\n"; - print "16. PHP session name : $WHT$session_name$NRM\n"; + print "13. Allow server charset search : $WHT$allow_charset_search$NRM\n"; + print "14. Enable UID support : $WHT$uid_support$NRM\n"; + print "15. PHP session name : $WHT$session_name$NRM\n"; print "\n"; print "R Return to Main Menu\n"; } elsif ( $menu == 5 ) { print $WHT. "Themes\n" . $NRM; print "1. Change Themes\n"; - for ( $count = 0 ; $count <= $#theme_name ; $count++ ) { - print " > $theme_name[$count]\n"; + for ( $count = 0 ; $count <= $#theme_name/2 ; $count++ ) { + $temp_name = $theme_name[$count*2]; + printf " %s%*s %s\n", $temp_name, + 40 - length($temp_name), " ", + $theme_name[($count*2)+1]; } print "2. CSS File : $WHT$theme_css$NRM\n"; print "\n"; @@ -715,10 +716,9 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) ) { elsif ( $command == 10 ) { $edit_identity = command310(); } elsif ( $command == 11 ) { $allow_thread_sort = command312(); } elsif ( $command == 12 ) { $allow_server_sort = command313(); } - elsif ( $command == 13 ) { $edit_name = command311(); } - elsif ( $command == 14 ) { $allow_charset_search = command314(); } - elsif ( $command == 15 ) { $uid_support = command315(); } - elsif ( $command == 16 ) { $session_name = command316(); } + elsif ( $command == 13 ) { $allow_charset_search = command314(); } + elsif ( $command == 14 ) { $uid_support = command315(); } + elsif ( $command == 15 ) { $session_name = command316(); } } elsif ( $menu == 5 ) { if ( $command == 1 ) { command41(); } elsif ( $command == 2 ) { $theme_css = command42(); } @@ -769,11 +769,14 @@ sub command1 { # org_logo sub command2 { print "Your organization's logo is an image that will be displayed at\n"; - print "different times throughout SquirrelMail. This is asking for the\n"; - print "literal (/usr/local/squirrelmail/images/logo.png) or relative\n"; - print "(../images/logo.png) path from the config directory to your logo.\n"; - print "Relative paths to files outside the SquirrelMail distribution\n"; - print "will be converted to their absolute path equivalents in config.php.\n"; + print "different times throughout SquirrelMail. "; + print "\n"; + print "Please be aware of the following: \n"; + print " - Relative URLs are relative to the config dir\n"; + print " to use the default logo, use ../images/sm_logo.png\n"; + print " - To specify a logo defined outside the SquirrelMail source tree\n"; + print " use the absolute URL the webserver would use to include the file\n"; + print " e.g. http://some.host.com/images/mylogo.gif or /images/mylogo.jpg\n"; print "\n"; print "[$WHT$org_logo$NRM]: $WHT"; $new_org_logo = ; @@ -1130,14 +1133,14 @@ sub command111 { return $new_optional_delimiter; } # IMAP authentication type -# Possible values: plain, cram-md5, digest-md5 +# Possible values: login, cram-md5, digest-md5 # Now offers to detect supported mechs, assuming server & port are set correctly sub command112a { print "If you have already set the hostname and port number, I can try to\n"; print "detect the mechanisms your IMAP server supports.\n"; print "I will try to detect CRAM-MD5 and DIGEST-MD5 support. I can't test\n"; - print "for \"plain\" without knowing a username and password.\n"; + print "for \"login\" without knowing a username and password.\n"; print "Auto-detecting is optional - you can safely say \"n\" here.\n"; print "\nTry to detect supported mechanisms? [y/N]: "; $inval=; @@ -1172,15 +1175,15 @@ sub command112a { } print "\nWhat authentication mechanism do you want to use for IMAP connections?\n\n"; - print $WHT . "plain" . $NRM . " - Plaintext. If you can do better, you probably should.\n"; - print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext.\n"; + print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n"; + print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext methods.\n"; print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n"; print "\n*** YOUR IMAP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n"; - print "If you don't understand or are unsure, you probably want \"plain\"\n\n"; - print "plain, cram-md5, or digest-md5 [$WHT$imap_auth_mech$NRM]: $WHT"; + print "If you don't understand or are unsure, you probably want \"login\"\n\n"; + print "login, cram-md5, or digest-md5 [$WHT$imap_auth_mech$NRM]: $WHT"; $inval=; chomp($inval); - if ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) || ($inval =~ /^plain\b/i)) { + if ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) || ($inval =~ /^login\b/i)) { return lc($inval); } else { # user entered garbage or default value so nothing needs to be set @@ -1203,7 +1206,7 @@ sub command112b { print "Trying to detect supported methods (SMTP)...\n"; # Special case! - # Check none by trying to relay to junk@birdbrained.org + # Check none by trying to relay to junk@microsoft.com $host = $smtpServerAddress . ':' . $smtpPort; use IO::Socket; my $sock = IO::Socket::INET->new($host); @@ -1214,7 +1217,7 @@ sub command112b { } else { print $sock "mail from: tester\@squirrelmail.org\n"; $got = <$sock>; # Discard - print $sock "rcpt to: junk\@birdbrained.org\n"; + print $sock "rcpt to: junk\@microsoft.com\n"; $got = <$sock>; # This is the important line if ($got =~ /^250\b/) { # SMTP will relay without auth print "SUPPORTED$NRM\n"; @@ -1225,8 +1228,8 @@ sub command112b { print $sock "quit\n"; close $sock; } - # Try plain (SquirrelMail default) - print "Testing plain:\t\t"; + # Try login (SquirrelMail default) + print "Testing login:\t\t"; $tmp=detect_auth_support('SMTP',$host,'LOGIN'); if (defined($tmp)) { if ($tmp eq 'YES') { @@ -1266,12 +1269,12 @@ sub command112b { } print "\tWhat authentication mechanism do you want to use for SMTP connections?\n"; print $WHT . "none" . $NRM . " - Your SMTP server does not require authorization.\n"; - print $WHT . "plain" . $NRM . " - Plaintext. If you can do better, you probably should.\n"; + print $WHT . "login" . $NRM . " - Plaintext. If you can do better, you probably should.\n"; print $WHT . "cram-md5" . $NRM . " - Slightly better than plaintext.\n"; print $WHT . "digest-md5" . $NRM . " - Privacy protection - better than cram-md5.\n"; - print "\n*** YOUR SMTP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n"; + print $WHT . "\n*** YOUR SMTP SERVER MUST SUPPORT THE MECHANISM YOU CHOOSE HERE ***\n" . $NRM; print "If you don't understand or are unsure, you probably want \"none\"\n\n"; - print "none, plain, cram-md5, or digest-md5 [$WHT$smtp_auth_mech$NRM]: $WHT"; + print "none, login, cram-md5, or digest-md5 [$WHT$smtp_auth_mech$NRM]: $WHT"; $inval=; chomp($inval); if ($inval =~ /^none\b/i) { @@ -1279,7 +1282,7 @@ sub command112b { return "none"; } if ( ($inval =~ /^cram-md5\b/i) || ($inval =~ /^digest-md5\b/i) || - ($inval =~ /^plain\b/i)) { + ($inval =~ /^login\b/i)) { return lc($inval); } else { # user entered garbage, or default value so nothing needs to be set @@ -1759,24 +1762,39 @@ sub command214 { return $auto_create_special; } -# Auto create special folders +# Automatically delete folders sub command215 { - print "Would you like to automatically completely delete any deleted\n"; - print "folders? If not then they will be moved to the Trash folder\n"; - print "and can be deleted from there\n"; - print "\n"; - - if ( lc($delete_folder) eq "true" ) { - $default_value = "y"; - } else { - $default_value = "n"; - } - print "Auto delete folders? (y/n) [$WHT$default_value$NRM]: $WHT"; - $new_delete = ; - if ( ( $new_delete =~ /^y\n/i ) || ( ( $new_delete =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + print "Should folders selected for deletion bypass the Trash folder?\n\n"; + + if ( $imap_server_type == "courier" ) { + print "Courier(or Courier-IMAP) IMAP servers do not support "; + print "subfolders of Trash. \n"; + print "Deleting folders will bypass the trash folder and "; + print "be immediately deleted.\n\n"; + print "Press any key to continue...\n"; + $new_delete = ; $delete_folder = "true"; - } else { - $delete_folder = "false"; + } elsif ( $imap_server_type == "uw" ) { + print "UW IMAP servers will not allow folders containing"; + print "mail to also contain folders.\n"; + print "Deleting folders will bypass the trash folder and"; + print "be immediately deleted\n\n"; + print "Press any key to continue...\n"; + $new_delete = ; + $delete_folder = "true"; + } else { + if ( lc($delete_folder) eq "true" ) { + $default_value = "y"; + } else { + $default_value = "n"; + } + print "Auto delete folders? (y/n) [$WHT$default_value$NRM]: $WHT"; + $new_delete = ; + if ( ( $new_delete =~ /^y\n/i ) || ( ( $new_delete =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { + $delete_folder = "true"; + } else { + $delete_folder = "false"; + } } return $delete_folder; } @@ -2020,8 +2038,8 @@ sub command39 { } sub command310 { - print "This allows you to prevent the editing of the users name and"; - print "email address. This is mainly useful when used with the"; + print "This allows you to prevent the editing of the user's name and "; + print "email address. This is mainly useful when used with the "; print "retrieveuserdata plugin\n"; print "\n"; @@ -2030,19 +2048,22 @@ sub command310 { } else { $default_value = "n"; } - print "Allow editing? (y/n) [$WHT$default_value$NRM]: $WHT"; + print "Allow editing of user's identity? (y/n) [$WHT$default_value$NRM]: $WHT"; $new_edit = ; if ( ( $new_edit =~ /^y\n/i ) || ( ( $new_edit =~ /^\n/ ) && ( $default_value eq "y" ) ) ) { $edit_identity = "true"; + $edit_name = "true"; } else { $edit_identity = "false"; + $edit_name = command311(); } return $edit_identity; } sub command311 { - print "This option allows you to choose if the user can edit their full name"; - print "even when you don't want them to change their username\n"; + print "As a follow-up, this option allows you to choose if the user "; + print "can edit their full name even when you don't want them to "; + print "change their username\n"; print "\n"; if ( lc($edit_name) eq "true" ) { @@ -2156,8 +2177,8 @@ sub command316 { sub command41 { - print "\nNow we will define the themes that you wish to use. If you have added\n"; - print "a theme of your own, just follow the instructions (?) about how to add\n"; + print "\nDefine the themes that you wish to use. If you have added "; + print "a theme of your own, just follow the instructions (?) about how to add "; print "them. You can also change the default theme.\n"; print "[theme] command (?=help) > "; $input = ; @@ -2171,8 +2192,11 @@ sub command41 { } else { print " "; } + if ( $count < 10 ) { + print " "; + } $name = $theme_name[$count]; - $num_spaces = 25 - length($name); + $num_spaces = 35 - length($name); for ( $i = 0 ; $i < $num_spaces ; $i++ ) { $name = $name . " "; } @@ -2305,8 +2329,12 @@ sub command42 { print "\n"; print "To clear out an existing value, just type a space for the input.\n"; print "\n"; - print "Relative links to files outside the SquirrelMail distribution\n"; - print "will be converted to their absolute path equivalents in config.php.\n"; + print "Please be aware of the following: \n"; + print " - Relative URLs are relative to the config dir\n"; + print " to use the themes directory, use ../themes/css/newdefault.css\n"; + print " - To specify a css file defined outside the SquirrelMail source tree\n"; + print " use the absolute URL the webserver would use to include the file\n"; + print " e.g. http://some.host.com/css/mystyle.css or /css/mystyle.css\n"; print "\n"; print "[$WHT$theme_css$NRM]: $WHT"; $new_theme_css = ; @@ -2852,7 +2880,7 @@ sub save_data { } sub set_defaults { - system "clear"; + clear_screen(); print $WHT. "SquirrelMail Configuration : " . $NRM; if ( $config == 1 ) { print "Read: config.php"; } elsif ( $config == 2 ) { print "Read: config_default.php"; } @@ -2907,7 +2935,8 @@ sub set_defaults { $show_contain_subfolders_option = true; $optional_delimiter = "/"; $disp_default_folder_prefix = $default_folder_prefix; - + $delete_folder = true; + $continue = 1; } elsif ( $server eq "exchange" ) { $imap_server_type = "exchange"; @@ -2933,7 +2962,8 @@ sub set_defaults { $show_contain_subfolders_option = false; $optional_delimiter = "."; $disp_default_folder_prefix = $default_folder_prefix; - + $delete_folder = true; + $continue = 1; } elsif ( $server eq "macosx" ) { $imap_server_type = "macosx"; @@ -2966,6 +2996,7 @@ sub set_defaults { print " default_sub_of_inbox = $default_sub_of_inbox\n"; print "show_contain_subfolders_option = $show_contain_subfolders_option\n"; print " optional_delimiter = $optional_delimiter\n"; + print " delete_folder = $delete_folder\n"; } print "\nPress any key to continue..."; $tmp = ; @@ -2977,6 +3008,7 @@ sub set_defaults { # prepended to the path, if not, then the path will be # converted to an absolute path, e.g. # '../images/logo.gif' --> SM_PATH . 'images/logo.gif' +# '../../someplace/data' --> '/absolute/path/someplace/data' # 'images/logo.gif' --> SM_PATH . 'config/images/logo.gif' # '/absolute/path/logo.gif' --> '/absolute/path/logo.gif' # 'http://whatever/' --> 'http://whatever' @@ -2990,36 +3022,39 @@ sub change_to_SM_path() { # If the path is absolute, don't bother. return "\'" . $old_path . "\'" if ( $old_path eq ''); return "\'" . $old_path . "\'" if ( $old_path =~ /^(\/|http)/ ); + return "\'" . $old_path . "\'" if ( $old_path =~ /^\w:\// ); + return $old_path if ( $old_path =~ /^\'(\/|http)/ ); + return $old_path if ( $old_path =~ /^\'\w:\// ); return $old_path if ( $old_path =~ /^(\$|SM_PATH)/); + # Remove remaining ' + $old_path =~ s/\'//g; + # For relative paths, split on '../' @rel_path = split(/\.\.\//, $old_path); if ( $#rel_path > 1 ) { # more than two levels away. Make it absolute. @abs_path = split(/\//, $dir); - foreach $subdir (@rel_path) { - if ($subdir eq '') { - pop @abs_path; - } else { - push @abs_path, $subdir; - } - } - foreach $subdir (@abs_path) { - $new_path .= $subdir . '/'; + + # Lop off the relative pieces of the absolute path.. + for ( $i = 0; $i <= $#rel_path; $i++ ) { + pop @abs_path; + shift @rel_path; } + push @abs_path, @rel_path; + $new_path = "\'" . join('/', @abs_path) . "\'"; } elsif ( $#rel_path > 0 ) { # it's within the SM tree, prepend SM_PATH $new_path = $old_path; $new_path =~ s/^\.\.\//SM_PATH . \'/; - $new_path .= '\''; + $new_path .= "\'"; } else { # Last, it's a relative path without any leading '.' # Prepend SM_PATH and config, since the paths are # relative to the config directory $new_path = "SM_PATH . \'config/" . $old_path . "\'"; } - return $new_path; } @@ -3076,9 +3111,16 @@ sub detect_auth_support { return undef; } my $discard = <$sock>; # Server greeting/banner - who cares.. + + if ($service eq 'SMTP') { + # Say hello first.. + print $sock "helo $domain\n"; + $discard = <$sock>; # Yeah yeah, you're happy to see me.. + } print $sock $cmd; my $response = <$sock>; + chomp($response); if (!defined($response)) { return undef; } @@ -3089,6 +3131,9 @@ sub detect_auth_support { # Not supported close $sock; return 'NO'; + } elsif ($response =~ /^503/) { + #Something went wrong + return undef; } } elsif ($service eq 'IMAP') { if ($response =~ /^A01/) { @@ -3108,3 +3153,11 @@ sub detect_auth_support { close $sock; return 'YES'; } + +sub clear_screen() { + if ( $^O =~ /^mswin/i) { + system "cls"; + } else { + system "clear"; + } +}