speedo: Fixes for native build.
[gnupg.git] / build-aux / getswdb.sh
1 #!/bin/sh
2 # Get the online version of the GnuPG software version database
3 # Copyright (C) 2014  Werner Koch
4 #
5 # This file is free software; as a special exception the author gives
6 # unlimited permission to copy and/or distribute it, with or without
7 # modifications, as long as this notice is preserved.
8 #
9 # This program is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
11 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
13 # The URL of the file to retrieve.
14 # (some wget versions seem to have problems with SubjectAltName, thus
15 #  we do not use www.gnupg.org)
16 urlbase="https://gnupg.org/"
17
18 WGET=wget
19 GPGV=gpgv
20
21 srcdir=$(dirname "$0")
22 distsigkey="$srcdir/../g10/distsigkey.gpg"
23
24 # Convert a 3 part version number it a numeric value.
25 cvtver () {
26   awk 'NR==1 {split($NF,A,".");X=1000000*A[1]+1000*A[2]+A[3];print X;exit 0}'
27 }
28
29 # Prints usage information.
30 usage()
31 {
32     cat <<EOF
33 Usage: $(basename $0) [OPTIONS]
34 Get the online version of the GnuPG software version database
35 Options:
36     --skip-download  Assume download has already been done.
37     --find-sha1sum   Print the name of the sha1sum utility
38     --help           Print this help.
39 EOF
40     exit $1
41 }
42
43 #
44 # Parse options
45 #
46 skip_download=no
47 find_sha1sum=no
48 while test $# -gt 0; do
49     case "$1" in
50         # Set up `optarg'.
51         --*=*)
52             optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
53             ;;
54         *)
55             optarg=""
56             ;;
57     esac
58
59     case $1 in
60         --help|-h)
61             usage 0
62             ;;
63         --skip-download)
64             skip_download=yes
65             ;;
66         --find-sha1sum)
67             find_sha1sum=yes
68             ;;
69         *)
70             usage 1 1>&2
71             ;;
72     esac
73     shift
74 done
75
76 # Mac OSX has only a shasum and not sha1sum
77 if [ ${find_sha1sum} = yes ]; then
78     for i in sha1sum shasum ; do
79        tmp=$($i </dev/null 2>/dev/null | cut -d ' ' -f1)
80        if [ x"$tmp" = x"da39a3ee5e6b4b0d3255bfef95601890afd80709" ]; then
81            echo "$i"
82            exit 0
83        fi
84     done
85     echo "false"
86     exit 1
87 fi
88
89 # Get GnuPG version from VERSION file.  For a GIT checkout this means
90 # that ./autogen.sh must have been run first.  For a regular tarball
91 # VERSION is always available.
92 if [ ! -f "$srcdir/../VERSION" ]; then
93     echo "VERSION file missing - run autogen.sh first." >&2
94     exit 1
95 fi
96 version=$(cat "$srcdir/../VERSION")
97 version_num=$(echo "$version" | cvtver)
98
99 if ! $GPGV --version >/dev/null 2>/dev/null ; then
100   echo "command \"gpgv\" is not installed" >&2
101   echo "(please install an older version of GnuPG)" >&2
102   exit 1
103 fi
104
105 #
106 # Download the list and verify.
107 #
108 if [ $skip_download = yes ]; then
109   if [ ! -f swdb.lst ]; then
110       echo "swdb.lst is missing." >&2
111       exit 1
112   fi
113   if [ ! -f swdb.lst.sig ]; then
114       echo "swdb.lst.sig is missing." >&2
115       exit 1
116   fi
117 else
118   if ! $WGET --version >/dev/null 2>/dev/null ; then
119       echo "command \"wget\" is not installed" >&2
120       exit 1
121   fi
122
123   if ! $WGET -q -O swdb.lst "$urlbase/swdb.lst" ; then
124       echo "download of swdb.lst failed." >&2
125       exit 1
126   fi
127   if ! $WGET -q -O swdb.lst.sig "$urlbase/swdb.lst.sig" ; then
128       echo "download of swdb.lst.sig failed." >&2
129       exit 1
130   fi
131 fi
132 if ! $GPGV --keyring "$distsigkey" swdb.lst.sig swdb.lst; then
133     echo "list of software versions is not valid!" >&2
134     exit 1
135 fi
136
137 #
138 # Check that the online version of GnuPG is not less than this version
139 # to help detect rollback attacks.
140 #
141 gnupg_ver=$(awk '$1=="gnupg21_ver" {print $2;exit}' swdb.lst)
142 if [ -z "$gnupg_ver" ]; then
143     echo "GnuPG 2.1 version missing in swdb.lst!" >&2
144     exit 1
145 fi
146 gnupg_ver_num=$(echo "$gnupg_ver" | cvtver)
147 if [ $(( $gnupg_ver_num >= $version_num )) = 0 ]; then
148     echo "GnuPG version in swdb.lst is less than this version!" >&2
149     echo "  This version: $version" >&2
150     echo "  SWDB version: $gnupg_ver" >&2
151     exit 1
152 fi