diff --git a/mailing-list-test/README b/mailing-list-test/README new file mode 100644 index 000000000..1d2c3668e --- /dev/null +++ b/mailing-list-test/README @@ -0,0 +1,70 @@ +After making sure a gpg2 with mailing list support is in your patch, +run test.sh as follows (when you run it, it will ask for two +passwords, use the password 'a'): + + # ./test.sh + *************** + Generating a user key (use a password of 'a'). + *************** + 'Some User ' + + *************** + Importing some public keys. + Running: gpg2 --batch --import keys.gpg + *************** + + *************** + Set the password to 'a' + *************** + + *************** + Creating mailing list. + Running: gpg2 --batch --quick-gen-mailing-list-key gnupg-devel + *************** + 'gnupg-devel ' + + ... + +To get more verbose output, run test.sh with the -v flag. To get even +more output, change the gpg2 invocations to include --debug=packet. + +A summary of the commands: + + --mailing-list-key-gen + --quick-gen-mailing-list-key 'Name ' + + Create a new mailing list key. + + --mailing-list-add-sub ML-KEYID SUB-KEYID... + --mailing-list-add-rm ML-KEYID SUB-KEYID... + + Add or remove one or more subscribers from the mailing list. + + --mailing-list-subs ML-KEYID + + List the subscribers (using their decryted keyids!) + + Compare: + + $ gpg2 -k 2A08A54D + pub rsa2048/2A08A54D 2016-02-08 [SC] + uid [ultimate] gnupg-devel (mailing list) + sub rsa2048/ED2D0863 2016-02-08 [E] + sub rsa2/7C03B9E1 2016-02-08 [E] + sub rsa2/83BCEFE4 2016-02-08 [E] + sub rsa2/04A1E753 2016-02-08 [E] + sub rsa2/535EB487 2016-02-08 [E] + + The above 2-bit RSA keys! These are the encrypted keys. Here are + the real subscribers: + + $ gpg2 --mailing-list-subs 2A08A54D + D1B030E3 + AA45C71F + 94244910 + 95A0BEEA + 4 subscribers. + +To encrypt to a mailing list, just do: gpg2 -r ML-KEYID -e and a gnupg +with encrypted mailing list support will automatically encrypt to the +list of current subscribers. diff --git a/mailing-list-test/keys.gpg b/mailing-list-test/keys.gpg new file mode 100644 index 000000000..12831dd4a --- /dev/null +++ b/mailing-list-test/keys.gpg @@ -0,0 +1,621 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v2 + +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 +=l1Ul +-----END PGP PUBLIC KEY BLOCK----- diff --git a/mailing-list-test/test.sh b/mailing-list-test/test.sh new file mode 100755 index 000000000..fbe1cddd8 --- /dev/null +++ b/mailing-list-test/test.sh @@ -0,0 +1,238 @@ +#! /bin/bash + +set -e +# set -x + +if ! test -e mailing-list +then + echo "Are you sure you are in the right directory?" + exit 1 +fi + +set +e +TEMP=$(getopt \ + --longoptions verbose \ + -o v \ + -n "${0##*/}" -- "$@") +EC=$? +set -e +if test $EC != 0 +then + echo "Try \`$0 --help' for more information." + exit 1 +fi +eval set -- "$TEMP" + +VERBOSE=0 +while true +do + case "$1" in + --verbose|-v) VERBOSE=1; shift;; + --) shift; break;; + *) echo 'Internal error!'; exit 1;; + esac +done + +banner() { + echo + echo "***************" + echo -e "$@" + echo "***************" +} + +GPG() { + # valgrind gpg2 "$@" + if test x"$VERBOSE" = x1 + then + gpg2 --no-permission-warning "$@" + else + gpg2 --no-permission-warning "$@" 2>/dev/null + fi +} + +GPGU() { + GNUPGHOME=`pwd`/user GPG "$@" +} + +SETPASSWD() { + keyids=$(gpg2 --no-permission-warning -K --with-keygrip --with-colons 2>/dev/null \ + | gawk -F: '/^grp/ { print $10; }') + if test x$KEYID != x + then + for keygrip in $keyids + do + /usr/lib/gnupg2/gpg-preset-passphrase \ + --preset -P a "$keygrip" + done + fi +} + +TEST() +{ + TEXT="$1" + shift + banner "$TEXT\n Running: gpg2 $@" + + if GPG "$@" + then + : + else + EC=$? + echo "FAIL! (exit code: $EC)" + exit $EC + fi +} + +XTEST() +{ + TEXT="$1" + shift + banner "$TEXT\n Running: gpg2 $@" + + if GPG "$@" + then + echo "UNEXPECTEDLY PASSED!" + exit 1 + fi +} + +# Be sure to clean up. +cleanup() { + rm -f "mailing-list/subs-expected.$KEYID" "mailing-list/subs-have.$KEYID" +} +trap cleanup EXIT + +CHECKLIST() { + for x in $@ + do + echo $x + done | sort > "mailing-list/subs-expected.$KEYID" + + if ! cmp "mailing-list/subs-have.$KEYID" \ + "mailing-list/subs-expected.$KEYID" + then + echo "Current subscriber list does not match expected subscriber list!" + diff -u "mailing-list/subs-expected.$KEYID" \ + "mailing-list/subs-have.$KEYID" + exit 1 + fi +} + +CHECKSUBS() { + GPG --mailing-list-subs $KEYID | grep -v subscribers \ + | sort > "mailing-list/subs-have.$KEYID" + + CHECKLIST "$@" +} + +export GNUPGHOME=`pwd`/mailing-list +unset KEYID + +# Kill any running agent. +gpgconf --kill gpg-agent + +# Rebuild the directory. +rm -rf mailing-list +mkdir mailing-list + +cat >$GNUPGHOME/gpg-agent.conf <$GNUPGHOME/gpg.conf <' + +UKEYID=$(GPGU -K --with-colons | gawk -F: '/^sec/ { print $5 }') +if test "x$UKEYID" = x +then + echo "Failed to figure out the keyid of the user's primary key." + exit 1 +fi +# We need the short keyid. +UEKEYID=$(GPGU -K --with-colons | gawk -F: '/^ssb/ { print $5 }' \ + | sed 's/^.\{8\}//') +if test "x$UKEYID" = x +then + echo "Failed to figure out the keyid of the user's encryption key." + exit 1 +fi + + +# CFEFE77F (encryption subkey: 2B6E7103) +# A9316686 (95A0BEEA) +# E29FC3CC (117E1AFB) +# 5C1A4468 (94244910) +# F462B6B1 (AA45C71F) +TEST "Importing some public keys." --batch --import keys.gpg +GPGU --batch --export $UKEYID | GPG --batch --import + +banner "Set the password to 'a'" +TEST "Creating mailing list." \ + --batch --quick-gen-mailing-list-key "gnupg-devel " + +KEYID=$(GPG -K --with-colons | gawk -F: '/^sec/ { print $5 }') +if test "x$KEYID" = x +then + echo "Failed to figure out the keyid of the ML's primary key." + exit 1 +fi +SETPASSWD + +TEST "Adding a subscriber." --mailing-list-add-sub $KEYID CFEFE77F +CHECKSUBS 2B6E7103 + +XTEST "Adding the same subscriber." --mailing-list-add-sub $KEYID CFEFE77F + +TEST "Adding two subscribers." --mailing-list-add-sub $KEYID A9316686 E29FC3CC +CHECKSUBS 117E1AFB 2B6E7103 95A0BEEA + +TEST "Removing a subscriber." --mailing-list-rm-sub $KEYID 117E1AFB +# We need to wait a second, otherwise the key may not yet be +# recognized as expired. +sleep 1 +CHECKSUBS 2B6E7103 95A0BEEA + +TEST "Adding a subscriber." --mailing-list-add-sub $KEYID 5C1A4468 +GPG --mailing-list-subs $KEYID | grep -v subscribers | sort > subs +CHECKSUBS 2B6E7103 94244910 95A0BEEA + +TEST "Removing a subscriber." --mailing-list-rm-sub $KEYID 2B6E7103 +sleep 1 +CHECKSUBS 94244910 95A0BEEA + +TEST "Adding a subscriber." --mailing-list-add-sub $KEYID F462B6B1 +CHECKSUBS AA45C71F 94244910 95A0BEEA + +TEST "Adding a subscriber." --mailing-list-add-sub $KEYID $UKEYID +CHECKSUBS AA45C71F 94244910 95A0BEEA $UEKEYID + +GPG --batch --export $KEYID | GPGU --batch --import + +GNUPGHOME=`pwd`/user SETPASSWD + +banner "Using subscriber's key to list subscribers" +GPGU --try-secret-key $UKEYID --mailing-list-subs $KEYID \ + | grep -v subscribers | sort > mailing-list/subs-have.$KEYID +CHECKLIST AA45C71F 94244910 95A0BEEA $UEKEYID + +banner "Using subscriber's key to send a message" +# Note: --list-packets uses long keyids. +echo | GPGU --trust-model=always --try-secret-key $UKEYID -r $KEYID -e \ + | GPGU --list-packets \ + | gawk '/pubkey enc packet/ { print $9 }' \ + | sed 's/^.\{8\}//' \ + | sort > mailing-list/subs-have.$KEYID +CHECKLIST AA45C71F 94244910 95A0BEEA $UEKEYID + +echo "All tests passed!" + +exit 0