X-Git-Url: https://the.earth.li/gitweb/?p=onak.git;a=blobdiff_plain;f=keydb%2Fkeyd.c;h=ff02116d239a28d62762cfa4b30f3b9f50455611;hp=0df7192bfb6795b35d0d2b85ae8eafb6b699d6d1;hb=a2979c20e1ab2d52e3a961ac7dad45fee9d6345a;hpb=00e37c36f214bf9d2e9794d3089e64522a6275a2 diff --git a/keydb/keyd.c b/keydb/keyd.c index 0df7192..ff02116 100644 --- a/keydb/keyd.c +++ b/keydb/keyd.c @@ -300,6 +300,41 @@ static int sock_do(struct onak_dbctx *dbctx, int fd) } } break; + case KEYD_CMD_GET: + if (!keyd_write_reply(fd, KEYD_REPLY_OK)) { + ret = 1; + } + if (ret == 0) { + if ((read(fd, &bytes, 1) != 1) || + (bytes > MAX_FINGERPRINT_LEN)) { + ret = 1; + } else { + fingerprint.length = bytes; + bytes = read(fd, fingerprint.fp, + fingerprint.length); + if (bytes != fingerprint.length) { + ret = 1; + } + } + } + if (ret == 0) { + logthing(LOGTHING_INFO, + "Fetching by fingerprint" + ", result: %d", + dbctx->fetch_key(dbctx, + &fingerprint, + &key, false)); + if (key != NULL) { + keyd_write_key(fd, key); + free_publickey(key); + key = NULL; + } else { + if (!keyd_write_size(fd, 0)) { + ret = 1; + } + } + } + break; case KEYD_CMD_GET_ID: if (!keyd_write_reply(fd, KEYD_REPLY_OK)) { ret = 1; @@ -364,7 +399,6 @@ static int sock_do(struct onak_dbctx *dbctx, int fd) } } break; - case KEYD_CMD_GET_TEXT: if (!keyd_write_reply(fd, KEYD_REPLY_OK)) { ret = 1;