From 8fe76e1bb054e843aa57715d01ab629953eaa419 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor Date: Tue, 11 Sep 2012 16:02:11 -0400 Subject: fetch all keys instead of the first 5 (and work better with gpg 2.0.19, which apparently does not retrieve keys from gpg --search if the --batch argument is also present) --- Changelog | 4 +++- src/share/common | 25 ++++++++++++++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Changelog b/Changelog index 96a60cf..48956dd 100644 --- a/Changelog +++ b/Changelog @@ -2,8 +2,10 @@ monkeysphere (0.36~pre) unstable; urgency=low * keytrans no longer confuses user IDs across different keys (closes MS #2682) + * fetch all available keys from keyserver instead of first 5 (closes MS + #1046) - -- Daniel Kahn Gillmor Mon, 20 Dec 2010 19:31:30 -0500 + -- Daniel Kahn Gillmor Tue, 11 Sep 2012 15:45:51 -0400 monkeysphere (0.35) upstream; diff --git a/src/share/common b/src/share/common index 87cef61..f9be05a 100644 --- a/src/share/common +++ b/src/share/common @@ -595,11 +595,10 @@ is_gpg_version_greater_equal() { } # retrieve all keys with given user id from keyserver -# FIXME: need to figure out how to retrieve all matching keys -# (not just first N (5 in this case)) gpg_fetch_userid() { local returnCode=0 local userID + local foundkeyids if [ "$CHECK_KEYSERVER" != 'true' ] ; then return 0 @@ -608,16 +607,32 @@ gpg_fetch_userid() { userID="$1" log verbose " checking keyserver $KEYSERVER... " - echo 1,2,3,4,5 | \ + foundkeyids="$(echo | \ gpg --quiet --batch --with-colons \ --command-fd 0 --keyserver "$KEYSERVER" \ - --search ="$userID" &>/dev/null + --search ="$userID" 2>/dev/null)" returnCode="$?" if [ "$returnCode" != 0 ] ; then log error "Failure ($returnCode) searching keyserver $KEYSERVER for user id '$userID'" + else + log debug " keyserver raw output: +----- +$foundkeyids +-----" + foundkeyids="$(printf "%s" "$foundkeyids" | grep '^pub:' | cut -f2 -d: | sed 's/^/0x/')" + log verbose " Found keyids on keyserver: $(printf "%s" "$foundkeyids" | tr '\n' ' ')" + if [ -n "$foundkeyids" ]; then + echo | gpg --quiet --batch --with-colons \ + --command-fd 0 --keyserver "$KEYSERVER" \ + --recv-keys $foundkeyids &>/dev/null + returnCode="$?" + if [ "$returnCode" != 0 ] ; then + log error "Failure ($returnCode) receiving keyids ($foundkeyids) from keyserver $KEYSERVER" + fi + fi fi - + return "$returnCode" } -- cgit v1.2.3