diff options
Diffstat (limited to '')
-rw-r--r-- | common/asshelp.c | 38 | ||||
-rw-r--r-- | common/asshelp.h | 4 | ||||
-rw-r--r-- | g10/call-agent.c | 18 |
3 files changed, 43 insertions, 17 deletions
diff --git a/common/asshelp.c b/common/asshelp.c index d33ffb556..f2b4402e1 100644 --- a/common/asshelp.c +++ b/common/asshelp.c @@ -42,6 +42,7 @@ #include "exechelp.h" #include "sysutils.h" #include "status.h" +#include "membuf.h" #include "asshelp.h" /* The type we use for lock_agent_spawning. */ @@ -699,3 +700,40 @@ start_new_dirmngr (assuan_context_t *r_ctx, *r_ctx = ctx; 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; +} diff --git a/common/asshelp.h b/common/asshelp.h index 35d211501..20414bd35 100644 --- a/common/asshelp.h +++ b/common/asshelp.h @@ -74,6 +74,10 @@ start_new_dirmngr (assuan_context_t *r_ctx, gpg_error_t (*status_cb)(ctrl_t, int, ...), 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 --*/ diff --git a/g10/call-agent.c b/g10/call-agent.c index 363fc85dd..3600579bd 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -2408,27 +2408,11 @@ gpg_error_t agent_get_version (ctrl_t ctrl, char **r_version) { gpg_error_t err; - membuf_t data; err = start_agent (ctrl, 0); if (err) return err; - init_membuf (&data, 64); - 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 (); - } + err = get_assuan_server_version (agent_ctx, 0, r_version); return err; } |