Hi,
attached is a small patch that allows apt-check-sigs to also check
absolute dists (i.e. ending in a '/') like:
 deb http://people.debian.org/~foo/woody-backports bar/
(in case http://people.debian.org/~foo/woody-backports/bar/ contains a
signed release file with the md5sum of the Packages file in the same
directory, like: 

Origin: people.debian.org
Label: foo 
Suite: stable
Codename: woody
Component: main
Description: bar woody backport
MD5Sum:
 4911ffcbb10d25e176507db4dc5f4be1       13742   Packages
 c0ef0457b198e6dee176920f9ba0524c       1677    Sources

). This would allow maintainers to sign the Release files of their woody
backports or whatever if they want to.
Regards,
 -- Guido
--- apt-check-sigs.orig Fri Apr 11 19:36:16 2003
+++ apt-check-sigs      Mon Apr 14 13:42:26 2003
@@ -2,6 +2,8 @@
 
 # Copyright (c) 2001 Anthony Towns <[EMAIL PROTECTED]>
 #
+# support for absolute dists/ by Guido Guenther <[EMAIL PROTECTED]>
+#
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
@@ -33,7 +35,7 @@
 }
 
 checkit () {
-       local FILE="$1"
+       local FILE=`echo $1 | sed 's/~/%7e/g'`
        local LOOKUP="$2"
 
        Y="`get_md5sumsize Release "$LOOKUP"`"
@@ -49,6 +51,14 @@
                echo "MISSING $Y"
                return
        fi
+       # we simply can't store the md5sum of the release file in the release
+       # file itself for absoule dists - it's okay not check it since we 
already
+       # verified it's gpg signature
+       if [ "$LOOKUP" = "Release" ]; then
+               echo "$FILE" >>OK
+               echo "OK"
+               return
+       fi
        if [ "$Y" = "" ]; then
                echo "$FILE" >>NOCHECK
                echo "NOCHECK"
@@ -86,11 +96,19 @@
                continue
        fi
 
-       echo "Source: ${ty} ${url} ${dist} ${comps}"
-       
+       if [ -z "$comps" -a `expr match $dist '.*/$'` != "0" ]; then
+               comps=$dist
+               unset dist
+               release=${url}/${comps}/Release
+               echo "Source: ${ty} ${url} ${comps}"
+       else
+               echo "Source: ${ty} ${url} ${dist} ${comps}"
+               release=${url}/dists/${dist}/Release
+       fi
+
        rm -f Release Release.gpg
-       lynx -reload -dump "${url}/dists/${dist}/Release" >/dev/null 2>&1
-       wget -q -O Release "${url}/dists/${dist}/Release"
+       lynx -reload -dump $release >/dev/null 2>&1
+       wget -q -O Release $release
 
        if ! grep -q '^' Release; then
                echo "  * NO TOP-LEVEL Release FILE"
@@ -107,12 +125,12 @@
                echo "  o $dateline"
                echo "  o $dscrline"
 
-               if [ "${dist%%/*}" != "$suitline" -a "${dist%%/*}" != 
"$codeline" ]; then
+               if [ "$dist" -a "${dist%%/*}" != "$suitline" -a "${dist%%/*}" 
!= "$codeline" ]; then
                        echo "  * WARNING: asked for $dist, got 
$suitline/$codeline"
                fi
 
-               lynx -reload -dump "${url}/dists/${dist}/Release.gpg" 
>/dev/null 2>&1
-               wget -q -O Release.gpg "${url}/dists/${dist}/Release.gpg"
+               lynx -reload -dump ${release}.gpg >/dev/null 2>&1
+               wget -q -O Release.gpg ${release}.gpg
                
                gpgv --status-fd 3 Release.gpg Release 3>&1 >/dev/null 2>&1 | 
sed -n "s/^\[GNUPG:\] //p" | (okay=0; err=""; while read gpgcode rest; do
                        if [ "$gpgcode" = "GOODSIG" ]; then
@@ -143,16 +161,26 @@
        okaycomps=""
        for comp in $comps; do
                if [ "$ty" = "deb" ]; then
-                       X=$(checkit "`echo 
"${baseurl}/dists/${dist}/${comp}/binary-${arch}/Release" | sed 's,//*,_,g'`" 
"${comp}/binary-${arch}/Release")
-                       Y=$(checkit "`echo 
"${baseurl}/dists/${dist}/${comp}/binary-${arch}/Packages" | sed 's,//*,_,g'`" 
"${comp}/binary-${arch}/Packages")
+                       if [ "$dist" ]; then
+                               X=$(checkit "`echo 
"${baseurl}/dists/${dist}/${comp}/binary-${arch}/Release" | sed 's,//*,_,g'`" 
"${comp}/binary-${arch}/Release")
+                               Y=$(checkit "`echo 
"${baseurl}/dists/${dist}/${comp}/binary-${arch}/Packages" | sed 's,//*,_,g'`" 
"${comp}/binary-${arch}/Packages")
+                       else
+                               X=$(checkit "`echo "${baseurl}/${comp}Release" 
| sed 's,//*,_,g'`" "Release")
+                               Y=$(checkit "`echo "${baseurl}/${comp}Packages" 
| sed 's,//*,_,g'`" "Packages")
+                       fi
                        if [ "$X $Y" = "OK OK" ]; then
                                okaycomps="$okaycomps $comp"
                        else
                                echo "  * PROBLEMS WITH $comp ($X, $Y)"
                        fi
                elif [ "$ty" = "deb-src" ]; then
-                       X=$(checkit "`echo 
"${baseurl}/dists/${dist}/${comp}/source/Release" | sed 's,//*,_,g'`" 
"${comp}/source/Release")
-                       Y=$(checkit "`echo 
"${baseurl}/dists/${dist}/${comp}/source/Sources" | sed 's,//*,_,g'`" 
"${comp}/source/Sources")
+                       if [ "$dist" ]; then
+                               X=$(checkit "`echo 
"${baseurl}/dists/${dist}/${comp}/source/Release" | sed 's,//*,_,g'`" 
"${comp}/source/Release")
+                               Y=$(checkit "`echo 
"${baseurl}/dists/${dist}/${comp}/source/Sources" | sed 's,//*,_,g'`" 
"${comp}/source/Sources")
+                       else
+                               X=$(checkit "`echo "${baseurl}/${comp}Release" 
| sed 's,//*,_,g'`" "Release")
+                               Y=$(checkit "`echo "${baseurl}/${comp}Sources" 
| sed 's,//*,_,g'`" "Sources")
+                       fi
                        if [ "$X $Y" = "OK OK" ]; then
                                okaycomps="$okaycomps $comp"
                        else

Reply via email to