From 341342919b4cf50c946263cc90b58ff79d19b4af Mon Sep 17 00:00:00 2001 From: Stew Benedict Date: Wed, 3 Mar 2004 00:48:13 +0000 Subject: Use preferred conf file read/write method. More code reduction/cleaning. --- perl-install/standalone/drakbackup | 1465 +++++++++++++++--------------------- 1 file changed, 625 insertions(+), 840 deletions(-) (limited to 'perl-install/standalone') diff --git a/perl-install/standalone/drakbackup b/perl-install/standalone/drakbackup index 75f73b602..6b4163cae 100755 --- a/perl-install/standalone/drakbackup +++ b/perl-install/standalone/drakbackup @@ -80,10 +80,11 @@ my $backup_bef_restore = 0; my $table; my @user_list_backuped; my @files_corrupted; +my %check_user_to_restore; my $remove_user_before_restore = 0; my @file_list_to_send_by_ftp; my $results; -my @net_methods = ("", "ftp", "rsync", "ssh", "webdav"); +my @net_methods = ("ftp", "rsync", "ssh", "webdav"); my @media_types = (translate(N_("hd")), "cd", translate(N_("tape"))); my %cd_devices; my $std_device; @@ -92,71 +93,23 @@ my $tar_ext = "tar.gz"; my $in; # config. FILES -> Default PATH & Global variables. -my @sys_files = "/etc"; my @user_list; -my @list_other; my $cfg_dir = "/etc/drakxtools/drakbackup/"; my $cfg_file = $cfg_dir . "drakbackup.conf"; -my $save_path = "/var/lib/drakbackup"; my $log_file = "/var/log/drakbackup"; my $log_buff; -my $comp_mode = 0; -my $backup_sys = 1; -my $backup_user = 1; my $manual_user = 0; my $backup_daemon = 0; -my $backup_sys_versions = 0; -my $backup_user_versions = 0; -my $backup_other_versions = 0; -my $sys_diff_mode = 0; -my $user_diff_mode = 0; -my $other_diff_mode = 0; -my $what_no_browser = 1; -my $cdrw = 0; -my $dvdr = 0; -my $dvdrw = 0; -my $dvdram = 0; -my $net_proto = ''; -my $host_path = ''; -my $login_user = ''; my $daemon = 0; -my $daemon_media = ''; -my $hd_quota = 0; -my $where_net = 0; -my $where_hd = 1; my $use_hd = 1; -my $del_hd_files = 0; -my $where_cd = 0; -my $where_tape = 0; -my $cd_time = 650; -my $when_space; my $custom_cron = 0; -my $cd_with_install_boot = 0; -my $cd_device = ''; -my $host_name = ''; -my $backupignore = 0; -my $remember_pass = 0; -my $passwd_user = ''; -my $tape_device; -my $media_erase = 0; -my $media_eject = 0; -my $multi_session = 0; my $session_offset = ''; -my $tape_norewind = 0; -my $no_critical_sys = 1; -my $send_mail = 0; -my $user_mail; -my $smtp_server = "localhost"; my $scp_port = 22; -my $use_expect = 0; -my $xfer_keys = 0; -my $user_keys = 1; my $user_home = $ENV{HOME}; my $nonroot_user = 0; my $media_problem = 0; my $vol_name = 'Drakbackup'; my $good_restore_path = 1; -my $max_space = 1000.0; my @no_devices = translate(N_("No devices found")); my %help; my %conf; @@ -164,6 +117,8 @@ my $time_string = "* * * * *"; my $exec_string = "export USER=$ENV{USER}; /usr/sbin/drakbackup --daemon > /dev/null 2>&1"; my $ignore_files_list; my @list_of_rpm_to_install; +my @other_files; +my @sys_files; # allow not-root user with own config if ($ENV{USER} ne 'root' && $ENV{HOME} ne '/root') { @@ -171,11 +126,11 @@ if ($ENV{USER} ne 'root' && $ENV{HOME} ne '/root') { #- doesn't get defined when run from cron $user_home = "/home/$ENV{USER}" if $user_home eq ''; $cfg_dir = "$user_home/.drakbackup/"; - $save_path = $cfg_dir . "backups"; + $conf{PATH_TO_SAVE} = $cfg_dir . "backups"; $log_file = $cfg_dir . "drakbackup.log"; - -d $save_path or mkdir_p $save_path; + -d $conf{PATH_TO_SAVE} or mkdir_p $conf{PATH_TO_SAVE}; $nonroot_user = 1; - $backup_sys = 0; + $conf{NO_SYS_FILES} = 1; @user_list = $ENV{USER}; } else { $user_home = "/root"; @@ -222,49 +177,49 @@ sub explain_conf() { print "Configuration file is located in:\n"; print " Root Mode: /etc/drakxtools/drakbackup/drakbackup.conf.\n"; print " User Mode: ~/.drakbackup/drakbackup.conf.\n\n"; - print "SYS_FILES= Space separated list of system directories to backup.\n"; - print "HOME_FILES= Space separated list of user home directories to backup.\n"; - print "OTHER_FILES= Space separated list of other files to backup.\n"; - print "PATH_TO_SAVE= Default Hard Drive path to create backup files in.\n"; + print "SYS_FILES Comma separated list of system directories to backup.\n"; + print "HOME_FILES Comma separated list of user home directories to backup.\n"; + print "OTHER_FILES Comma separated list of other files to backup.\n"; + print "PATH_TO_SAVE Default Hard Drive path to create backup files in.\n"; print " Root Mode: default is /var/lib/drakbackup.\n"; print " User Mode: default is ~/.drakbackup/backups.\n"; print "NO_SYS_FILES Don't backup system files.\n"; print "NO_USER_FILES Don't backup user files.\n"; print "BACKUPIGNORE Honor .backupignore files in backup directories\n"; - print "OPTION_COMP Compression option - TAR.GZ or TAR.BZ2 (tar.gz is default).\n"; - print "BROWSER_CACHE Backup web browser cache also.\n"; + print "OPTION_COMP Compression option (tar.gz is default, 1 = tar.bz2).\n"; + print "NO_BROWSER_CACHE Skip web browser cache.\n"; print "CDRW Backup media is re-writable CD.\n"; print "DVDR Backup media is recordable DVD (not fully supported yet).\n"; print "DVDRW Backup media is recordable DVD+RW.\n"; print "DVDRAM Backup media is DVDRAM (not fully supported yet).\n"; - print "NET_PROTO= Network protocol to use for remote backups: \n"; + print "NET_PROTO Network protocol to use for remote backups: \n"; print " ftp, rsync, ssh, or webdav.\n"; - print "HOST_NAME= Remote backup host.\n"; - print "HOST_PATH= Backup storage path or module on remote host.\n"; + print "HOST_NAME Remote backup host.\n"; + print "HOST_PATH Backup storage path or module on remote host.\n"; print "REMEMBER_PASS Remember password on remote host in config file.\n"; print "USER_KEYS Ssh keys are already setup for communicating with remote host.\n"; print "DRAK_KEYS Use special drakbackup generated host keys.\n"; print " (requires perl-Expect).\n"; print "USE_EXPECT Use expect to do the whole scp transfer, without keys.\n"; print " (requires perl-Expect).\n"; - print "LOGIN= Remote host login name.\n"; - print "PASSWD= Password on remote host (if REMEMBER_PASS is enabled).\n"; - print "DAEMON_MEDIA= Daemon mode backup via given media.\n"; + print "LOGIN Remote host login name.\n"; + print "PASSWD Password on remote host (if REMEMBER_PASS is enabled).\n"; + print "DAEMON_MEDIA Daemon mode backup via given media.\n"; print " (hd, cd, tape, ftp, rsync, ssh, or webdav).\n"; print "HD_QUOTA Use quota to limit hard drive space used for backups.\n"; print " (not supported yet).\n"; print "USE_HD Use Hard Drive for backups (currently all modes use HD also).\n"; - print "MAX_SPACE= Maximum Hard Drive Space(MB) to consume for backups. \n"; + print "MAX_SPACE Maximum Hard Drive Space(MB) to consume for backups. \n"; print "USE_CD Use CD for backups.\n"; print "USE_NET Use network for backups (driven by NET_PROTO).\n"; print "USE_TAPE Use tape for backup.\n"; print "DEL_HD_FILES Delete local hard drive tar files after backup to other media.\n"; print "TAPE_NOREWIND Use non-rewinding tape device.\n"; - print "CD_TIME= Length of CD media (not currently utilized).\n"; - print "DAEMON_TIME_SPACE= Interval between daemon backup runs (hourly, daily, weekly)..\n"; + print "CD_TIME Length of CD media (not currently utilized).\n"; + print "DAEMON_TIME_SPACE Interval between daemon backup runs (hourly, daily, weekly)..\n"; print "CD_WITH_INSTALL_BOOT Build a bootable restore CD (currently not utilized).\n"; - print "CD_DEVICE= Cdrecord style CD device name (ie: 1,3,0).\n"; - print "USER_MAIL= User to send backup results to via email.\n"; + print "CD_DEVICE Cdrecord style CD device name (ie: 1,3,0).\n"; + print "USER_MAIL User to send backup results to via email.\n"; print "SEND_MAIL Do send backup results via email.\n"; print "TAPE_DEVICE Device to use for tape backup (ie: /dev/st0).\n"; print "MEDIA_ERASE Erase media before new backup (applies to tape, CD).\n"; @@ -296,7 +251,7 @@ sub daemon_mode() { if (check_for_xserver()) { eval { require ugtk2 }; die "Can't load ugtk2...\n" if $@; - ugtk2->import(qw(:helpers :wrappers :create)); + ugtk2->import(qw(:create :dialogs :helpers :wrappers)); interactive_mode(); } else { die "Can't run in console mode..."; @@ -371,7 +326,7 @@ sub check_storage_quota { my ($dir) = @_; my $used = `du $dir`; my $used_space = $used / 1024; - if ($used_space > $max_space) { + if ($used_space > $conf{MAX_SPACE}) { return $used_space; } else { return 0; @@ -438,90 +393,28 @@ sub get_cd_info() { } } + sub save_conf_file() { - write_sitecopyrc() if $net_proto eq 'webdav'; - write_password_file() if $net_proto eq 'rsync' && $passwd_user; - return 1 if $send_mail && verify_mail_setup(); - if ($backup_daemon && $daemon_media eq '') { + write_sitecopyrc() if $conf{NET_PROTO} eq 'webdav'; + write_password_file() if $conf{NET_PROTO} eq 'rsync' && $conf{PASSWD}; + return 1 if $conf{SEND_MAIL} && verify_mail_setup(); + if ($backup_daemon && $conf{DAEMON_MEDIA} eq '') { show_warning("f", N("No media selected for cron operation.")); return 1; } - if ($backup_daemon && $when_space eq '') { + if ($backup_daemon && $conf{DAEMON_TIME_SPACE} eq '') { show_warning("f", N("No interval selected for cron operation.")); return 1; } if (!$backup_daemon) { - $when_space = ""; - $daemon_media = ""; - } - if (@user_list == ()) { - $backup_user = 0; - } else { - $backup_user = 1; + $conf{DAEMON_TIME_SPACE} = ""; + $conf{DAEMON_MEDIA} = ""; } - my @cfg_list = ("SYS_FILES=@sys_files\n", - "HOME_FILES=@user_list\n", - "OTHER_FILES=@list_other\n", - "PATH_TO_SAVE=$save_path\n", - "HOST_PATH=$host_path\n", - "NET_PROTO=$net_proto\n", - "CD_TIME=$cd_time\n", - "USER_MAIL=$user_mail\n", - "SMTP_SERVER=$smtp_server\n", - "CD_DEVICE=$cd_device\n", - "LOGIN=$login_user\n", - "TAPE_DEVICE=$tape_device\n", - "HOST_NAME=$host_name\n" - ); - $backup_daemon and push @cfg_list, "DAEMON_TIME_SPACE=$when_space\n"; - $no_critical_sys and push @cfg_list, "NO_CRITICAL_SYS\n"; - $no_critical_sys or push @cfg_list, "CRITICAL_SYS\n"; - $backupignore and push @cfg_list, "BACKUPIGNORE\n"; - $send_mail and push @cfg_list, "SEND_MAIL\n"; - $backup_sys_versions and push @cfg_list, "SYS_INCREMENTAL_BACKUPS\n"; - $backup_user_versions and push @cfg_list, "USER_INCREMENTAL_BACKUPS\n"; - $backup_other_versions and push @cfg_list, "OTHER_INCREMENTAL_BACKUPS\n"; - $sys_diff_mode and $backup_sys_versions and push @cfg_list, "SYS_DIFFERENTIAL_BACKUPS\n"; - $backup_user and $user_diff_mode and $backup_user_versions and push @cfg_list, "USER_DIFFERENTIAL_BACKUPS\n"; - $other_diff_mode and $backup_other_versions and push @cfg_list, "OTHER_DIFFERENTIAL_BACKUPS\n"; - $media_erase and push @cfg_list, "MEDIA_ERASE\n"; - $media_eject and push @cfg_list, "MEDIA_EJECT\n"; - $multi_session and push @cfg_list, "MULTI_SESSION\n"; - $remember_pass and push @cfg_list, "LOGIN=$login_user\n"; - $remember_pass and push @cfg_list, "PASSWD=$passwd_user\n"; - $remember_pass and push @cfg_list, "REMEMBER_PASS\n"; - $user_keys and push @cfg_list, "USER_KEYS\n"; - $xfer_keys and push @cfg_list, "DRAK_KEYS\n"; - $use_expect and push @cfg_list, "USE_EXPECT\n"; - $cd_with_install_boot and push @cfg_list, "CD_WITH_INSTALL_BOOT\n"; - $daemon_media eq 'ssh' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=ssh\n"; - $daemon_media eq 'ftp' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=ftp\n"; - $daemon_media eq 'hd' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=hd\n"; - $daemon_media eq 'cd' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=cd\n"; - $daemon_media eq 'tape' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=tape\n"; - $daemon_media eq 'webdav' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=webdav\n"; - $daemon_media eq 'rsync' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=rsync\n"; - $hd_quota and push @cfg_list, "HD_QUOTA\n"; - $where_hd and push @cfg_list, "USE_HD\n"; - $where_hd and push @cfg_list, "MAX_SPACE=$max_space\n"; - $where_cd and push @cfg_list, "USE_CD\n"; - $where_tape and push @cfg_list, "USE_TAPE\n"; - $tape_norewind and push @cfg_list, "TAPE_NOREWIND\n"; - $where_net and push @cfg_list, "USE_NET\n"; - $cdrw and push @cfg_list, "CDRW\n"; - $dvdr and push @cfg_list, "DVDR\n"; - $dvdrw and push @cfg_list, "DVDRW\n"; - $dvdram and push @cfg_list, "DVDRAM\n"; - $what_no_browser or push @cfg_list, "BROWSER_CACHE\n"; - $backup_sys or push @cfg_list, "NO_SYS_FILES\n"; - $backup_user or push @cfg_list, "NO_USER_FILES\n"; - if ($comp_mode) { - push @cfg_list, "OPTION_COMP=TAR.BZ2\n"; - } else { - push @cfg_list, "OPTION_COMP=TAR.GZ\n"; - } - $del_hd_files and push @cfg_list, "DEL_HD_FILES\n"; - output_p($cfg_file, @cfg_list); + $conf{NO_USER_FILES} = '' if @user_list == (); + $conf{OTHER_FILES} = list_to_conf(@other_files); + $conf{HOME_FILES} = list_to_conf(@user_list); + $conf{SYS_FILES} = list_to_conf(@sys_files); + setVarsInSh($cfg_file, \%conf); chmod(0600, $cfg_file); save_cron_files(); 0; @@ -531,12 +424,12 @@ sub read_cron_files() { my $daemon_found = 0; foreach (qw(hourly daily weekly monthly)) { if (-f "/etc/cron.$_/drakbackup" && !$nonroot_user) { - $when_space = $_; + $conf{DAEMON_TIME_SPACE} = $_; $daemon_found = 1; last; } } - if ($when_space ne "custom") { + if ($conf{DAEMON_TIME_SPACE} ne "custom") { !$daemon_found and $backup_daemon = 0; } else { $custom_cron = 1; @@ -554,9 +447,9 @@ sub read_cron_files() { sub save_cron_files() { my $tmpcron = "$ENV{HOME}/tmp/crontab.tmp"; - if ($nonroot_user && $when_space ne "custom" && $when_space ne '' && $backup_daemon) { + if ($nonroot_user && $conf{DAEMON_TIME_SPACE} ne "custom" && $conf{DAEMON_TIME_SPACE} ne '' && $backup_daemon) { show_warning("w", N("Interval cron not available as non-root")); - $when_space = 'custom'; + $conf{DAEMON_TIME_SPACE} = 'custom'; return 1; } else { foreach (qw(hourly daily weekly monthly)) { @@ -565,11 +458,11 @@ sub save_cron_files() { } my @cron_file = ("#!/bin/sh\n", "export USER=root\n", "/usr/sbin/drakbackup --daemon > /dev/null 2>&1\n"); - if ($when_space ne "custom" && $when_space ne '' && $backup_daemon) { - output_p("/etc/cron.$when_space/drakbackup", @cron_file); - system("chmod +x /etc/cron.$when_space/drakbackup"); + if ($conf{DAEMON_TIME_SPACE} ne "custom" && $conf{DAEMON_TIME_SPACE} ne '' && $backup_daemon) { + output_p("/etc/cron.$conf{DAEMON_TIME_SPACE}/drakbackup", @cron_file); + system("chmod +x /etc/cron.$conf{DAEMON_TIME_SPACE}/drakbackup"); } - if ($when_space eq "custom" || !$backup_daemon) { + if ($conf{DAEMON_TIME_SPACE} eq "custom" || !$backup_daemon) { my $newdetail = join(" ", $time_string, $exec_string, "\n") if $backup_daemon; system("crontab -l | tail +4 > $tmpcron"); my @cronlines = cat_($tmpcron); @@ -587,91 +480,59 @@ sub save_cron_files() { } } +sub upgrade_conf_file() { + my @new_conf; + $DEBUG and print "Old syntax...upgrading...\n"; + my @conf_data = cat_($cfg_file); + chop @conf_data; + foreach (@conf_data) { + push @new_conf, $_ . "=1\n" if !/=/; + if (/^OTHER_FILES/) { + my (@new_data) = split /=/; + my @new_args = split(" ", $new_data[1]); + push @new_conf, $new_data[0] . "=" . join(",", @new_args) . "\n"; + } elsif (/=/ && !/TAR.GZ/) { + my $has_arg = split /=/; + push @new_conf, "$_\n" if $has_arg > 1; + } + } + output_p($cfg_file, @new_conf); +} + sub read_conf_file() { if (-e $cfg_file) { - #- FIXME - better method, per Thierry, still needs to be finished up + my $conf_version = `grep USE_HD $cfg_file`; + upgrade_conf_file() if $conf_version !~ /^USE_HD=1/; %conf = getVarsFromSh($cfg_file); - local *CONF_FILE; - open(CONF_FILE, "<" . $cfg_file) || print "You must be root to read configuration file. \n"; - local $_; - while () { - next unless /\S/; - next if /^#/; - chomp; - if (/^SYS_FILES/) { s/^SYS_FILES=//gi; @sys_files = split(' ', $_) } - if (/^HOME_FILES/) { s/^HOME_FILES=//gi; @user_list = split(' ', $_); $backup_user = 1 } - if (/^OTHER_FILES/) { s/^OTHER_FILES=//gi; @list_other = split(' ', $_) } - if (/^PATH_TO_SAVE/) { s/^PATH_TO_SAVE=//gi; $save_path = $_ } - if (/^NO_SYS_FILES/) { $backup_sys = 0 } - if (/^NO_USER_FILES/) { $backup_user = 0 } - if (/^OPTION_COMP/) { s/^OPTION_COMP=//gi; /TAR.GZ/ and $comp_mode = 0; /TAR.BZ2/ and $comp_mode = 1 } - if (/^BROWSER_CACHE/) { $what_no_browser = 0 } - if (/^CDRW/) { $cdrw = 1 } - if (/^DVDR$/) { $dvdr = 1 } - if (/^DVDRW/) { $dvdrw = 1 } - if (/^DVDRAM/) { $dvdram = 1 } - if (/^NET_PROTO/) { s/^NET_PROTO=//gi; $net_proto = $_ } - if (/^HOST_PATH/) { s/^HOST_PATH=//gi; $host_path = $_ } - if (/^DAEMON_MEDIA/) { s/^DAEMON_MEDIA=//gi; $daemon_media = $_ } - if (/^HD_QUOTA/) { $hd_quota = 1 } - if (/^USE_HD/) { $where_hd = 1 } - if (/^MAX_SPACE/) { s/^MAX_SPACE=//gi; $max_space = $_ } - if (/^USE_CD/) { $where_cd = 1 } - if (/^USE_NET/) { $where_net = 1 } - if (/^USE_TAPE/) { $where_tape = 1 } - if (/^TAPE_NOREWIND/) { $tape_norewind = 1 } - if (/^CD_TIME/) { s/^CD_TIME=//gi; $cd_time = $_ } - if (/^DAEMON_TIME_SPACE/) { s/^DAEMON_TIME_SPACE=//gi; $when_space = $_; $backup_daemon = 1 } - if (/^CD_WITH_INSTALL_BOOT/) { $cd_with_install_boot = 1 } - if (/^CD_DEVICE/) { s/^CD_DEVICE=//gi; $cd_device = $_ } - if (/^HOST_NAME/) { s/^HOST_NAME=//gi; $host_name = $_ } - if (/^REMEMBER_PASS/) { $remember_pass = 1 } - if (/^USER_KEYS/) { $user_keys = 1 } - if (/^DRAK_KEYS/) { $xfer_keys = 1; $user_keys = 0 } - if (/^USE_EXPECT/) { $use_expect = 1; $user_keys = 0 } - if (/^LOGIN/) { s/^LOGIN=//gi; $login_user = $_ } - if (/^PASSWD/) { s/^PASSWD=//gi; $passwd_user = $_; $remember_pass = 1 } - if (/^USER_MAIL/) { s/^USER_MAIL=//gi; $user_mail = $_ } - if (/^SMTP_SERVER/) { s/^SMTP_SERVER=//gi; $smtp_server = $_ } - if (/^SEND_MAIL/) { $send_mail = 1 } - if (/^TAPE_DEVICE/) { s/TAPE_DEVICE=//gi; $tape_device = $_ } - if (/^MEDIA_ERASE/) { $media_erase = 1 } - if (/^MEDIA_EJECT/) { $media_eject = 1 } - if (/^MULTI_SESSION/) { $multi_session = 1 } - if (/^SYS_INCREMENTAL_BACKUPS/) { $backup_sys_versions = 1 } - if (/^USER_INCREMENTAL_BACKUPS/) { $backup_user_versions = 1 } - if (/^OTHER_INCREMENTAL_BACKUPS/) { $backup_other_versions = 1 } - if (/^SYS_DIFFERENTIAL_BACKUPS/) { $sys_diff_mode = 1 } - if (/^USER_DIFFERENTIAL_BACKUPS/) { $user_diff_mode = 1 } - if (/^OTHER_DIFFERENTIAL_BACKUPS/) { $other_diff_mode = 1 } - if (/^NO_CRITICAL_SYS/) { $no_critical_sys = 1 } - if (/^CRITICAL_SYS/) { $no_critical_sys = 0 } - if (/^BACKUPIGNORE/) { $backupignore = 1 } - if (/^DEL_HD_FILES/) { $del_hd_files = 1 } - } - close(CONF_FILE); + @other_files = conf_to_list($conf{OTHER_FILES}); + @user_list = conf_to_list($conf{HOME_FILES}); + @sys_files = conf_to_list($conf{SYS_FILES}); + $backup_daemon = 1 if exists($conf{DAEMON_TIME_SPACE}); + $conf{SMTP_SERVER} = "localhost" if !exists($conf{SMTP_SERVER}); + $conf{MAX_SPACE} = 1000.0 if !exists($conf{MAX_SPACE}); + $conf{PATH_TO_SAVE} = "/var/lib/drakbackup" if !exists($conf{PATH_TO_SAVE}); read_cron_files(); $cfg_file_exist = 1; } else { $cfg_file_exist = 0; #- these were 1 by default, but that made it so the user could never save the #- inverse behavior. this allows incremental as the default if not configured - $backup_sys_versions = 1; - $backup_user_versions = 1; + $conf{SYS_INCREMENTAL_BACKUPS} = 1; + $conf{USER_INCREMENTAL_BACKUPS} = 1; } # deal with users that may have been deleted from the system check_valid_users() if $cfg_file_exist; - $use_hd = !($where_cd || $where_tape || $where_net); + $use_hd = !($conf{USE_CD} || $conf{USE_TAPE} || $conf{USE_NET}); } sub verify_mail_setup() { all_user_list() if @user_list_all == (); - if ($user_mail ne "root" && $user_mail !~ /[\w.-]*\@[\w.-]/ && !member($user_mail, @user_list_all)) { - show_warning("f", N("\"%s\" neither is a valid email nor is an existing local user!", $user_mail)); + if ($conf{USER_MAIL} ne "root" && $conf{USER_MAIL} !~ /[\w.-]*\@[\w.-]/ && !member($conf{USER_MAIL}, @user_list_all)) { + show_warning("f", N("\"%s\" neither is a valid email nor is an existing local user!", $conf{USER_MAIL})); return 1; } - if (member($user_mail, @user_list_all) && $smtp_server ne "localhost") { - show_warning("f", N("\"%s\" is a local user, but you did not select a local smtp, so you must use a complete email address!", $user_mail)); + if (member($conf{USER_MAIL}, @user_list_all) && $conf{SMTP_SERVER} ne "localhost") { + show_warning("f", N("\"%s\" is a local user, but you did not select a local smtp, so you must use a complete email address!", $conf{USER_MAIL})); return 1; } } @@ -695,11 +556,11 @@ sub check_valid_users() { sub write_sitecopyrc() { #- FIXME - how to deal with existing sitecopyrc my @cfg_list = ("site drakbackup\n", - "\tserver $host_name\n", - "\tremote /$host_path\n", - "\tlocal $save_path\n", - "\tusername $login_user\n", - "\tpassword $passwd_user\n", + "\tserver $conf{HOST_NAME}\n", + "\tremote /$conf{HOST_PATH}\n", + "\tlocal $conf{PATH_TO_SAVE}\n", + "\tusername $conf{LOGIN}\n", + "\tpassword $conf{PASSWD}\n", "\tprotocol webdav\n" ); output_p("$user_home/.sitecopyrc", @cfg_list); @@ -709,7 +570,7 @@ sub write_sitecopyrc() { } sub write_password_file() { - output_p("$cfg_dir/rsync.user", "$passwd_user\n"); + output_p("$cfg_dir/rsync.user", "$conf{PASSWD}\n"); chmod(0600, "$cfg_dir/rsync.user"); } @@ -745,14 +606,14 @@ sub ftp_client() { my $ftp; foreach (1..5) { - $ftp = Net::FTP->new($host_name, Debug => 0) or return 1; - $ftp && $ftp->login($login_user, $passwd_user) and last; + $ftp = Net::FTP->new($conf{HOST_NAME}, Debug => 0) or return 1; + $ftp && $ftp->login($conf{LOGIN}, $conf{PASSWD}) and last; log::l("ftp login failed, sleeping before trying again"); sleep 5 * $_; $ftp = 0; } return 1 if !$ftp; - $ftp->cwd($host_path); + $ftp->cwd($conf{HOST_PATH}); foreach (@file_list_to_send_by_ftp) { $interactive and $pbar->set_fraction(0); $interactive and progress($pbar, $plabel, 0.5, $_); @@ -811,8 +672,8 @@ sub do_expect { $interactive and progress($pbar, $plabel, 0.5, "File Transfer..."); foreach (@send_files) { - $exp_command = "scp -P $scp_port $_ $login_user\@$host_name:$host_path" if $mode eq "backup"; - $exp_command = "ssh-copy-id -i $_ $login_user\@$host_name" if $mode eq "sendkey"; + $exp_command = "scp -P $scp_port $_ $conf{LOGIN}\@$conf{HOST_NAME}:$conf{HOST_PATH}" if $mode eq "backup"; + $exp_command = "ssh-copy-id -i $_ $conf{LOGIN}\@$conf{HOST_NAME}" if $mode eq "sendkey"; if (-e $backup_key && $mode eq "sendkey") { if ($in->ask_yesorno(N("Warning"), N("%s exists, delete?\n\nIf you've already done this process you'll probably\n need to purge the entry from authorized_keys on the server.", $backup_key))) { @@ -841,24 +702,24 @@ sub do_expect { [ qr 'password: $', sub { $spawn_ok = 1; my $fh = shift; - $fh->send("$passwd_user\n"); + $fh->send("$conf{PASSWD}\n"); Expect::exp_continue() } ], [ '-re', 'please try again', sub { $bad_passwd = 1; Expect::exp_continue() } ], [ '-re', 'Permission denied', sub { $no_perm = 1; Expect::exp_continue() } ], [ '-re', 'No such file or directory', sub { $bad_dir = 1; Expect::exp_continue() } ], # [ '-re', '%', sub { update_scp_progress(); Expect::exp_continue(); } ], [ eof => sub { - if (!$spawn_ok) { show_warning("f", N("No password prompt on %s at port %s", $host_name, $scp_port)) } - if ($bad_passwd) { show_warning("f", N("Bad password on %s", $host_name)) } - if ($no_perm) { show_warning("f", N("Permission denied transferring %s to %s", $_, $host_name)) } - if ($bad_dir) { show_warning("f", N("Can't find %s on %s", $host_path, $host_name)) } + if (!$spawn_ok) { show_warning("f", N("No password prompt on %s at port %s", $conf{HOST_NAME}, $scp_port)) } + if ($bad_passwd) { show_warning("f", N("Bad password on %s", $conf{HOST_NAME})) } + if ($no_perm) { show_warning("f", N("Permission denied transferring %s to %s", $_, $conf{HOST_NAME})) } + if ($bad_dir) { show_warning("f", N("Can't find %s on %s", $conf{HOST_PATH}, $conf{HOST_NAME})) } } ], - [ timeout => sub { show_warning("f", N("%s not responding", $host_name)) } ], + [ timeout => sub { show_warning("f", N("%s not responding", $conf{HOST_NAME})) } ], ); my $exit_stat = $exp->exitstatus; - $in->ask_warn(N("Information"), N("Transfer successful\nYou may want to verify you can login to the server with:\n\nssh -i %s %s\@%s\n\nwithout being prompted for a password.", $backup_key, $login_user, $host_name)) if $exit_stat == 0 && $mode eq "sendkey"; + $in->ask_warn(N("Information"), N("Transfer successful\nYou may want to verify you can login to the server with:\n\nssh -i %s %s\@%s\n\nwithout being prompted for a password.", $backup_key, $conf{LOGIN}, $conf{HOST_NAME})) if $exit_stat == 0 && $mode eq "sendkey"; $log_buff .= "$_\n" if $exit_stat == 0 && $mode eq "backup"; $exp->hard_close; } @@ -872,10 +733,10 @@ sub ssh_client() { my $value; foreach (@file_list_to_send_by_ftp) { - if ($user_keys) { - $command = "scp -P $scp_port $_ $login_user\@$host_name:$host_path"; + if ($conf{USER_KEYS}) { + $command = "scp -P $scp_port $_ $conf{LOGIN}\@$conf{HOST_NAME}:$conf{HOST_PATH}"; } else { - $command = "scp -P $scp_port -i $backup_key $_ $login_user\@$host_name:$host_path"; + $command = "scp -P $scp_port -i $backup_key $_ $conf{LOGIN}\@$conf{HOST_NAME}:$conf{HOST_PATH}"; } $interactive and $pbar->set_fraction(0); $interactive and progress($pbar, $plabel, 0.5, "File Transfer..."); @@ -897,7 +758,7 @@ sub ssh_client() { sub webdav_client() { $DEBUG and print "file list to send: $_\n " foreach @file_list_to_send_by_ftp; if (!(-e "$user_home/.sitecopy/drakbackup")) { - my $command = "sitecopy -f $host_path"; + my $command = "sitecopy -f $conf{HOST_PATH}"; spawn_progress($command, "Initializing sitecopy"); } my $command = "sitecopy -u drakbackup"; @@ -915,17 +776,17 @@ sub webdav_client() { sub rsync_client() { $DEBUG and print "file list to send: $_\n " foreach @file_list_to_send_by_ftp; - my $rsync_cmd = "rsync -tv $save_path/* "; - $rsync_cmd = $rsync_cmd . "--password-file=$cfg_dir/rsync.user " if $passwd_user; - $rsync_cmd = $rsync_cmd . "$login_user\@" if $login_user; - $rsync_cmd = $rsync_cmd . $host_name . "::" . $host_path; + my $rsync_cmd = "rsync -tv $conf{PATH_TO_SAVE}/* "; + $rsync_cmd = $rsync_cmd . "--password-file=$cfg_dir/rsync.user " if $conf{PASSWD}; + $rsync_cmd = $rsync_cmd . "$conf{LOGIN}\@" if $conf{LOGIN}; + $rsync_cmd = $rsync_cmd . $conf{HOST_NAME} . "::" . $conf{HOST_PATH}; spawn_progress($rsync_cmd, "Running rsync"); return 0; } sub check_for_cd() { #- check for a cd - my $command = "cdrecord dev=$cd_device -atip"; + my $command = "cdrecord dev=$conf{CD_DEVICE} -atip"; spawn_progress($command, "Check for media in drive"); if ($log_buff =~ /No disk/) { show_warning("f", N("No CD-R/DVD-R in drive!")); @@ -935,17 +796,17 @@ sub check_for_cd() { show_warning("f", N("Does not appear to be recordable media!")); return 1; } - if ($log_buff =~ /Is not erasable/ && $media_erase) { + if ($log_buff =~ /Is not erasable/ && $conf{MEDIA_ERASE}) { show_warning("f", N("Not erasable media!")); return 1; } - if ($multi_session) { - $command = "cdrecord -s dev=$cd_device -msinfo"; + if ($conf{MULTI_SESSION}) { + $command = "cdrecord -s dev=$conf{CD_DEVICE} -msinfo"; spawn_progress($command, "Check for previous session status"); #- if we don't find a previous session, start fresh if ($log_buff =~ /Cannot read session offset/) { - $media_erase = 1; + $conf{MEDIA_ERASE} = 1; return 0; } else { #- extract the session info from $log_buff @@ -961,17 +822,17 @@ sub check_for_cd() { } sub write_on_cd() { - my $command = "cdrecord -v dev=$cd_device -data "; + my $command = "cdrecord -v dev=$conf{CD_DEVICE} -data "; # DVD+RW use -dao - $command .= "-dao " if $dvdrw; + $command .= "-dao " if $conf{DVDRW}; #- only blank if it's the first session - $command .= "blank=fast " if $media_erase && $session_offset eq ''; + $command .= "blank=fast " if $conf{MEDIA_ERASE} && $session_offset eq ''; #- multi-session mode - $command .= "-multi -pad " if $multi_session; - $command .= "$save_path/drakbackup.iso"; + $command .= "-multi -pad " if $conf{MULTI_SESSION}; + $command .= "$conf{PATH_TO_SAVE}/drakbackup.iso"; spawn_progress($command, "Running cdrecord"); - unlink("$save_path/drakbackup.iso"); + unlink("$conf{PATH_TO_SAVE}/drakbackup.iso"); } sub erase_cdrw() { @@ -979,7 +840,7 @@ sub erase_cdrw() { $interactive = 0; $in->ask_warn(N("Information"), N("This may take a moment to erase the media.")); cursor_wait(); - my $command = "cdrecord dev=$cd_device -blank=fast"; + my $command = "cdrecord dev=$conf{CD_DEVICE} -blank=fast"; spawn_progress($command, "Erasing CDRW..."); cursor_norm(); $interactive = 1; @@ -1011,23 +872,23 @@ sub spawn_progress { } sub get_cd_volname() { - my $vol_device = $cd_device; + my $vol_device = $conf{CD_DEVICE}; $vol_device =~ s/sg/scd/; - $vol_name = `volname $vol_device` if $cd_device; + $vol_name = `volname $vol_device` if $conf{CD_DEVICE}; $vol_name =~ s/[ \t]+\n$//; $vol_name; } sub build_iso() { - if ($multi_session && $session_offset) { + if ($conf{MULTI_SESSION} && $session_offset) { $vol_name = get_cd_volname(); } else { $vol_name = "Drakbackup" . $the_time; } #this is safe to change the volname on rewrites, as is seems to get ignored anyway my $command = "mkisofs -r -J -T -v -V '$vol_name' "; - $command .= "-C $session_offset -M $cd_device " if $multi_session && $session_offset; - $command .= "-o $save_path/drakbackup.iso @file_list_to_send_by_ftp"; + $command .= "-C $session_offset -M $conf{CD_DEVICE} " if $conf{MULTI_SESSION} && $session_offset; + $command .= "-o $conf{PATH_TO_SAVE}/drakbackup.iso @file_list_to_send_by_ftp"; spawn_progress($command, "Running mkisofs..."); } @@ -1059,58 +920,58 @@ sub get_tape_label { sub build_tape() { my $command; #- do we have a tape? - $command = "mt -f $tape_device status"; + $command = "mt -f $conf{TAPE_DEVICE} status"; spawn_progress($command, "Checking for tape"); if ($log_buff =~ /DR_OPEN/) { - show_warning("f", N("No tape in %s!", $tape_device)); + show_warning("f", N("No tape in %s!", $conf{TAPE_DEVICE})); return 1; } #- try to roll to the end of the data if we're not erasing - if (!$media_erase) { - $command = "mt -f $tape_device rewind"; + if (!$conf{MEDIA_ERASE}) { + $command = "mt -f $conf{TAPE_DEVICE} rewind"; spawn_progress($command, "Rewind to find tape label"); - $command = "tar -tf $tape_device"; + $command = "tar -tf $conf{TAPE_DEVICE}"; spawn_progress($command, "Check for label"); if ($log_buff =~ /drakbackup.label/) { - if ($tape_norewind) { - $command = "mt -f $tape_device rewind"; + if ($conf{TAPE_NOREWIND}) { + $command = "mt -f $conf{TAPE_DEVICE} rewind"; spawn_progress($command, "Rewind to get tape label"); } - $command = "tar -C $cfg_dir -xf $tape_device"; + $command = "tar -C $cfg_dir -xf $conf{TAPE_DEVICE}"; spawn_progress($command, "Reading tape label"); my @volname = cat_("$cfg_dir/drakbackup.label"); unlink("$cfg_dir/drakbackup.label"); $vol_name = $volname[0]; } - $command = "mt -f $tape_device eod"; + $command = "mt -f $conf{TAPE_DEVICE} eod"; spawn_progress($command, "Running mt to find eod"); } else { - $command = "mt -f $tape_device rewind"; + $command = "mt -f $conf{TAPE_DEVICE} rewind"; spawn_progress($command, "Running mt to rewind"); # make a tape label for the catalog # if we're using the rewinding device, change modes briefly - if (!$tape_norewind) { - $tape_device =~ s|/st|/nst|; + if (!$conf{TAPE_NOREWIND}) { + $conf{TAPE_DEVICE} =~ s|/st|/nst|; } $vol_name = "Drakbackup" . $the_time; my $f = "$cfg_dir/drakbackup.label"; output($f, $vol_name); - $command = "tar -C $cfg_dir -cf $tape_device drakbackup.label;"; + $command = "tar -C $cfg_dir -cf $conf{TAPE_DEVICE} drakbackup.label;"; spawn_progress($command, "Creating tape label"); unlink $f; - if (!$tape_norewind) { - $tape_device =~ s|/nst|/st|; + if (!$conf{TAPE_NOREWIND}) { + $conf{TAPE_DEVICE} =~ s|/nst|/st|; } } #- do the backup - $command = "tar -cvf $tape_device @file_list_to_send_by_ftp"; + $command = "tar -cvf $conf{TAPE_DEVICE} @file_list_to_send_by_ftp"; spawn_progress($command, "Running tar to tape"); #- eject the tape? - if ($media_eject) { - $command = "mt -f $tape_device rewoff"; + if ($conf{MEDIA_EJECT}) { + $command = "mt -f $conf{TAPE_DEVICE} rewoff"; spawn_progress($command, "Running mt to eject tape"); } } @@ -1119,9 +980,9 @@ sub send_mail { my ($result) = @_; my $datem = `date`; use Mail::Mailer; - my $mailer = Mail::Mailer->new('smtp', Server => $smtp_server); + my $mailer = Mail::Mailer->new('smtp', Server => $conf{SMTP_SERVER}); $mailer->open({ From => 'drakbackup', - To => $user_mail, + To => $conf{USER_MAIL}, Subject => "DrakBackup report on $datem", }) or return 1; @@ -1139,6 +1000,7 @@ sub build_backup_files() { my $tar_cmd_other; my @dir_content; my $incr; + my $base; my $find_args = "! -type d -print"; local $_; @@ -1150,10 +1012,10 @@ sub build_backup_files() { $interactive and cursor_wait(); read_conf_file(); the_time(); - $send_mail and complete_results(); - -d $save_path or mkdir_p($save_path); + $conf{SEND_MAIL} and complete_results(); + -d $conf{PATH_TO_SAVE} or mkdir_p($conf{PATH_TO_SAVE}); - if ($comp_mode) { + if ($conf{OPTION_COMP}) { $DEBUG and $tar_cmd = "tar cvpj "; $DEBUG or $tar_cmd = "tar cpj "; $tar_ext = "tar.bz2"; @@ -1162,9 +1024,9 @@ sub build_backup_files() { $DEBUG or $tar_cmd = "tar cpz "; $tar_ext = "tar.gz" } - my $used_space = check_storage_quota($save_path); + my $used_space = check_storage_quota($conf{PATH_TO_SAVE}); if ($used_space) { - my $msg = N("Backup quota exceeded!\n%d MB used vs %d MB allocated.", $used_space, $max_space); + my $msg = N("Backup quota exceeded!\n%d MB used vs %d MB allocated.", $used_space, $conf{MAX_SPACE}); show_warning("f", $msg); $interactive and cursor_norm(); $results .= $msg; @@ -1175,183 +1037,119 @@ sub build_backup_files() { $tar_cmd_sys = $tar_cmd; $tar_cmd_user = $tar_cmd; $tar_cmd_other = $tar_cmd; - $no_critical_sys and $tar_cmd_sys .= "--exclude passwd --exclude fstab --exclude group --exclude mtab"; - $what_no_browser and $tar_cmd_user .= "--exclude NewCache --exclude Cache --exclude cache"; + $conf{NO_CRITICAL_SYS} and $tar_cmd_sys .= "--exclude passwd --exclude fstab --exclude group --exclude mtab"; + $conf{NO_BROWSER_CACHE} and $tar_cmd_user .= "--exclude NewCache --exclude Cache --exclude cache"; $nonroot_user and $tar_cmd_user .= " --exclude .drakbackup"; - $backupignore && -f "/etc/.backupignore" and $tar_cmd_sys .= " -X /etc/.backupignore"; + $conf{BACKUPIGNORE} && -f "/etc/.backupignore" and $tar_cmd_sys .= " -X /etc/.backupignore"; - -d $save_path and @dir_content = all($save_path); + -d $conf{PATH_TO_SAVE} and @dir_content = all($conf{PATH_TO_SAVE}); - if ($where_hd && !$daemon || $daemon) { + if ($conf{USE_HD} && !$daemon || $daemon) { $interactive and progress($pbar, $plabel, 0.5, N("Backup system files...")); - if ($backup_sys) { + unless ($conf{NO_SYS_FILES}) { my $find_args_sys = $find_args; + my $first_done; $ignore_files_list = ''; - $find_args_sys = handle_ignores2("/etc", $find_args_sys) if $backupignore; - if ($backup_sys_versions) { - $incr = "incr_sys"; - $incr =~ s/incr/diff/ if $sys_diff_mode; - #- 8/19/2002 - changed these greps to look at the list, rather than the tar file - #- we retain the list for other media backups, but the tar file goes away, potentially - if ((any { /^list_incr_sys/ } @dir_content) && !$sys_diff_mode) { - my @more_recent = grep { /^list_incr_sys/ } sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - my $list_file = $save_path . "/list_incr_sys" . $the_time . ".txt"; - system("find @sys_files -cnewer $save_path/$more_recent $find_args_sys > $list_file"); - if (!cat_($list_file)) { - system("rm $list_file"); - } else { - system("$tar_cmd_sys -f $save_path/backup_incr_sys$the_time.$tar_ext -T $list_file"); - push_list("backup_incr_sys"); - push_list("list_incr_sys"); - files_to_results("incr_sys"); - } - } elsif (any { /^list_base_sys/ } @dir_content) { - my @more_recent = grep { /^list_base_sys/ } sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - my $list_file = $save_path . "/list_" . $incr . $the_time . ".txt"; - system("find @sys_files -cnewer $save_path/$more_recent $find_args_sys > $list_file"); - if (!cat_($list_file)) { - system("rm $list_file"); - } else { - system("$tar_cmd_sys -f $save_path/backup_$incr$the_time.$tar_ext -T $list_file"); - push_list("backup_$incr"); - push_list("list_$incr"); - files_to_results($incr); + $find_args_sys = handle_ignores2("/etc", $find_args_sys) if $conf{BACKUPIGNORE}; + if ($conf{SYS_INCREMENTAL_BACKUPS}) { + $base = $incr = "incr_sys"; + ($base, $incr) = swap_prefix($base, $incr) if $conf{SYS_DIFFERENTIAL_BACKUPS}; + if (any { /^list_base_sys/ } @dir_content) { + $more_recent = get_more_recent($base, @dir_content); + my $list_file = name_list_file($incr); + do_find($more_recent, $find_args_sys, $list_file, @sys_files); + if (check_rm_list($list_file)) { + do_tar($tar_cmd_sys, "backup_$incr", $list_file, undef); } + $first_done = 1; } else { - #- need this for the first pass too, if we're offloading the backups to other media (sb) - system("find @sys_files $find_args_sys > $save_path/list_base_sys$the_time.txt"); - system("$tar_cmd_sys -f $save_path/backup_base_sys$the_time.$tar_ext @sys_files"); - push_list("backup_base_sys"); - push_list("list_base_sys"); - files_to_results("base_sys"); + $incr = "base_sys"; } } else { - system("cd $save_path && rm -f backup_sys* backup_base_sys* backup_incr_sys*"); - system("find @sys_files $find_args_sys > $save_path/list_sys$the_time.txt"); - system("$tar_cmd_sys -f $save_path/backup_sys$the_time.$tar_ext @sys_files"); - push_list("backup_sys"); - files_to_results("sys"); + $incr = "sys"; + clean_dest($incr); } + if (!$first_done) { + my $list_file = name_list_file($incr); + do_find(undef, $find_args_sys, $list_file, @sys_files); + do_tar($tar_cmd_sys, "backup_$incr", undef, @sys_files); + } + push_list("list_$incr") if $incr =~ /_sys/; + files_to_results($incr); } $interactive and progress($pbar, $plabel, 0.5, N("Backup system files...")); $interactive and progress($pbar3, $plabel3, 0.3, N("Hard Disk Backup files...")); - if ($backup_user) { + unless ($conf{NO_USER_FILES}) { foreach (@user_list) { my $user = $_; my $tar_cmd_cuser = $tar_cmd_user; $path_name = return_path($user); - $backupignore && -f "$path_name/.backupignore" and $tar_cmd_cuser .= " -X $path_name/.backupignore"; + $conf{BACKUPIGNORE} && -f "$path_name/.backupignore" and $tar_cmd_cuser .= " -X $path_name/.backupignore"; my $find_args_user = $find_args; + my $first_done; $ignore_files_list = ''; - $find_args_user = handle_ignores2($path_name, $find_args_user) if $backupignore; - if ($backup_user_versions) { - $incr = "incr_user_"; - $incr =~ s/incr/diff/ if $user_diff_mode; - #- 8/19/2002 - changed these greps to look at the list, rather than the tar file - #- we retain the list for other media backups, but the tar file goes away, potentially - if ((any { /^list_incr_user_$user/ } @dir_content) && !$user_diff_mode) { - my @more_recent = grep { /^list_incr_user_$user/ } sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - my $list_file = $save_path . "/list_incr_user_" . $user . $the_time . ".txt"; - system("find $path_name -cnewer $save_path/$more_recent $find_args_user > $list_file"); - if (!cat_($list_file)) { - system("rm $list_file"); - } else { - system("$tar_cmd_cuser -f $save_path/backup_incr_user_$user$the_time.$tar_ext -T $list_file"); - push_list("backup_incr_user_$user"); - push_list("list_incr_user_$user"); - files_to_results("incr_user_$user"); - } - } elsif (any { /^list_base_user_$user/ } @dir_content) { - my @more_recent = grep { /^list_base_user_$user/ } sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - my $list_file = $save_path . "/list_" . $incr . $user . $the_time . ".txt"; - system("find $path_name -cnewer $save_path/$more_recent $find_args_user > $list_file"); - if (!cat_($list_file)) { - system("rm $list_file"); - } else { - system("$tar_cmd_cuser -f $save_path/backup_$incr$user$the_time.$tar_ext -T $list_file"); - push_list("backup_$incr$user"); - push_list("list_$incr$user"); - files_to_results("$incr$user"); + $find_args_user = handle_ignores2($path_name, $find_args_user) if $conf{BACKUPIGNORE}; + if ($conf{USER_INCREMENTAL_BACKUPS}) { + $base = $incr = "incr_user_"; + ($base, $incr) = swap_prefix($base, $incr) if $conf{USER_DIFFERENTIAL_BACKUPS}; + if (any { /^list_base_user_$user/ } @dir_content) { + $more_recent = get_more_recent("$base$user", @dir_content); + my $list_file = name_list_file($incr . $user); + do_find($more_recent, $find_args_user, $list_file, $path_name); + if (check_rm_list($list_file)) { + do_tar($tar_cmd_user, "backup_$incr$user", $list_file, undef); } + $first_done = 1; } else { - #- need this for the first pass too, if we're offloading the backups to other media (sb) - system("find $path_name $find_args_user > $save_path/list_base_user_$user$the_time.txt"); - system("$tar_cmd_cuser -f $save_path/backup_base_user_$user$the_time.$tar_ext $path_name"); - push_list("backup_base_user_$user"); - push_list("list_base_user_$user"); - files_to_results("base_user_$user"); + $incr = "base_user_"; } } else { - system("cd $save_path && rm -f backup_user_$user* backup_base_user_$user* backup_incr_user_$user*"); - system("find $path_name $find_args_user > $save_path/list_user_$user$the_time.txt"); - system("$tar_cmd_cuser -f $save_path/backup_user_$user$the_time.$tar_ext $path_name"); - push_list("backup_user_$user"); - files_to_results("user_$user"); + $incr = "user_"; + clean_dest("$incr$user"); + } + if (!$first_done) { + my $list_file = name_list_file($incr . $user); + do_find(undef, $find_args_user, $list_file, $path_name); + do_tar($tar_cmd_user, "backup_$incr$user", undef, $path_name); } + push_list("$incr$user") if $incr =~ /_user/; + files_to_results("$incr$user"); } } $interactive and progress($pbar2, $plabel1, 1, N("Backup User files...")); $interactive and progress($pbar3, $plabel3, 0.4, N("Hard Disk Backup files...")); - if (@list_other) { + if ($conf{OTHER_FILES}) { my $find_args_other = $find_args; + my $first_done; $ignore_files_list = ''; - ($tar_cmd_other, $find_args_other) = handle_ignores($tar_cmd_other, $find_args_other, @list_other) if $backupignore; - if ($backup_other_versions) { - $incr = "incr_other"; - $incr =~ s/incr/diff/ if $other_diff_mode; - if ((any { /^list_incr_other/ } @dir_content) && !$user_diff_mode) { - my @more_recent = grep { /^list_incr_other/ } sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - my $list_file = $save_path . "/list_incr_other" . $the_time . ".txt"; - system("find @list_other -cnewer $save_path/$more_recent $find_args_other > $list_file"); - if (!cat_($list_file)) { - system("rm $list_file"); - } else { - system("$tar_cmd_other -f $save_path/backup_incr_other$the_time.$tar_ext -T $list_file"); - push_list("backup_incr_other"); - push_list("list_incr_other"); - files_to_results("incr_other"); - } - } elsif (any { /^list_base_other/ } @dir_content) { - my @more_recent = grep { /^list_base_other/ } sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - my $list_file = $save_path . "/list_" . $incr . $the_time . ".txt"; - system("find @list_other -cnewer $save_path/$more_recent $find_args_other > $list_file"); - if (!cat_($list_file)) { - system("rm $list_file"); - } else { - system("$tar_cmd_other -f $save_path/backup_$incr$the_time.$tar_ext -T $list_file"); - push_list("backup_$incr"); - push_list("list_$incr"); - files_to_results($incr); + ($tar_cmd_other, $find_args_other) = handle_ignores($tar_cmd_other, $find_args_other, @other_files) if $conf{BACKUPIGNORE}; + if ($conf{OTHER_INCREMENTAL_BACKUPS}) { + $base = $incr = "incr_other"; + ($base, $incr) = swap_prefix($base, $incr) if $conf{OTHER_DIFFERENTIAL_BACKUPS}; + if (any { /^list_base_other/ } @dir_content) { + $more_recent = get_more_recent($base, @dir_content); + my $list_file = name_list_file($incr); + do_find($more_recent, $find_args_other, $list_file, @other_files); + if (check_rm_list($list_file)) { + do_tar($tar_cmd_other, "backup_$incr", $list_file, undef); } + $first_done = 1; } else { - #- need this for the first pass too, if we're offloading the backups to other media (sb) - system("find @list_other $find_args_other > $save_path/list_base_other$the_time.txt"); - system("$tar_cmd_other -f $save_path/backup_base_other$the_time.$tar_ext @list_other"); - push_list("backup_base_other"); - push_list("list_base_other"); - files_to_results("base_other"); + $incr = "base_other"; } } else { - system("cd $save_path && rm -f backup_other* backup_base_other* backup_incr_other*"); - system("find @list_other $find_args_other > $save_path/list_other$the_time.txt"); - system("$tar_cmd_other -f $save_path/backup_other$the_time.$tar_ext @list_other"); - push_list("backup_other"); - files_to_results("other"); + $incr = "other"; + clean_dest($incr); } + if (!$first_done) { + my $list_file = name_list_file($incr); + do_find(undef, $find_args_other, $list_file, @other_files); + do_tar($tar_cmd_user, "backup_$incr", undef, @other_files); + } + push_list("list_$incr") if $incr =~ /_other/; + files_to_results($incr); } $interactive and progress($pbar1, $plabel2, 1, N("Backup Other files...")); $interactive and progress($pbar3, $plabel3, 0.3, N("Hard Disk Backup Progress...")); @@ -1368,22 +1166,22 @@ sub build_backup_files() { } #- should hit this block if running daemon mode only - if ($daemon && $daemon_media) { + if ($daemon && $conf{DAEMON_MEDIA}) { # ftp_client() if $ftp_daemon; - rsync_client() if $daemon_media eq 'rsync'; - ssh_client() if $daemon_media eq 'ssh' && !$use_expect; - do_expect("backup") if $daemon_media eq 'ssh' && $use_expect; - webdav_client() if $daemon_media eq 'webdav'; - build_cd() if $daemon_media eq 'cd'; - build_tape() if $daemon_media eq 'tape'; - - $results .= N("\nDrakbackup activities via %s:\n\n", $daemon_media) if $daemon_media ne 'hd'; + rsync_client() if $conf{DAEMON_MEDIA} eq 'rsync'; + ssh_client() if $conf{DAEMON_MEDIA} eq 'ssh' && !$conf{USE_EXPECT}; + do_expect("backup") if $conf{DAEMON_MEDIA} eq 'ssh' && $conf{USE_EXPECT}; + webdav_client() if $conf{DAEMON_MEDIA} eq 'webdav'; + build_cd() if $conf{DAEMON_MEDIA} eq 'cd'; + build_tape() if $conf{DAEMON_MEDIA} eq 'tape'; + + $results .= N("\nDrakbackup activities via %s:\n\n", $conf{DAEMON_MEDIA}) if $conf{DAEMON_MEDIA} ne 'hd'; $results .= $log_buff; } #- leave this one alone for now - works well #- integrate with other methods later - if (($where_net && !$daemon && $net_proto eq 'ftp') || $daemon && $daemon_media eq 'ftp') { + if (($conf{USE_NET} && !$daemon && $conf{NET_PROTO} eq 'ftp') || $daemon && $conf{DAEMON_MEDIA} eq 'ftp') { $interactive and build_backup_ftp_status(); if (ftp_client()) { $results .= N("\n FTP connection problem: It was not possible to send your backup files by FTP.\n"); @@ -1396,20 +1194,20 @@ sub build_backup_files() { #- consolidate all the other methods under here - interactive and --default should land here if (!$daemon) { - if ($where_net && $net_proto && $net_proto ne 'ftp') { - rsync_client() if $net_proto eq 'rsync'; - ssh_client() if $net_proto eq 'ssh' && !$use_expect; - do_expect("backup") if $net_proto eq 'ssh' && $use_expect; - webdav_client() if $net_proto eq 'webdav'; - $results .= N("\nDrakbackup activities via %s:\n\n", $net_proto); + if ($conf{USE_NET} && $conf{NET_PROTO} && $conf{NET_PROTO} ne 'ftp') { + rsync_client() if $conf{NET_PROTO} eq 'rsync'; + ssh_client() if $conf{NET_PROTO} eq 'ssh' && !$conf{USE_EXPECT}; + do_expect("backup") if $conf{NET_PROTO} eq 'ssh' && $conf{USE_EXPECT}; + webdav_client() if $conf{NET_PROTO} eq 'webdav'; + $results .= N("\nDrakbackup activities via %s:\n\n", $conf{NET_PROTO}); } - if ($where_cd) { + if ($conf{USE_CD}) { build_cd(); $results .= N("\nDrakbackup activities via CD:\n\n"); } - if ($where_tape) { + if ($conf{USE_TAPE}) { build_tape(); $results .= N("\nDrakbackup activities via tape:\n\n"); } @@ -1418,7 +1216,7 @@ sub build_backup_files() { results_to_logfile(); - if ($send_mail) { + if ($conf{SEND_MAIL}) { if (send_mail($results)) { $interactive and $in->ask_warn(N("Error"), N("Error sending mail. Your report mail was not sent.")); $interactive or print N(" Error while sending mail. \n"); @@ -1428,32 +1226,32 @@ sub build_backup_files() { #- write our catalog file if (!$media_problem) { my $catalog = substr($the_time, 1); - if (!$where_net && !$where_tape && !$where_cd) { - $catalog .= ":HD:localhost:$save_path"; - $net_proto = ''; + if (!$conf{USE_NET} && !$conf{USE_TAPE} && !$conf{USE_CD}) { + $catalog .= ":HD:localhost:$conf{PATH_TO_SAVE}"; + $conf{NET_PROTO} = ''; } - $catalog .= ":$net_proto:$login_user\@$host_name:$host_path" if $net_proto; - $catalog .= ":CD:$vol_name:$cd_device" if $where_cd; - $catalog .= ":Tape:$vol_name:$tape_device" if $where_tape; - $catalog .= ":System" if $backup_sys; - $catalog .= ":I" if $backup_sys_versions && $backup_sys && !$sys_diff_mode; - $catalog .= ":D" if $backup_sys_versions && $backup_sys && $sys_diff_mode; - $catalog .= ":F" if !$backup_sys_versions && $backup_sys; - $catalog .= ":Users=(@user_list)" if $backup_user; - $catalog .= ":I" if $backup_user_versions && $backup_user && !$user_diff_mode; - $catalog .= ":D" if $backup_user_versions && $backup_user && $user_diff_mode; - $catalog .= ":F" if !$backup_user_versions && $backup_user;; - $catalog .= ":Other=(@list_other)" if @list_other; - $catalog .= ":I" if $backup_other_versions && @list_other && !$other_diff_mode; - $catalog .= ":D" if $backup_other_versions && @list_other && $other_diff_mode; - $catalog .= ":F" if !$backup_other_versions && @list_other; + $catalog .= ":$conf{NET_PROTO}:$conf{LOGIN}\@$conf{HOST_NAME}:$conf{HOST_PATH}" if $conf{NET_PROTO}; + $catalog .= ":CD:$vol_name:$conf{CD_DEVICE}" if $conf{USE_CD}; + $catalog .= ":Tape:$vol_name:$conf{TAPE_DEVICE}" if $conf{USE_TAPE}; + $catalog .= ":System" unless $conf{NO_SYS_FILES}; + $catalog .= ":I" if $conf{SYS_INCREMENTAL_BACKUPS} && !$conf{NO_SYS_FILES} && !$conf{SYS_DIFFERENTIAL_BACKUPS}; + $catalog .= ":D" if $conf{SYS_INCREMENTAL_BACKUPS} && !$conf{NO_SYS_FILES} && $conf{SYS_DIFFERENTIAL_BACKUPS}; + $catalog .= ":F" if !$conf{SYS_INCREMENTAL_BACKUPS} && !$conf{NO_SYS_FILES}; + $catalog .= ":Users=(@user_list)" unless $conf{NO_USER_FILES}; + $catalog .= ":I" if $conf{USER_INCREMENTAL_BACKUPS} && !$conf{NO_USER_FILES} && !$conf{USER_DIFFERENTIAL_BACKUPS}; + $catalog .= ":D" if $conf{USER_INCREMENTAL_BACKUPS} && !$conf{NO_USER_FILES} && $conf{USER_DIFFERENTIAL_BACKUPS}; + $catalog .= ":F" if !$conf{USER_INCREMENTAL_BACKUPS} && !$conf{NO_USER_FILES};; + $catalog .= ":Other=(@other_files)" if $conf{OTHER_FILES}; + $catalog .= ":I" if $conf{OTHER_INCREMENTAL_BACKUPS} && $conf{OTHER_FILES} && !$conf{OTHER_DIFFERENTIAL_BACKUPS}; + $catalog .= ":D" if $conf{OTHER_INCREMENTAL_BACKUPS} && $conf{OTHER_FILES} && $conf{OTHER_DIFFERENTIAL_BACKUPS}; + $catalog .= ":F" if !$conf{OTHER_INCREMENTAL_BACKUPS} && $conf{OTHER_FILES}; $catalog .= "\n"; append_to_file("$cfg_dir/drakbackup_catalog", $catalog) or show_warning("w", N("Can't create catalog!")); } #- clean up HD files if del_hd_files and media isn't hd - if ($del_hd_files && ($where_cd || $where_tape || $where_net) && $daemon_media ne 'hd') { + if ($conf{DEL_HD_FILES} && ($conf{USE_CD} || $conf{USE_TAPE} || $conf{USE_NET}) && $conf{DAEMON_MEDIA} ne 'hd') { foreach (@file_list_to_send_by_ftp) { unlink($_) if /$tar_ext$/; } @@ -1461,16 +1259,67 @@ sub build_backup_files() { #- if we had a media problem then get rid of the text log of the backed up files too if ($media_problem) { - system("rm $save_path/list*$the_time.txt"); + system("rm $conf{PATH_TO_SAVE}/list*$the_time.txt"); } $interactive and cursor_norm(); $interactive and show_status(); } +sub swap_prefix { + my ($base, $incr) = @_; + $incr =~ s/incr/diff/; + $base =~ s/incr/base/; + return $base, $incr; +} + +sub name_list_file { + my ($suffix) = @_; + return $conf{PATH_TO_SAVE} . "/list_" . $suffix . $the_time . ".txt"; +} + +sub check_rm_list { + my ($list_file) = @_; + if (!cat_($list_file)) { + unlink($list_file); + return 0; + } else { + return 1; + } +} + +sub get_more_recent { + my ($match, @directory) = @_; + $match = "list_" . $match; + my @more_recent = grep { /^$match/ } sort @directory; + my $more_recent = pop @more_recent; + $DEBUG and print "more recent file: $more_recent\n"; + return $more_recent; +} + +sub clean_dest { + my ($wildcard) = @_; + system("cd $conf{PATH_TO_SAVE} && rm -f backup*$wildcard*"); +} + +sub do_find { + my ($newer, $more_args, $into, @where) = @_; + #- $newer may be undef - if it's defined then "-cnewer $newer" + $newer = $conf{PATH_TO_SAVE} . "/" . $newer if defined($newer); + defined($newer) ? system("find @where -cnewer $newer $more_args > $into") : system("find @where $more_args > $into"); +} + +sub do_tar { + my ($tar_cmd, $dest_file, $list_file, @files) = @_; + my $full_dest_file = $conf{PATH_TO_SAVE} . "/" . $dest_file . $the_time . "." . $tar_ext; + #- if $list_file is undefined, then use the @files list + defined($list_file) ? system("$tar_cmd -f $full_dest_file -T $list_file") : system("$tar_cmd -f $full_dest_file @files"); + push_list($dest_file); +} + sub push_list { my ($prefix) = @_; - my $filename = $save_path . "/" . $prefix . $the_time . "."; + my $filename = $conf{PATH_TO_SAVE} . "/" . $prefix . $the_time . "."; $filename .= $tar_ext if $prefix =~ /^backup/; $filename .= "txt" if $prefix =~ /^list/; push @file_list_to_send_by_ftp, $filename; @@ -1478,8 +1327,8 @@ sub push_list { sub files_to_results { my ($basename) = @_; - $results .= "\nfile: " . $save_path . "/backup_" . $basename . $the_time . "." . $tar_ext . "\n\n"; - $results .= cat_("$save_path/list_" . $basename . $the_time . ".txt"); + $results .= "\nfile: " . $conf{PATH_TO_SAVE} . "/backup_" . $basename . $the_time . "." . $tar_ext . "\n\n"; + $results .= cat_("$conf{PATH_TO_SAVE}/list_" . $basename . $the_time . ".txt"); $results .= "\nignored:\n" . $ignore_files_list . "\n" if $ignore_files_list; } @@ -1520,12 +1369,12 @@ sub require_rpm { sub check_pkg_needs() { my $extra_pkg = ''; - if ($where_net) { - $extra_pkg = 'rsync' if $net_proto eq 'rsync'; - $extra_pkg = 'sitecopy wget' if $net_proto eq 'webdav'; - $extra_pkg = 'perl-Expect' if $net_proto eq 'ssh' && ($use_expect || $xfer_keys); + if ($conf{USE_NET}) { + $extra_pkg = 'rsync' if $conf{NET_PROTO} eq 'rsync'; + $extra_pkg = 'sitecopy wget' if $conf{NET_PROTO} eq 'webdav'; + $extra_pkg = 'perl-Expect' if $conf{NET_PROTO} eq 'ssh' && ($conf{USE_EXPECT} || $conf{DRAK_KEYS}); } - $extra_pkg = 'mt-st' if $where_tape; + $extra_pkg = 'mt-st' if $conf{USE_TAPE}; if ($extra_pkg) { if (require_rpm($extra_pkg)) { return 0; @@ -1570,11 +1419,21 @@ sub results_to_logfile() { output_p($log_file, $results); } +sub conf_to_list { + my ($config) = @_; + return split(",", $config); +} + +sub list_to_conf { + my (@list) = @_; + return join(",", @list); +} + sub file_ok_sel { my ($file_selection) = @_; my $file_name = $file_selection->get_filename; - if (!member($file_name, @list_other)) { - push(@list_other, $file_name); + if (!member($file_name, @other_files)) { + push(@other_files, $file_name); $list_model->append_set(undef, $file_name); } } @@ -1631,8 +1490,9 @@ sub filedialog() { sub check_list { foreach (@_) { - my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], $$ref), toggled => sub { + my $ref = $_->[1]; + $_->[2] ? gtkset_active($_->[0], !$$ref) : gtkset_active($_->[0], $$ref); + gtksignal_connect($_->[0], toggled => sub { invbool $ref; destroy_widget(); $current_widget->(); @@ -1661,18 +1521,18 @@ sub advanced_what_sys() { 1, new Gtk2::VBox(0, 15), ), ); - check_list([$check_what_sys, \$backup_sys], [$check_what_critical, \$no_critical_sys]); - $check_what_versions->set_active($backup_sys_versions); + check_list([$check_what_sys, \$conf{NO_SYS_FILES}, 1], [$check_what_critical, \$conf{NO_CRITICAL_SYS}]); + $check_what_versions->set_active($conf{SYS_INCREMENTAL_BACKUPS}); $check_what_versions->signal_connect('toggled' => sub { - invbool \$backup_sys_versions; - $mode_buttons[0]->set_sensitive($backup_sys_versions); - $mode_buttons[1]->set_sensitive($backup_sys_versions); + invbool \$conf{SYS_INCREMENTAL_BACKUPS}; + $mode_buttons[0]->set_sensitive($conf{SYS_INCREMENTAL_BACKUPS}); + $mode_buttons[1]->set_sensitive($conf{SYS_INCREMENTAL_BACKUPS}); }); - $mode_buttons[1]->set_active($sys_diff_mode); - $mode_buttons[0]->signal_connect('toggled' => sub { $sys_diff_mode = $mode_buttons[1]->get_active }); - $mode_buttons[0]->set_sensitive($backup_sys_versions); - $mode_buttons[1]->set_sensitive($backup_sys_versions); + $mode_buttons[1]->set_active($conf{SYS_DIFFERENTIAL_BACKUPS}); + $mode_buttons[0]->signal_connect('toggled' => sub { $conf{SYS_DIFFERENTIAL_BACKUPS} = $mode_buttons[1]->get_active }); + $mode_buttons[0]->set_sensitive($conf{SYS_INCREMENTAL_BACKUPS}); + $mode_buttons[1]->set_sensitive($conf{SYS_INCREMENTAL_BACKUPS}); set_help_tip($check_what_versions, 'use_incr_decr'); set_help_tip($mode_buttons[0], 'use_incremental'); set_help_tip($mode_buttons[1], 'use_differential'); @@ -1722,17 +1582,17 @@ sub advanced_what_user { ), ), ); - check_list([$check_what_browser, \$what_no_browser]); - $check_what_user_versions->set_active($backup_user_versions); + check_list([$check_what_browser, \$conf{NO_BROWSER_CACHE}]); + $check_what_user_versions->set_active($conf{USER_INCREMENTAL_BACKUPS}); $check_what_user_versions->signal_connect('toggled' => sub { - invbool \$backup_user_versions; - $mode_buttons[0]->set_sensitive($backup_user_versions); - $mode_buttons[1]->set_sensitive($backup_user_versions); + invbool \$conf{USER_INCREMENTAL_BACKUPS}; + $mode_buttons[0]->set_sensitive($conf{USER_INCREMENTAL_BACKUPS}); + $mode_buttons[1]->set_sensitive($conf{USER_INCREMENTAL_BACKUPS}); }); - $mode_buttons[1]->set_active($user_diff_mode); - $mode_buttons[0]->signal_connect('toggled' => sub { $user_diff_mode = $mode_buttons[1]->get_active }); - $mode_buttons[0]->set_sensitive($backup_user_versions); - $mode_buttons[1]->set_sensitive($backup_user_versions); + $mode_buttons[1]->set_active($conf{USER_DIFFERENTIAL_BACKUPS}); + $mode_buttons[0]->signal_connect('toggled' => sub { $conf{USER_DIFFERENTIAL_BACKUPS} = $mode_buttons[1]->get_active }); + $mode_buttons[0]->set_sensitive($conf{USER_INCREMENTAL_BACKUPS}); + $mode_buttons[1]->set_sensitive($conf{USER_INCREMENTAL_BACKUPS}); set_help_tip($check_what_user_versions, 'use_incr_decr'); set_help_tip($mode_buttons[0], 'use_incremental'); set_help_tip($mode_buttons[1], 'use_differential'); @@ -1751,8 +1611,8 @@ sub advanced_what_other() { my $list_others = Gtk2::TreeView->new_with_model($list_model); $list_others->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0)); $list_others->set_headers_visible(0); - - foreach (@list_other) { + + foreach (@other_files) { $list_model->append_set(undef, $_); } @@ -1773,9 +1633,9 @@ sub advanced_what_other() { gtksignal_connect(Gtk2::Button->new(N("Remove Selected")), clicked => sub { $list_model->remove($file_iter) if $file_iter; my $iindex = 0; - foreach (@list_other) { - if ($list_other[$iindex] eq $other_file) { - splice(@list_other, $iindex, 1); + foreach (@other_files) { + if ($other_files[$iindex] eq $other_file) { + splice(@other_files, $iindex, 1); last; } $iindex++; @@ -1789,16 +1649,16 @@ sub advanced_what_other() { ), ); - $check_what_other_versions->set_active($backup_other_versions); + $check_what_other_versions->set_active($conf{OTHER_INCREMENTAL_BACKUPS}); $check_what_other_versions->signal_connect('toggled' => sub { - invbool \$backup_other_versions; - $mode_buttons[0]->set_sensitive($backup_other_versions); - $mode_buttons[1]->set_sensitive($backup_other_versions); + invbool \$conf{OTHER_INCREMENTAL_BACKUPS}; + $mode_buttons[0]->set_sensitive($conf{OTHER_INCREMENTAL_BACKUPS}); + $mode_buttons[1]->set_sensitive($conf{OTHER_INCREMENTAL_BACKUPS}); }); - $mode_buttons[1]->set_active($other_diff_mode); - $mode_buttons[0]->signal_connect('toggled' => sub { $other_diff_mode = $mode_buttons[1]->get_active }); - $mode_buttons[0]->set_sensitive($backup_other_versions); - $mode_buttons[1]->set_sensitive($backup_other_versions); + $mode_buttons[1]->set_active($conf{OTHER_DIFFERENTIAL_BACKUPS}); + $mode_buttons[0]->signal_connect('toggled' => sub { $conf{OTHER_DIFFERENTIAL_BACKUPS} = $mode_buttons[1]->get_active }); + $mode_buttons[0]->set_sensitive($conf{OTHER_INCREMENTAL_BACKUPS}); + $mode_buttons[1]->set_sensitive($conf{OTHER_INCREMENTAL_BACKUPS}); set_help_tip($check_what_other_versions, 'use_incr_decr'); set_help_tip($mode_buttons[0], 'use_incremental'); set_help_tip($mode_buttons[1], 'use_differential'); @@ -1807,41 +1667,6 @@ sub advanced_what_other() { $up_box->show_all; } -sub advanced_what_entire_sys() { - my $box_what; - - gtkpack($advanced_box, - $box_what = gtkpack_(new Gtk2::HBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 1, gtkpack_(new Gtk2::VBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 1, gtksignal_connect(my $button_what_other = Gtk2::Button->new, clicked => sub { - destroy_widget(); - $in->ask_warn(N("Information"), N("Under Devel ... please wait.")); - }), - 1, gtksignal_connect(my $button_what_all = Gtk2::Button->new, clicked => sub { - destroy_widget(); - $in->ask_warn(N("Information"), N("Under Devel ... please wait.")); - }), - 1, new Gtk2::VBox(0, 5), - ), - 1, new Gtk2::VBox(0, 5), - ), - ); - $button_what_other->add(gtkpack(new Gtk2::HBox(0,10), - gtkcreate_img("bootloader"), - new Gtk2::Label(N("Linux")), - new Gtk2::HBox(0, 5) - )); - $button_what_all->add(gtkpack(new Gtk2::HBox(0,10), - gtkcreate_img("user"), - new Gtk2::Label(N("Windows (FAT32)")), - new Gtk2::HBox(0, 5) - )); - fonction_env(\$box_what, \&advanced_what_entire_sys, \&advanced_what); - $up_box->show_all; -} - sub advanced_what() { my $box_what; @@ -1890,105 +1715,105 @@ sub advanced_where_net_types { 0, my $check_where_use_net = new Gtk2::CheckButton(N("Use network connection to backup")), 1, new Gtk2::HBox(0,10), 0, new Gtk2::Label(N("Net Method:")), - 0, gtkset_sensitive(my $entry_net_type = new Gtk2::OptionMenu(), $where_net), + 0, gtkset_sensitive(my $entry_net_type = new Gtk2::OptionMenu(), $conf{USE_NET}), ), 0, gtkpack_(new Gtk2::HBox(0,5), - 0, gtkset_sensitive(my $check_use_expect = new Gtk2::CheckButton(N("Use Expect for SSH")), ($where_net && $net_proto eq 'ssh')), - 0, gtkset_sensitive(my $check_xfer_keys = new Gtk2::CheckButton(N("Create/Transfer backup keys for SSH")), ($where_net && $net_proto eq 'ssh')), + 0, gtkset_sensitive(my $check_use_expect = new Gtk2::CheckButton(N("Use Expect for SSH")), ($conf{USE_NET} && $conf{NET_PROTO} eq 'ssh')), + 0, gtkset_sensitive(my $check_xfer_keys = new Gtk2::CheckButton(N("Create/Transfer backup keys for SSH")), ($conf{USE_NET} && $conf{NET_PROTO} eq 'ssh')), 1, new Gtk2::HBox(0,10), - 0, gtkset_sensitive(my $button_xfer_keys = Gtk2::Button->new(N("Transfer Now")), $xfer_keys), + 0, gtkset_sensitive(my $button_xfer_keys = Gtk2::Button->new(N("Transfer Now")), $conf{DRAK_KEYS}), ), - 0, gtkset_sensitive(my $check_user_keys = new Gtk2::CheckButton(N("Other (not drakbackup) keys in place already")), ($where_net && $net_proto eq 'ssh')), + 0, gtkset_sensitive(my $check_user_keys = new Gtk2::CheckButton(N("Other (not drakbackup) keys in place already")), ($conf{USE_NET} && $conf{NET_PROTO} eq 'ssh')), 0, new Gtk2::HSeparator, 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Host name or IP.")), $where_net), + 0, gtkset_sensitive(new Gtk2::Label(N("Host name or IP.")), $conf{USE_NET}), 1, new Gtk2::HBox(0,10), - 0, gtkset_sensitive(my $host_name_entry = new Gtk2::Entry(), $where_net), + 0, gtkset_sensitive(my $host_name_entry = new Gtk2::Entry(), $conf{USE_NET}), ), 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Directory (or module) to put the backup on this host.")), $where_net), + 0, gtkset_sensitive(new Gtk2::Label(N("Directory (or module) to put the backup on this host.")), $conf{USE_NET}), 1, new Gtk2::HBox(0,10), - 0, gtkset_sensitive(my $host_path_entry = new Gtk2::Entry(), $where_net), + 0, gtkset_sensitive(my $host_path_entry = new Gtk2::Entry(), $conf{USE_NET}), ), 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Login name")), $where_net), + 0, gtkset_sensitive(new Gtk2::Label(N("Login name")), $conf{USE_NET}), 1, new Gtk2::HBox(0,10), - 0, gtkset_sensitive(my $login_user_entry = new Gtk2::Entry(), $where_net), + 0, gtkset_sensitive(my $login_user_entry = new Gtk2::Entry(), $conf{USE_NET}), ), 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Password")), $where_net), + 0, gtkset_sensitive(new Gtk2::Label(N("Password")), $conf{USE_NET}), 1, new Gtk2::HBox(0,10), - 0, gtkset_sensitive(my $check_remember_pass = new Gtk2::CheckButton(N("Remember this password")), $where_net), + 0, gtkset_sensitive(my $check_remember_pass = new Gtk2::CheckButton(N("Remember this password")), $conf{USE_NET}), 1, new Gtk2::HBox(0,10), - 0, gtkset_sensitive(my $passwd_user_entry = new Gtk2::Entry(), $where_net), + 0, gtkset_sensitive(my $passwd_user_entry = new Gtk2::Entry(), $conf{USE_NET}), ), ), ); - $entry_net_type->set_popdown_strings(@net_methods); - $entry_net_type->entry->set_text($net_proto); + $entry_net_type->set_popdown_strings('', @net_methods); + $entry_net_type->entry->set_text($conf{NET_PROTO}); $button_xfer_keys->signal_connect('clicked', sub { - if ($passwd_user && $login_user && $host_name) { + if ($conf{PASSWD} && $conf{LOGIN} && $conf{HOST_NAME}) { do_expect("sendkey"); } else { $in->ask_warn(N("Error"), N("Need hostname, username and password!")); } }); $passwd_user_entry->set_visibility(0); - $passwd_user_entry->set_text($passwd_user); - $passwd_user_entry->signal_connect('changed', sub { $passwd_user = $passwd_user_entry->get_text }); - $host_path_entry->set_text($host_path); - $host_name_entry->set_text($host_name); - $login_user_entry->set_text($login_user); - $host_name_entry->signal_connect('changed', sub { $host_name = $host_name_entry->get_text }); - $host_path_entry->signal_connect('changed', sub { $host_path = $host_path_entry->get_text }); - $login_user_entry->signal_connect('changed', sub { $login_user = $login_user_entry->get_text }); + $passwd_user_entry->set_text($conf{PASSWD}); + $passwd_user_entry->signal_connect('changed', sub { $conf{PASSWD} = $passwd_user_entry->get_text }); + $host_path_entry->set_text($conf{HOST_PATH}); + $host_name_entry->set_text($conf{HOST_NAME}); + $login_user_entry->set_text($conf{LOGIN}); + $host_name_entry->signal_connect('changed', sub { $conf{HOST_NAME} = $host_name_entry->get_text }); + $host_path_entry->signal_connect('changed', sub { $conf{HOST_PATH} = $host_path_entry->get_text }); + $login_user_entry->signal_connect('changed', sub { $conf{LOGIN} = $login_user_entry->get_text }); $entry_net_type->entry->signal_connect('changed', sub { - $net_proto = $entry_net_type->entry->get_text; + $conf{NET_PROTO} = $entry_net_type->entry->get_text; my $sensitive = 0; - $sensitive = 1 if $net_proto eq 'ssh'; + $sensitive = 1 if $conf{NET_PROTO} eq 'ssh'; $check_use_expect->set_sensitive($sensitive); $check_xfer_keys->set_sensitive($sensitive); $button_xfer_keys->set_sensitive($sensitive); $check_user_keys->set_sensitive($sensitive); }); - check_list([$check_remember_pass, \$remember_pass]); - gtksignal_connect(gtkset_active($check_where_use_net, $where_net), toggled => sub { - invbool \$where_net; + check_list([$check_remember_pass, \$conf{REMEMBER_PASS}]); + gtksignal_connect(gtkset_active($check_where_use_net, $conf{USE_NET}), toggled => sub { + invbool \$conf{USE_NET}; #- assure other methods disabled - if ($where_net == 1) { - $where_cd = 0; - $where_tape = 0; + if ($conf{USE_NET} == 1) { + $conf{USE_CD} = 0; + $conf{USE_TAPE} = 0; } - $net_proto = '' if $where_net == 0; + $conf{NET_PROTO} = '' if $conf{USE_NET} == 0; destroy_widget(); $current_widget->(); }); - gtksignal_connect(gtkset_active($check_use_expect, $use_expect), toggled => sub { - invbool \$use_expect; + gtksignal_connect(gtkset_active($check_use_expect, $conf{USE_EXPECT}), toggled => sub { + invbool \$conf{USE_EXPECT}; #- assure other methods disabled - if ($use_expect == 1) { - $xfer_keys = 0; - $user_keys = 0; + if ($conf{USE_EXPECT} == 1) { + $conf{DRAK_KEYS} = 0; + $conf{USER_KEYS} = 0; } destroy_widget(); $current_widget->(); }); - gtksignal_connect(gtkset_active($check_xfer_keys, $xfer_keys), toggled => sub { - invbool \$xfer_keys; + gtksignal_connect(gtkset_active($check_xfer_keys, $conf{DRAK_KEYS}), toggled => sub { + invbool \$conf{DRAK_KEYS}; #- assure other methods disabled - if ($xfer_keys == 1) { - $use_expect = 0; - $user_keys = 0; + if ($conf{DRAK_KEYS} == 1) { + $conf{USE_EXPECT} = 0; + $conf{USER_KEYS} = 0; } destroy_widget(); $current_widget->(); }); - gtksignal_connect(gtkset_active($check_user_keys, $user_keys), toggled => sub { - invbool \$user_keys; + gtksignal_connect(gtkset_active($check_user_keys, $conf{USER_KEYS}), toggled => sub { + invbool \$conf{USER_KEYS}; #- assure other methods disabled - if ($user_keys == 1) { - $xfer_keys = 0; - $use_expect = 0; + if ($conf{USER_KEYS} == 1) { + $conf{DRAK_KEYS} = 0; + $conf{USE_EXPECT} = 0; } destroy_widget(); $current_widget->(); @@ -2031,79 +1856,79 @@ sub advanced_where_cd { 0, my $check_where_cd = new Gtk2::CheckButton(N("Use CD-R/DVD-R to backup")), 0, new Gtk2::HSeparator, 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Choose your CD/DVD device")), $where_cd), + 0, gtkset_sensitive(new Gtk2::Label(N("Choose your CD/DVD device")), $conf{USE_CD}), 1, new Gtk2::VBox(0, 5), - 0, gtkset_sensitive($combo_where_cd_device, $where_cd), + 0, gtkset_sensitive($combo_where_cd_device, $conf{USE_CD}), ), 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Choose your CD/DVD media size")), $where_cd), + 0, gtkset_sensitive(new Gtk2::Label(N("Choose your CD/DVD media size")), $conf{USE_CD}), 1, new Gtk2::VBox(0, 5), - 0, gtkset_sensitive($combo_where_cd_time, $where_cd), + 0, gtkset_sensitive($combo_where_cd_time, $conf{USE_CD}), ), 0, new Gtk2::VBox(0, 5), 0, gtkpack_(new Gtk2::HBox(0,10), 1, new Gtk2::VBox(0, 5), - 0, gtkset_sensitive(new Gtk2::Label(N("Multisession CD")), $where_cd), - 0, gtkset_sensitive(my $check_multisession = new Gtk2::CheckButton(), $where_cd), - 0, gtkset_sensitive(new Gtk2::Label(N("CDRW media")), $where_cd), - 0, gtkset_sensitive(my $check_cdrw = new Gtk2::CheckButton(), $where_cd), + 0, gtkset_sensitive(new Gtk2::Label(N("Multisession CD")), $conf{USE_CD}), + 0, gtkset_sensitive(my $check_multisession = new Gtk2::CheckButton(), $conf{USE_CD}), + 0, gtkset_sensitive(new Gtk2::Label(N("CDRW media")), $conf{USE_CD}), + 0, gtkset_sensitive(my $check_cdrw = new Gtk2::CheckButton(), $conf{USE_CD}), ), 0, new Gtk2::VBox(0, 5), 0, gtkpack_(new Gtk2::HBox(0,10), 1, new Gtk2::VBox(0, 5), - 0, gtkset_sensitive(new Gtk2::Label(N("Erase your RW media (1st Session)")), $cdrw && $where_cd), - 0, gtkset_sensitive(my $button_erase_now = Gtk2::Button->new(N(" Erase Now ")), $cdrw), - 0, gtkset_sensitive(my $check_cdrw_erase = new Gtk2::CheckButton(), $cdrw && $where_cd), + 0, gtkset_sensitive(new Gtk2::Label(N("Erase your RW media (1st Session)")), $conf{CDRW} && $conf{USE_CD}), + 0, gtkset_sensitive(my $button_erase_now = Gtk2::Button->new(N(" Erase Now ")), $conf{CDRW}), + 0, gtkset_sensitive(my $check_cdrw_erase = new Gtk2::CheckButton(), $conf{CDRW} && $conf{USE_CD}), ), 0, new Gtk2::VBox(0, 5), 0, gtkpack_(new Gtk2::HBox(0,10), 1, new Gtk2::VBox(0, 5), - 0, gtkset_sensitive(new Gtk2::Label(N("DVD+RW media")), $where_cd), - 0, gtkset_sensitive(my $check_dvdrw = new Gtk2::CheckButton(), $where_cd), - 0, gtkset_sensitive(new Gtk2::Label(N("DVD-R media")), $where_cd), - 0, gtkset_sensitive(my $check_dvdr = new Gtk2::CheckButton(), $where_cd), - 0, gtkset_sensitive(new Gtk2::Label(N("DVDRAM device")), $where_cd), - 0, gtkset_sensitive(my $check_dvdram = new Gtk2::CheckButton(), $where_cd), + 0, gtkset_sensitive(new Gtk2::Label(N("DVD+RW media")), $conf{USE_CD}), + 0, gtkset_sensitive(my $check_dvdrw = new Gtk2::CheckButton(), $conf{USE_CD}), + 0, gtkset_sensitive(new Gtk2::Label(N("DVD-R media")), $conf{USE_CD}), + 0, gtkset_sensitive(my $check_dvdr = new Gtk2::CheckButton(), $conf{USE_CD}), + 0, gtkset_sensitive(new Gtk2::Label(N("DVDRAM device")), $conf{USE_CD}), + 0, gtkset_sensitive(my $check_dvdram = new Gtk2::CheckButton(), $conf{USE_CD}), ), ), ); - foreach ([$check_cdrw_erase, \$media_erase], [$check_dvdrw, \$dvdrw], [$check_dvdr, \$dvdr], [$check_dvdram, \$dvdram], [$check_multisession, \$multi_session]) { + foreach ([$check_cdrw_erase, \$conf{MEDIA_ERASE}], [$check_dvdrw, \$conf{DVDRW}], [$check_dvdr, \$conf{DVDR}], [$check_dvdram, \$conf{DVDRAM}], [$check_multisession, \$conf{MULTI_SESSION}]) { my $ref = $_->[1]; gtksignal_connect(gtkset_active($_->[0], $$ref), toggled => sub { $$ref = $$ref ? 0 : 1 }) } - gtksignal_connect(gtkset_active($check_where_cd, $where_cd), toggled => sub { - $where_cd = $where_cd ? 0 : 1; + gtksignal_connect(gtkset_active($check_where_cd, $conf{USE_CD}), toggled => sub { + $conf{USE_CD} = $conf{USE_CD} ? 0 : 1; #- toggle where_net, where_tape off - if ($where_cd == 1) { - $where_net = 0; - $where_tape = 0; + if ($conf{USE_CD} == 1) { + $conf{USE_NET} = 0; + $conf{USE_TAPE} = 0; } destroy_widget(); $current_widget->(); }); - gtksignal_connect(gtkset_active($check_cdrw, $cdrw), toggled => sub { - $cdrw = $cdrw ? 0 : 1; - $media_erase = $media_erase ? 0 : 1; - $check_cdrw_erase->set_sensitive($cdrw); + gtksignal_connect(gtkset_active($check_cdrw, $conf{CDRW}), toggled => sub { + $conf{CDRW} = $conf{CDRW} ? 0 : 1; + $conf{MEDIA_ERASE} = $conf{MEDIA_ERASE} ? 0 : 1; + $check_cdrw_erase->set_sensitive($conf{CDRW}); destroy_widget(); $current_widget->(); }); $button_erase_now->signal_connect('clicked', sub { - if ($cd_device) { + if ($conf{CD_DEVICE}) { erase_cdrw(); } else { $in->ask_warn(N("Error"), N("No CD device defined!")); } }); - $combo_where_cd_time->entry->set_text($cd_time); - $combo_where_cd_time->entry->signal_connect('changed', sub { $cd_time = $combo_where_cd_time->entry->get_text }); + $combo_where_cd_time->entry->set_text($conf{CD_TIME}); + $combo_where_cd_time->entry->signal_connect('changed', sub { $conf{CD_TIME} = $combo_where_cd_time->entry->get_text }); - $combo_where_cd_device->entry->set_text($cd_device); + $combo_where_cd_device->entry->set_text($conf{CD_DEVICE}); $combo_where_cd_device->entry->signal_connect('changed', sub { - $cd_device = $combo_where_cd_device->entry->get_text; - $std_device = $dev_codes{$cd_device}; + $conf{CD_DEVICE} = $combo_where_cd_device->entry->get_text; + $std_device = $dev_codes{$conf{CD_DEVICE}}; $check_dvdr->set_active($cd_devices{$std_device}{dvdr}); $check_dvdrw->set_active($cd_devices{$std_device}{dvdr}); $check_dvdram->set_active($cd_devices{$std_device}{dvdram}); @@ -2143,69 +1968,69 @@ sub advanced_where_tape { 0, my $check_where_tape = new Gtk2::CheckButton(N("Use tape to backup")), 0, new Gtk2::HSeparator, 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Device name to use for backup")), $where_tape), + 0, gtkset_sensitive(new Gtk2::Label(N("Device name to use for backup")), $conf{USE_TAPE}), 1, new Gtk2::VBox(0, 6), - 0, gtkset_sensitive($combo_where_tape_device, $where_tape), + 0, gtkset_sensitive($combo_where_tape_device, $conf{USE_TAPE}), ), 0, new Gtk2::VBox(0, 5), 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Don't rewind tape after backup")), $where_tape), + 0, gtkset_sensitive(new Gtk2::Label(N("Don't rewind tape after backup")), $conf{USE_TAPE}), 1, new Gtk2::VBox(0, 5), - 0, gtkset_sensitive(my $check_tape_rewind = new Gtk2::CheckButton(), $where_tape), + 0, gtkset_sensitive(my $check_tape_rewind = new Gtk2::CheckButton(), $conf{USE_TAPE}), ), 0, new Gtk2::VBox(0, 5), 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Erase tape before backup")), $where_tape), + 0, gtkset_sensitive(new Gtk2::Label(N("Erase tape before backup")), $conf{USE_TAPE}), 1, new Gtk2::VBox(0, 5), - 0, gtkset_sensitive(my $check_tape_erase = new Gtk2::CheckButton(), $where_tape), + 0, gtkset_sensitive(my $check_tape_erase = new Gtk2::CheckButton(), $conf{USE_TAPE}), ), 0, new Gtk2::VBox(0, 5), 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Eject tape after the backup")), $where_tape), + 0, gtkset_sensitive(new Gtk2::Label(N("Eject tape after the backup")), $conf{USE_TAPE}), 1, new Gtk2::VBox(0, 5), - 0, gtkset_sensitive(my $check_tape_eject = new Gtk2::CheckButton(), $where_tape), + 0, gtkset_sensitive(my $check_tape_eject = new Gtk2::CheckButton(), $conf{USE_TAPE}), ), 0, new Gtk2::VBox(0, 6), 0, gtkpack_(new Gtk2::HBox(0,10),), ), ); - gtksignal_connect(gtkset_active($check_where_tape, $where_tape), toggled => sub { - $where_tape = $where_tape ? 0 : 1; + gtksignal_connect(gtkset_active($check_where_tape, $conf{USE_TAPE}), toggled => sub { + $conf{USE_TAPE} = $conf{USE_TAPE} ? 0 : 1; #- assure other methods are off - if ($where_tape == 1) { - $where_net = 0; - $where_cd = 0; + if ($conf{USE_TAPE} == 1) { + $conf{USE_NET} = 0; + $conf{USE_CD} = 0; } destroy_widget(); $current_widget->(); }); - gtksignal_connect(gtkset_active($check_tape_rewind, $tape_norewind), toggled => sub { - $tape_norewind = $tape_norewind ? 0 : 1; - $_ = $tape_device; - if ($tape_norewind) { - $tape_device =~ s|/st|/nst|; + gtksignal_connect(gtkset_active($check_tape_rewind, $conf{TAPE_NOREWIND}), toggled => sub { + $conf{TAPE_NOREWIND} = $conf{TAPE_NOREWIND} ? 0 : 1; + $_ = $conf{TAPE_DEVICE}; + if ($conf{TAPE_NOREWIND}) { + $conf{TAPE_DEVICE} =~ s|/st|/nst|; } else { - $tape_device =~ s|/nst|/st|; + $conf{TAPE_DEVICE} =~ s|/nst|/st|; } - $combo_where_tape_device->entry->set_text($tape_device); + $combo_where_tape_device->entry->set_text($conf{TAPE_DEVICE}); destroy_widget(); $current_widget->(); }); - gtksignal_connect(gtkset_active($check_tape_erase, $media_erase), toggled => sub { - $media_erase = $media_erase ? 0 : 1; + gtksignal_connect(gtkset_active($check_tape_erase, $conf{MEDIA_ERASE}), toggled => sub { + $conf{MEDIA_ERASE} = $conf{MEDIA_ERASE} ? 0 : 1; destroy_widget(); $current_widget->(); }); - gtksignal_connect(gtkset_active($check_tape_eject, $media_eject), toggled => sub { - $media_eject = $media_eject ? 0 : 1; + gtksignal_connect(gtkset_active($check_tape_eject, $conf{MEDIA_EJECT}), toggled => sub { + $conf{MEDIA_EJECT} = $conf{MEDIA_EJECT} ? 0 : 1; destroy_widget(); $current_widget->(); }); - $combo_where_tape_device->entry->set_text($tape_device); + $combo_where_tape_device->entry->set_text($conf{TAPE_DEVICE}); $combo_where_tape_device->entry->signal_connect('changed', sub { - $tape_device = $combo_where_tape_device->entry->get_text; + $conf{TAPE_DEVICE} = $combo_where_tape_device->entry->get_text; }); if ($previous_function) { fonction_env(\$box_where_tape, \&advanced_where_tape, \&$previous_function, \&wizard_step3); @@ -2220,38 +2045,38 @@ sub advanced_where_hd { my ($previous_function) = @_; my $box_where_hd; my $button; - if ($max_space == 1000.0) { - $max_space = int(0.8 * get_free_space($save_path)) if -d $save_path; + if ($conf{MAX_SPACE} == 1000.0) { + $conf{MAX_SPACE} = int(0.8 * get_free_space($conf{PATH_TO_SAVE})) if -d $conf{PATH_TO_SAVE}; } - my $adj = new Gtk2::Adjustment($max_space, 0.0, $max_space, 10.0, 5.0, 0.0); + my $adj = new Gtk2::Adjustment($conf{MAX_SPACE}, 0.0, $conf{MAX_SPACE}, 10.0, 5.0, 0.0); my $spinner; gtkpack($advanced_box, $box_where_hd = gtkpack_(new Gtk2::VBox(0, 6), 0, new Gtk2::HSeparator, 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Enter the directory to save to:")), $where_hd), + 0, gtkset_sensitive(new Gtk2::Label(N("Enter the directory to save to:")), $conf{USE_HD}), 1, new Gtk2::VBox(0, 6), - 0, gtkset_size_request(gtkset_sensitive($save_path_entry = new Gtk2::Entry(), $where_hd), 152, 20), + 0, gtkset_size_request(gtkset_sensitive($save_path_entry = new Gtk2::Entry(), $conf{USE_HD}), 152, 20), 0, gtkset_sensitive($button = gtksignal_connect(Gtk2::Button->new, clicked => sub { filedialog_where_hd() - }), $where_hd), + }), $conf{USE_HD}), ), 0, new Gtk2::VBox(0, 6), 0, gtkpack_(new Gtk2::HBox(0,10), - 0, gtkset_sensitive(new Gtk2::Label(N("Maximum size\n allowed for Drakbackup (MB)")), $where_hd), + 0, gtkset_sensitive(new Gtk2::Label(N("Maximum size\n allowed for Drakbackup (MB)")), $conf{USE_HD}), 1, new Gtk2::VBox(0, 6), - 0, gtkset_size_request(gtkset_sensitive($spinner = new Gtk2::SpinButton($adj, 0, 0), $where_hd), 200, 20), + 0, gtkset_size_request(gtkset_sensitive($spinner = new Gtk2::SpinButton($adj, 0, 0), $conf{USE_HD}), 200, 20), ), ), ); $button->add(gtkpack(new Gtk2::HBox(0,10), gtkcreate_img("ic82-dossier-32"))); - $save_path_entry->set_text($save_path); - $spinner->signal_connect('changed', sub { $max_space = $spinner->get_text }); + $save_path_entry->set_text($conf{PATH_TO_SAVE}); + $spinner->signal_connect('changed', sub { $conf{MAX_SPACE} = $spinner->get_text }); $save_path_entry->signal_connect('changed', sub { - $save_path = $save_path_entry->get_text; - if (-d $save_path) { - $max_space = int(0.8 * get_free_space($save_path)); + $conf{PATH_TO_SAVE} = $save_path_entry->get_text; + if (-d $conf{PATH_TO_SAVE}) { + $conf{MAX_SPACE} = int(0.8 * get_free_space($conf{PATH_TO_SAVE})); # seems to be the easiest way to avoid the widgets fighting over values # and getting garbage in $max_value destroy_widget(); @@ -2384,7 +2209,7 @@ sub advanced_when() { #- drop down list of possible media - default to config value my $entry_media_type = new Gtk2::OptionMenu(); $entry_media_type->set_popdown_strings(sort(@net_methods, @media_types)); - $entry_media_type->entry->set_text($daemon_media); + $entry_media_type->entry->set_text($conf{DAEMON_MEDIA}); gtkpack($advanced_box, $box_when = gtkpack_(new Gtk2::VBox(0, 10), @@ -2446,10 +2271,10 @@ sub advanced_when() { destroy_widget(); advanced_when(); }); - $combo_when_space->entry->set_text($trans2{$when_space}); + $combo_when_space->entry->set_text($trans2{$conf{DAEMON_TIME_SPACE}}); $combo_when_space->entry->signal_connect('changed', sub { - $when_space = $trans{$combo_when_space->entry->get_text}; - $custom_cron = $when_space eq "custom" ? 1 : 0; + $conf{DAEMON_TIME_SPACE} = $trans{$combo_when_space->entry->get_text}; + $custom_cron = $conf{DAEMON_TIME_SPACE} eq "custom" ? 1 : 0; destroy_widget(); advanced_when(); }); @@ -2463,7 +2288,7 @@ sub advanced_when() { $combo_month_when->entry->signal_connect('changed', sub { combo_to_cron_string($combo_month_when->get_history, 3) }); $combo_weekday_when->entry->signal_connect('changed', sub { combo_to_cron_string($combo_weekday_when->get_history - 1, 4) }); - $entry_media_type->entry->signal_connect('changed', sub { $daemon_media = $entry_media_type->entry->get_text }); + $entry_media_type->entry->signal_connect('changed', sub { $conf{DAEMON_MEDIA} = $entry_media_type->entry->get_text }); fonction_env(\$box_when, \&advanced_when, \&advanced_box); $up_box->show_all; } @@ -2489,24 +2314,24 @@ sub advanced_options() { 0, gtkpack_(new Gtk2::HBox(0,10), 0, my $check_mail = new Gtk2::CheckButton(N("Send mail report after each backup to:")), 1, new Gtk2::HBox(0,10), - 0, gtkset_sensitive(my $mail_entry = new Gtk2::Entry(), $send_mail), + 0, gtkset_sensitive(my $mail_entry = new Gtk2::Entry(), $conf{SEND_MAIL}), ), 0, gtkpack_(new Gtk2::HBox(0,10), 1, new Gtk2::HBox(0,10), 0, N("SMTP server for mail:"), 1, new Gtk2::HBox(0,10), - 0, gtkset_sensitive(my $smtp_entry = new Gtk2::Entry(), $send_mail), + 0, gtkset_sensitive(my $smtp_entry = new Gtk2::Entry(), $conf{SEND_MAIL}), ), 0, gtkpack_(new Gtk2::HBox(0,10), 0, my $check_del_hd_files = new Gtk2::CheckButton(N("Delete Hard Drive tar files after backup to other media.")), ), ), ); - check_list([$check_mail, \$send_mail], [$check_tar_bz2, \$comp_mode], [$check_del_hd_files, \$del_hd_files], [$check_backupignore, \$backupignore]); - $mail_entry->set_text($user_mail); - $mail_entry->signal_connect('changed', sub { $user_mail = $mail_entry->get_text }); - $smtp_entry->set_text($smtp_server); - $smtp_entry->signal_connect('changed', sub { $smtp_server = $smtp_entry->get_text }); + check_list([$check_mail, \$conf{SEND_MAIL}], [$check_tar_bz2, \$conf{OPTION_COMP}], [$check_del_hd_files, \$conf{DEL_HD_FILES}], [$check_backupignore, \$conf{BACKUPIGNORE}]); + $mail_entry->set_text($conf{USER_MAIL}); + $mail_entry->signal_connect('changed', sub { $conf{USER_MAIL} = $mail_entry->get_text }); + $smtp_entry->set_text($conf{SMTP_SERVER}); + $smtp_entry->signal_connect('changed', sub { $conf{SMTP_SERVER} = $smtp_entry->get_text }); set_help_tip($check_backupignore, 'backupignore'); set_help_tip($check_mail, 'send_mail_to'); set_help_tip($check_del_hd_files, 'delete_files'); @@ -2562,7 +2387,7 @@ sub advanced_box() { ################################################ WIZARD ################################################ sub wizard_step3() { - my $no_device = 1 if $where_cd && $cd_device eq '' || $where_tape && $tape_device eq '' || $where_net && $net_proto eq ''; + my $no_device = 1 if $conf{USE_CD} && $conf{CD_DEVICE} eq '' || $conf{USE_TAPE} && $conf{TAPE_DEVICE} eq '' || $conf{USE_NET} && $conf{NET_PROTO} eq ''; if ($no_device) { show_warning("f", N("Backup destination not configured...")); destroy_widget(); @@ -2612,7 +2437,7 @@ sub wizard_step2() { 0, gtkset_sensitive(gtksignal_connect(Gtk2::Button->new(N("Configure")), clicked => sub { destroy_widget(); advanced_where_net_types(\&wizard_step2); - }), $where_net), + }), $conf{USE_NET}), ), 0, gtkpack_(new Gtk2::HBox(0, 15), 0, my $check_wizard_cd = new Gtk2::CheckButton(N("On CD-R")), @@ -2620,7 +2445,7 @@ sub wizard_step2() { 0, gtkset_sensitive(gtksignal_connect(Gtk2::Button->new(N("Configure")), clicked => sub { destroy_widget(); advanced_where_cd(\&wizard_step2); - }), $where_cd), + }), $conf{USE_CD}), ), 0, gtkpack_(new Gtk2::HBox(0, 15), 0, my $check_wizard_tape = new Gtk2::CheckButton(N("On Tape Device")), @@ -2628,26 +2453,26 @@ sub wizard_step2() { 0, gtkset_sensitive(gtksignal_connect(Gtk2::Button->new(N("Configure")), clicked => sub { destroy_widget(); advanced_where_tape(\&wizard_step2); - }), $where_tape), + }), $conf{USE_TAPE}), ), 1, new Gtk2::VBox(0, 5), ), 1, new Gtk2::VBox(0, 5), ), ); - gtksignal_connect(gtkset_active($check_wizard_cd, $where_cd), toggled => sub { - invbool \$where_cd; - if ($where_cd) { $where_tape = 0; $where_net = 0 }; + gtksignal_connect(gtkset_active($check_wizard_cd, $conf{USE_CD}), toggled => sub { + invbool \$conf{USE_CD}; + if ($conf{USE_CD}) { $conf{USE_TAPE} = 0; $conf{USE_NET} = 0 }; refresh_wizard_step2(); }); - gtksignal_connect(gtkset_active($check_wizard_net, $where_net), toggled => sub { - invbool \$where_net; - if ($where_net) { $where_tape = 0; $where_cd = 0 }; + gtksignal_connect(gtkset_active($check_wizard_net, $conf{USE_NET}), toggled => sub { + invbool \$conf{USE_NET}; + if ($conf{USE_NET}) { $conf{USE_TAPE} = 0; $conf{USE_CD} = 0 }; refresh_wizard_step2(); }); - gtksignal_connect(gtkset_active($check_wizard_tape, $where_tape), toggled => sub { - invbool \$where_tape; - if ($where_tape) { $where_cd = 0; $where_net = 0 }; + gtksignal_connect(gtkset_active($check_wizard_tape, $conf{USE_TAPE}), toggled => sub { + invbool \$conf{USE_TAPE}; + if ($conf{USE_TAPE}) { $conf{USE_CD} = 0; $conf{USE_NET} = 0 }; refresh_wizard_step2(); }); fonction_env(\$box2, \&wizard_step2, \&wizard, undef); @@ -2656,7 +2481,7 @@ sub wizard_step2() { } sub refresh_wizard_step2() { - $use_hd = !($where_tape || $where_cd || $where_net); + $use_hd = !($conf{USE_TAPE} || $conf{USE_CD} || $conf{USE_NET}); destroy_widget(); wizard_step2(); } @@ -2665,7 +2490,7 @@ sub wizard() { my $box2; my $user_string = N("Backup Users"); $user_string .= N(" (Default is all users)") if !$nonroot_user; - if ($backup_user && !$manual_user) { + if (!$conf{NO_USER_FILES} && !$manual_user) { @user_list = @user_list_all; } elsif (!$manual_user) { @user_list = (); @@ -2689,23 +2514,23 @@ sub wizard() { 1, new Gtk2::VBox(0, 5), ), ); - foreach ([$check_wizard_sys, \$backup_sys], [$check_wizard_user, \$backup_user]) { + foreach ([$check_wizard_sys, \$conf{NO_SYS_FILES}], [$check_wizard_user, \$conf{NO_USER_FILES}]) { my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], $$ref), toggled => sub { + gtksignal_connect(gtkset_active($_->[0], !$$ref), toggled => sub { $$ref = $$ref ? 0 : 1; - if ($backup_sys || $backup_user && @user_list) { + if (!$conf{NO_SYS_FILES} || !$conf{NO_USER_FILES} && @user_list) { $next_widget = \&wizard_step2; } else { $next_widget = \&wizard; } - if ($backup_user) { + if (!$conf{NO_USER_FILES}) { @user_list = @user_list_all; } else { @user_list = (); } }) } - if ($backup_sys || $backup_user && @user_list) { + if (!$conf{NO_SYS_FILES} || !$conf{NO_USER_FILES} && @user_list) { fonction_env(\$box2, \&wizard, \&interactive_mode_box, \&wizard_step2); } else { $in->ask_warn(N("Error"), N("Please select data to backup...")); @@ -2720,7 +2545,8 @@ sub wizard() { sub find_backup_to_restore() { my @list_backup; my @list_backup_tmp2; - my $to_put; + my $to_put; + my $nom; @sys_backuped = (); local $_; @@ -2733,103 +2559,101 @@ sub find_backup_to_restore() { push @list_backup , $_; } foreach (grep { /^backup_sys_/ } @list_backup) { - chomp; - s/^backup_sys_//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my ($date, $heure) = /^(.*)_([^_]*)$/; - my $year = substr($date, 0, 4); - my $month = substr($date, 4, 2); - my $day = substr($date, 6, 2); - my $hour = substr($heure, 0, 2); - my $min = substr($heure, 2, 2); - $to_put = "$day/$month/$year $hour:$min $_"; + ($to_put, undef) = file_to_put($_, "sys"); push @sys_backuped , $to_put; } $restore_step_sys_date = $to_put; foreach (grep { /^backup_other_/ } @list_backup) { - chomp; - s/^backup_other_//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my ($date, $heure) = /^(.*)_([^_]*)$/; - my $year = substr($date, 0, 4); - my $month = substr($date, 4, 2); - my $day = substr($date, 6, 2); - my $hour = substr($heure, 0, 2); - my $min = substr($heure, 2, 2); - $to_put = "$day/$month/$year $hour:$min $_"; + ($to_put, undef) = file_to_put($_, "other"); push @other_backuped , $to_put; } $restore_step_other_date = $to_put; foreach (grep { /^backup_user_/ } @list_backup) { - chomp; - s/^backup_user_//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my ($nom, $date, $heure) = /^(.*)_([^_]*)_([^_]*)$/; - my $year = substr($date, 0, 4); - my $month = substr($date, 4, 2); - my $day = substr($date, 6, 2); - my $hour = substr($heure, 0, 2); - my $min = substr($heure, 2, 2); - $to_put = "$_ user: $nom, date: $day/$month/$year, hour: $hour:$min"; + ($to_put, $nom) = file_to_put($_, "user"); push @user_backuped , $to_put; any { /^$nom$/ } @user_list_backuped or push @user_list_backuped, $nom; } } -sub system_state() { +sub file_to_put { + my ($name, $type) = @_; + my $to_put; + my ($nom, $date, $heure); + local $_ = $name; + chomp; + $name = "backup_" . $type . "_"; + s/^$name//gi; + s/.tar.gz$//gi; + s/.tar.bz2$//gi; + if ($type eq "user") { + ($nom, $date, $heure) = /^(.*)_([^_]*)_([^_]*)$/; + } else { + ($date, $heure) = /^(.*)_([^_]*)$/; + } + my $year = substr($date, 0, 4); + my $month = substr($date, 4, 2); + my $day = substr($date, 6, 2); + my $hour = substr($heure, 0, 2); + my $min = substr($heure, 2, 2); + if ($type eq "user") { + $to_put = "$_ user: $nom, date: $day/$month/$year, hour: $hour:$min"; + return $to_put, $nom; + } else { + $to_put = "$day/$month/$year $hour:$min $_"; + return $to_put, undef; + } +} +sub system_state() { if ($cfg_file_exist) { $system_state = N("\nBackup Sources: \n"); - $backup_sys and $system_state .= N("\n- System Files:\n"); - $backup_sys and $system_state .= "\t\t$_\n" foreach @sys_files; - $backup_user and $system_state .= N("\n- User Files:\n"); - $backup_user and $system_state .= "\t\t$_\n" foreach @user_list; - @list_other and $system_state .= N("\n- Other Files:\n"); - @list_other and $system_state .= "\t\t$_\n" foreach @list_other; - $where_hd and $system_state .= N("\n- Save on Hard drive on path: %s\n", $save_path); - $where_hd and $system_state .= N("\tLimit disk usage to %s MB\n", $max_space); - - if ($del_hd_files && ($where_cd || $where_tape || $where_net) && $daemon_media ne 'hd') { + $conf{NO_SYS_FILES} or $system_state .= N("\n- System Files:\n"); + $conf{NO_SYS_FILES} or $system_state .= "\t\t$_\n" foreach @sys_files; + $conf{NO_USER_FILES} or $system_state .= N("\n- User Files:\n"); + $conf{NO_USER_FILES} or $system_state .= "\t\t$_\n" foreach @user_list; + $conf{OTHER_FILES} and $system_state .= N("\n- Other Files:\n"); + $conf{OTHER_FILES} and $system_state .= "\t\t$_\n" foreach @other_files; + $conf{USE_HD} and $system_state .= N("\n- Save on Hard drive on path: %s\n", $conf{PATH_TO_SAVE}); + $conf{USE_HD} and $system_state .= N("\tLimit disk usage to %s MB\n", $conf{MAX_SPACE}); + + if ($conf{DEL_HD_FILES} && ($conf{USE_CD} || $conf{USE_TAPE} || $conf{USE_NET}) && $conf{DAEMON_MEDIA} ne 'hd') { $system_state .= N("\n- Delete hard drive tar files after backup.\n"); } #- tape and CDRW share some features my $erase_media = N("NO"); - $erase_media = N("YES") if $media_erase && ($where_cd || $where_tape); - $where_cd and $system_state .= N("\n- Burn to CD"); - $where_cd and $cdrw and $system_state .= N("RW"); - $where_cd and $system_state .= N(" on device: %s", $cd_device); - $where_cd and $multi_session and $system_state .= N(" (multi-session)"); - $where_tape and $system_state .= N("\n- Save to Tape on device: %s", $tape_device); - (($where_cd || $where_tape) && $media_erase) and $system_state .= N("\t\tErase=%s", $erase_media); - $where_cd || $where_tape and $system_state .= "\n"; + $erase_media = N("YES") if $conf{MEDIA_ERASE} && ($conf{USE_CD} || $conf{USE_TAPE}); + $conf{USE_CD} and $system_state .= N("\n- Burn to CD"); + $conf{USE_CD} and $conf{CDRW} and $system_state .= N("RW"); + $conf{USE_CD} and $system_state .= N(" on device: %s", $conf{CD_DEVICE}); + $conf{USE_CD} and $conf{MULTI_SESSION} and $system_state .= N(" (multi-session)"); + $conf{USE_TAPE} and $system_state .= N("\n- Save to Tape on device: %s", $conf{TAPE_DEVICE}); + (($conf{USE_CD} || $conf{USE_TAPE}) && $conf{MEDIA_ERASE}) and $system_state .= N("\t\tErase=%s", $erase_media); + $conf{USE_CD} || $conf{USE_TAPE} and $system_state .= "\n"; - $where_net and $system_state .= N("\n- Save via %s on host: %s\n", $net_proto, $host_name); - $where_net and $system_state .= N("\t\t user name: %s\n\t\t on path: %s \n", $login_user, $host_path); + $conf{USE_NET} and $system_state .= N("\n- Save via %s on host: %s\n", $conf{NET_PROTO}, $conf{HOST_NAME}); + $conf{USE_NET} and $system_state .= N("\t\t user name: %s\n\t\t on path: %s \n", $conf{LOGIN}, $conf{HOST_PATH}); $system_state .= N("\n- Options:\n"); - $backup_sys or $system_state .= N("\tDo not include System Files\n"); + $conf{NO_SYS_FILES} and $system_state .= N("\tDo not include System Files\n"); - if ($comp_mode) { + if ($conf{OPTION_COMP}) { $system_state .= N("\tBackups use tar and bzip2\n"); } else { $system_state .= N("\tBackups use tar and gzip\n"); } - $system_state .= N("\tUse .backupignore files\n") if $backupignore; - $system_state .= N("\tSend mail to %s\n", $user_mail) if $send_mail; - $system_state .= N("\tUsing SMTP server %s\n", $smtp_server) if $send_mail; + $system_state .= N("\tUse .backupignore files\n") if $conf{BACKUPIGNORE}; + $system_state .= N("\tSend mail to %s\n", $conf{USER_MAIL}) if $conf{SEND_MAIL}; + $system_state .= N("\tUsing SMTP server %s\n", $conf{SMTP_SERVER}) if $conf{SEND_MAIL}; - $daemon_media and $system_state .= N("\n- Daemon, %s via:\n", $when_space); - $daemon_media eq 'hd' and $system_state .= N("\t-Hard drive.\n"); - $daemon_media eq 'cd' and $system_state .= N("\t-CD-R.\n"); - $daemon_media eq 'tape' and $system_state .= N("\t-Tape \n"); - $daemon_media eq 'ftp' and $system_state .= N("\t-Network by FTP.\n"); - $daemon_media eq 'ssh' and $system_state .= N("\t-Network by SSH.\n"); - $daemon_media eq 'rsync' and $system_state .= N("\t-Network by rsync.\n"); - $daemon_media eq 'webdav' and $system_state .= N("\t-Network by webdav.\n"); + $conf{DAEMON_MEDIA} and $system_state .= N("\n- Daemon, %s via:\n", $conf{DAEMON_TIME_SPACE}); + $conf{DAEMON_MEDIA} eq 'hd' and $system_state .= N("\t-Hard drive.\n"); + $conf{DAEMON_MEDIA} eq 'cd' and $system_state .= N("\t-CD-R.\n"); + $conf{DAEMON_MEDIA} eq 'tape' and $system_state .= N("\t-Tape \n"); + $conf{DAEMON_MEDIA} eq 'ftp' and $system_state .= N("\t-Network by FTP.\n"); + $conf{DAEMON_MEDIA} eq 'ssh' and $system_state .= N("\t-Network by SSH.\n"); + $conf{DAEMON_MEDIA} eq 'rsync' and $system_state .= N("\t-Network by rsync.\n"); + $conf{DAEMON_MEDIA} eq 'webdav' and $system_state .= N("\t-Network by webdav.\n"); } else { $system_state = N("No configuration, please click Wizard or Advanced.\n"); } @@ -3105,7 +2929,7 @@ sub restore_backend() { restore_aff_backup_problems(); } else { foreach (@user_list_to_restore) { - if ($backup_user_versions) { + if ($conf{USER_INCREMENTAL_BACKUPS}) { (undef, $username, undef) = /^(\w+_\w+_user_)(.*)_(\d+_\d+.*)$/; } else { (undef, $username, undef) = /^(\w+_user_)(.*)_(\d+_\d+.*)$/; @@ -3146,15 +2970,15 @@ sub restore_backend() { sub restore_do() { if ($backup_bef_restore) { if ($restore_sys) { - $backup_sys = 1; + $conf{NO_SYS_FILES} = 0; } else { - $backup_sys = 0; + $conf{NO_SYS_FILES} = 1; } if ($restore_user) { - $backup_user = 1; + $conf{NO_USER_FILES} = 0; @user_list = @user_list_to_restore; } else { - $backup_user = 0; + $conf{NO_USER_FILES} = 1; } build_backup_status(); read_conf_file(); @@ -3210,8 +3034,6 @@ sub restore_step_other() { $up_box->show_all; } -my %check_user_to_restore; - sub restore_step_user() { my $retore_step_user; my @tmp_list = sort @user_backuped; @@ -3355,10 +3177,10 @@ sub restore_step2() { my $user_exist; local $_; - my $restore_info_path = $save_path; - $restore_info_path = $path_to_find_restore if $where_hd || $where_cd; + my $restore_info_path = $conf{PATH_TO_SAVE}; + $restore_info_path = $path_to_find_restore if $conf{USE_HD} || $conf{USE_CD}; my $info_prefix = "backup"; - $info_prefix = "list" if $where_net || $where_tape; + $info_prefix = "list" if $conf{USE_NET} || $conf{USE_TAPE}; if (any { /_other_/ } grep { /^$info_prefix/ } all("$restore_info_path/")) { $other_exist = 1; @@ -3397,7 +3219,7 @@ sub restore_step2() { 0, gtkset_sensitive(my $restore_path_entry = new Gtk2::Entry(), $restore_other_path), ), 0, gtkset_sensitive(my $check_backup_bef_restore = new Gtk2::CheckButton(N("Do new backup before restore (only for incremental backups.)")), - $backup_sys_versions || $backup_user_versions), + $conf{SYS_INCREMENTAL_BACKUPS} || $conf{USER_INCREMENTAL_BACKUPS}), 0, gtkset_sensitive(my $check_remove_user_dir = new Gtk2::CheckButton(N("Remove user directories before restore.")), $user_exist), 1, new Gtk2::VBox(0,10), ), @@ -3413,7 +3235,7 @@ sub restore_step2() { $$ref = $$ref ? 0 : 1; if (!$restore_sys && !$restore_user && !$restore_other) { $next_widget = \&message_norestore_box; - } elsif ($restore_sys && $backup_sys_versions) { + } elsif ($restore_sys && $conf{SYS_INCREMENTAL_BACKUPS}) { $next_widget = \&restore_step_sys; } elsif ($restore_user) { $next_widget = \&restore_step_user; @@ -3438,7 +3260,7 @@ sub restore_step2() { fonction_env(\$retore_step2, \&restore_step2, \&restore_box); if (!$restore_sys && !$restore_user && !$restore_other) { $next_widget = \&message_norestore_box; - } elsif ($restore_sys && $backup_sys_versions) { + } elsif ($restore_sys && $conf{SYS_INCREMENTAL_BACKUPS}) { $next_widget = \&restore_step_sys; } elsif ($restore_user) { $next_widget = \&restore_step_user; @@ -3485,7 +3307,7 @@ sub find_files_to_restore() { local $_ = $file_wildcard_entry->get_text; s|^\*|\\\*|g; my $wildcard = $_; - @possible_sources = glob "$save_path/list*"; + @possible_sources = glob "$conf{PATH_TO_SAVE}/list*"; $model->clear; my $match = 0; foreach my $list (@possible_sources) { @@ -3612,7 +3434,7 @@ sub catalog_restore { cursor_wait(); @restore_files = (); $lmodel->clear; - foreach my $filename (glob("$save_path/list*$cat_entry.txt")) { + foreach my $filename (glob("$conf{PATH_TO_SAVE}/list*$cat_entry.txt")) { my @contents = cat_($filename); foreach (@contents) { chop; @@ -3690,20 +3512,11 @@ sub catalog_restore { } sub restore_catalog_entry { - #FIXME - # we're working from a catalog entry, which means we know the - # the tar file wildcards and some info on where the backup was stored - # if it's a local device (HD, tape, CD) - prompt for the media - # for tape, find how many other catalog entries had the same - # label and calculate the record offset - # if it's remote storage, display what we know of the connection - # parameters and get the user's verification, then connect - restore_status(); my ($cat_entry, @restore_files) = @_; my $username; - my $userpass = $passwd_user; + my $userpass = $conf{PASSWD}; my $restore_result = 1; my @line_data = split(':', $cat_entry); @@ -3721,7 +3534,7 @@ sub restore_catalog_entry { $username = $user_host[0]; $vol_host = $user_host[1]; } else { - $username = $login_user; + $username = $conf{LOGIN}; } #- create a restore work directory if we don't have one @@ -3732,17 +3545,17 @@ sub restore_catalog_entry { if ($media eq 'HD') { #- shouldn't really happen, should have just browsed - #- to the $save_path in the previous step - deal with it anyway + #- to the $conf{PATH_TO_SAVE} in the previous step - deal with it anyway my @restore_tar_files = glob("$dev_path/*$backup_time*$tar_ext"); my $matches = @restore_tar_files; if ($matches == 0) { show_warning("f", N("Backup files not found at %s.", $dev_path)); return 0; } else { - my $save_path_org = $save_path; - $save_path = $dev_path; + my $save_path_org = $conf{PATH_TO_SAVE}; + $conf{PATH_TO_SAVE} = $dev_path; $restore_result = restore_hd_or_cd($cat_entry, $dev_path, @restore_files); - $save_path = $save_path_org; + $conf{PATH_TO_SAVE} = $save_path_org; } } @@ -3862,8 +3675,8 @@ sub restore_tape { spawn_progress($command, "Moving forward $offset file records."); $command = "tar -C $cfg_dir/restores -xf $dev_path"; spawn_progress($command, "Untarring from $dev_path to work directory."); - if (-e "$cfg_dir/restores/$save_path/$_") { - $command = "tar -C $restore_path -xzf $cfg_dir/restores/$save_path/$_"; + if (-e "$cfg_dir/restores/$conf{PATH_TO_SAVE}/$_") { + $command = "tar -C $restore_path -xzf $cfg_dir/restores/$conf{PATH_TO_SAVE}/$_"; spawn_progress($command, "Untarring \n$_ \nto $restore_path."); } else { return 1; @@ -4001,7 +3814,7 @@ sub catalog_to_wildcard { sub wildcard_to_tarfile { my ($wildcard) = @_; - my (@tarfile) = glob("$save_path/*$wildcard.txt"); + my (@tarfile) = glob("$conf{PATH_TO_SAVE}/*$wildcard.txt"); foreach (@tarfile) { $_ = basename($_); s/txt/$tar_ext/; @@ -4012,7 +3825,7 @@ sub wildcard_to_tarfile { sub file_to_tarfile { my ($restore_file, $wildcard) = @_; - my $tarfile = `grep -l $restore_file $save_path/*$wildcard.txt`; + my $tarfile = `grep -l $restore_file $conf{PATH_TO_SAVE}/*$wildcard.txt`; chop $tarfile; $tarfile = basename($tarfile); $tarfile =~ s/txt/$tar_ext/; @@ -4044,8 +3857,8 @@ sub restore_box() { my $retore_box; if ($good_restore_path) { - $path_to_find_restore = $save_path if $where_hd; - $path_to_find_restore = "/mnt/cdrom" if $where_cd; + $path_to_find_restore = $conf{PATH_TO_SAVE} if $conf{USE_HD}; + $path_to_find_restore = "/mnt/cdrom" if $conf{USE_CD}; } find_backup_to_restore(); @@ -4100,9 +3913,9 @@ sub restore_find_media_box() { my $mount_media = 1; $good_restore_path = 0; my $message = N("Unable to find backups to restore...\n"); - $message .= N("Verify that %s is the correct path", $path_to_find_restore) if $where_hd && $where_cd; - $message .= N(" and the CD is in the drive") if $where_cd; - if ($where_tape || $net_proto) { + $message .= N("Verify that %s is the correct path", $path_to_find_restore) if $conf{USE_HD} && $conf{USE_CD}; + $message .= N(" and the CD is in the drive") if $conf{USE_CD}; + if ($conf{USE_TAPE} || $conf{NET_PROTO}) { $message .= N("Backups on unmountable media - Use Catalog to restore"); $mount_media = 0; } @@ -4702,48 +4515,21 @@ sub interactive_mode() { $interactive = 1; $in = 'interactive'->vnew; - - my $winht = 440; - $winht = 320 if $::isEmbedded; - my $winwidth = 540; - $winwidth = 500 if $::isEmbedded; - my $darea; - - $my_win = ugtk2->new('drakbackup'); + $::Wizard_title = N("Drakbackup"); + $::Wizard_pix_up = "ic82-back-up-48.png"; + $in->isa('interactive::gtk') and $::isWizard = 1; + $my_win = ugtk2->new(N("Drakbackup")); $window1 = $my_win->{window}; - unless ($::isEmbedded) { - $my_win->{rwindow}->set_position('center'); - $my_win->{rwindow}->set_title(N("Drakbackup")); - $window1->set_size_request($winwidth, $winht); - my $pixbuf_icon = gtkcreate_pixbuf("ic82-back-up-48"); - $darea = Gtk2::DrawingArea->new; - $darea->set_size_request($winwidth, 60); - $darea->modify_font(Gtk2::Pango::FontDescription->from_string('Sans Italic 24')); - $darea->modify_bg("normal", gtkcolor(0.13 * 65535, 0.27 * 65535, 0.61 * 65535)); - my $layout = $darea->create_pango_layout(N("Drakbackup")); - $darea->signal_connect(expose_event => sub { - my (undef, undef, $dx, $dy) = $darea->allocation->values; - $darea->window->draw_pixbuf($darea->style->white_gc, $pixbuf_icon, 0, 0, $dx - $pixbuf_icon->get_width, $dy - $pixbuf_icon->get_height, -1, -1, 'none', 0, 0); - my ($lx, $ly) = $layout->get_pixel_size; - $darea->window->draw_layout($darea->style->white_gc, ($dx-$lx)/2, ($dy-$ly)/2, $layout); - 0; - }); - } + $my_win->{rwindow}->signal_connect(delete_event => sub { ugtk2->exit(0) }); read_conf_file(); gtkadd($window1, gtkpack(new Gtk2::VBox(0,0), - gtkpack(gtkset_size_request($up_box = new Gtk2::VBox(0, 5), $winwidth, $winht), + gtkpack($up_box = new Gtk2::VBox(0, 5), gtkpack_(new Gtk2::VBox(0, 3), - if_(!$::isEmbedded, 0, $darea), 1, gtkpack_(new Gtk2::HBox(0, 3), - 1, gtkpack_(new Gtk2::HBox(0, 15), - 0, new Gtk2::HBox(0, 5), - 1, $advanced_box = gtkpack_(new Gtk2::HBox(0, 15), - ), - 0, new Gtk2::HBox(0, 5), - ), + 1, $advanced_box = new Gtk2::HBox(0, 15), ), 0, new Gtk2::HSeparator, 0, $button_box = gtkpack(new Gtk2::VBox(0, 15), @@ -4757,7 +4543,6 @@ sub interactive_mode() { interactive_mode_box(); button_box_main(); $central_widget = \$box2; - $window1->show_all; $window1->realize; $window1->show_all; $my_win->main; -- cgit v1.2.1