diff options
author | David Shaw <[email protected]> | 2006-07-14 16:07:01 +0000 |
---|---|---|
committer | David Shaw <[email protected]> | 2006-07-14 16:07:01 +0000 |
commit | 2dc880aa9ea4d895d7c80b973f05bb01026b29f2 (patch) | |
tree | 004d3f97c504d6d4ca75ac2d9ae7fe40560434f1 /keyserver/gpgkeys_ldap.c | |
parent | * gpgkeys_ldap.c (printquoted), curl-shim.c (curl_escape): Fix bad (diff) | |
download | gnupg-2dc880aa9ea4d895d7c80b973f05bb01026b29f2.tar.gz gnupg-2dc880aa9ea4d895d7c80b973f05bb01026b29f2.zip |
* gpgkeys_hkp.c (send_key), gpgkeys_ldap.c (send_key, send_key_keyserver):
Fix string matching problem when the ascii armored form of the key happens
to match "KEY" at the beginning of the line.
Diffstat (limited to '')
-rw-r--r-- | keyserver/gpgkeys_ldap.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/keyserver/gpgkeys_ldap.c b/keyserver/gpgkeys_ldap.c index 2e4d39d4a..6e5345e5d 100644 --- a/keyserver/gpgkeys_ldap.c +++ b/keyserver/gpgkeys_ldap.c @@ -567,7 +567,7 @@ send_key(int *eof) { int err,begin=0,end=0,keysize=1,ret=KEYSERVER_INTERNAL_ERROR; char *dn=NULL,line[MAX_LINE],*key=NULL; - char keyid[17]; + char keyid[17],state[6]; LDAPMod **modlist,**addlist,**ml; modlist=malloc(sizeof(LDAPMod *)); @@ -608,7 +608,8 @@ send_key(int *eof) /* Assemble the INFO stuff into LDAP attributes */ while(fgets(line,MAX_LINE,input)!=NULL) - if(sscanf(line,"INFO %16s BEGIN\n",keyid)==1) + if(sscanf(line,"INFO %16s %5s\n",keyid,state)==2 + && strcmp(state,"BEGIN")==0) { begin=1; break; @@ -653,7 +654,8 @@ send_key(int *eof) /* Now parse each line until we see the END */ while(fgets(line,MAX_LINE,input)!=NULL) - if(sscanf(line,"INFO %16s END\n",keyid)==1) + if(sscanf(line,"INFO %16s %3s\n",keyid,state)==2 + && strcmp(state,"END")==0) { end=1; break; @@ -674,7 +676,8 @@ send_key(int *eof) /* Read and throw away stdin until we see the BEGIN */ while(fgets(line,MAX_LINE,input)!=NULL) - if(sscanf(line,"KEY %16s BEGIN\n",keyid)==1) + if(sscanf(line,"KEY %16s %5s\n",keyid,state)==2 + && strcmp(state,"BEGIN")==0) { begin=1; break; @@ -692,7 +695,8 @@ send_key(int *eof) /* 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) + if(sscanf(line,"KEY %16s %3s\n",keyid,state)==2 + && strcmp(state,"END")==0) { end=1; break; @@ -778,7 +782,7 @@ send_key_keyserver(int *eof) { int err,begin=0,end=0,keysize=1,ret=KEYSERVER_INTERNAL_ERROR; char *dn=NULL,line[MAX_LINE],*key[2]={NULL,NULL}; - char keyid[17]; + char keyid[17],state[6]; LDAPMod mod, *attrs[2]; memset(&mod,0,sizeof(mod)); @@ -812,7 +816,8 @@ send_key_keyserver(int *eof) /* Read and throw away stdin until we see the BEGIN */ while(fgets(line,MAX_LINE,input)!=NULL) - if(sscanf(line,"KEY %16s BEGIN\n",keyid)==1) + if(sscanf(line,"KEY %16s %5s\n",keyid,state)==2 + && strcmp(state,"BEGIN")==0) { begin=1; break; @@ -830,7 +835,8 @@ send_key_keyserver(int *eof) /* 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) + if(sscanf(line,"KEY %16s %3s\n",keyid,state)==2 + && strcmp(state,"END")==0) { end=1; break; |