From: santiago@nyu.edu Date: Tue, 05 Apr 2016 16:07:28 GMT Subject: [PATCH v5 5/6] builtin/verify-tag: move verification code to tag.c Message-ID: <1459872449-7537-6-git-send-email-santiago@nyu.edu> In-Reply-To: <1459872449-7537-1-git-send-email-santiago@nyu.edu> From: Santiago Torres The PGP verification routine for tags could be accessed by other commands that require it. We do this by moving it to the common tag.c module. We rename the verify_tag() function to gpg_verify_tag() to avoid conflicts with the mktag.c function. Signed-off-by: Santiago Torres --- builtin/verify-tag.c | 50 +------------------------------------------------- tag.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ tag.h | 1 + 3 files changed, 50 insertions(+), 49 deletions(-) diff --git a/builtin/verify-tag.c b/builtin/verify-tag.c index 7a7c376..e9a2005 100644 --- a/builtin/verify-tag.c +++ b/builtin/verify-tag.c @@ -18,54 +18,6 @@ static const char * const verify_tag_usage[] = { NULL }; -static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags) -{ - struct signature_check sigc; - int payload_size; - int ret; - - memset(&sigc, 0, sizeof(sigc)); - - payload_size = parse_signature(buf, size); - - if (size == payload_size) { - if (flags & GPG_VERIFY_VERBOSE) - write_in_full(1, buf, payload_size); - return error("no signature found"); - } - - ret = check_signature(buf, payload_size, buf + payload_size, - size - payload_size, &sigc); - print_signature_buffer(&sigc, flags); - - signature_check_clear(&sigc); - return ret; -} - -static int verify_tag(const unsigned char *sha1, unsigned flags) -{ - enum object_type type; - char *buf; - char *hex_sha1; - unsigned long size; - int ret; - - hex_sha1 = sha1_to_hex(sha1); - type = sha1_object_info(sha1, NULL); - if (type != OBJ_TAG) - return error("%s: cannot verify a non-tag object of type %s.", - hex_sha1, typename(type)); - - buf = read_sha1_file(sha1, &type, &size); - if (!buf) - return error("%s: unable to read file.", hex_sha1); - - ret = run_gpg_verify(buf, size, flags); - - free(buf); - return ret; -} - static int git_verify_tag_config(const char *var, const char *value, void *cb) { int status = git_gpg_config(var, value, cb); @@ -103,7 +55,7 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix) had_error = 1; continue; } - if (verify_tag(sha1, flags)) + if (gpg_verify_tag(sha1, flags)) had_error = 1; } return had_error; diff --git a/tag.c b/tag.c index d72f742..3f7669f 100644 --- a/tag.c +++ b/tag.c @@ -6,6 +6,54 @@ const char *tag_type = "tag"; +static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags) +{ + struct signature_check sigc; + int payload_size; + int ret; + + memset(&sigc, 0, sizeof(sigc)); + + payload_size = parse_signature(buf, size); + + if (size == payload_size) { + if (flags & GPG_VERIFY_VERBOSE) + write_in_full(1, buf, payload_size); + return error("no signature found"); + } + + ret = check_signature(buf, payload_size, buf + payload_size, + size - payload_size, &sigc); + print_signature_buffer(&sigc, flags); + + signature_check_clear(&sigc); + return ret; +} + +int gpg_verify_tag(const unsigned char *sha1, unsigned flags) +{ + enum object_type type; + char *buf; + char *hex_sha1; + unsigned long size; + int ret; + + hex_sha1 = sha1_to_hex(sha1); + type = sha1_object_info(sha1, NULL); + if (type != OBJ_TAG) + return error("%s: cannot verify a non-tag object of type %s.", + hex_sha1, typename(type)); + + buf = read_sha1_file(sha1, &type, &size); + if (!buf) + return error("%s: unable to read file.", hex_sha1); + + ret = run_gpg_verify(buf, size, flags); + + free(buf); + return ret; +} + struct object *deref_tag(struct object *o, const char *warn, int warnlen) { while (o && o->type == OBJ_TAG) diff --git a/tag.h b/tag.h index f4580ae..cb643b9 100644 --- a/tag.h +++ b/tag.h @@ -17,5 +17,6 @@ extern int parse_tag_buffer(struct tag *item, const void *data, unsigned long si extern int parse_tag(struct tag *item); extern struct object *deref_tag(struct object *, const char *, int); extern struct object *deref_tag_noverify(struct object *); +extern int gpg_verify_tag(const unsigned char *sha1, unsigned flags); #endif /* TAG_H */ -- 2.8.0