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:
parent
d9f9b3be03
commit
acac103ba5
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user