diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog index 9f23ae10e..defe989f0 100644 --- a/keyserver/ChangeLog +++ b/keyserver/ChangeLog @@ -1,3 +1,8 @@ +2002-11-04 David Shaw + + * gpgkeys_hkp.c (send_key), gpgkeys_ldap.c (send_key): Properly + handle an input file that does not include any key data at all. + 2002-10-28 Stefan Bellon * gpgkeys_hkp.c: Tidied up RISC OS initializations. diff --git a/keyserver/gpgkeys_hkp.c b/keyserver/gpgkeys_hkp.c index 877415ce9..859b33d6d 100644 --- a/keyserver/gpgkeys_hkp.c +++ b/keyserver/gpgkeys_hkp.c @@ -79,7 +79,7 @@ urlencode_filter( void *opaque, int control, /* Returns 0 on success, -1 on failure, and 1 on eof */ int send_key(void) { - int rc,gotit=0,ret=-1; + int rc,begin=0,end=0,ret=-1; char keyid[17]; char *request; struct http_context hd; @@ -87,6 +87,8 @@ int send_key(void) IOBUF temp = iobuf_temp(); char line[MAX_LINE]; + memset(&hd,0,sizeof(hd)); + request=malloc(strlen(host)+100); if(!request) { @@ -101,25 +103,23 @@ int send_key(void) while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"KEY %16s BEGIN\n",keyid)==1) { - gotit=1; + begin=1; break; } - if(!gotit) + if(!begin) { /* i.e. eof before the KEY BEGIN was found */ ret=1; goto fail; } - gotit=0; - /* Now slurp up everything until we see the END */ while(fgets(line,MAX_LINE,input)) if(sscanf(line,"KEY %16s END\n",keyid)==1) { - gotit=1; + end=1; break; } else @@ -129,7 +129,7 @@ int send_key(void) goto fail; } - if(!gotit) + if(!end) { fprintf(console,"gpgkeys: no KEY %s END found\n",keyid); goto fail; @@ -172,7 +172,6 @@ int send_key(void) if((status/100)!=2) { fprintf(console,"gpgkeys: remote server returned error %d\n",status); - fprintf(output,"KEY %s FAILED\n",keyid); goto fail; } @@ -183,6 +182,9 @@ int send_key(void) iobuf_close(temp); http_close(&hd); + if(ret!=0 && begin) + fprintf(output,"KEY %s FAILED\n",keyid); + return ret; } diff --git a/keyserver/gpgkeys_ldap.c b/keyserver/gpgkeys_ldap.c index 1920da7b5..0a06f2f23 100644 --- a/keyserver/gpgkeys_ldap.c +++ b/keyserver/gpgkeys_ldap.c @@ -61,7 +61,7 @@ RISCOS_GLOBAL_STATICS("LDAP Keyfetcher Heap") /* Returns 0 on success, -1 on failure, and 1 on eof */ int send_key(void) { - int err,gotit=0,keysize=1,ret=-1; + int err,begin=0,end=0,keysize=1,ret=-1; char *dn=NULL; char line[MAX_LINE]; char *key[2]={0,0}; @@ -99,25 +99,23 @@ int send_key(void) while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"KEY %16s BEGIN\n",keyid)==1) { - gotit=1; + begin=1; break; } - if(!gotit) + if(!begin) { /* i.e. eof before the KEY BEGIN was found */ ret=1; goto fail; } - gotit=0; - /* Now slurp up everything until we see the END */ while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"KEY %16s END\n",keyid)==1) { - gotit=1; + end=1; break; } else @@ -133,7 +131,7 @@ int send_key(void) strcat(key[0],line); } - if(!gotit) + if(!end) { fprintf(console,"gpgkeys: no KEY %s END found\n",keyid); goto fail; @@ -154,7 +152,7 @@ int send_key(void) free(key[0]); free(dn); - if(ret!=0) + if(ret!=0 && begin) fprintf(output,"KEY %s FAILED\n",keyid); return ret;