From 71c214c840782a67801fc8dbf5fe8a4f4fc62d01 Mon Sep 17 00:00:00 2001 From: Michael J Gruber Date: Mon, 23 Jun 2014 09:05:48 +0200 Subject: gpg-interface: provide access to the payload In contrast to tag signatures, commit signatures are put into the header, that is between the other header parts and commit messages. Provide access to the commit content sans the signature, which is the payload that is actually signed. Commit signature verification does the parsing anyways, and callers may wish to act on or display the commit object sans the signature. Signed-off-by: Michael J Gruber Signed-off-by: Junio C Hamano diff --git a/commit.c b/commit.c index f479331..e9686b2 100644 --- a/commit.c +++ b/commit.c @@ -1219,6 +1219,7 @@ void check_commit_signature(const struct commit* commit, struct signature_check &gpg_output, &gpg_status); if (status && !gpg_output.len) goto out; + sigc->payload = strbuf_detach(&payload, NULL); sigc->gpg_output = strbuf_detach(&gpg_output, NULL); sigc->gpg_status = strbuf_detach(&gpg_status, NULL); parse_gpg_output(sigc); diff --git a/gpg-interface.c b/gpg-interface.c index e71b59d..ff07012 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -9,10 +9,12 @@ static const char *gpg_program = "gpg"; void signature_check_clear(struct signature_check *sigc) { + free(sigc->payload); free(sigc->gpg_output); free(sigc->gpg_status); free(sigc->signer); free(sigc->key); + sigc->payload = NULL; sigc->gpg_output = NULL; sigc->gpg_status = NULL; sigc->signer = NULL; diff --git a/gpg-interface.h b/gpg-interface.h index 9f0784a..37c23da 100644 --- a/gpg-interface.h +++ b/gpg-interface.h @@ -2,6 +2,7 @@ #define GPG_INTERFACE_H struct signature_check { + char *payload; char *gpg_output; char *gpg_status; char result; /* 0 (not checked), -- cgit v0.10.2-6-g49f6