* Copyright date update
[BackupPC.git] / lib / BackupPC / CGI / EditConfig.pm
index 2e734db..952ab96 100644 (file)
@@ -10,7 +10,7 @@
 #   Craig Barratt  <cbarratt@users.sourceforge.net>
 #
 # COPYRIGHT
-#   Copyright (C) 2005  Craig Barratt
+#   Copyright (C) 2005-2009  Craig Barratt
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 3.0.0, released 28 Jan 2007.
+# Version 3.2.0beta0, released 5 April 2009.
 #
 # See http://backuppc.sourceforge.net.
 #
@@ -73,6 +73,7 @@ our %ConfigMenu = (
            {name => "UmaskMode"},
            {name => "MyPath"},
             {name => "DHCPAddressRanges"},
+            {name => "CmdQueueNice"},
             {name => "PerlModuleLoad"},
             {name => "ServerInitdPath"},
             {name => "ServerInitdStartCmd"},
@@ -93,11 +94,21 @@ our %ConfigMenu = (
            {name => "Bzip2Path"},
 
             {text => "CfgEdit_Title_Install_Paths"},
-            {name => "TopDir"},
-            {name => "ConfDir"},
-            {name => "LogDir"},
+            #
+            # Can only edit TopDir and LogDir if we are in FHS mode.
+            # Otherwise they are hardcoded in lib/BackupPC/Lib.pm.
+            #
+            {name => "TopDir",
+                    visible => sub { return $_[1]->useFHS(); } },
+            {name => "LogDir",
+                    visible => sub { return $_[1]->useFHS(); } },
            {name => "CgiDir"},
-           {name => "InstallDir"},
+            #
+            # Cannot edit ConfDir or InstallDir, since the real value is hardcoded in
+            # lib/BackupPC/Lib.pm.
+            # {name => "ConfDir"},
+           # {name => "InstallDir"},
+            #
         ],
     },
     email => {
@@ -161,7 +172,9 @@ our %ConfigMenu = (
             {name => "XferMethod", onchangeSubmit => 1},
             {name => "XferLogLevel"},
             {name => "ClientCharset"},
+            {name => "ClientCharsetLegacy"},
 
+            ### Smb Settings
             {text => "CfgEdit_Title_Smb_Settings",
                 visible => sub { return $_[0]->{XferMethod} eq "smb"; } },
             {name => "SmbShareName",
@@ -171,11 +184,13 @@ our %ConfigMenu = (
             {name => "SmbSharePasswd",
                 visible => sub { return $_[0]->{XferMethod} eq "smb"; } },
 
+            ### Tar Settings
             {text => "CfgEdit_Title_Tar_Settings",
                 visible => sub { return $_[0]->{XferMethod} eq "tar"; } },
             {name => "TarShareName",
                 visible => sub { return $_[0]->{XferMethod} eq "tar"; } },
 
+            ### Rsync Settings
             {text => "CfgEdit_Title_Rsync_Settings",
                 visible => sub { return $_[0]->{XferMethod} eq "rsync"; } },
             {text => "CfgEdit_Title_Rsyncd_Settings",
@@ -191,17 +206,28 @@ our %ConfigMenu = (
             {name => "RsyncCsumCacheVerifyProb",
                 visible => sub { return $_[0]->{XferMethod} =~ /rsync/; } },
 
-            {text => "CfgEdit_Title_BackupPCd_Settings",
-                visible => sub { return $_[0]->{XferMethod} eq "backuppcd"; } },
-            {name => "BackupPCdShareName",
-                visible => sub { return $_[0]->{XferMethod} eq "backuppcd"; } },
-            {name => "BackupPCdPath",
-                visible => sub { return $_[0]->{XferMethod} eq "backuppcd"; } },
-            {name => "BackupPCdCmd",
-                visible => sub { return $_[0]->{XferMethod} eq "backuppcd"; } },
-            {name => "BackupPCdRestoreCmd",
-                visible => sub { return $_[0]->{XferMethod} eq "backuppcd"; } },
-
+            ### Ftp Settings
+            {text    => "CfgEdit_Title_Ftp_Settings",
+             visible => sub { return $_[0]->{XferMethod} eq "ftp"; } },
+            {name    => "FtpShareName",
+             visible => sub { return $_[0]->{XferMethod} eq "ftp"; } },
+            {name    => "FtpUserName",
+             visible => sub { return $_[0]->{XferMethod} eq "ftp"; } },
+            {name    => "FtpPasswd",
+             visible => sub { return $_[0]->{XferMethod} eq "ftp"; } },
+            {name    => "FtpBlockSize",
+             visible => sub { return $_[0]->{XferMethod} eq "ftp"; } },
+            {name    => "FtpPort",
+             visible => sub { return $_[0]->{XferMethod} eq "ftp"; } },
+            {name    => "FtpTimeout",
+             visible => sub { return $_[0]->{XferMethod} eq "ftp"; } },
+            {name    => "FtpFollowSymlinks",
+             visible => sub { return $_[0]->{XferMethod} eq "ftp"; } },
+            {name    => "FtpRestoreEnabled",
+             visible => sub { return $_[0]->{XferMethod} eq "ftp"; } },
+
+
+            ### Archive Settings
             {text => "CfgEdit_Title_Archive_Settings",
                 visible => sub { return $_[0]->{XferMethod} eq "archive"; } },
             {name => "ArchiveDest",
@@ -213,6 +239,7 @@ our %ConfigMenu = (
             {name => "ArchiveSplit",
                 visible => sub { return $_[0]->{XferMethod} eq "archive"; } },
 
+            ### Include/Exclude Settings
             {text => "CfgEdit_Title_Include_Exclude",
                 visible => sub { return $_[0]->{XferMethod} ne "archive"; } },
             {name => "BackupFilesOnly",
@@ -220,6 +247,7 @@ our %ConfigMenu = (
             {name => "BackupFilesExclude",
                 visible => sub { return $_[0]->{XferMethod} ne "archive"; } },
 
+            ### Samba paths and commands
             {text => "CfgEdit_Title_Smb_Paths_Commands",
                 visible => sub { return $_[0]->{XferMethod} eq "smb"; } },
             {name => "SmbClientPath",
@@ -231,6 +259,7 @@ our %ConfigMenu = (
             {name => "SmbClientRestoreCmd",
                 visible => sub { return $_[0]->{XferMethod} eq "smb"; } },
 
+            ### Tar paths and commands
             {text => "CfgEdit_Title_Tar_Paths_Commands",
                 visible => sub { return $_[0]->{XferMethod} eq "tar"; } },
             {name => "TarClientPath",
@@ -244,6 +273,7 @@ our %ConfigMenu = (
             {name => "TarClientRestoreCmd",
                 visible => sub { return $_[0]->{XferMethod} eq "tar"; } },
 
+            ### Rsync paths and commands
             {text => "CfgEdit_Title_Rsync_Paths_Commands_Args",
                 visible => sub { return $_[0]->{XferMethod} eq "rsync"; } },
             {text => "CfgEdit_Title_Rsyncd_Port_Args",
@@ -258,9 +288,12 @@ our %ConfigMenu = (
                 visible => sub { return $_[0]->{XferMethod} eq "rsyncd"; } },
             {name => "RsyncArgs",
                 visible => sub { return $_[0]->{XferMethod} =~ /rsync/; } },
+            {name => "RsyncArgsExtra",
+                visible => sub { return $_[0]->{XferMethod} =~ /rsync/; } },
             {name => "RsyncRestoreArgs",
                 visible => sub { return $_[0]->{XferMethod} =~ /rsync/; } },
 
+            ### Archive paths and commands
             {text => "CfgEdit_Title_Archive_Paths_Commands",
                 visible => sub { return $_[0]->{XferMethod} eq "archive"; } },
             {name => "ArchiveClientCmd",
@@ -368,13 +401,17 @@ sub action
        }
         if ( (my $var = $In{overrideUncheck}) ne "" ) {
             #
-            # a compound variable was unchecked; delete extra
-            # variables to make the shape the same.
+            # a compound variable was unchecked; delete or
+            # add extra variables to make the shape the same.
             #
             #print STDERR Dumper(\%In);
             foreach my $v ( keys(%In) ) {
-                next if ( $v !~ /^v_zZ_(\Q$var\E(_zZ_.*|$))/ );
-                delete($In{$v}) if ( !defined($In{"orig_zZ_$1"}) );
+                if ( $v =~ /^v_zZ_(\Q$var\E(_zZ_.*|$))/ ) {
+                    delete($In{$v}) if ( !defined($In{"orig_zZ_$1"}) );
+                }
+                if ( $v =~ /^orig_zZ_(\Q$var\E(_zZ_.*|$))/ ) {
+                    $In{"v_zZ_$1"} = $In{$v};
+                }
             }
             delete($In{"vflds.$var"});
         }
@@ -714,9 +751,14 @@ EOF
             ($mesg, my $hostChange) = hostsDiffMesg($hostsNew);
             $bpc->HostInfoWrite($hostsNew) if ( $hostChange );
             foreach my $host ( keys(%$copyConf) ) {
-                my $confData = $bpc->ConfigDataRead($copyConf->{$host});
+                #
+                # Currently host names are forced to lc when they
+                # are read from the hosts file.  Therefore we need
+                # to force the from and to hosts to lc.
+                #
+                my $confData = $bpc->ConfigDataRead(lc($copyConf->{$host}));
                 my $fromHost = $copyConf->{$host};
-                $err  .= $bpc->ConfigDataWrite($host, $confData);
+                $err  .= $bpc->ConfigDataWrite(lc($host), $confData);
                 $mesg .= eval("qq($Lang->{CfgEdit_Log_Copy_host_config})");
             }
 
@@ -758,7 +800,7 @@ EOF
 
         next if ( $disabled || $menuDisable{$menu}{top} );
         if ( ref($paramInfo->{visible}) eq "CODE"
-                        && !&{$paramInfo->{visible}}($newConf) ) {
+                        && !&{$paramInfo->{visible}}($newConf, $bpc) ) {
             next;
         }
 
@@ -1466,6 +1508,8 @@ sub fieldInputParse
         } else {
             $$value = decode_utf8($In{"v_zZ_$varName"});
             $$value =~ s/\r\n/\n/g;
+            # remove leading space from exec paths
+            $$value =~ s/^\s+// if ( $type->{type} eq "execPath" );
         }
         $$value = undef if ( $type->{undefIfEmpty} && $$value eq "" );
     }