From a8cef7ebc2b8c3aa1477b61fecfaa8e5d63446d7 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 5 Aug 2024 16:19:32 +0200 Subject: [PATCH] scd: New getinfo subcommand "manufacturer" * scd/command.c (cmd_getinfo): Add subcommand "manufacturer". * scd/app-openpgp.c (get_manufacturer): Rename to ... (app_openpgp_manufacturer): this and make global. -- Example: $ gpg-connect-agent 'scd getinfo manufacturer 42' /bye D Magrathea OK --- scd/app-common.h | 1 + scd/app-openpgp.c | 6 +++--- scd/command.c | 8 ++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/scd/app-common.h b/scd/app-common.h index f4035f766..03b6c4884 100644 --- a/scd/app-common.h +++ b/scd/app-common.h @@ -335,6 +335,7 @@ card_t app_do_with_keygrip (ctrl_t ctrl, int action, const char *keygrip_str, /*-- app-openpgp.c --*/ gpg_error_t app_select_openpgp (app_t app); +const char *app_openpgp_manufacturer (unsigned int no); /*-- app-nks.c --*/ gpg_error_t app_select_nks (app_t app); diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index 4af4f880e..250c4142e 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -290,8 +290,8 @@ static gpg_error_t change_keyattr_from_string /* Return the OpenPGP card manufacturer name. */ -static const char * -get_manufacturer (unsigned int no) +const char * +app_openpgp_manufacturer (unsigned int no) { /* Note: Make sure that there is no colon or linefeed in the string. */ switch (no) @@ -1273,7 +1273,7 @@ do_getattr (app_t app, ctrl_t ctrl, const char *name) return send_status_printf (ctrl, table[idx].name, "%u %s", app->app_local->manufacturer, - get_manufacturer (app->app_local->manufacturer)); + app_openpgp_manufacturer (app->app_local->manufacturer)); } if (table[idx].special == -9) { diff --git a/scd/command.c b/scd/command.c index b607523dd..b386b9c5f 100644 --- a/scd/command.c +++ b/scd/command.c @@ -1878,6 +1878,8 @@ static const char hlp_getinfo[] = " cmd_has_option CMD OPT\n" " - Returns OK if command CMD has option OPT.\n" " dump_state - Dump internal infos to the log stream.\n" + " manufacturer NUMBER\n" + " - Return a description of the OpenPGP manufacturer id.\n" " apdu_strerror NUMBER\n" " - Return a string for a status word.\n"; static gpg_error_t @@ -2004,6 +2006,12 @@ cmd_getinfo (assuan_context_t ctx, char *line) { rc = app_send_active_apps (NULL, ctrl); } + else if ((s=has_leading_keyword (line, "manufacturer"))) + { + unsigned long ul = strtoul (s, NULL, 0); + s = app_openpgp_manufacturer (ul); + rc = assuan_send_data (ctx, s, strlen (s)); + } else if ((s=has_leading_keyword (line, "apdu_strerror"))) { unsigned long ul = strtoul (s, NULL, 0);