Ignore SIGPIPE in keyd
[onak.git] / keyd.c
diff --git a/keyd.c b/keyd.c
index c802264fb332882ef523173a5ddd8c9a12da6270..ccc47502f0fd0e86de306ead5a82ac927619d999 100644 (file)
--- a/keyd.c
+++ b/keyd.c
@@ -9,6 +9,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <getopt.h>
+#include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -69,7 +70,7 @@ void iteratefunc(void *ctx, struct openpgp_publickey *key)
                storebuf.buffer = malloc(8192);
 
                logthing(LOGTHING_TRACE,
-                               "Iterating over 0x%016llX.",
+                               "Iterating over 0x%016" PRIX64 ".",
                                get_keyid(key));
 
                flatten_publickey(key,
@@ -125,7 +126,7 @@ int sock_init(const char *sockname)
 
 int sock_do(int fd)
 {
-       int      cmd = KEYD_CMD_UNKNOWN;
+       uint32_t cmd = KEYD_CMD_UNKNOWN;
        ssize_t  bytes = 0;
        ssize_t  count = 0;
        int      ret = 0;
@@ -152,6 +153,8 @@ int sock_do(int fd)
                case KEYD_CMD_VERSION:
                        cmd = KEYD_REPLY_OK;
                        write(fd, &cmd, sizeof(cmd));
+                       cmd = sizeof(keyd_version);
+                       write(fd, &cmd, sizeof(cmd));
                        write(fd, &keyd_version, sizeof(keyd_version));
                        break;
                case KEYD_CMD_GET:
@@ -164,7 +167,8 @@ int sock_do(int fd)
                        storebuf.offset = 0;
                        if (ret == 0) {
                                logthing(LOGTHING_INFO,
-                                               "Fetching 0x%llX, result: %d",
+                                               "Fetching 0x%" PRIX64
+                                               ", result: %d",
                                                keyid,
                                                config.dbbackend->
                                                fetch_key(keyid, &key, false));
@@ -294,7 +298,8 @@ int sock_do(int fd)
                        }
                        if (ret == 0) {
                                logthing(LOGTHING_INFO,
-                                               "Deleting 0x%llX, result: %d",
+                                               "Deleting 0x%" PRIX64
+                                               ", result: %d",
                                                keyid,
                                                config.dbbackend->delete_key(
                                                        keyid, false));
@@ -309,6 +314,8 @@ int sock_do(int fd)
                        }
                        if (ret == 0) {
                                keyid = config.dbbackend->getfullkeyid(keyid);
+                               cmd = sizeof(keyid);
+                               write(fd, &cmd, sizeof(cmd));
                                write(fd, &keyid, sizeof(keyid));
                        }
                        break;
@@ -321,9 +328,14 @@ int sock_do(int fd)
                        write(fd, &bytes, sizeof(bytes));
                        break;
                case KEYD_CMD_CLOSE:
+                       cmd = KEYD_REPLY_OK;
+                       write(fd, &cmd, sizeof(cmd));
                        ret = 1;
                        break;
                case KEYD_CMD_QUIT:
+                       cmd = KEYD_REPLY_OK;
+                       write(fd, &cmd, sizeof(cmd));
+                       ret = 1;
                        trytocleanup();
                        break;
                default:
@@ -395,7 +407,8 @@ int main(int argc, char *argv[])
        }
 
        catchsignals();
-       
+       signal(SIGPIPE, SIG_IGN);
+
        snprintf(sockname, 1023, "%s/%s", config.db_dir, KEYD_SOCKET);
        fd = sock_init(sockname);