git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 5/7] gpg: centralize printing signature buffers

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Jun 21, 2015, 23:14 UTC
Message-ID
<1434928483-105916-6-git-send-email-sandals@crustytoothpaste.net>
In-Reply-To
<1434928483-105916-1-git-send-email-sandals@crustytoothpaste.net>

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>
---
 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
Previous: brian m. carlsonNext: brian m. carlson
Message 6 of 9 in “Raw gpg output support for verify-commit and verify-tag”
  1. 0/7 Raw gpg output support for verify-commit and verify-tagbrian m. carlson, Jun 21, 2015
  2. 1/7 verify-tag: add testsbrian m. carlson, Jun 21, 2015
  3. 2/7 verify-tag: share code with verify-commitbrian m. carlson, Jun 21, 2015
  4. 3/7 verify-commit: add test for exit status on untrusted signaturebrian m. carlson, Jun 21, 2015
  5. 4/7 gpg: centralize signature checkbrian m. carlson, Jun 21, 2015
  6. 5/7 gpg: centralize printing signature buffersbrian m. carlson, Jun 21, 2015
  7. 6/7 verify-commit: add option to print raw gpg status informationbrian m. carlson, Jun 21, 2015
  8. 7/7 verify-tag: add option to print raw gpg status informationbrian m. carlson, Jun 21, 2015
  9. Junio C HamanoJun 22, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.