X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb%2Fkeyd.c;h=ff02116d239a28d62762cfa4b30f3b9f50455611;hb=a2979c20e1ab2d52e3a961ac7dad45fee9d6345a;hp=ddd1366a9bb7c94b56b6d31fc7b181005ae2c663;hpb=51c1a7dd950efef6a4d00df1878341777f8064ff;p=onak.git diff --git a/keydb/keyd.c b/keydb/keyd.c index ddd1366..ff02116 100644 --- a/keydb/keyd.c +++ b/keydb/keyd.c @@ -232,10 +232,15 @@ static int sock_init(const char *sockname) if (ret != -1) { ret = listen(fd, 5); - if (ret == -1) { - close(fd); - fd = -1; - } + } + + if (ret == -1) { + logthing(LOGTHING_ERROR, + "Couldn't open socket to listen on: %s (%d)", + strerror(errno), + errno); + close(fd); + fd = -1; } #ifdef HAVE_SYSTEMD } @@ -295,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; @@ -359,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;