summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrian m. carlson <sandals@crustytoothpaste.net>2015-06-21 23:14:41 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-06-22 21:20:47 (GMT)
commitca194d50b84b53a0b711fef46d1a47657ec5da41 (patch)
treeb1218e292a895da641a1faa2c7b524de36ea039d
parent434060ec6d9bf50f095db901da3fb9b557e11df1 (diff)
downloadgit-ca194d50b84b53a0b711fef46d1a47657ec5da41.zip
git-ca194d50b84b53a0b711fef46d1a47657ec5da41.tar.gz
git-ca194d50b84b53a0b711fef46d1a47657ec5da41.tar.bz2
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 <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/verify-commit.c7
-rw-r--r--builtin/verify-tag.c9
-rw-r--r--gpg-interface.c9
-rw-r--r--gpg-interface.h3
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