[PATCH v2 5/7] gpg: centralize printing signature buffers
From: brian m. carlson <hidden>
Date: 2016-06-15 23:05:26
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- builtin/verify-commit.c | 7 +------ builtin/verify-tag.c | 9 +++++---- gpg-interface.c | 9 +++++++++ gpg-interface.h | 3 +++ 4 files changed, 18 insertions(+), 10 deletions(-)
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
--
2.4.0