verify-tag: move tag verification code to tag.c
The PGP verification routine for tags could be accessed by other modules that require to do so. Publish the verify_tag function in tag.c and rename it to gpg_verify_tag so it does not conflict with builtin/mktag's static function. Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Santiago Torres <santiago@nyu.edu> Reviewed-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Santiago Torres committed
Apr 22, 2016 at 10:52 UTC
45a227ef769df9fc0d198f323d2f919aa74375e1
3 files changed
+56
-54
builtin/verify-tag.c
+1
-54
@@ -18,59 +18,6 @@ static const char * const verify_tag_usage[] = {
18
NULL
19
};
20
21
-static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags)
22
-{
23
- struct signature_check sigc;
24
- size_t payload_size;
25
- int ret;
26
-
27
- memset(&sigc, 0, sizeof(sigc));
28
-
29
- payload_size = parse_signature(buf, size);
30
-
31
- if (size == payload_size) {
32
- if (flags & GPG_VERIFY_VERBOSE)
33
- write_in_full(1, buf, payload_size);
34
- return error("no signature found");
35
- }
36
-
37
- ret = check_signature(buf, payload_size, buf + payload_size,
38
- size - payload_size, &sigc);
39
- print_signature_buffer(&sigc, flags);
40
-
41
- signature_check_clear(&sigc);
42
- return ret;
43
-}
44
-
45
-static int verify_tag(const unsigned char *sha1, const char *name_to_report,
46
- unsigned flags)
47
-{
48
- enum object_type type;
49
- char *buf;
50
- unsigned long size;
51
- int ret;
52
-
53
- type = sha1_object_info(sha1, NULL);
54
- if (type != OBJ_TAG)
55
- return error("%s: cannot verify a non-tag object of type %s.",
56
- name_to_report ?
57
- name_to_report :
58
- find_unique_abbrev(sha1, DEFAULT_ABBREV),
59
- typename(type));
60
-
61
- buf = read_sha1_file(sha1, &type, &size);
62
- if (!buf)
63
- return error("%s: unable to read file.",
64
- name_to_report ?
65
- name_to_report :
66
- find_unique_abbrev(sha1, DEFAULT_ABBREV));
67
-
68
- ret = run_gpg_verify(buf, size, flags);
69
-
70
- free(buf);
71
- return ret;
72
-}
73
-
21
static int git_verify_tag_config(const char *var, const char *value, void *cb)
22
{
23
int status = git_gpg_config(var, value, cb);
@@ -104,7 +51,7 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)
51
const char *name = argv[i++];
52
if (get_sha1(name, sha1))
53
had_error = !!error("tag '%s' not found.", name);
107
- else if (verify_tag(sha1, name, flags))
54
+ else if (gpg_verify_tag(sha1, name, flags))
55
had_error = 1;
56
}
57
return had_error;
tag.c
+53
@@ -6,6 +6,59 @@
6
7
const char *tag_type = "tag";
8
9
+static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags)
10
+{
11
+ struct signature_check sigc;
12
+ size_t payload_size;
13
+ int ret;
14
+
15
+ memset(&sigc, 0, sizeof(sigc));
16
+
17
+ payload_size = parse_signature(buf, size);
18
+
19
+ if (size == payload_size) {
20
+ if (flags & GPG_VERIFY_VERBOSE)
21
+ write_in_full(1, buf, payload_size);
22
+ return error("no signature found");
23
+ }
24
+
25
+ ret = check_signature(buf, payload_size, buf + payload_size,
26
+ size - payload_size, &sigc);
27
+ print_signature_buffer(&sigc, flags);
28
+
29
+ signature_check_clear(&sigc);
30
+ return ret;
31
+}
32
+
33
+int gpg_verify_tag(const unsigned char *sha1, const char *name_to_report,
34
+ unsigned flags)
35
+{
36
+ enum object_type type;
37
+ char *buf;
38
+ unsigned long size;
39
+ int ret;
40
+
41
+ type = sha1_object_info(sha1, NULL);
42
+ if (type != OBJ_TAG)
43
+ return error("%s: cannot verify a non-tag object of type %s.",
44
+ name_to_report ?
45
+ name_to_report :
46
+ find_unique_abbrev(sha1, DEFAULT_ABBREV),
47
+ typename(type));
48
+
49
+ buf = read_sha1_file(sha1, &type, &size);
50
+ if (!buf)
51
+ return error("%s: unable to read file.",
52
+ name_to_report ?
53
+ name_to_report :
54
+ find_unique_abbrev(sha1, DEFAULT_ABBREV));
55
+
56
+ ret = run_gpg_verify(buf, size, flags);
57
+
58
+ free(buf);
59
+ return ret;
60
+}
61
+
62
struct object *deref_tag(struct object *o, const char *warn, int warnlen)
63
{
64
while (o && o->type == OBJ_TAG)
tag.h
+2
@@ -17,5 +17,7 @@ extern int parse_tag_buffer(struct tag *item, const void *data, unsigned long si
17
extern int parse_tag(struct tag *item);
18
extern struct object *deref_tag(struct object *, const char *, int);
19
extern struct object *deref_tag_noverify(struct object *);
20
+extern int gpg_verify_tag(const unsigned char *sha1,
21
+ const char *name_to_report, unsigned flags);
22
23
#endif /* TAG_H */