1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-02-01 16: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 nread;
char response[500];
int have = 0;
int rc;
rc = agent_open (&fd);
@ -628,18 +629,26 @@ simple_query (const char *query)
if (rc)
goto leave;
while (1)
{
if (! have || ! strchr (response, '\n'))
/* get response */
nread = readline (fd, response, 499);
{
nread = readline (fd, &response[have],
sizeof (response) - 1 /* NUL */ - have);
if (nread < 0)
{
rc = -nread;
goto leave;
}
if (nread < 3)
have += nread;
if (have < 3)
{
rc = SPWQ_PROTOCOL_ERROR;
goto leave;
}
response[have] = 0;
}
if (response[0] == 'O' && response[1] == 'K')
/* OK, do nothing. */;
@ -656,14 +665,44 @@ simple_query (const char *query)
log_info (_("canceled by user\n") );
#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
{
#ifdef SPWQ_USE_LOGGING
log_error (_("problem with the agent\n"));
log_error (_("problem with the agent (unexpected response \"%s\"\n"),
response);
#endif
rc = SPWQ_ERR_RESPONSE;
}
break;
}
leave:
if (fd != -1)
close (fd);