mirror of
git://git.gnupg.org/gnupg.git
synced 2024-06-09 23:39:51 +02:00
common: New function get_assuan_server_version.
* common/asshelp.c: Include membuf.h. (get_assuan_server_version): New. * g10/call-agent.c (agent_get_version): Use new function. -- Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
833ba5faa1
commit
496643291e
|
@ -42,6 +42,7 @@
|
||||||
#include "exechelp.h"
|
#include "exechelp.h"
|
||||||
#include "sysutils.h"
|
#include "sysutils.h"
|
||||||
#include "status.h"
|
#include "status.h"
|
||||||
|
#include "membuf.h"
|
||||||
#include "asshelp.h"
|
#include "asshelp.h"
|
||||||
|
|
||||||
/* The type we use for lock_agent_spawning. */
|
/* The type we use for lock_agent_spawning. */
|
||||||
|
@ -699,3 +700,40 @@ start_new_dirmngr (assuan_context_t *r_ctx,
|
||||||
*r_ctx = ctx;
|
*r_ctx = ctx;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return the version of a server using "GETINFO version". On success
|
||||||
|
0 is returned and R_VERSION receives a malloced string with the
|
||||||
|
version which must be freed by the caller. On error NULL is stored
|
||||||
|
at R_VERSION and an error code returned. Mode is in general 0 but
|
||||||
|
certian values may be used to modify the used version command:
|
||||||
|
|
||||||
|
MODE == 0 = Use "GETINFO version"
|
||||||
|
MODE == 2 - Use "SCD GETINFO version"
|
||||||
|
*/
|
||||||
|
gpg_error_t
|
||||||
|
get_assuan_server_version (assuan_context_t ctx, int mode, char **r_version)
|
||||||
|
{
|
||||||
|
gpg_error_t err;
|
||||||
|
membuf_t data;
|
||||||
|
|
||||||
|
init_membuf (&data, 64);
|
||||||
|
err = assuan_transact (ctx,
|
||||||
|
mode == 2? "SCD GETINFO version"
|
||||||
|
/**/ : "GETINFO version",
|
||||||
|
put_membuf_cb, &data,
|
||||||
|
NULL, NULL, NULL, NULL);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
xfree (get_membuf (&data, NULL));
|
||||||
|
*r_version = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
put_membuf (&data, "", 1);
|
||||||
|
*r_version = get_membuf (&data, NULL);
|
||||||
|
if (!*r_version)
|
||||||
|
err = gpg_error_from_syserror ();
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
|
@ -74,6 +74,10 @@ start_new_dirmngr (assuan_context_t *r_ctx,
|
||||||
gpg_error_t (*status_cb)(ctrl_t, int, ...),
|
gpg_error_t (*status_cb)(ctrl_t, int, ...),
|
||||||
ctrl_t status_cb_arg);
|
ctrl_t status_cb_arg);
|
||||||
|
|
||||||
|
/* Return the version of a server using "GETINFO version". */
|
||||||
|
gpg_error_t get_assuan_server_version (assuan_context_t ctx,
|
||||||
|
int mode, char **r_version);
|
||||||
|
|
||||||
|
|
||||||
/*-- asshelp2.c --*/
|
/*-- asshelp2.c --*/
|
||||||
|
|
||||||
|
|
|
@ -2408,27 +2408,11 @@ gpg_error_t
|
||||||
agent_get_version (ctrl_t ctrl, char **r_version)
|
agent_get_version (ctrl_t ctrl, char **r_version)
|
||||||
{
|
{
|
||||||
gpg_error_t err;
|
gpg_error_t err;
|
||||||
membuf_t data;
|
|
||||||
|
|
||||||
err = start_agent (ctrl, 0);
|
err = start_agent (ctrl, 0);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
init_membuf (&data, 64);
|
err = get_assuan_server_version (agent_ctx, 0, r_version);
|
||||||
err = assuan_transact (agent_ctx, "GETINFO version",
|
|
||||||
put_membuf_cb, &data,
|
|
||||||
NULL, NULL, NULL, NULL);
|
|
||||||
if (err)
|
|
||||||
{
|
|
||||||
xfree (get_membuf (&data, NULL));
|
|
||||||
*r_version = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
put_membuf (&data, "", 1);
|
|
||||||
*r_version = get_membuf (&data, NULL);
|
|
||||||
if (!*r_version)
|
|
||||||
err = gpg_error_from_syserror ();
|
|
||||||
}
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user