Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
brian m. carlson authored and Junio C Hamano committed Jun 22, 2015
1 parent 434060e commit ca194d5
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 10 deletions.
7 changes: 1 addition & 6 deletions builtin/verify-commit.c
Expand Up @@ -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;
Expand Down
9 changes: 5 additions & 4 deletions builtin/verify-tag.c
Expand Up @@ -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;
Expand Down
9 changes: 9 additions & 0 deletions gpg-interface.c
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions 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;
Expand Down Expand Up @@ -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

0 comments on commit ca194d5

Please sign in to comment.