X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/59e5def499b3e9ae3587ebae2bef8794a1df34ea..2725e4d426f80dc79071c0280e1809c84aa2fa4d:/keyd.c diff --git a/keyd.c b/keyd.c index 987724d..1a349a6 100644 --- a/keyd.c +++ b/keyd.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -28,6 +29,7 @@ #include "mem.h" #include "onak-conf.h" #include "parsekey.h" +#include "version.h" void daemonize(void) { @@ -152,6 +154,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: @@ -311,6 +315,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; @@ -323,9 +329,16 @@ 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)); + logthing(LOGTHING_NOTICE, + "Exiting due to quit request."); + ret = 1; trytocleanup(); break; default: @@ -366,6 +379,19 @@ int sock_accept(int fd) return 1; } +static void usage(void) +{ + puts("keyd " ONAK_VERSION " - backend key serving daemon for the " + "onak PGP keyserver.\n"); + puts("Usage:\n"); + puts("\tkeyd [options]\n"); + puts("\tOptions:\n:"); + puts("-c - use as the config file"); + puts("-f - run in the foreground"); + puts("-h - show this help text"); + exit(EXIT_FAILURE); +} + int main(int argc, char *argv[]) { int fd = -1; @@ -375,7 +401,7 @@ int main(int argc, char *argv[]) bool foreground = false; int optchar; - while ((optchar = getopt(argc, argv, "c:f")) != -1 ) { + while ((optchar = getopt(argc, argv, "c:fh")) != -1 ) { switch (optchar) { case 'c': configfile = strdup(optarg); @@ -383,6 +409,10 @@ int main(int argc, char *argv[]) case 'f': foreground = true; break; + case 'h': + default: + usage(); + break; } } @@ -397,7 +427,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);