gpg_interface: allow to request status return
Currently, verify_signed_buffer() returns the user facing output only. Allow callers to request the status output also. Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Michael J Gruber committed
Feb 14, 2013 at 17:04 UTC
9cc4ac8ff1ae84f9435f2c7de3f7ab796103adba
6 files changed
+13
-10
builtin/fmt-merge-msg.c
+1
-1
@@ -492,7 +492,7 @@ static void fmt_merge_msg_sigs(struct strbuf *out)
492
493
if (size == len)
494
; /* merely annotated */
495
- else if (verify_signed_buffer(buf, len, buf + len, size - len, &sig)) {
495
+ else if (verify_signed_buffer(buf, len, buf + len, size - len, &sig, NULL)) {
496
if (!sig.len)
497
strbuf_addstr(&sig, "gpg verification failed.\n");
498
}
builtin/verify-tag.c
+1
-1
@@ -29,7 +29,7 @@ static int run_gpg_verify(const char *buf, unsigned long size, int verbose)
29
if (size == len)
30
return error("no signature found");
31
32
- return verify_signed_buffer(buf, len, buf + len, size - len, NULL);
32
+ return verify_signed_buffer(buf, len, buf + len, size - len, NULL, NULL);
33
}
34
35
static int verify_tag(const char *name, int verbose)
gpg-interface.c
+7
-4
@@ -100,13 +100,14 @@ int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *sig
100
*/
101
int verify_signed_buffer(const char *payload, size_t payload_size,
102
const char *signature, size_t signature_size,
103
- struct strbuf *gpg_output)
103
+ struct strbuf *gpg_output, struct strbuf *gpg_status)
104
{
105
struct child_process gpg;
106
const char *args_gpg[] = {NULL, "--status-fd=1", "--verify", "FILE", "-", NULL};
107
char path[PATH_MAX];
108
int fd, ret;
109
struct strbuf buf = STRBUF_INIT;
110
+ struct strbuf *pbuf = &buf;
111
112
args_gpg[0] = gpg_program;
113
fd = git_mkstemp(path, PATH_MAX, ".git_vtag_tmpXXXXXX");
@@ -137,15 +138,17 @@ int verify_signed_buffer(const char *payload, size_t payload_size,
138
strbuf_read(gpg_output, gpg.err, 0);
139
close(gpg.err);
140
}
140
- strbuf_read(&buf, gpg.out, 0);
141
+ if (gpg_status)
142
+ pbuf = gpg_status;
143
+ strbuf_read(pbuf, gpg.out, 0);
144
close(gpg.out);
145
146
ret = finish_command(&gpg);
147
148
unlink_or_warn(path);
149
147
- ret |= !strstr(buf.buf, "\n[GNUPG:] GOODSIG ");
148
- strbuf_release(&buf);
150
+ ret |= !strstr(pbuf->buf, "\n[GNUPG:] GOODSIG ");
151
+ strbuf_release(&buf); /* no matter it was used or not */
152
153
return ret;
154
}
gpg-interface.h
+1
-1
@@ -2,7 +2,7 @@
2
#define GPG_INTERFACE_H
3
4
extern int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key);
5
-extern int verify_signed_buffer(const char *payload, size_t payload_size, const char *signature, size_t signature_size, struct strbuf *gpg_output);
5
+extern int verify_signed_buffer(const char *payload, size_t payload_size, const char *signature, size_t signature_size, struct strbuf *gpg_output, struct strbuf *gpg_status);
6
extern int git_gpg_config(const char *, const char *, void *);
7
extern void set_signing_key(const char *);
8
extern const char *get_signing_key(void);
log-tree.c
+2
-2
@@ -434,7 +434,7 @@ static void show_signature(struct rev_info *opt, struct commit *commit)
434
435
status = verify_signed_buffer(payload.buf, payload.len,
436
signature.buf, signature.len,
437
- &gpg_output);
437
+ &gpg_output, NULL);
438
if (status && !gpg_output.len)
439
strbuf_addstr(&gpg_output, "No signature\n");
440
@@ -503,7 +503,7 @@ static void show_one_mergetag(struct rev_info *opt,
503
if (verify_signed_buffer(extra->value, payload_size,
504
extra->value + payload_size,
505
extra->len - payload_size,
506
- &verify_message)) {
506
+ &verify_message, NULL)) {
507
if (verify_message.len <= gpg_message_offset)
508
strbuf_addstr(&verify_message, "No signature\n");
509
else
pretty.c
+1
-1
@@ -917,7 +917,7 @@ static void parse_commit_signature(struct format_commit_context *ctx)
917
goto out;
918
status = verify_signed_buffer(payload.buf, payload.len,
919
signature.buf, signature.len,
920
- &gpg_output);
920
+ &gpg_output, NULL);
921
if (status && !gpg_output.len)
922
goto out;
923
ctx->signature.gpg_output = strbuf_detach(&gpg_output, NULL);