MDN Support. First approach.
[squirrelmail.git] / config / conf.pl
index 2a6459e6c7119495eb0c073b02d955c93c4dbdc4..a9238792304407fa4baf10f39b131d99d4d5cab8 100755 (executable)
@@ -8,6 +8,19 @@
 ############################################################              
 $conf_pl_version = "1.2.0";
 
+############################################################
+# Check what directory we're supposed to be running in, and
+# change there if necessary.  File::Basename has been in
+# Perl since at least 5.003_7, and nobody sane runs anything
+# before that, but just in case.
+############################################################
+
+if (eval q{require "File/Basename.pm"}) {
+    my $dir = File::Basename::dirname($0);
+    chdir($dir);
+}
+
+
 ############################################################              
 # Some people try to run this as a CGI. That's wrong!
 ############################################################              
@@ -254,6 +267,30 @@ if(!$default_use_priority) {
 if(!$hide_sm_attributions) {
     $hide_sm_attributions = "false";
 }
+if(!$default_use_mdn) {
+    $default_use_mdn = "true";
+}
+
+if ($ARGV[0] eq '--install-plugin') {
+    print "Activating plugin " . $ARGV[1]
+    . "\n";
+    push @plugins, $ARGV[1];
+    save_data();
+    exit(0);
+}
+elsif ($ARGV[0] eq '--remove-plugin') {
+    print "Removing plugin " . $ARGV[1]
+    . "\n";
+    foreach $plugin (@plugins) {
+        if ($plugin ne $ARGV[1]) {
+           push @newplugins, $plugin;
+        }
+    }
+    @plugins = @newplugins;
+    save_data();
+    exit(0);
+}
+
 
 #####################################################################################
 if ($config_use_color == 1) {
@@ -283,6 +320,7 @@ while (($command ne "q") && ($command ne "Q")) {
       print "6.  Address Books (LDAP)\n";
       print "7.  Message of the Day (MOTD)\n";
       print "8.  Plugins\n";
+      print "9.  Database\n";
       print "\n";
       print "D.  Set pre-defined settings for specific IMAP servers\n";
       print "\n";
@@ -293,6 +331,7 @@ while (($command ne "q") && ($command ne "Q")) {
       print "3.  Organization Title   : $WHT$org_title$NRM\n";
       print "4.  Signout Page         : $WHT$signout_page$NRM\n";
       print "5.  Default Language     : $WHT$squirrelmail_default_language$NRM\n";
+      print "6.  Top Frame            : $WHT$frame_top$NRM\n";
       print "\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 2) {
@@ -321,22 +360,23 @@ while (($command ne "q") && ($command ne "Q")) {
       print "R   Return to Main Menu\n";
    } elsif ($menu == 3) {
       print $WHT."Folder Defaults\n".$NRM;
-      print "1.  Default Folder Prefix       : $WHT$default_folder_prefix$NRM\n";
-      print "2.  Show Folder Prefix Option   : $WHT$show_prefix_option$NRM\n";
-      print "3.  Trash Folder                : $WHT$trash_folder$NRM\n";
-      print "4.  Sent Folder                 : $WHT$sent_folder$NRM\n";
-      print "5.  Drafts Folder               : $WHT$draft_folder$NRM\n";
-      print "6.  By default, move to trash   : $WHT$default_move_to_trash$NRM\n";
-      print "7.  By default, move to sent    : $WHT$default_move_to_sent$NRM\n";
-      print "8.  By default, save as draft   : $WHT$default_save_as_draft$NRM\n";
-      print "9.  List Special Folders First  : $WHT$list_special_folders_first$NRM\n";
-      print "10. Show Special Folders Color  : $WHT$use_special_folder_color$NRM\n";
-      print "11. Auto Expunge                : $WHT$auto_expunge$NRM\n";
-      print "12. Default Sub. of INBOX       : $WHT$default_sub_of_inbox$NRM\n";
-      print "13. Show 'Contain Sub.' Option  : $WHT$show_contain_subfolders_option$NRM\n";
-      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 "1.  Default Folder Prefix         : $WHT$default_folder_prefix$NRM\n";
+      print "2.  Show Folder Prefix Option     : $WHT$show_prefix_option$NRM\n";
+      print "3.  Trash Folder                  : $WHT$trash_folder$NRM\n";
+      print "4.  Sent Folder                   : $WHT$sent_folder$NRM\n";
+      print "5.  Drafts Folder                 : $WHT$draft_folder$NRM\n";
+      print "6.  By default, move to trash     : $WHT$default_move_to_trash$NRM\n";
+      print "7.  By default, move to sent      : $WHT$default_move_to_sent$NRM\n";
+      print "8.  By default, save as draft     : $WHT$default_save_as_draft$NRM\n";
+      print "9.  List Special Folders First    : $WHT$list_special_folders_first$NRM\n";
+      print "10. Show Special Folders Color    : $WHT$use_special_folder_color$NRM\n";
+      print "11. Auto Expunge                  : $WHT$auto_expunge$NRM\n";
+      print "12. Default Sub. of INBOX         : $WHT$default_sub_of_inbox$NRM\n";
+      print "13. Show 'Contain Sub.' Option    : $WHT$show_contain_subfolders_option$NRM\n";
+      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 "\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 4) {
@@ -349,6 +389,7 @@ while (($command ne "q") && ($command ne "Q")) {
       print "6.  Usernames in Lowercase : $WHT$force_username_lowercase$NRM\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 MDN       : $WHT$default_use_mdn$NRM\n";      
       print "\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 5) {
@@ -415,6 +456,15 @@ while (($command ne "q") && ($command ne "Q")) {
       print "A   Sanitize all plugins for use with Squirrelmail 1.2\n";
       print "\n";
       print "R   Return to Main Menu\n";
+   } elsif ($menu == 9) {
+      print $WHT."Database\n".$NRM;
+      print "1.  DSN for Address Book   : $WHT$addrbook_dsn$NRM\n";
+      print "2.  Table for Address Book : $WHT$addrbook_table$NRM\n";
+      print "3.  DSN for Preferences    : $WHT$prefs_dsn$NRM\n";
+      print "4.  Table for Preferences  : $WHT$prefs_table$NRM\n";
+      print "\n";
+      print "S   Save data\n";
+      print "R   Return to Main Menu\n";
    }
    if ($config_use_color == 1) {
       print "C.  Turn color off\n";
@@ -436,7 +486,6 @@ while (($command ne "q") && ($command ne "Q")) {
       $menu = 0;
    } elsif ($command eq "s") {
       save_data ();
-      print "Data saved in config.php\n";
       print "Press enter to continue...";
       $tmp = <STDIN>;
       $saved = 1;
@@ -462,7 +511,7 @@ while (($command ne "q") && ($command ne "Q")) {
    } else {
       $saved = 0;
       if ($menu == 0) {
-         if (($command > 0) && ($command < 9)) {
+         if (($command > 0) && ($command < 10)) {
             $menu = $command;
          }
       } elsif ($menu == 1) {
@@ -470,7 +519,8 @@ while (($command ne "q") && ($command ne "Q")) {
          elsif ($command == 2) { $org_logo   = command2 (); }
          elsif ($command == 3) { $org_title  = command3 (); }
          elsif ($command == 4) { $signout_page  = command4 (); }
-        elsif ($command == 5) { $squirrelmail_default_language = command5(); }
+         elsif ($command == 5) { $squirrelmail_default_language = command5(); }
+         elsif ($command == 6) { $frame_top = command6(); }
       } elsif ($menu == 2) {
          if    ($command == 1)  { $domain                 = command11 (); }
          elsif ($command == 2)  { $imapServerAddress      = command12 (); }
@@ -500,6 +550,7 @@ while (($command ne "q") && ($command ne "Q")) {
          elsif ($command == 14) { $default_unseen_notify          = command212(); }
          elsif ($command == 15) { $default_unseen_type            = command213(); }
          elsif ($command == 16) { $auto_create_special            = command214(); }
+         elsif ($command == 17) { $delete_folder                  = command215(); }
       } elsif ($menu == 4) {
          if    ($command == 1) { $default_charset          = command31 (); }
          elsif ($command == 2) { $data_dir                 = command33a (); }
@@ -509,6 +560,7 @@ while (($command ne "q") && ($command ne "Q")) {
         elsif ($command == 6) { $force_username_lowercase = command36 (); }
         elsif ($command == 7) { $default_use_priority     = command37 (); }
          elsif ($command == 8) { $hide_sm_attributions     = command38 (); }
+         elsif ($command == 9) { $default_use_mdn          = command39 (); }     
       } elsif ($menu == 5) {
          if    ($command == 1) { command41 (); }
          elsif ($command == 2) { $theme_css = command42 (); }
@@ -520,6 +572,11 @@ while (($command ne "q") && ($command ne "Q")) {
       } elsif ($menu == 8) {
          if    ($command =~ /^[0-9]+/) { @plugins = command81(); }
          elsif ($command eq "a") { command8s(); }
+      } elsif ($menu == 9) {
+         if    ($command == 1) { $addrbook_dsn   = command91(); }
+         elsif ($command == 2) { $addrbook_table = command92(); }
+         elsif ($command == 3) { $prefs_dsn      = command93(); }
+         elsif ($command == 4) { $prefs_table    = command94(); }
       }
    }   
 }
@@ -611,6 +668,23 @@ sub command5 {
    return $new_signout_page;
 }
 
+# Default top frame
+sub command6 {
+    print "SquirrelMail defaults to using the whole of the browser window.\n";
+    print "This allows you to keep it within a specified frame. The default\n";
+    print "is '_top'\n";
+    print "\n";
+    print "[$WHT$frame_top$NRM]: $WHT";
+    $new_frame_top = <STDIN>;
+    if ($new_frame_top eq "\n") {
+        $new_frame_top = '_top';
+    } else {
+        $new_frame_top =~ s/[\r|\n]//g;
+        $new_frame_top =~ s/^\s+$//g;
+    }
+    return $new_frame_top;
+}
+
 ####################################################################################
 
 # domain
@@ -1024,7 +1098,7 @@ sub command24a {
 sub command24b {
    print "By default, should messages get moved to the sent folder?  You\n";
    print "can specify the default sent folder in option 4.  If this is set\n";
-   print "to false, messages will get sent an no copy will be made.\n";
+   print "to false, messages will get sent and no copy will be made.\n";
    print "\n";
    print "Trash folder is currently: $sent_folder\n";
    print "\n";
@@ -1249,6 +1323,28 @@ sub command214 {
    return $auto_create_special;
 }
 
+# Auto create special 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 ($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;
+}     
+
 
 ############# GENERAL OPTIONS #####################
 
@@ -1441,6 +1537,25 @@ sub command38 {
 }
 
 
+sub command39 {
+   print "";
+   print "\n";
+   
+   if ($default_use_mdn eq "true") {
+      $default_value = "y";
+   } else {
+      $default_value = "n";
+   }
+   
+   print "Enable read receipt support (y/n) [$WHT$default_value$NRM]: $WHT";
+      $new_show = <STDIN>;
+      if (($new_show =~ /^y\n/i) || (($new_show =~ /^\n/) && ($default_value eq "y"))) {
+         return "true";
+      }
+      return "false";
+}
+
+
 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";
@@ -1761,156 +1876,226 @@ sub command62 {
    return $default_use_javascript_addr_book;
 }
 
+sub command91 {
+   print "If you want to store your users address book details in a database then\n";
+   print "you need to set this DSN to a valid value. The format for this is:\n";
+   print "mysql://user:pass\@hostname/dbname\n";
+   print "Where mysql can be one of the databases PHP supports, the most common\n";
+   print "of these are mysql, msql and pgsql\n";
+   print "If the DSN is left empty (hit space and then return) the database\n";
+   print "related code for address books will not be used\n";
+   print "\n";
 
-sub save_data {
-   $tab = "    ";
-   open (CF, ">config.php");
-
-   print CF "<?php\n";
-   print CF "\n";
+   if ($addrbook_dsn eq "") {
+      $default_value = "Disabled";
+   } else {
+      $default_value = $addrbook_dsn;
+   }
+   print "[$WHT$addrbook_dsn$NRM]: $WHT";
+   $new_dsn = <STDIN>;
+   if ($new_dsn eq "\n") {
+      $new_dsn = "";
+   } else {
+      $new_dsn =~ s/[\r|\n]//g;
+      $new_dsn =~ s/^\s+$//g;
+   }
+   return $new_dsn;
+}
 
-   print CF "/**\n";
-   print CF " * SquirrelMail Configuration File\n";
-   print CF " * Created using the configure script, conf.pl\n";
-   print CF " */\n";
-   print CF "\n";
-   
-   print CF "global \$config_version, \$config_use_color;\n";
-   if ($print_config_version) {
-      print CF "\$config_version = '$print_config_version';\n";
-   }
-   print CF "\$config_use_color = $config_use_color;\n"; 
-   print CF "\n";
-
-   print CF "global \$org_name, \$org_logo, \$org_title, \$signout_page;\n";
-   print CF "\$org_name      = \"$org_name\";\n";
-   print CF "\$org_logo      = '$org_logo';\n";
-   print CF "\$org_title     = \"$org_title\";\n";
-   print CF "\$signout_page  = '$signout_page';\n";
-   print CF "\n";
-
-   print CF "global \$motd;\n";
-   print CF "\$motd = '$motd';\n";
-   print CF "\n";
-
-   print CF "global \$squirrelmail_default_language;\n";
-   print CF "\$squirrelmail_default_language = '$squirrelmail_default_language';\n";
-   print CF "\n";
-
-   print CF "global \$domain, \$imapServerAddress, \$imapPort;\n";
-   print CF "global \$useSendmail, \$smtpServerAddress, \$smtpPort;\n";
-   print CF "global \$sendmail_path, \$use_authenticated_smtp;\n";
-   print CF "global \$imap_server_type, \$invert_time;\n";
-   print CF "global \$optional_delimiter;\n";
-   print CF "\$domain                 = '$domain';\n";
-   print CF "\$imapServerAddress      = '$imapServerAddress';\n";
-   print CF "\$imapPort               = $imapPort;\n";
-   print CF "\$useSendmail            = $useSendmail;\n";
-   print CF "\$smtpServerAddress      = '$smtpServerAddress';\n";
-   print CF "\$smtpPort               = $smtpPort;\n";
-   print CF "\$sendmail_path          = '$sendmail_path';\n";
-   print CF "\$use_authenticated_smtp = $use_authenticated_smtp;\n";
-   print CF "\$imap_server_type       = '$imap_server_type';\n";
-   print CF "\$invert_time            = $invert_time;\n";
-   print CF "\$optional_delimiter     = '$optional_delimiter';\n";
-   print CF "\n";
-
-   print CF "global \$default_folder_prefix;\n";
-   print CF "global \$trash_folder, \$default_move_to_trash;\n";
-   print CF "global \$sent_folder, \$default_move_to_sent;\n";
-   print CF "global \$draft_folder, \$default_save_to_draft;\n";
-   print CF "global \$show_prefix_option, \$list_special_folders_first;\n";
-   print CF "global \$use_special_folder_color, \$auto_expunge;\n";
-   print CF "global \$default_sub_of_inbox;\n";
-   print CF "global \$show_contain_subfolders_option;\n";
-   print CF "global \$default_unseen_notify;\n";
-   print CF "global \$default_unseen_type, \$auto_create_special;\n";
-   print CF "\$default_folder_prefix          = '$default_folder_prefix';\n";
-   print CF "\$trash_folder                   = '$trash_folder';\n";
-   print CF "\$sent_folder                    = '$sent_folder';\n";
-   print CF "\$draft_folder                   = '$draft_folder';\n";
-   print CF "\$default_move_to_trash          = $default_move_to_trash;\n";
-   print CF "\$default_move_to_sent           = $default_move_to_sent;\n";
-   print CF "\$default_save_as_draft          = $default_save_as_draft;\n";
-   print CF "\$show_prefix_option             = $show_prefix_option;\n";
-   print CF "\$list_special_folders_first     = $list_special_folders_first;\n";
-   print CF "\$use_special_folder_color       = $use_special_folder_color;\n";
-   print CF "\$auto_expunge                   = $auto_expunge;\n";
-   print CF "\$default_sub_of_inbox           = $default_sub_of_inbox;\n";
-   print CF "\$show_contain_subfolders_option = $show_contain_subfolders_option;\n";
-   print CF "\$default_unseen_notify          = $default_unseen_notify;\n";
-   print CF "\$default_unseen_type            = $default_unseen_type;\n";
-   print CF "\$auto_create_special            = $auto_create_special;\n";
-   print CF "\n";
-
-   print CF "global \$default_charset;\n";
-   print CF "global \$data_dir, \$attachment_dir, \$dir_hash_level;\n";
-   print CF "global \$default_left_size, \$force_username_lowercase;\n";
-   print CF "global \$default_use_priority, \$hide_sm_attributions;\n";
-   print CF "\$default_charset          = '$default_charset';\n";
-   print CF "\$data_dir                 = '$data_dir';\n";
-   print CF "\$attachment_dir           = \"$attachment_dir\";\n";
-   print CF "\$dir_hash_level           = $dir_hash_level;\n";
-   print CF "\$default_left_size        = $default_left_size;\n";
-   print CF "\$force_username_lowercase = $force_username_lowercase;\n";
-   print CF "\$default_use_priority     = $default_use_priority;\n";
-   print CF "\$hide_sm_attributions     = $hide_sm_attributions;\n";
-   print CF "\n";
-
-   print CF "global \$plugins;\n";
-   for ($ct=0; $ct <= $#plugins; $ct++) {
-      print CF "\$plugins[$ct] = '$plugins[$ct]';\n";
-   }
-   print CF "\n";
-
-   print CF "global \$theme_css, \$theme;\n";
-   print CF "\$theme_css = '$theme_css';\n";
-   for ($count=0; $count <= $#theme_name; $count++) {
-      print CF "\$theme[$count]['PATH'] = '$theme_path[$count]';\n";
-      print CF "\$theme[$count]['NAME'] = '$theme_name[$count]';\n";
-   }
-   print CF "\n";
-
-   if ($default_use_javascript_addr_book ne "true") {
-      $default_use_javascript_addr_book = "false";
-   }   
-   print CF "global \$default_use_javascript_addr_book, \$ldap_server;\n";
-   print CF "\$default_use_javascript_addr_book = $default_use_javascript_addr_book;\n";
-   for ($count=0; $count <= $#ldap_host; $count++) {
-      print CF "\$ldap_server[$count] = array(\n";
-      print CF "    'host' => '$ldap_host[$count]',\n";
-      print CF "    'base' => '$ldap_base[$count]'";
-      if ($ldap_name[$count]) {
-         print CF ",\n";
-         print CF "    'name' => '$ldap_name[$count]'";
-      }
-      if ($ldap_port[$count]) {
-         print CF ",\n";
-         print CF "    'port' => '$ldap_port[$count]'";
-      }
-      if ($ldap_charset[$count]) {
-         print CF ",\n";
-         print CF "    'charset' => '$ldap_charset[$count]'";
-      }
-      if ($ldap_maxrows[$count]) {
-         print CF ",\n";
-         print CF "    'maxrows' => '$ldap_maxrows[$count]'";
-      }
-      print CF "\n";
-      print CF ");\n";
-      print CF "\n";
+sub command92 {
+   print "This is the name of the table you want to store the address book\n";
+   print "data in, it defaults to 'address'\n";
+   print "\n";
+   print "[$WHT$addrbook_table$NRM]: $WHT";
+   $new_table = <STDIN>;
+   if ($new_table eq "\n") {
+      $new_table = $addrbook_table;
+   } else {
+      $new_table =~ s/[\r|\n]//g;
    }
+   return $new_table;
+}
+
+sub command93 {
+    print "If you want to store your users preferences in a database then\n";
+    print "you need to set this DSN to a valid value. The format for this is:\n";
+    print "mysql://user:pass\@hostname/dbname\n";
+    print "Where mysql can be one of the databases PHP supports, the most common\n";
+    print "of these are mysql, msql and pgsql\n";
+    print "If the DSN is left empty (hit space and then return) the database\n";
+    print "related code for address books will not be used\n";
+    print "\n";
+
+    if ($prefs_dsn eq "") {
+        $default_value = "Disabled";
+    } else {
+        $default_value = $prefs_dsn;
+    }
+    print "[$WHT$prefs_dsn$NRM]: $WHT";
+    $new_dsn = <STDIN>;
+    if ($new_dsn eq "\n") {
+        $new_dsn = "";
+    } else {
+        $new_dsn =~ s/[\r|\n]//g;
+        $new_dsn =~ s/^\s+$//g;
+    }
+    return $new_dsn;
+}
 
-   print CF "/**\n";
-   print CF " * Make sure there are no characters after the PHP closing\n";
-   print CF " * tag below (including newline characters and whitespace).\n";
-   print CF " * Otherwise, that character will cause the headers to be\n";
-   print CF " * sent and regular output to begin, which will majorly screw\n";
-   print CF " * things up when we try to send more headers later.\n";
-   print CF " */\n";
-   print CF "?>";
+sub command94 {
+    print "This is the name of the table you want to store the preferences\n";
+    print "data in, it defaults to 'address'\n";
+    print "\n";
+    print "[$WHT$prefs_table$NRM]: $WHT";
+    $new_table = <STDIN>;
+    if ($new_table eq "\n") {
+        $new_table = $prefs_table;
+    } else {
+        $new_table =~ s/[\r|\n]//g;
+    }
+    return $new_table;
+}  
 
-   close CF;
+sub save_data {
+    $tab = "    ";
+    if(open (CF, ">config.php"))
+    {
+        print CF "<?php\n";
+        print CF "\n";
+     
+        print CF "/**\n";
+        print CF " * SquirrelMail Configuration File\n";
+        print CF " * Created using the configure script, conf.pl\n";
+        print CF " */\n";
+        print CF "\n";
+        
+        if ($print_config_version) {
+           print CF "\$config_version = '$print_config_version';\n";
+        }
+        print CF "\$config_use_color = $config_use_color;\n"; 
+        print CF "\n";
+     
+        print CF "\$org_name      = \"$org_name\";\n";
+        print CF "\$org_logo      = '$org_logo';\n";
+        print CF "\$org_title     = \"$org_title\";\n";
+        print CF "\$signout_page  = '$signout_page';\n";
+        if ($frame_top eq "") {
+            print CF "\$frame_top     = '_top';\n";
+        } else {
+            print CF "\$frame_top     = '$frame_top';\n";
+        }
+        print CF "\n";
+     
+        print CF "\$motd = '$motd';\n";
+        print CF "\n";
+     
+        print CF "\$squirrelmail_default_language = '$squirrelmail_default_language';\n";
+        print CF "\n";
+     
+        print CF "\$domain                 = '$domain';\n";
+        print CF "\$imapServerAddress      = '$imapServerAddress';\n";
+        print CF "\$imapPort               = $imapPort;\n";
+        print CF "\$useSendmail            = $useSendmail;\n";
+        print CF "\$smtpServerAddress      = '$smtpServerAddress';\n";
+        print CF "\$smtpPort               = $smtpPort;\n";
+        print CF "\$sendmail_path          = '$sendmail_path';\n";
+        print CF "\$use_authenticated_smtp = $use_authenticated_smtp;\n";
+        print CF "\$imap_server_type       = '$imap_server_type';\n";
+        print CF "\$invert_time            = $invert_time;\n";
+        print CF "\$optional_delimiter     = '$optional_delimiter';\n";
+        print CF "\n";
+     
+        print CF "\$default_folder_prefix          = '$default_folder_prefix';\n";
+        print CF "\$trash_folder                   = '$trash_folder';\n";
+        print CF "\$sent_folder                    = '$sent_folder';\n";
+        print CF "\$draft_folder                   = '$draft_folder';\n";
+        print CF "\$default_move_to_trash          = $default_move_to_trash;\n";
+        print CF "\$default_move_to_sent           = $default_move_to_sent;\n";
+        print CF "\$default_save_as_draft          = $default_save_as_draft;\n";
+        print CF "\$show_prefix_option             = $show_prefix_option;\n";
+        print CF "\$list_special_folders_first     = $list_special_folders_first;\n";
+        print CF "\$use_special_folder_color       = $use_special_folder_color;\n";
+        print CF "\$auto_expunge                   = $auto_expunge;\n";
+        print CF "\$default_sub_of_inbox           = $default_sub_of_inbox;\n";
+        print CF "\$show_contain_subfolders_option = $show_contain_subfolders_option;\n";
+        print CF "\$default_unseen_notify          = $default_unseen_notify;\n";
+        print CF "\$default_unseen_type            = $default_unseen_type;\n";
+        print CF "\$auto_create_special            = $auto_create_special;\n";
+        print CF "\$delete_folder                  = $delete_folder;\n";
+        print CF "\n";
+     
+        print CF "\$default_charset          = '$default_charset';\n";
+        print CF "\$data_dir                 = '$data_dir';\n";
+        print CF "\$attachment_dir           = \"$attachment_dir\";\n";
+        print CF "\$dir_hash_level           = $dir_hash_level;\n";
+        print CF "\$default_left_size        = $default_left_size;\n";
+        print CF "\$force_username_lowercase = $force_username_lowercase;\n";
+        print CF "\$default_use_priority     = $default_use_priority;\n";
+        print CF "\$hide_sm_attributions     = $hide_sm_attributions;\n";
+        print CF "\$default_use_mdn          = $default_use_mdn;\n";
+        print CF "\n";
+     
+        for ($ct=0; $ct <= $#plugins; $ct++) {
+           print CF "\$plugins[$ct] = '$plugins[$ct]';\n";
+        }
+        print CF "\n";
+     
+        print CF "\$theme_css = '$theme_css';\n";
+        for ($count=0; $count <= $#theme_name; $count++) {
+           print CF "\$theme[$count]['PATH'] = '$theme_path[$count]';\n";
+           print CF "\$theme[$count]['NAME'] = '$theme_name[$count]';\n";
+        }
+        print CF "\n";
+     
+        if ($default_use_javascript_addr_book ne "true") {
+           $default_use_javascript_addr_book = "false";
+        }   
+        print CF "\$default_use_javascript_addr_book = $default_use_javascript_addr_book;\n";
+        for ($count=0; $count <= $#ldap_host; $count++) {
+           print CF "\$ldap_server[$count] = array(\n";
+           print CF "    'host' => '$ldap_host[$count]',\n";
+           print CF "    'base' => '$ldap_base[$count]'";
+           if ($ldap_name[$count]) {
+              print CF ",\n";
+              print CF "    'name' => '$ldap_name[$count]'";
+           }
+           if ($ldap_port[$count]) {
+              print CF ",\n";
+              print CF "    'port' => '$ldap_port[$count]'";
+           }
+           if ($ldap_charset[$count]) {
+              print CF ",\n";
+              print CF "    'charset' => '$ldap_charset[$count]'";
+           }
+           if ($ldap_maxrows[$count]) {
+              print CF ",\n";
+              print CF "    'maxrows' => '$ldap_maxrows[$count]'";
+           }
+           print CF "\n";
+           print CF ");\n";
+           print CF "\n";
+        }
+
+        print CF "\$addrbook_dsn = '$addrbook_dsn';\n";
+        print CF "\$addrbook_table = '$addrbook_table';\n\n";
+        print CF "\$prefs_dsn = '$prefs_dsn';\n";
+        print CF "\$prefs_table = '$prefs_table';\n";
+     
+        print CF "/**\n";
+        print CF " * Make sure there are no characters after the PHP closing\n";
+        print CF " * tag below (including newline characters and whitespace).\n";
+        print CF " * Otherwise, that character will cause the headers to be\n";
+        print CF " * sent and regular output to begin, which will majorly screw\n";
+        print CF " * things up when we try to send more headers later.\n";
+        print CF " */\n";
+        print CF "?>";
+     
+        close CF;
+
+        print "Data saved in config.php\n";
+    } else {
+        print "Error saving config.php: $!\n";
+    }
 }
 
 sub set_defaults {