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 <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael J Gruber 2014-06-23 09:05:48 +02:00 коммит произвёл Junio C Hamano
Родитель 01e57b5d91
Коммит 71c214c840
3 изменённых файлов: 4 добавлений и 0 удалений

Просмотреть файл

@ -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);

Просмотреть файл

@ -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;

Просмотреть файл

@ -2,6 +2,7 @@
#define GPG_INTERFACE_H
struct signature_check {
char *payload;
char *gpg_output;
char *gpg_status;
char result; /* 0 (not checked),