X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FLib.pm;h=7b2973c1336f8fabc8bf48e6f65b15f937a54569;hp=fe31429c9ae43aa43372021b1bba9adc9b28f41a;hb=2460880d23902e74d5d8541f9c2fbb9538eaf4cb;hpb=a7690ea45972ea3db587bd94fa573edf20d75c91 diff --git a/lib/BackupPC/Lib.pm b/lib/BackupPC/Lib.pm index fe31429..7b2973c 100644 --- a/lib/BackupPC/Lib.pm +++ b/lib/BackupPC/Lib.pm @@ -29,7 +29,7 @@ # #======================================================================== # -# Version 2.1.0_CVS, released 3 Jul 2003. +# Version 2.1.0_CVS, released 13 Mar 2004. # # See http://backuppc.sourceforge.net. # @@ -48,6 +48,7 @@ use File::Compare; use Socket; use Cwd; use Digest::MD5; +use Config; sub new { @@ -92,7 +93,7 @@ sub new if ( !$noUserCheck && $bpc->{Conf}{BackupPCUserVerify} && $> != (my $uid = (getpwnam($bpc->{Conf}{BackupPCUser}))[2]) ) { - print("Wrong user: my userid is $>, instead of $uid" + print(STDERR "Wrong user: my userid is $>, instead of $uid" . " ($bpc->{Conf}{BackupPCUser})\n"); return; } @@ -154,6 +155,20 @@ sub verbose return $bpc->{verbose}; } +sub sigName2num +{ + my($bpc, $sig) = @_; + + if ( !defined($bpc->{SigName2Num}) ) { + my $i = 0; + foreach my $name ( split(' ', $Config{sig_name}) ) { + $bpc->{SigName2Num}{$name} = $i; + $i++; + } + } + return $bpc->{SigName2Num}{$sig}; +} + # # Generate an ISO 8601 format timeStamp (but without the "T"). # See http://www.w3.org/TR/NOTE-datetime and @@ -434,7 +449,7 @@ sub RmTreeQuiet if ( defined($roots) && length($roots) ) { $roots = [$roots] unless ref $roots; } else { - print "RmTreeQuiet: No root path(s) specified\n"; + print(STDERR "RmTreeQuiet: No root path(s) specified\n"); } chdir($pwd); foreach $root (@{$roots}) { @@ -447,14 +462,17 @@ sub RmTreeQuiet # if ( !unlink($root) ) { if ( -d $root ) { - my $d = DirHandle->new($root) - or print "Can't read $pwd/$root: $!"; - @files = $d->read; - $d->close; - @files = grep $_!~/^\.{1,2}$/, @files; - $bpc->RmTreeQuiet("$pwd/$root", \@files); - chdir($pwd); - rmdir($root) || rmdir($root); + my $d = DirHandle->new($root); + if ( !defined($d) ) { + print(STDERR "Can't read $pwd/$root: $!\n"); + } else { + @files = $d->read; + $d->close; + @files = grep $_!~/^\.{1,2}$/, @files; + $bpc->RmTreeQuiet("$pwd/$root", \@files); + chdir($pwd); + rmdir($root) || rmdir($root); + } } else { unlink($root) || unlink($root); } @@ -1088,7 +1106,12 @@ sub cmdExecOrEval print(STDERR "cmdExecOrEval: about to exec ", $bpc->execCmd2ShellCmd(@$cmd), "\n") if ( $bpc->{verbose} ); - exec(map { m/(.*)/ } @$cmd); # untaint + alarm(0); + $cmd = [map { m/(.*)/ } @$cmd]; # untaint + # + # force list-form of exec(), ie: no shell even for 1 arg + # + exec { $cmd->[0] } @$cmd; print(STDERR "Exec failed for @$cmd\n"); exit(1); } @@ -1143,8 +1166,13 @@ sub cmdSystemOrEval # close(STDERR); open(STDERR, ">&STDOUT"); - exec(map { m/(.*)/ } @$cmd); # untaint - print("Exec of @$cmd failed\n"); + alarm(0); + $cmd = [map { m/(.*)/ } @$cmd]; # untaint + # + # force list-form of exec(), ie: no shell even for 1 arg + # + exec { $cmd->[0] } @$cmd; + print(STDERR "Exec of @$cmd failed\n"); exit(1); } #