plugins/check_amanda-client
changeset 41 b761702df772
parent 40 d0410b54a231
parent 25 ecd7c783aba4
child 44 8d2c3b246651
equal deleted inserted replaced
40:d0410b54a231 41:b761702df772
    60         'v|verbose'      => \$opt_verbose,
    60         'v|verbose'      => \$opt_verbose,
    61     ) or pod2usage;
    61     ) or pod2usage;
    62 
    62 
    63     *::verbose = $opt_verbose ? sub { say '# ', @_ } : sub { };
    63     *::verbose = $opt_verbose ? sub { say '# ', @_ } : sub { };
    64 
    64 
       
    65 	verbose('setting working directory to /, this avoids permission problems');
       
    66 	chdir '/';
       
    67 
    65     # test needs to be run as root:* or as backup:backup
    68     # test needs to be run as root:* or as backup:backup
    66     # change to backup if still root
    69     # change to backup if still root
    67     su $USER if $> == 0;
    70     su $USER if $> == 0;
    68 
    71 
    69     # amservice needs to be suid root, but executable
    72     # amservice needs to be suid root, but executable
   126 }
   129 }
   127 
   130 
   128 sub find_tool {
   131 sub find_tool {
   129     my $name = shift;
   132     my $name = shift;
   130     my @rc = grep { -f -x } map { catfile $_, $name } split /:/, $ENV{PATH}
   133     my @rc = grep { -f -x } map { catfile $_, $name } split /:/, $ENV{PATH}
   131       or die "Can't find `$name' in $ENV{PATH}\n";
   134       or die "Can't find executable `$name' in $ENV{PATH}\n";
   132     $rc[0];
   135     $rc[0];
   133 }
   136 }
   134 
   137 
   135 sub check_perms {
   138 sub check_perms {
   136     my ($file, $mode, $owner, $group) = @_;
   139     my ($file, $mode, $owner, $group) = @_;
   146         my $f_owner = getpwuid +(stat _)[4] or die $!;
   149         my $f_owner = getpwuid +(stat _)[4] or die $!;
   147         my $f_group = getgrgid +(stat _)[5] or die $!;
   150         my $f_group = getgrgid +(stat _)[5] or die $!;
   148         my $f_mode  = (stat _)[2] & 07777   or die $!;
   151         my $f_mode  = (stat _)[2] & 07777   or die $!;
   149 
   152 
   150         my $msg =
   153         my $msg =
   151           sprintf "need: 0%04o root:$group, got: 0%04o $f_owner:$f_group\n",
   154           sprintf "need: 0%04o root:%s, got: 0%04o %s:%s\n",
   152           $mode, $f_mode;
   155 				$mode, $group, $f_mode, $f_owner, $f_group;
       
   156 
       
   157 		if (-f '/etc/debian_version') {
       
   158 			$msg .= sprintf  "try dpkg-statoverride --update --add root %sgroup 0%04o %s\n",
       
   159 			  $group, $mode, $file;
       
   160 		}
   153 
   161 
   154         die $msg unless $f_owner eq $owner;
   162         die $msg unless $f_owner eq $owner;
   155         die $msg unless $f_group eq $group;
   163         die $msg unless $f_group eq $group;
   156         die $msg unless $f_mode == $mode;
   164         die $msg unless $f_mode == $mode;
   157     };
   165     };