commit 54d1013
default
·
2023-01-08 09:19:25 +0000 UTC
parent 7bcac99
More work in check_signature() error archiving.
1 files changed,
+11,
-10
M
http.c
M
http.c
+11,
-10
1@@ -103,7 +103,7 @@ d_char *http_signed_request(snac *snac, char *method, char *url,
2 }
3
4
5-static int _check_signature(snac *snac, char *req)
6+static int _check_signature(snac *snac, char *req, char **err)
7 /* check the signature */
8 {
9 char *sig_hdr = xs_dict_get(req, "signature");
10@@ -140,7 +140,7 @@ static int _check_signature(snac *snac, char *req)
11 }
12
13 if (keyId == NULL || headers == NULL || signature == NULL) {
14- snac_debug(snac, 0, xs_fmt("check_signature bad signature header"));
15+ *err = xs_fmt("bad signature header");
16 return 0;
17 }
18
19@@ -151,13 +151,13 @@ static int _check_signature(snac *snac, char *req)
20 /* the actor must already be here */
21 xs *actor = NULL;
22 if (!valid_status(actor_get(snac, keyId, &actor))) {
23- snac_debug(snac, 0, xs_fmt("check_signature unknown actor %s", keyId));
24+ *err = xs_fmt("unknown actor %s", keyId);
25 return 0;
26 }
27
28 if ((p = xs_dict_get(actor, "publicKey")) == NULL ||
29 ((pubkey = xs_dict_get(p, "publicKeyPem")) == NULL)) {
30- snac_debug(snac, 0, xs_fmt("check_signature cannot get pubkey from %s", keyId));
31+ *err = xs_fmt("cannot get pubkey from %s", keyId);
32 return 0;
33 }
34
35@@ -190,9 +190,7 @@ static int _check_signature(snac *snac, char *req)
36 else {
37 /* add the header */
38 if ((hc = xs_dict_get(req, v)) == NULL) {
39- snac_debug(snac, 0,
40- xs_fmt("check_signature cannot find header %s", v));
41-
42+ *err = xs_fmt("cannot find header '%s'", v);
43 return 0;
44 }
45
46@@ -204,7 +202,7 @@ static int _check_signature(snac *snac, char *req)
47 }
48
49 if (xs_evp_verify(pubkey, sig_str, strlen(sig_str), signature) != 1) {
50- snac_debug(snac, 0, xs_fmt("check_signature rsa verify error %s", keyId));
51+ *err = xs_fmt("RSA verify error %s", keyId);
52 return 0;
53 }
54
55@@ -216,13 +214,16 @@ int check_signature(snac *snac, char *req)
56 /* checks the signature and archives the error */
57 {
58 int ret;
59+ xs *err = NULL;
60
61- if ((ret = _check_signature(snac, req)) == 0) {
62+ if ((ret = _check_signature(snac, req, &err)) == 0) {
63 xs *ntid = tid(0);
64- xs *fn = xs_fmt("%s/error/check_signature_%s.json", srv_basedir, ntid);
65+ xs *fn = xs_fmt("%s/error/check_signature_%s", srv_basedir, ntid);
66 FILE *f;
67
68 if ((f = fopen(fn, "w")) != NULL) {
69+ fprintf(f, "Error: %s\nRequest headers:\n", err);
70+
71 xs *j = xs_json_dumps_pp(req, 4);
72
73 fwrite(j, strlen(j), 1, f);