diff options
| author | Ingo Klöcker <[email protected]> | 2026-07-30 15:35:44 +0200 |
|---|---|---|
| committer | Ingo Klöcker <[email protected]> | 2026-07-30 15:35:44 +0200 |
| commit | 31eb884e8f102ed3cf1220ccdd77e6e1931a9a7b (patch) | |
| tree | e2149ac273a61eec24fc1b292f6cd2e0d5340dd7 | |
| parent | Ignore TRUST_ status lines if no NEWSIG was seen (diff) | |
| download | gpgme-31eb884e8f102ed3cf1220ccdd77e6e1931a9a7b.tar.gz gpgme-31eb884e8f102ed3cf1220ccdd77e6e1931a9a7b.zip | |
Handle new SIGINFO status line
* src/gpgme.h.in (gpgme_status_code_t): Add status code for SIGINFO.
* src/status-table.c (status_table): Add "SIGINFO".
* src/verify.c (parse_sig_info): New.
(_gpgme_verify_status_handler): Handle SIGINFO status line.
--
GnuPG-bug-id: 8368
| -rw-r--r-- | src/gpgme.h.in | 3 | ||||
| -rw-r--r-- | src/status-table.c | 1 | ||||
| -rw-r--r-- | src/verify.c | 23 |
3 files changed, 26 insertions, 1 deletions
diff --git a/src/gpgme.h.in b/src/gpgme.h.in index a42453a6..c3fb843a 100644 --- a/src/gpgme.h.in +++ b/src/gpgme.h.in @@ -2737,7 +2737,8 @@ typedef enum GPGME_STATUS_VERIFICATION_COMPLIANCE_MODE = 100, GPGME_STATUS_CANCELED_BY_USER = 101, GPGME_STATUS_ENCRYPTION_COMPLIANCE_MODE = 102, - GPGME_STATUS_SESSION_HASH = 103 + GPGME_STATUS_SESSION_HASH = 103, + GPGME_STATUS_SIGINFO = 104 } gpgme_status_code_t; diff --git a/src/status-table.c b/src/status-table.c index 1b94e101..6c48e41f 100644 --- a/src/status-table.c +++ b/src/status-table.c @@ -125,6 +125,7 @@ static struct status_table_s status_table[] = { "SHM_GET_HIDDEN", GPGME_STATUS_SHM_GET_HIDDEN }, { "SHM_INFO", GPGME_STATUS_SHM_INFO }, { "SIGEXPIRED", GPGME_STATUS_SIGEXPIRED }, + { "SIGINFO", GPGME_STATUS_SIGINFO }, { "SIG_CREATED", GPGME_STATUS_SIG_CREATED }, { "SIG_ID", GPGME_STATUS_SIG_ID }, { "SIG_SUBPACKET", GPGME_STATUS_SIG_SUBPACKET }, diff --git a/src/verify.c b/src/verify.c index 7ae18cb8..8179e4a8 100644 --- a/src/verify.c +++ b/src/verify.c @@ -487,6 +487,24 @@ parse_valid_sig (gpgme_signature_t sig, char *args, gpgme_protocol_t protocol) static gpgme_error_t +parse_sig_info (gpgme_signature_t sig, char *args) +{ + char *end = args; + char *tail; + + if (!*args) + /* We require at least the creation time. */ + return gpg_error (GPG_ERR_GENERAL); + + sig->timestamp = _gpgme_parse_timestamp (end, &tail); + if (sig->timestamp == -1 || end == tail || (*tail && *tail != ' ')) + return trace_gpg_error (GPG_ERR_INV_ENGINE); + + return 0; +} + + +static gpgme_error_t parse_notation (gpgme_signature_t sig, gpgme_status_code_t code, char *args) { gpgme_error_t err; @@ -969,6 +987,11 @@ _gpgme_verify_status_handler (void *priv, gpgme_status_code_t code, char *args) return sig ? parse_valid_sig (sig, args, ctx->protocol) : trace_gpg_error (GPG_ERR_INV_ENGINE); + case GPGME_STATUS_SIGINFO: + opd->only_newsig_seen = 0; + return sig ? parse_sig_info (sig, args) + : trace_gpg_error (GPG_ERR_INV_ENGINE); + case GPGME_STATUS_NODATA: opd->only_newsig_seen = 0; if (!sig) |
