speedo: Get version numbers from online database.
[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 urlbase="https://www.gnupg.org/"
15
16 WGET=wget
17 GPGV=gpgv
18
19 srcdir=$(dirname "$0")
20 distsigkey="$srcdir/../g10/distsigkey.gpg"
21
22 # Convert a 3 part version number it a numeric value.
23 cvtver () {
24   awk 'NR==1 {split($NF,A,".");X=1000000*A[1]+1000*A[2]+A[3];print X;exit 0}'
25 }
26
27 # Prints usage information.
28 usage()
29 {
30     cat <<EOF
31 Usage: $(basename $0) [OPTIONS]
32 Get the online version of the GnuPG software version database
33 Options:
34     --skip-download  Assume download has already been done.
35     --help           Print this help.
36 EOF
37     exit $1
38 }
39
40 #
41 # Parse options
42 #
43 skip_download=no
44 while test $# -gt 0; do
45     case "$1" in
46         # Set up `optarg'.
47         --*=*)
48             optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
49             ;;
50         *)
51             optarg=""
52             ;;
53     esac
54
55     case $1 in
56         --help|-h)
57             usage 0
58             ;;
59         --skip-download)
60             skip_download=yes
61             ;;
62         *)
63             usage 1 1>&2
64             ;;
65     esac
66     shift
67 done
68
69 # Get GnuPG version from VERSIOn file.  For a GIT checkout this means
70 # that ./autogen.sh must have been run first.  For a regular tarball
71 # VERSION is always available.
72 if [ ! -f "$srcdir/../VERSION" ]; then
73     echo "VERSION file missing - run autogen.sh first." >&2
74     exit 1
75 fi
76 version=$(cat "$srcdir/../VERSION")
77 version_num=$(echo "$version" | cvtver)
78
79 #
80 # Download the list and verify.
81 #
82 if [ $skip_download = yes ]; then
83   if [ ! -f swdb.lst ]; then
84       echo "swdb.lst is missing." >&2
85       exit 1
86   fi
87   if [ ! -f swdb.lst.sig ]; then
88       echo "swdb.lst.sig is missing." >&2
89       exit 1
90   fi
91 else
92   if ! $WGET -q -O swdb.lst "$urlbase/swdb.lst" ; then
93       echo "download of swdb.lst failed." >&2
94       exit 1
95   fi
96   if ! $WGET -q -O swdb.lst.sig "$urlbase/swdb.lst.sig" ; then
97       echo "download of swdb.lst.sig failed." >&2
98       exit 1
99   fi
100 fi
101 if ! $GPGV --keyring "$distsigkey" swdb.lst.sig swdb.lst; then
102     echo "list of software versions is not valid!" >&2
103     exit 1
104 fi
105
106 #
107 # Check that the online version of GnuPG is not less than this version
108 # to help detect rollback attacks.
109 #
110 gnupg_ver=$(awk '$1=="gnupg21_ver" {print $2;exit}' swdb.lst)
111 if [ -z "$gnupg_ver" ]; then
112     echo "GnuPG 2.1 version missing in swdb.lst!" >&2
113     exit 1
114 fi
115 gnupg_ver_num=$(echo "$gnupg_ver" | cvtver)
116 if [ $(( $gnupg_ver_num >= $version_num )) = 0 ]; then
117     echo "GnuPG version in swdb.lst is less than this version!" >&2
118     echo "  This version: $version" >&2
119     echo "  SWDB version: $gnupg_ver" >&2
120     exit 1
121 fi