1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-03 22:56:33 +02:00

* 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.
This commit is contained in:
David Shaw 2006-07-14 16:07:01 +00:00
parent 5476afe1b4
commit 2dc880aa9e
3 changed files with 27 additions and 11 deletions

View file

@ -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;