plugins/check_amanda-client
changeset 25 ecd7c783aba4
parent 23 6c2728f0c6f7
child 41 b761702df772
equal deleted inserted replaced
24:ae403e3c2a41 25:ecd7c783aba4
    52         'v|verbose'      => \$opt_verbose,
    52         'v|verbose'      => \$opt_verbose,
    53     ) or pod2usage;
    53     ) or pod2usage;
    54 
    54 
    55     *::verbose = $opt_verbose ? sub { say '# ', @_ } : sub { };
    55     *::verbose = $opt_verbose ? sub { say '# ', @_ } : sub { };
    56 
    56 
       
    57 	verbose('setting working directory to /, this avoids permission problems');
       
    58 	chdir '/';
       
    59 
    57     # test needs to be run as root:* or as backup:backup
    60     # test needs to be run as root:* or as backup:backup
    58     # change to backup if still root
    61     # change to backup if still root
    59     su $USER if $> == 0;
    62     su $USER if $> == 0;
    60 
    63 
    61     # amservice needs to be suid root, but executable
    64     # amservice needs to be suid root, but executable
   117 }
   120 }
   118 
   121 
   119 sub find_tool {
   122 sub find_tool {
   120     my $name = shift;
   123     my $name = shift;
   121     my @rc = grep { -f -x } map { catfile $_, $name } split /:/, $ENV{PATH}
   124     my @rc = grep { -f -x } map { catfile $_, $name } split /:/, $ENV{PATH}
   122       or die "Can't find `$name' in $ENV{PATH}\n";
   125       or die "Can't find executable `$name' in $ENV{PATH}\n";
   123     $rc[0];
   126     $rc[0];
   124 }
   127 }
   125 
   128 
   126 sub check_perms {
   129 sub check_perms {
   127     my ($file, $mode, $owner, $group) = @_;
   130     my ($file, $mode, $owner, $group) = @_;
   137         my $f_owner = getpwuid +(stat _)[4] or die $!;
   140         my $f_owner = getpwuid +(stat _)[4] or die $!;
   138         my $f_group = getgrgid +(stat _)[5] or die $!;
   141         my $f_group = getgrgid +(stat _)[5] or die $!;
   139         my $f_mode  = (stat _)[2] & 07777   or die $!;
   142         my $f_mode  = (stat _)[2] & 07777   or die $!;
   140 
   143 
   141         my $msg =
   144         my $msg =
   142           sprintf "need: 0%04o root:$group, got: 0%04o $f_owner:$f_group\n",
   145           sprintf "need: 0%04o root:%s, got: 0%04o %s:%s\n",
   143           $mode, $f_mode;
   146 				$mode, $group, $f_mode, $f_owner, $f_group;
       
   147 
       
   148 		if (-f '/etc/debian_version') {
       
   149 			$msg .= sprintf  "try dpkg-statoverride --update --add root %sgroup 0%04o %s\n",
       
   150 			  $group, $mode, $file;
       
   151 		}
   144 
   152 
   145         die $msg unless $f_owner eq $owner;
   153         die $msg unless $f_owner eq $owner;
   146         die $msg unless $f_group eq $group;
   154         die $msg unless $f_group eq $group;
   147         die $msg unless $f_mode == $mode;
   155         die $msg unless $f_mode == $mode;
   148     };
   156     };