commit 7bcac99
default
·
2023-01-08 09:11:33 +0000 UTC
parent 1f949b4
Don't use goto in check_signature(). It seems to interfere with cleanup functions in llvm.
1 files changed,
+15,
-9
M
http.c
M
http.c
+15,
-9
1@@ -103,7 +103,7 @@ d_char *http_signed_request(snac *snac, char *method, char *url,
2 }
3
4
5-int check_signature(snac *snac, char *req)
6+static int _check_signature(snac *snac, char *req)
7 /* check the signature */
8 {
9 char *sig_hdr = xs_dict_get(req, "signature");
10@@ -141,7 +141,7 @@ int check_signature(snac *snac, char *req)
11
12 if (keyId == NULL || headers == NULL || signature == NULL) {
13 snac_debug(snac, 0, xs_fmt("check_signature bad signature header"));
14- goto error;
15+ return 0;
16 }
17
18 /* strip the # from the keyId */
19@@ -152,13 +152,13 @@ int check_signature(snac *snac, char *req)
20 xs *actor = NULL;
21 if (!valid_status(actor_get(snac, keyId, &actor))) {
22 snac_debug(snac, 0, xs_fmt("check_signature unknown actor %s", keyId));
23- goto error;
24+ return 0;
25 }
26
27 if ((p = xs_dict_get(actor, "publicKey")) == NULL ||
28 ((pubkey = xs_dict_get(p, "publicKeyPem")) == NULL)) {
29 snac_debug(snac, 0, xs_fmt("check_signature cannot get pubkey from %s", keyId));
30- goto error;
31+ return 0;
32 }
33
34 /* now build the string to be signed */
35@@ -193,7 +193,7 @@ int check_signature(snac *snac, char *req)
36 snac_debug(snac, 0,
37 xs_fmt("check_signature cannot find header %s", v));
38
39- goto error;
40+ return 0;
41 }
42
43 ss = xs_fmt("%s: %s", v, hc);
44@@ -205,13 +205,19 @@ int check_signature(snac *snac, char *req)
45
46 if (xs_evp_verify(pubkey, sig_str, strlen(sig_str), signature) != 1) {
47 snac_debug(snac, 0, xs_fmt("check_signature rsa verify error %s", keyId));
48- goto error;
49+ return 0;
50 }
51
52 return 1;
53+}
54
55-error:
56- {
57+
58+int check_signature(snac *snac, char *req)
59+/* checks the signature and archives the error */
60+{
61+ int ret;
62+
63+ if ((ret = _check_signature(snac, req)) == 0) {
64 xs *ntid = tid(0);
65 xs *fn = xs_fmt("%s/error/check_signature_%s.json", srv_basedir, ntid);
66 FILE *f;
67@@ -224,5 +230,5 @@ error:
68 }
69 }
70
71- return 0;
72+ return ret;
73 }