diff options
author | David Shaw <[email protected]> | 2013-03-03 01:39:48 +0000 |
---|---|---|
committer | David Shaw <[email protected]> | 2013-03-03 01:39:48 +0000 |
commit | 6f0ec6ab485f48c8079ab2a16ed41ee7859f88ab (patch) | |
tree | 1577cd06707e5ae39a93f6784299626e91328555 | |
parent | Emulate curl_easy_getinfo and CURLINFO_RESPONSE_CODE in curl-shim. (diff) | |
download | gnupg-6f0ec6ab485f48c8079ab2a16ed41ee7859f88ab.tar.gz gnupg-6f0ec6ab485f48c8079ab2a16ed41ee7859f88ab.zip |
Differentiate between success (full or partial), not-found, and failure.
* keyserver/gpgkeys_hkp.c (get_key): Use curl_easy_setinfo to get the
HTTP status code so we can tell the difference between a successful
retrieval, a partial retrieval, a not-found, or a server failed.
-rw-r--r-- | keyserver/gpgkeys_hkp.c | 87 |
1 files changed, 76 insertions, 11 deletions
diff --git a/keyserver/gpgkeys_hkp.c b/keyserver/gpgkeys_hkp.c index bc2f0447e..309e728c2 100644 --- a/keyserver/gpgkeys_hkp.c +++ b/keyserver/gpgkeys_hkp.c @@ -1,6 +1,6 @@ /* gpgkeys_hkp.c - talk to an HKP keyserver * Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, - * 2009, 2012 Free Software Foundation, Inc. + * 2009, 2012, 2013 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -312,15 +312,49 @@ get_key(char *getkey) } else { + long status = 0; + curl_writer_finalize(&ctx); - if(!ctx.flags.done) + + curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &status); + + if (opt->verbose > 2) + fprintf (console, "gpgkeys: HTTP response code is %ld\n", status); + + if (status == 200) + { + if (!ctx.flags.done) + { + if (ctx.flags.begun) + { + fprintf (console, "gpgkeys: key %s partially retrieved" + " (probably corrupt)\n", getkey); + fprintf (output, "\nKEY 0x%s FAILED %d\n", + getkey, KEYSERVER_KEY_INCOMPLETE); + } + else + { + fprintf (console, "gpgkeys: key %s can't be retrieved\n", + getkey); + fprintf (output, "\nKEY 0x%s FAILED %d\n", + getkey, KEYSERVER_GENERAL_ERROR); + } + } + else + fprintf (output, "\nKEY 0x%s END\n", getkey); + } + else if (status == 404) { - fprintf(console,"gpgkeys: key %s not found on keyserver\n",getkey); - fprintf(output,"\nKEY 0x%s FAILED %d\n", - getkey,KEYSERVER_KEY_NOT_FOUND); + fprintf (console, "gpgkeys: key %s not found on keyserver\n", getkey); + fprintf (output, "\nKEY 0x%s FAILED %d\n", + getkey, KEYSERVER_KEY_NOT_FOUND); } else - fprintf(output,"\nKEY 0x%s END\n",getkey); + { + fprintf (console, "gpgkeys: key %s can't be retrieved\n", getkey); + fprintf (output, "\nKEY 0x%s FAILED %d\n", + getkey, KEYSERVER_GENERAL_ERROR); + } } return KEYSERVER_OK; @@ -383,16 +417,47 @@ get_name(const char *getkey) } else { + long status = 0; + curl_writer_finalize(&ctx); - if(!ctx.flags.done) + + curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &status); + + if (opt->verbose > 2) + fprintf (console, "gpgkeys: HTTP response code is %ld\n", status); + + if (status == 200) + { + if (!ctx.flags.done) + { + if (ctx.flags.begun) + { + fprintf (console, "gpgkeys: key %s partially retrieved" + " (probably corrupt)\n", getkey); + ret = KEYSERVER_KEY_INCOMPLETE; + } + else + { + fprintf (console, "gpgkeys: key %s can't be retrieved\n", + getkey); + ret = KEYSERVER_GENERAL_ERROR; + } + } + else + { + fprintf (output, "\nNAME %s END\n", getkey); + ret = KEYSERVER_OK; + } + } + else if (status == 404) { - fprintf(console,"gpgkeys: key %s not found on keyserver\n",getkey); - ret=KEYSERVER_KEY_NOT_FOUND; + fprintf (console, "gpgkeys: key %s not found on keyserver\n", getkey); + ret = KEYSERVER_KEY_NOT_FOUND; } else { - fprintf(output,"\nNAME %s END\n",getkey); - ret=KEYSERVER_OK; + fprintf (console, "gpgkeys: key %s can't be retrieved\n", getkey); + ret = KEYSERVER_GENERAL_ERROR; } } |