packaging: Check for nonzero $? for command failure

In a few perl scripts (that happen to be for macOS), we check whether
'$? >> 8' is zero to see whether a command failed. But the value of
'$? >> 8' is just the exit code of the process. If it instead, for
example, was killed by a signal, there is no exit code, and '$? >> 8'
may not be accurate (the terminating signal is in '$? & 127'). We should
check if $? is nonzero at all to see if an error happened.

To avoid any possible issues, update all of our checks for command
failure to check if $? is nonzero, instead of '$? >> 8'. In notarize.pl,
print out the whole status in addition to the exit code, just to be
clear in case the command somehow terminates from a signal.

Change-Id: I07ed145fae45d0bdc77c1249cf4d89bd5ba5cc56
Reviewed-on: https://gerrit.openafs.org/15980
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Marcio Brito Barbosa <mbarbosa@sinenomine.net>
Tested-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
This commit is contained in:
Andrew Deason 2024-08-02 21:55:55 -05:00
parent e316a38ba9
commit 9ef6aac17a
3 changed files with 11 additions and 15 deletions

View File

@ -76,8 +76,7 @@ sub main
if ($do_nothing == 0) {
my @rmcmd = ('osascript', '-e', "do shell script \"/bin/rm -f @rmfiles; /bin/rmdir @rmdirs; /bin/rm -rf @rmpkg\" with administrator privileges");
system @rmcmd;
my $retcode = $? >> 8;
if ($retcode != 0) {
if ($? != 0) {
print_warning ("Warning: There may have been a problem uninstalling\n");
}
}

View File

@ -82,8 +82,7 @@ sub main {
"echo @rmpkg | xargs -n 1 /usr/sbin/pkgutil --forget\" " .
"with administrator privileges' | tr '\\r' '\\n'";
system $rmcmd;
my $retcode = $? >> 8;
if ($retcode != 0) {
if ($? != 0) {
print_warning ("Warning: There may have been a problem uninstalling\n");
}
}

View File

@ -63,10 +63,9 @@ sub check_prerequisites {
# Check if the given keychain-profile exists
my $output = qx(xcrun notarytool history --keychain-profile "$profile" 2>&1);
my $exitcode = $? >> 8;
if ($exitcode) {
print(STDERR "error: $exitcode\n");
if ($? != 0) {
my $exitcode = $? >> 8;
print(STDERR "error: exit code $exitcode (status $?)\n");
print(STDERR $output);
exit(1);
}
@ -86,10 +85,9 @@ sub process_package {
# returns after submitting and processing the package, or times out if it
# takes longer than 5 minutes
my $output = qx(xcrun notarytool submit "$package" --keychain-profile "$profile" --wait --timeout 5m 2>&1);
my $exitcode = $? >> 8;
if ($exitcode) {
print(STDERR "error: $exitcode\n");
if ($? != 0) {
my $exitcode = $? >> 8;
print(STDERR "error: exit code $exitcode (status $?)\n");
print(STDERR $output);
exit(1);
}
@ -120,10 +118,10 @@ sub notarize_package {
print(STDOUT "notarize.pl: notarizing package...\n");
my $output = qx(xcrun stapler staple -v "$package" 2>&1);
my $exitcode = $? >> 8;
if ($exitcode) {
if ($? != 0) {
my $exitcode = $? >> 8;
print(STDERR "error: package could not be notarized (uuid: $uuid)\n");
print(STDERR "error: exit code $exitcode (status $?)\n");
print(STDERR $output);
exit(1);
}