equal
deleted
inserted
replaced
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 }; |