Show bypass trash checkbox again and move the delete button to the right.
[squirrelmail.git] / config / conf.pl
index ce367d92169a206f8a9aeb6b0352d776f9ae8a65..72926b6fd9e8ab309b12ff9985038e0317e0706a 100755 (executable)
@@ -188,11 +188,15 @@ while ( $line = <FILE> ) {
             $sub =~ s/\]\[['"]NAME['"]\]//;
             $sub =~ s/.*\[//;
             $theme_name[$sub] = $options[1];
-        } elsif ( $options[0] =~ /^plugins\[[0-9]+\]/ ) {
+        } elsif ( $options[0] =~ /^plugins\[[0-9]*\]/ ) {
             $sub = $options[0];
             $sub =~ s/\]//;
             $sub =~ s/^plugins\[//;
-            $plugins[$sub] = $options[1];
+            if ($sub eq '') {
+               push @plugins, $options[1];
+            } else {
+               $plugins[$sub] = $options[1];
+            }
         } elsif ( $options[0] =~ /^ldap_server\[[0-9]+\]/ ) {
             $sub = $options[0];
             $sub =~ s/\]//;
@@ -228,6 +232,11 @@ while ( $line = <FILE> ) {
                     $tmp =~ s/[\'\"]?,?\s*$//;
                     $tmp =~ s/[\'\"]?\);\s*$//;
                     $maxrows = $tmp;
+                } elsif ( $tmp =~ /^\s*[\'\"]filter[\'\"]/i ) {
+                    $tmp =~ s/^\s*[\'\"]filter[\'\"]\s*=>\s*[\'\"]?//i;
+                    $tmp =~ s/[\'\"]?,?\s*$//;
+                    $tmp =~ s/[\'\"]?\);\s*$//;
+                    $filter = $tmp;
                 } elsif ( $tmp =~ /^\s*[\'\"]name[\'\"]/i ) {
                     $tmp =~ s/^\s*[\'\"]name[\'\"]\s*=>\s*[\'\"]//i;
                     $tmp =~ s/[\'\"],?\s*$//;
@@ -248,6 +257,11 @@ while ( $line = <FILE> ) {
                     $tmp =~ s/[\'\"]?,?\s*$//;
                     $tmp =~ s/[\'\"]?\);\s*$//;
                     $protocol = $tmp;
+                } elsif ( $tmp =~ /^\s*[\'\"]limit_scope[\'\"]/i ) {
+                    $tmp =~ s/^\s*[\'\"]limit_scope[\'\"]\s*=>\s*[\'\"]?//i;
+                    $tmp =~ s/[\'\"]?,?\s*$//;
+                    $tmp =~ s/[\'\"]?\);\s*$//;
+                    $limit_scope = $tmp;
                 }
             }
             $ldap_host[$sub]    = $host;
@@ -255,10 +269,12 @@ while ( $line = <FILE> ) {
             $ldap_name[$sub]    = $name;
             $ldap_port[$sub]    = $port;
             $ldap_maxrows[$sub] = $maxrows;
+            $ldap_filter[$sub]  = $filter;
             $ldap_charset[$sub] = $charset;
             $ldap_binddn[$sub]  = $binddn;
             $ldap_bindpw[$sub]  = $bindpw;
             $ldap_protocol[$sub] = $protocol;
+            $ldap_limit_scope[$sub] = $limit_scope;
         } elsif ( $options[0] =~ /^(data_dir|attachment_dir|theme_css|org_logo|signout_page)$/ ) {
             ${ $options[0] } = &change_to_rel_path($options[1]);
         } else {
@@ -296,27 +312,31 @@ $allow_advanced_search = 0              if ( !$allow_advanced_search) ;
 $prefs_user_field = 'user'              if ( !$prefs_user_field );
 $prefs_key_field = 'prefkey'            if ( !$prefs_key_field );
 $prefs_val_field = 'prefval'            if ( !$prefs_val_field );
-$addrbook_global_table = 'global_abook' if ( !$addrbook_global_table );
-$addrbook_global_writeable = 'false'    if ( !$addrbook_global_writeable );
-$addrbook_global_listing = 'false'      if ( !$addrbook_global_listing );
-$abook_global_file = ''                 if ( !$abook_global_file);
-$abook_global_file_writeable = 'false'  if ( !$abook_global_file_writeable);
 $use_smtp_tls= 'false'                  if ( !$use_smtp_tls);
 $smtp_auth_mech = 'none'                if ( !$smtp_auth_mech );
 $use_imap_tls = 'false'                 if ( !$use_imap_tls );
 $imap_auth_mech = 'login'               if ( !$imap_auth_mech );
 $session_name = 'SQMSESSID'             if ( !$session_name );
+$skip_SM_header = 'false'               if ( !$skip_SM_header );
+$default_use_javascript_addr_book = 'false' if (! $default_use_javascript_addr_book);
+# since 1.5.0
 $show_alternative_names = 'false'       if ( !$show_alternative_names );
 $available_languages = 'all'            if ( !$available_languages );
 $aggressive_decoding = 'false'          if ( !$aggressive_decoding );
-$lossy_encoding = 'false'               if ( !$lossy_encoding );
 $advanced_tree = 'false'                if ( !$advanced_tree );
-$oldway = 'false'                       if ( !$oldway );
-$use_icons = 'false'                    if ( !$use_icons );
 $use_php_recode = 'false'               if ( !$use_php_recode );
 $use_php_iconv = 'false'                if ( !$use_php_iconv );
-$skip_SM_header = 'false'               if ( !$skip_SM_header );
-$default_use_javascript_addr_book = 'false' if (! $default_use_javascript_addr_book);
+# since 1.5.1
+$use_icons = 'false'                    if ( !$use_icons );
+$use_iframe = 'false'                   if ( !$use_iframe );
+$lossy_encoding = 'false'               if ( !$lossy_encoding );
+$allow_remote_configtest = 'false'      if ( !$allow_remote_configtest );
+$addrbook_global_table = 'global_abook' if ( !$addrbook_global_table );
+$addrbook_global_writeable = 'false'    if ( !$addrbook_global_writeable );
+$addrbook_global_listing = 'false'      if ( !$addrbook_global_listing );
+$abook_global_file = ''                 if ( !$abook_global_file);
+$abook_global_file_writeable = 'false'  if ( !$abook_global_file_writeable);
+$abook_global_file_listing = 'true'     if ( !$abook_global_file_listing );
 
 if ( $ARGV[0] eq '--install-plugin' ) {
     print "Activating plugin " . $ARGV[1] . "\n";
@@ -345,7 +365,7 @@ if ( $config_use_color == 1 ) {
     $config_use_color = 2;
 }
 
-while ( ( $command ne "q" ) && ( $command ne "Q" ) ) {
+while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) {
     clear_screen();
     print $WHT. "SquirrelMail Configuration : " . $NRM;
     if    ( $config == 1 ) { print "Read: config.php"; }
@@ -506,9 +526,10 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) ) {
         for ( $count = 0 ; $count <= $#ldap_host ; $count++ ) {
             print "    >  $ldap_host[$count]\n";
         }
-        print "2.  Use Javascript address book search  : $WHT$default_use_javascript_addr_book$NRM\n";
-        print "3.  Use global file address book        : $WHT$abook_global_file$NRM\n";
+        print "2.  Use Javascript address book search          : $WHT$default_use_javascript_addr_book$NRM\n";
+        print "3.  Use global file address book                : $WHT$abook_global_file$NRM\n";
         print "4.  Allow writing into global file address book : $WHT$abook_global_file_writeable$NRM\n";
+        print "5.  Allow listing of global file address book   : $WHT$abook_global_file_listing$NRM\n";
         print "\n";
         print "R   Return to Main Menu\n";
     } elsif ( $menu == 7 ) {
@@ -583,13 +604,16 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) ) {
         print "R   Return to Main Menu\n";
     } elsif ( $menu == 11 ) {
     print $WHT. "Interface tweaks\n" . $NRM;
-    print "1.  Advanced tree            : $WHT$advanced_tree$NRM\n";
-    print "2.  Oldway                   : $WHT$oldway$NRM\n";
-    print "3.  Use Icons                : $WHT$use_icons$NRM\n";
+    print "1.  Advanced tree                : $WHT$advanced_tree$NRM\n";
+    print "2.  Display html mails in iframe : $WHT$use_iframe$NRM\n";
+    print "3.  Use Icons                    : $WHT$use_icons$NRM\n";
     print "\n";
     print $WHT. "PHP tweaks\n" . $NRM;
-    print "4.  Use php recode functions : $WHT$use_php_recode$NRM\n";
-    print "5.  Use php iconv functions  : $WHT$use_php_iconv$NRM\n";
+    print "4.  Use php recode functions     : $WHT$use_php_recode$NRM\n";
+    print "5.  Use php iconv functions      : $WHT$use_php_iconv$NRM\n";
+    print "\n";
+    print $WHT. "Configuration tweaks\n" . $NRM;
+    print "6.  Allow remote configtest     : $WHT$allow_remote_configtest$NRM\n";
     print "\n";
         print "R   Return to Main Menu\n";
     }
@@ -719,6 +743,7 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) ) {
             elsif ( $command == 2 ) { command62(); }
             elsif ( $command == 3 ) { $abook_global_file=command63(); }
             elsif ( $command == 4 ) { command64(); }
+            elsif ( $command == 5 ) { command65(); }
         } elsif ( $menu == 7 ) {
             if ( $command == 1 ) { $motd = command71(); }
         } elsif ( $menu == 8 ) {
@@ -744,10 +769,11 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) ) {
             elsif ( $command == 6 ) { $lossy_encoding         = commandA6(); }
         } elsif ( $menu == 11 ) {
             if    ( $command == 1 ) { $advanced_tree  = commandB1(); }
-            elsif ( $command == 2 ) { $oldway            = commandB2(); }
+            if    ( $command == 2 ) { $use_iframe     = commandB2(); }
             elsif ( $command == 3 ) { $use_icons      = commandB3(); }
             elsif ( $command == 4 ) { $use_php_recode = commandB4(); }
             elsif ( $command == 5 ) { $use_php_iconv  = commandB5(); }
+            elsif ( $command == 6 ) { $allow_remote_configtest = commandB6(); }
         }
     }
 }
@@ -770,8 +796,6 @@ sub command1 {
     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>;
@@ -840,7 +864,7 @@ sub command3 {
     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 "\$version, for example can be used, and will print the\n";
     print "string representing the current SquirrelMail version.\n";
     print "\n";
     print "[$WHT$org_title$NRM]: $WHT";
@@ -892,12 +916,12 @@ sub command6 {
 # Default link to provider
 sub command7 {
     print "Here you can set the link on the right of the page.\n";
-    print "The default is 'http://www.squirrelmail.org/'\n";
+    print "If empty, it will link to the SquirrelMail About page.\n";
     print "\n";
     print "[$WHT$provider_uri$NRM]: $WHT";
     $new_provider_uri = <STDIN>;
     if ( $new_provider_uri eq "\n" ) {
-        $new_provider_uri = 'http://www.squirrelmail.org/';
+        $new_provider_uri = '';
     } else {
         $new_provider_uri =~ s/[\r\n]//g;
         $new_provider_uri =~ s/^\s+$//g;
@@ -2387,15 +2411,21 @@ sub command61 {
                 if ( $ldap_maxrows[$count] ) {
                     print "     maxrows: $ldap_maxrows[$count]\n";
                 }
+                if ( $ldap_filter[$count] ) {
+                    print "      filter: $ldap_filter[$count]\n";
+                }
                 if ( $ldap_binddn[$count] ) {
                     print "      binddn: $ldap_binddn[$count]\n";
                     if ( $ldap_bindpw[$count] ) {
                         print "      bindpw: $ldap_bindpw[$count]\n";
                     }
                 }
-        if ( $ldap_protocol[$count] ) {
+                if ( $ldap_protocol[$count] ) {
                     print "    protocol: $ldap_protocol[$count]\n";
                 }
+                if ( $ldap_limit_scope[$count] ) {
+                    print " limit_scope: $ldap_limit_scope[$count]\n";
+                }
 
                 print "\n";
                 $count++;
@@ -2458,6 +2488,16 @@ sub command61 {
 
             print "\n";
 
+            print "You can specify an additional search filter.\n";
+            print "This could be something like \"(objectclass=posixAccount)\".\n";
+            print "Default is no extra filter.  Press ENTER for default.\n";
+            print "filter: ";
+            $name = <STDIN>;
+            $name =~ s/[\r|\n]//g;
+            $ldap_filter[$sub] = $name;
+
+            print "\n";
+
             print "If your LDAP server does not like anonymous logins, you can specify bind DN.\n";
             print "Default is none, anonymous bind.  Press ENTER for default.\n";
             print "binddn: ";
@@ -2478,9 +2518,9 @@ sub command61 {
                 print "\n";
             }
 
-        print "You can specify bind protocol version here.\n";
+            print "You can specify bind protocol version here.\n";
             print "Default protocol version depends on your php ldap settings.\n";
-        print "Press ENTER for default.\n";
+            print "Press ENTER for default.\n";
             print "protocol: ";
             $name = <STDIN>;
             $name =~ s/[\r\n]//g;
@@ -2488,6 +2528,22 @@ sub command61 {
 
             print "\n";
 
+            print "You can control search scope here.\n";
+            print "This option is specific to Microsoft ADS implementation.\n";
+            print "It requires use of v3 or newer LDAP protocol.\n";
+            print "Don't enable it, if you use other LDAP server.\n";
+            print "\n";
+            print "Limit ldap scope? (y/N):";
+            $name = <STDIN>;
+            if ( $name =~ /^y\n/i ) {
+                $name = 'true';
+            } else {
+                $name = 'false';
+            }
+            $ldap_limit_scope[$sub] = $name;
+
+            print "\n";
+
         } elsif ( $input =~ /^\s*-\s*[0-9]?/ ) {
             if ( $input =~ /[0-9]+\s*$/ ) {
                 $rem_num = $input;
@@ -2503,9 +2559,11 @@ sub command61 {
             @new_ldap_name    = ();
             @new_ldap_charset = ();
             @new_ldap_maxrows = ();
+            @new_ldap_filter  = ();
             @new_ldap_bindpw  = ();
             @new_ldap_binddn  = ();
             @new_ldap_protocol = ();
+            @new_ldap_limit_scope = ();
 
             while ( $count <= $#ldap_host ) {
                 if ( $count != $rem_num ) {
@@ -2515,9 +2573,11 @@ sub command61 {
                     @new_ldap_name    = ( @new_ldap_name,    $ldap_name[$count] );
                     @new_ldap_charset = ( @new_ldap_charset, $ldap_charset[$count] );
                     @new_ldap_maxrows = ( @new_ldap_maxrows, $ldap_maxrows[$count] );
+                    @new_ldap_filter  = ( @new_ldap_filter,  $ldap_filter[$count] );
                     @new_ldap_binddn  = ( @new_ldap_binddn,  $ldap_binddn[$count] );
                     @new_ldap_bindpw  = ( @new_ldap_bindpw,  $ldap_bindpw[$count] );
                     @new_ldap_protocol  = ( @new_ldap_protocol,  $ldap_protocol[$count] );
+                    @new_ldap_limit_scope = ( @new_ldap_limit_scope,  $ldap_limit_scope[$count] );
                 }
                 $count++;
             }
@@ -2527,9 +2587,11 @@ sub command61 {
             @ldap_name    = @new_ldap_name;
             @ldap_charset = @new_ldap_charset;
             @ldap_maxrows = @new_ldap_maxrows;
+            @ldap_filter  = @new_ldap_filter;
             @ldap_binddn  = @new_ldap_binddn;
             @ldap_bindpw  = @new_ldap_bindpw;
             @ldap_protocol = @new_ldap_protocol;
+            @ldap_limit_scope = @new_ldap_limit_scope;
 
         } elsif ( $input =~ /^\s*\?\s*/ ) {
             print ".-------------------------.\n";
@@ -2615,6 +2677,28 @@ sub command64 {
     return $abook_global_file_writeable;
 }
 
+# listing of global filebased abook control
+sub command65 {
+    print "This setting controls listing of global file address\n";
+    print "book in addresses page.\n";
+    print "\n";
+
+    if ( lc($abook_global_file_listing) eq 'true' ) {
+        $default_value = "y";
+    } else {
+        $abook_global_file_listing = 'false';
+        $default_value               = "n";
+    }
+    print "Allow listing of global file address book (y/n) [$WHT$default_value$NRM]: $WHT";
+    $new_show = <STDIN>;
+    if ( ( $new_show =~ /^y\n/i ) || ( ( $new_show =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
+        $abook_global_file_listing = 'true';
+    } else {
+        $abook_global_file_listing = 'false';
+    }
+    return $abook_global_file_listing;
+}
+
 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";
@@ -2964,25 +3048,27 @@ sub commandB1 {
     }
     return $advanced_tree;
 }
-# Oldway
+# display html emails in iframe
 sub commandB2 {
-    print "Setting \$oldway to false causes left_main.php to use the new\n";
-    print "experimental way of getting the mailbox-tree.\n";
+    print "This option can enable html email rendering inside iframe.\n";
+    print "Inline frames are used in order to provide sandbox environment";
+    print "for html code included in html formated emails.";
+    print "Option is experimental and might have glitches in some parts of code.";
     print "\n";
 
-    if ( lc($oldway) eq 'true' ) {
+    if ( lc($use_iframe) eq 'true' ) {
         $default_value = "y";
     } else {
         $default_value = "n";
     }
-    print "Use old way of folder list display? (y/n) [$WHT$default_value$NRM]: $WHT";
-    $oldway = <STDIN>;
-    if ( ( $oldway =~ /^y\n/i ) || ( ( $oldway =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
-        $oldway = 'true';
+    print "Display html emails in iframe? (y/n) [$WHT$default_value$NRM]: $WHT";
+    $use_iframe = <STDIN>;
+    if ( ( $use_iframe =~ /^y\n/i ) || ( ( $use_iframe =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
+        $use_iframe = 'true';
     } else {
-        $oldway = 'false';
+        $use_iframe = 'false';
     }
-    return $oldway;
+    return $use_iframe;
 }
 # use icons
 sub commandB3 {
@@ -3057,6 +3143,28 @@ sub commandB5 {
     return $use_php_iconv;
 }
 
+# configtest block
+sub commandB6 {
+    print "Enable this option if you want to check SquirrelMail configuration\n";
+    print "remotely with configtest.php script.\n";
+    print "\n";
+
+    if ( lc($allow_remote_configtest) eq 'true' ) {
+        $default_value = "y";
+    } else {
+        $default_value = "n";
+    }
+    print "Allow remote configuration tests? (y/n) [$WHT$default_value$NRM]: $WHT";
+    $allow_remote_configtest = <STDIN>;
+    if ( ( $allow_remote_configtest =~ /^y\n/i ) || ( ( $allow_remote_configtest =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
+        $allow_remote_configtest = 'true';
+    } else {
+        $allow_remote_configtest = 'false';
+    }
+    return $allow_remote_configtest;
+}
+
+
 
 sub save_data {
     $tab = "    ";
@@ -3219,7 +3327,7 @@ sub save_data {
 
     # all plugins are strings
         for ( $ct = 0 ; $ct <= $#plugins ; $ct++ ) {
-            print CF "\$plugins[$ct] = '$plugins[$ct]';\n";
+            print CF "\$plugins[] = '$plugins[$ct]';\n";
         }
         print CF "\n";
 
@@ -3267,6 +3375,11 @@ sub save_data {
         # integer
                 print CF "    'maxrows' => $ldap_maxrows[$count]";
             }
+            # string
+            if ( $ldap_filter[$count] ) {
+                print CF ",\n";
+                print CF "    'filter' => '$ldap_filter[$count]'";
+            }
             if ( $ldap_binddn[$count] ) {
                 print CF ",\n";
                 # string
@@ -3282,6 +3395,11 @@ sub save_data {
         # integer
                 print CF "    'protocol' => $ldap_protocol[$count]";
             }
+            if ( $ldap_limit_scope[$count] ) {
+                print CF ",\n";
+                # boolean
+                print CF "    'limit_scope' => $ldap_limit_scope[$count]";
+            }
             print CF "\n";
             print CF ");\n";
             print CF "\n";
@@ -3313,6 +3431,8 @@ sub save_data {
         print CF "\$abook_global_file = '$abook_global_file';\n";
     # boolean
         print CF "\$abook_global_file_writeable = $abook_global_file_writeable;\n\n";
+    # boolean
+        print CF "\$abook_global_file_listing = $abook_global_file_listing;\n\n";
     # boolean
         print CF "\$no_list_for_subscribe = $no_list_for_subscribe;\n";
 
@@ -3333,7 +3453,7 @@ sub save_data {
     print CF "\$advanced_tree = $advanced_tree;\n";
     print CF "\n";
     # boolean
-    print CF "\$oldway = $oldway;\n";
+    print CF "\$use_iframe = $use_iframe;\n";
     print CF "\n";
     # boolean
     print CF "\$use_icons = $use_icons;\n";
@@ -3343,6 +3463,9 @@ sub save_data {
     print CF "\n";
     # boolean
     print CF "\$use_php_iconv = $use_php_iconv;\n";
+    print CF "\n";
+    # boolean
+    print CF "\$allow_remote_configtest = $allow_remote_configtest;\n";
     print CF "\n";
 
         print CF "\@include SM_PATH . 'config/config_local.php';\n";
@@ -3482,10 +3605,10 @@ sub set_defaults {
             $optional_delimiter             = "detect";
             $allow_charset_search           = false;
             $disp_default_folder_prefix     = $default_folder_prefix;
-           $delete_folder                  = false;
-           $force_username_lowercase       = false;
+            $delete_folder                  = false;
+            $force_username_lowercase       = false;
 
-           $continue = 1;
+            $continue = 1;
         } elsif ( $server eq "mercury32" ) {
             $imap_server_type               = "mercury32";
             $default_folder_prefix          = "";