diff --git a/scd/command.c b/scd/command.c index e8c9ff66d..e1895c6e3 100644 --- a/scd/command.c +++ b/scd/command.c @@ -1846,6 +1846,34 @@ scd_command_handler (ctrl_t ctrl, int fd) } + +/* Send a keyinfo string. If DATA is true the string is emitted as a + * data line, else as a status line. */ +void +send_keyinfo (ctrl_t ctrl, int data, const char *keygrip_str, + const char *serialno, const char *idstr) +{ + char *string; + assuan_context_t ctx = ctrl->server_local->assuan_ctx; + + string = xtryasprintf ("%s T %s %s%s", keygrip_str, + serialno? serialno : "-", + idstr? idstr : "-", + data? "\n" : ""); + + if (!string) + return; + + if (!data) + assuan_write_status (ctx, "KEYINFO", string); + else + assuan_send_data (ctx, string, strlen (string)); + + xfree (string); + return; +} + + /* Send a line with status information via assuan and escape all given buffers. The variable elements are pairs of (char *, size_t), terminated with a (NULL, 0). */ diff --git a/scd/scdaemon.h b/scd/scdaemon.h index 806ad8f1a..336013805 100644 --- a/scd/scdaemon.h +++ b/scd/scdaemon.h @@ -122,6 +122,8 @@ const char *scd_get_socket_name (void); /*-- command.c --*/ gpg_error_t initialize_module_command (void); int scd_command_handler (ctrl_t, int); +void send_keyinfo (ctrl_t ctrl, int data, const char *keygrip_str, + const char *serialno, const char *idstr); void send_status_info (ctrl_t ctrl, const char *keyword, ...) GPGRT_ATTR_SENTINEL(1); gpg_error_t send_status_direct (ctrl_t ctrl, const char *keyword,