build: Update getswdb version check to 2.2
[gnupg.git] / build-aux / getswdb.sh
index aa889ee..cd419f2 100755 (executable)
@@ -11,7 +11,7 @@
 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 # The URL of the file to retrieve.
-urlbase="https://www.gnupg.org/"
+urlbase="https://versions.gnupg.org/"
 
 WGET=wget
 GPGV=gpgv
@@ -31,8 +31,12 @@ usage()
 Usage: $(basename $0) [OPTIONS]
 Get the online version of the GnuPG software version database
 Options:
-    --skip-download  Assume download has already been done.
-    --help           Print this help.
+    --skip-download    Assume download has already been done.
+    --skip-verify      Do not check signatures
+    --skip-selfcheck   Do not check GnuPG version
+    --find-sha1sum     Print the name of the sha1sum utility
+    --find-sha256sum   Print the name of the sha256sum utility
+    --help             Print this help.
 EOF
     exit $1
 }
@@ -41,6 +45,10 @@ EOF
 # Parse options
 #
 skip_download=no
+skip_verify=no
+skip_selfcheck=no
+find_sha1sum=no
+find_sha256sum=no
 while test $# -gt 0; do
     case "$1" in
        # Set up `optarg'.
@@ -59,6 +67,18 @@ while test $# -gt 0; do
         --skip-download)
             skip_download=yes
             ;;
+        --skip-verify)
+            skip_verify=yes
+            ;;
+        --skip-selfcheck)
+            skip_selfcheck=yes
+            ;;
+        --find-sha1sum)
+            find_sha1sum=yes
+            ;;
+        --find-sha256sum)
+            find_sha256sum=yes
+            ;;
        *)
            usage 1 1>&2
            ;;
@@ -66,7 +86,35 @@ while test $# -gt 0; do
     shift
 done
 
-# Get GnuPG version from VERSIOn file.  For a GIT checkout this means
+# Mac OSX has only a shasum and not sha1sum
+if [ ${find_sha1sum} = yes ]; then
+    for i in sha1sum shasum ; do
+       tmp=$($i </dev/null 2>/dev/null | cut -d ' ' -f1)
+       if [ x"$tmp" = x"da39a3ee5e6b4b0d3255bfef95601890afd80709" ]; then
+           echo "$i"
+           exit 0
+       fi
+    done
+    echo "false"
+    exit 1
+fi
+
+# Mac OSX has only a shasum and not sha256sum
+if [ ${find_sha256sum} = yes ]; then
+    for i in 'shasum -a 256' sha256sum ; do
+       tmp=$($i </dev/null 2>/dev/null | cut -d ' ' -f1)
+       tmp2="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+       if [ x"$tmp" = x"$tmp2" ]; then
+           echo "$i"
+           exit 0
+       fi
+    done
+    echo "false"
+    exit 1
+fi
+
+
+# Get GnuPG version from VERSION file.  For a GIT checkout this means
 # that ./autogen.sh must have been run first.  For a regular tarball
 # VERSION is always available.
 if [ ! -f "$srcdir/../VERSION" ]; then
@@ -76,6 +124,14 @@ fi
 version=$(cat "$srcdir/../VERSION")
 version_num=$(echo "$version" | cvtver)
 
+if [ $skip_verify = no ]; then
+  if ! $GPGV --version >/dev/null 2>/dev/null ; then
+    echo "command \"gpgv\" is not installed" >&2
+    echo "(please install an older version of GnuPG)" >&2
+    exit 1
+  fi
+fi
+
 #
 # Download the list and verify.
 #
@@ -84,38 +140,51 @@ if [ $skip_download = yes ]; then
       echo "swdb.lst is missing." >&2
       exit 1
   fi
-  if [ ! -f swdb.lst.sig ]; then
+  if [ $skip_verify = no ]; then
+    if [ ! -f swdb.lst.sig ]; then
       echo "swdb.lst.sig is missing." >&2
       exit 1
+    fi
   fi
 else
+  if ! $WGET --version >/dev/null 2>/dev/null ; then
+      echo "command \"wget\" is not installed" >&2
+      exit 1
+  fi
+
   if ! $WGET -q -O swdb.lst "$urlbase/swdb.lst" ; then
       echo "download of swdb.lst failed." >&2
       exit 1
   fi
-  if ! $WGET -q -O swdb.lst.sig "$urlbase/swdb.lst.sig" ; then
+  if [ $skip_verify = no ]; then
+    if ! $WGET -q -O swdb.lst.sig "$urlbase/swdb.lst.sig" ; then
       echo "download of swdb.lst.sig failed." >&2
       exit 1
+    fi
   fi
 fi
-if ! $GPGV --keyring "$distsigkey" swdb.lst.sig swdb.lst; then
+if [ $skip_verify = no ]; then
+  if ! $GPGV --keyring "$distsigkey" swdb.lst.sig swdb.lst; then
     echo "list of software versions is not valid!" >&2
     exit 1
+ fi
 fi
 
 #
 # Check that the online version of GnuPG is not less than this version
 # to help detect rollback attacks.
 #
-gnupg_ver=$(awk '$1=="gnupg21_ver" {print $2;exit}' swdb.lst)
-if [ -z "$gnupg_ver" ]; then
-    echo "GnuPG 2.1 version missing in swdb.lst!" >&2
-    exit 1
-fi
-gnupg_ver_num=$(echo "$gnupg_ver" | cvtver)
-if [ $(( $gnupg_ver_num >= $version_num )) = 0 ]; then
-    echo "GnuPG version in swdb.lst is less than this version!" >&2
-    echo "  This version: $version" >&2
-    echo "  SWDB version: $gnupg_ver" >&2
-    exit 1
+if [ $skip_selfcheck = no ]; then
+  gnupg_ver=$(awk '$1=="gnupg22_ver" {print $2;exit}' swdb.lst)
+  if [ -z "$gnupg_ver" ]; then
+      echo "GnuPG 2.2 version missing in swdb.lst!" >&2
+      exit 1
+  fi
+  gnupg_ver_num=$(echo "$gnupg_ver" | cvtver)
+  if [ $(( $gnupg_ver_num >= $version_num )) = 0 ]; then
+      echo "GnuPG version in swdb.lst is less than this version!" >&2
+      echo "  This version: $version" >&2
+      echo "  SWDB version: $gnupg_ver" >&2
+      exit 1
+  fi
 fi