1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-02-07 17:33:02 +01:00

common: Change simple_query to ignore status messages.

* common/simple-pwquery.c (simple_query): Ignore status messages.

--
Signed-off-by: Neal H. Walfield <neal@g10code.com>
GnuPG-bug-id: 2229
This commit is contained in:
Neal H. Walfield 2016-02-12 22:12:21 +01:00
parent d9f9b3be03
commit acac103ba5

View File

@ -618,6 +618,7 @@ simple_query (const char *query)
int fd = -1; int fd = -1;
int nread; int nread;
char response[500]; char response[500];
int have = 0;
int rc; int rc;
rc = agent_open (&fd); rc = agent_open (&fd);
@ -628,18 +629,26 @@ simple_query (const char *query)
if (rc) if (rc)
goto leave; goto leave;
while (1)
{
if (! have || ! strchr (response, '\n'))
/* get response */ /* get response */
nread = readline (fd, response, 499); {
nread = readline (fd, &response[have],
sizeof (response) - 1 /* NUL */ - have);
if (nread < 0) if (nread < 0)
{ {
rc = -nread; rc = -nread;
goto leave; goto leave;
} }
if (nread < 3) have += nread;
if (have < 3)
{ {
rc = SPWQ_PROTOCOL_ERROR; rc = SPWQ_PROTOCOL_ERROR;
goto leave; goto leave;
} }
response[have] = 0;
}
if (response[0] == 'O' && response[1] == 'K') if (response[0] == 'O' && response[1] == 'K')
/* OK, do nothing. */; /* OK, do nothing. */;
@ -656,14 +665,44 @@ simple_query (const char *query)
log_info (_("canceled by user\n") ); log_info (_("canceled by user\n") );
#endif #endif
} }
else if (response[0] == 'S' && response[1] == ' ')
{
char *nextline;
int consumed;
nextline = strchr (response, '\n');
if (! nextline)
/* Point to the NUL. */
nextline = &response[have];
else
/* Move past the \n. */
nextline ++;
consumed = (size_t) nextline - (size_t) response;
/* Skip any additional newlines. */
while (consumed < have && response[consumed] == '\n')
consumed ++;
have -= consumed;
if (have)
memmove (response, &response[consumed], have + 1);
continue;
}
else else
{ {
#ifdef SPWQ_USE_LOGGING #ifdef SPWQ_USE_LOGGING
log_error (_("problem with the agent\n")); log_error (_("problem with the agent (unexpected response \"%s\"\n"),
response);
#endif #endif
rc = SPWQ_ERR_RESPONSE; rc = SPWQ_ERR_RESPONSE;
} }
break;
}
leave: leave:
if (fd != -1) if (fd != -1)
close (fd); close (fd);