From 09b2667ddef0f9c574a2e09b3d4670c06196bfdc Mon Sep 17 00:00:00 2001 From: Max Rees Date: Tue, 13 Aug 2019 19:57:39 -0500 Subject: checkapk: compare permissions and ownership of files --- checkapk.in | 51 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/checkapk.in b/checkapk.in index 80572b5..500e9c7 100644 --- a/checkapk.in +++ b/checkapk.in @@ -15,6 +15,13 @@ if ! [ -f "$datadir/functions.sh" ]; then fi . "$datadir/functions.sh" +case "$(tar --version)" in +*GNU*) tar_flavor=GNU;; +*libarchive*) tar_flavor=libarchive;; +*busybox*) tar_flavor=busybox;; +*) die 'unknown tar flavor';; +esac + usage() { cat >&2 <<-__EOF__ $program $program_version - find ABI breakages in package upgrades @@ -26,19 +33,45 @@ usage() { } pkginfo() { - apk="$1" + local apk="$1" + local filename="$2" + tar -zxf "$apk" .PKGINFO mv .PKGINFO .PKGINFO.orig grep -E \ '^(depend|provides|provider|replaces|triggers|install_if)' \ - .PKGINFO.orig | sort > .PKGINFO - touch -r .PKGINFO.orig .PKGINFO + .PKGINFO.orig | sort > "$filename" + touch -r .PKGINFO.orig "$filename" rm .PKGINFO.orig } +filelist() { + local apk="$1" + local filename="$2" + local tar_fmt + + case "$tar_flavor" in + GNU) + # -rw-r--r-- root/root 737 2019-06-14 20:45 .PKGINFO + tar_fmt='{ print $1, $2, $NF }';; + libarchive) + # -rw-r--r-- 0 root root 737 Jun 14 15:45 .PKGINFO + tar_fmt='{ printf "%s %s/%s %s\n", $1, $3, $4, $NF }';; + busybox) + # -rw-r--r-- root/root 737 2019-06-14 20:45:29 .PKGINFO + tar_fmt='{ print $1, $2, $NF }';; + esac + + tar -ztvf "$apk" | grep -ve ' \.SIGN\.' \ + | awk "$tar_fmt" \ + | sort -k 3,3 > "$filename" +} + check_soname() { - soname="$1" + local soname sover_old basename soname_new sover_new + local rdeps real_rdeps i self j + soname="$1" sover_old="${soname#*=}" soname="${soname%=*}" basename="${soname%%.so*}.so" @@ -130,14 +163,12 @@ for i in $pkgname $subpackages; do oldapk="${oldapk##Downloading }.apk" [ -e "$oldapk" ] || die "can't find old apk $oldapk" - pkginfo "$oldapk" - mv .PKGINFO "pkginfo-$_pkgname-old" - pkginfo "$filepath" - mv .PKGINFO "pkginfo-$_pkgname-new" + pkginfo "$oldapk" "pkginfo-$_pkgname-old" + pkginfo "$filepath" "pkginfo-$_pkgname-new" - tar -ztf "$oldapk" | grep -ve '^\.SIGN\.' | sort > "filelist-$_pkgname-old" + filelist "$oldapk" "filelist-$_pkgname-old" touch -r "pkginfo-$_pkgname-old" "filelist-$_pkgname-old" - tar -ztf "$filepath" | grep -v '^\.SIGN\.' | sort > "filelist-$_pkgname-new" + filelist "$filepath" "filelist-$_pkgname-new" touch -r "pkginfo-$_pkgname-new" "filelist-$_pkgname-new" diff -u "filelist-$_pkgname-old" "filelist-$_pkgname-new" || true -- cgit v1.2.3-60-g2f50