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