1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-13 07:36:09 +02:00

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>
This commit is contained in:
brian m. carlson 2015-06-21 23:14:41 +00:00 committed by Junio C Hamano
parent 434060ec6d
commit ca194d50b8
4 changed files with 18 additions and 10 deletions

View File

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

View File

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

View File

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

View File

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