#!/usr/bin/env perl
# conf.pl
-# Luke Ehresman (luke@squirrelmail.org)
#
-# A simple configure script to configure squirrelmail
+# Copyright (c) 1999-2003 The SquirrelMail Project Team
+# Licensed under the GNU GPL. For full terms see COPYING.
+#
+# A simple configure script to configure SquirrelMail
#
# $Id$
############################################################
-$conf_pl_version = "1.2.0";
+$conf_pl_version = "1.4.0";
############################################################
# Check what directory we're supposed to be running in, and
############################################################
use Cwd;
$dir = cwd();
+
############################################################
# First, lets read in the data already in there...
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";
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";
}
}
close FILE;
-if ( $useSendmail ne "true" ) {
+if ( lc($useSendmail) ne "true" ) {
$useSendmail = "false";
}
if ( !$sendmail_path ) {
}
if ( !$imap_auth_mech ) {
- $imap_auth_mech = 'plain';
+ $imap_auth_mech = 'login';
}
if (!$session_name ) {
}
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"; }
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";
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";
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(); }
print "possible. If you set up an organization name, most places where\n";
print "SquirrelMail would take credit will be credited to your organization.\n";
print "\n";
+ print "If your Organization Name includes a '\$', please precede it with a \\. \n";
+ print "Other '\$' will be considered the beginning of a variable that\n";
+ print "must be defined before the \$org_name is printed.\n";
+ print "\$version, for example, is included by default, and will print the\n";
+ print "string representing the current SquirrelMail version.\n";
+ print "\n";
print "[$WHT$org_name$NRM]: $WHT";
$new_org_name = <STDIN>;
if ( $new_org_name eq "\n" ) {
# 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 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 = <STDIN>;
print "the titlebar. Usually this will end up looking something like:\n";
print "\"Netscape: $org_title\"\n";
print "\n";
+ print "If your Organization Title includes a '\$', please precede it with a \\. \n";
+ print "Other '\$' will be considered the beginning of a variable that\n";
+ print "must be defined before the \$org_title is printed.\n";
+ print "\$version, for example, is included by default, and will print the\n";
+ print "string representing the current SquirrelMail version.\n";
+ print "\n";
print "[$WHT$org_title$NRM]: $WHT";
$new_org_title = <STDIN>;
if ( $new_org_title eq "\n" ) {
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=<STDIN>;
}
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=<STDIN>;
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
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);
} 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";
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') {
}
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=<STDIN>;
chomp($inval);
if ($inval =~ /^none\b/i) {
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
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 = <STDIN>;
- if ( ( $new_delete =~ /^y\n/i ) || ( ( $new_delete =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
+ 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 "If this is not the correct value for your server,\n";
+ print "please use option D on the Main Menu to configure your server correctly.\n\n";
+ print "Press any key to continue...\n";
+ $new_delete = <STDIN>;
$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 "If this is not the correct value for your server,\n";
+ print "please use option D on the Main Menu to configure your server correctly.\n\n";
+ print "Press any key to continue...\n";
+ $new_delete = <STDIN>;
+ $delete_folder = "true";
+ } else {
+ print "Should folders selected for deletion bypass the Trash folder?\n\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 = <STDIN>;
+ if ( ( $new_delete =~ /^y\n/i ) || ( ( $new_delete =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
+ $delete_folder = "true";
+ } else {
+ $delete_folder = "false";
+ }
}
return $delete_folder;
}
# Data directory
sub command33a {
- print "It is a possible security hole to have a writable directory\n";
- print "under the web server's root directory (ex: /home/httpd/html).\n";
- print "For this reason, it is possible to put the data directory\n";
- print "anywhere you would like. The path name can be absolute or\n";
- print "relative (to the config directory). It doesn't matter. Here\n";
- print "are two examples:\n";
- print " Absolute: /usr/local/squirrelmail/data/\n";
- print " Relative: ../data/\n";
+ print "Specify the location for your data directory.\n";
+ print "The path name can be absolute or relative (to the config directory).\n";
+ print "It doesn't matter. Here are two examples:\n";
+ print " Absolute: /var/spool/data/\n";
+ print " Relative: ../data/\n";
print "Relative paths to directories outside of the SquirrelMail distribution\n";
- print "will be converted to their absolute path equivalents in config.php.\n";
+ print "will be converted to their absolute path equivalents in config.php.\n\n";
+ print "Note: There are potential security risks with having a writable directory\n";
+ print "under the web server's root directory (ex: /home/httpd/html).\n";
+ print "For this reason, it is recommended to put the data directory\n";
+ print "in an alternate location of your choice. \n";
print "\n";
print "[$WHT$data_dir$NRM]: $WHT";
# Attachment directory
sub command33b {
print "Path to directory used for storing attachments while a mail is\n";
- print "being sent. There are a few security considerations regarding this\n";
+ print "being sent. The path name can be absolute or relative (to the config directory).\n";
+ print "It doesn't matter. Here are two examples:\n";
+ print " Absolute: /var/spool/attach/\n";
+ print " Relative: ../attach/\n";
+ print "Relative paths to directories outside of the SquirrelMail distribution\n";
+ print "will be converted to their absolute path equivalents in config.php.\n\n";
+ print "Note: There are a few security considerations regarding this\n";
print "directory:\n";
print " 1. It should have the permission 733 (rwx-wx-wx) to make it\n";
print " impossible for a random person with access to the webserver\n";
print " to list files in this directory. Confidential data might\n";
print " be laying around in there.\n";
+ print " Depending on your user:group assignments, 730 (rwx-wx---)\n";
+ print " may be possible, and more secure (e.g. root:apache)\n";
print " 2. Since the webserver is not able to list the files in the\n";
print " content is also impossible for the webserver to delete files\n";
print " lying around there for too long.\n";
print " 3. It should probably be another directory than the data\n";
print " directory specified in option 3.\n";
- print "Relative paths to directories outside of the SquirrelMail distribution\n";
- print "will be converted to their absolute path equivalents in config.php.\n";
print "\n";
print "[$WHT$attachment_dir$NRM]: $WHT";
}
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";
} 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 = <STDIN>;
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" ) {
print "[$WHT$session_name$NRM]: $WHT";
$new_session_name = <STDIN>;
chomp($new_session_name);
- if ( $new_session_name eq "\n" ) {
+ if ( $new_session_name eq "" ) {
$new_session_name = $session_name;
}
return $new_session_name;
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 = <STDIN>;
} 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 . " ";
}
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 = <STDIN>;
print CF " * Created using the configure script, conf.pl\n";
print CF " */\n";
print CF "\n";
-
+ print CF "global \$version;\n";
+
if ($print_config_version) {
print CF "\$config_version = '$print_config_version';\n";
}
}
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"; }
$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";
$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";
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 = <STDIN>;
}
-############################################################
# This subroutine corrects relative paths to ensure they
# will work within the SM space. If the path falls within
# the SM directory tree, the SM_PATH variable will be
# prepended to the path, if not, then the path will be
-# converted to an absolute path.
-############################################################
+# 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'
+# $some_var/path --> "$some_var/path"
sub change_to_SM_path() {
my ($old_path) = @_;
my $new_path = '';
# If the path is absolute, don't bother.
return "\'" . $old_path . "\'" if ( $old_path eq '');
- return "\'" . $old_path . "\'" if ( $old_path =~ /^\// );
- return $old_path if ( $old_path =~ /^\$/);
- return $old_path if ( $old_path =~ /^SM_PATH/ );
-
+ 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/);
+
+ if ( $old_path =~ /^\$/ ) {
+ # check if it's a single var, or a $var/path combination
+ # if it's $var/path, enclose in ""
+ if ( $old_path =~ /\// ) {
+ return '"'.$old_path.'"';
+ }
+ return $old_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 (no substitution required)
- $new_path = "SM_PATH . \'" . $old_path . "\'";
+ # Prepend SM_PATH and config, since the paths are
+ # relative to the config directory
+ $new_path = "SM_PATH . \'config/" . $old_path . "\'";
}
-
return $new_path;
}
+
+# Change SM_PATH to admin-friendly version, e.g.:
+# SM_PATH . 'images/logo.gif' --> '../images/logo.gif'
+# SM_PATH . 'config/some.php' --> 'some.php'
+# '/absolute/path/logo.gif' --> '/absolute/path/logo.gif'
+# 'http://whatever/' --> 'http://whatever'
sub change_to_rel_path() {
my ($old_path) = @_;
- my $new_path = '';
-
- return $old_path if ( $old_path eq '');
- return $old_path if ( $old_path =~ /^\$/ );
- return $old_path if ( $old_path =~ /^\// );
- return $old_path if ( $old_path =~ /^\.\./ );
+ my $new_path = $old_path;
if ( $old_path =~ /^SM_PATH/ ) {
- $new_path = $old_path;
$new_path =~ s/^SM_PATH . \'/\.\.\//;
+ $new_path =~ s/\.\.\/config\///;
}
return $new_path;
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;
}
# Not supported
close $sock;
return 'NO';
+ } elsif ($response =~ /^503/) {
+ #Something went wrong
+ return undef;
}
} elsif ($service eq 'IMAP') {
if ($response =~ /^A01/) {
close $sock;
return 'YES';
}
+
+sub clear_screen() {
+ if ( $^O =~ /^mswin/i) {
+ system "cls";
+ } else {
+ system "clear";
+ }
+}