X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/f42ab5050f79833030453b21d69f4f3be9fcd0d0..f5037a4a370b891e14971228c1d491184c7fe8bd:/keyd.c diff --git a/keyd.c b/keyd.c index f8f5d4a..05f9fe9 100644 --- a/keyd.c +++ b/keyd.c @@ -2,14 +2,16 @@ * keyd.c - key retrieval daemon * * Jonathan McDowell - * + * * Copyright 2004 Project Purple */ #include +#include #include #include #include +#include #include #include #include @@ -32,7 +34,7 @@ void iteratefunc(void *ctx, struct openpgp_publickey *key) struct openpgp_packet_list *list_end = NULL; struct buffer_ctx storebuf; int ret = 0; - int fd = (int) ctx; + int *fd = (int *) ctx; if (key != NULL) { storebuf.offset = 0; @@ -52,10 +54,10 @@ void iteratefunc(void *ctx, struct openpgp_publickey *key) logthing(LOGTHING_TRACE, "Sending %d bytes.", storebuf.offset); - ret = write(fd, &storebuf.offset, + ret = write(*fd, &storebuf.offset, sizeof(storebuf.offset)); if (ret != 0) { - write(fd, storebuf.buffer, + write(*fd, storebuf.buffer, storebuf.offset); } @@ -137,6 +139,7 @@ int sock_do(int fd) logthing(LOGTHING_INFO, "Fetching 0x%llX, result: %d", keyid, + config.dbbackend-> fetch_key(keyid, &key, false)); if (key != NULL) { storebuf.size = 8192; @@ -184,6 +187,7 @@ int sock_do(int fd) logthing(LOGTHING_INFO, "Fetching %s, result: %d", search, + config.dbbackend-> fetch_key_text(search, &key)); if (key != NULL) { storebuf.size = 8192; @@ -244,7 +248,7 @@ int sock_do(int fd) &packets, 0); parse_keys(packets, &key); - store_key(key, false, false); + config.dbbackend->store_key(key, false, false); free_packet_list(packets); packets = NULL; free_publickey(key); @@ -265,7 +269,8 @@ int sock_do(int fd) logthing(LOGTHING_INFO, "Deleting 0x%llX, result: %d", keyid, - delete_key(keyid, false)); + config.dbbackend->delete_key( + keyid, false)); } break; case KEYD_CMD_GETFULLKEYID: @@ -276,14 +281,15 @@ int sock_do(int fd) ret = 1; } if (ret == 0) { - keyid = getfullkeyid(keyid); + keyid = config.dbbackend->getfullkeyid(keyid); write(fd, &keyid, sizeof(keyid)); } break; case KEYD_CMD_KEYITER: cmd = KEYD_REPLY_OK; write(fd, &cmd, sizeof(cmd)); - iterate_keys(iteratefunc, (void *) fd); + config.dbbackend->iterate_keys(iteratefunc, + &fd); bytes = 0; write(fd, &bytes, sizeof(bytes)); break; @@ -306,7 +312,8 @@ int sock_do(int fd) int sock_close(int fd) { - return shutdown(fd, SHUT_RDWR); + shutdown(fd, SHUT_RDWR); + return close(fd); } int sock_accept(int fd) @@ -335,8 +342,20 @@ int main(int argc, char *argv[]) int fd = -1; fd_set rfds; char sockname[1024]; + char *configfile = NULL; + int optchar; - readconfig(NULL); + while ((optchar = getopt(argc, argv, "c:")) != -1 ) { + switch (optchar) { + case 'c': + configfile = strdup(optarg); + break; + } + } + + readconfig(configfile); + free(configfile); + configfile = NULL; initlogthing("keyd", config.logfile); catchsignals(); @@ -348,7 +367,7 @@ int main(int argc, char *argv[]) FD_ZERO(&rfds); FD_SET(fd, &rfds); - initdb(false); + config.dbbackend->initdb(false); logthing(LOGTHING_NOTICE, "Accepting connections."); while (!cleanup() && select(fd + 1, &rfds, NULL, NULL, NULL) != -1) { @@ -356,13 +375,13 @@ int main(int argc, char *argv[]) sock_accept(fd); FD_SET(fd, &rfds); } - cleanupdb(); + config.dbbackend->cleanupdb(); sock_close(fd); unlink(sockname); } cleanuplogthing(); cleanupconfig(); - + return(EXIT_SUCCESS); }