From ca194d50b84b53a0b711fef46d1a47657ec5da41 Mon Sep 17 00:00:00 2001 From: "brian m. carlson" Date: Sun, 21 Jun 2015 23:14:41 +0000 Subject: gpg: centralize printing signature buffers The code to handle printing of signature data from a struct signature_check is very similar between verify-commit and verify-tag. Place this in a single function. verify-tag retains its special case behavior of printing the tag even when no valid signature is found. Signed-off-by: brian m. carlson Signed-off-by: Junio C Hamano diff --git a/builtin/verify-commit.c b/builtin/verify-commit.c index e30f7cf..016319a 100644 --- a/builtin/verify-commit.c +++ b/builtin/verify-commit.c @@ -26,12 +26,7 @@ static int run_gpg_verify(const unsigned char *sha1, const char *buf, unsigned l memset(&signature_check, 0, sizeof(signature_check)); ret = check_commit_signature(lookup_commit(sha1), &signature_check); - - if (verbose && signature_check.payload) - fputs(signature_check.payload, stdout); - - if (signature_check.gpg_output) - fputs(signature_check.gpg_output, stderr); + print_signature_buffer(&signature_check, verbose ? GPG_VERIFY_VERBOSE : 0); signature_check_clear(&signature_check); return ret; diff --git a/builtin/verify-tag.c b/builtin/verify-tag.c index 8750bef..d67e3db 100644 --- a/builtin/verify-tag.c +++ b/builtin/verify-tag.c @@ -27,14 +27,15 @@ static int run_gpg_verify(const char *buf, unsigned long size, int verbose) memset(&sigc, 0, sizeof(sigc)); len = parse_signature(buf, size); - if (verbose) - write_in_full(1, buf, len); - if (size == len) + if (size == len) { + if (verbose) + write_in_full(1, buf, len); return error("no signature found"); + } ret = check_signature(buf, len, buf + len, size - len, &sigc); - fputs(sigc.gpg_output, stderr); + print_signature_buffer(&sigc, verbose ? GPG_VERIFY_VERBOSE : 0); signature_check_clear(&sigc); return ret; diff --git a/gpg-interface.c b/gpg-interface.c index 77a4da6..e764fb6 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -85,6 +85,15 @@ int check_signature(const char *payload, size_t plen, const char *signature, return sigc->result != 'G' && sigc->result != 'U'; } +void print_signature_buffer(const struct signature_check *sigc, unsigned flags) +{ + if (flags & GPG_VERIFY_VERBOSE && sigc->payload) + fputs(sigc->payload, stdout); + + if (sigc->gpg_output) + fputs(sigc->gpg_output, stderr); +} + /* * Look at GPG signed content (e.g. a signed tag object), whose * payload is followed by a detached signature on it. Return the diff --git a/gpg-interface.h b/gpg-interface.h index e2aabde..1207861 100644 --- a/gpg-interface.h +++ b/gpg-interface.h @@ -1,6 +1,8 @@ #ifndef GPG_INTERFACE_H #define GPG_INTERFACE_H +#define GPG_VERIFY_VERBOSE 1 + struct signature_check { char *payload; char *gpg_output; @@ -29,5 +31,6 @@ extern void set_signing_key(const char *); extern const char *get_signing_key(void); extern int check_signature(const char *payload, size_t plen, const char *signature, size_t slen, struct signature_check *sigc); +void print_signature_buffer(const struct signature_check *sigc, unsigned flags); #endif -- cgit v0.10.2-6-g49f6