projects
/
onak.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.4.0 release
[onak.git]
/
keyd.c
diff --git
a/keyd.c
b/keyd.c
index c802264fb332882ef523173a5ddd8c9a12da6270..5d5b7ba8c883b68326361f7789bbb228e6ac1593 100644
(file)
--- a/
keyd.c
+++ b/
keyd.c
@@
-9,6
+9,7
@@
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@
-16,6
+17,7
@@
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
+#include <time.h>
#include <unistd.h>
#include "charfuncs.h"
#include <unistd.h>
#include "charfuncs.h"
@@
-28,6
+30,9
@@
#include "mem.h"
#include "onak-conf.h"
#include "parsekey.h"
#include "mem.h"
#include "onak-conf.h"
#include "parsekey.h"
+#include "version.h"
+
+static struct keyd_stats *stats;
void daemonize(void)
{
void daemonize(void)
{
@@
-69,7
+74,7
@@
void iteratefunc(void *ctx, struct openpgp_publickey *key)
storebuf.buffer = malloc(8192);
logthing(LOGTHING_TRACE,
storebuf.buffer = malloc(8192);
logthing(LOGTHING_TRACE,
- "Iterating over 0x%016
llX
.",
+ "Iterating over 0x%016
" PRIX64 "
.",
get_keyid(key));
flatten_publickey(key,
get_keyid(key));
flatten_publickey(key,
@@
-125,7
+130,7
@@
int sock_init(const char *sockname)
int sock_do(int fd)
{
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;
ssize_t bytes = 0;
ssize_t count = 0;
int ret = 0;
@@
-148,10
+153,17
@@
int sock_do(int fd)
}
if (ret == 0) {
}
if (ret == 0) {
+ if (cmd < KEYD_CMD_LAST) {
+ stats->command_stats[cmd]++;
+ } else {
+ stats->command_stats[KEYD_CMD_UNKNOWN]++;
+ }
switch (cmd) {
case KEYD_CMD_VERSION:
cmd = KEYD_REPLY_OK;
write(fd, &cmd, sizeof(cmd));
switch (cmd) {
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:
write(fd, &keyd_version, sizeof(keyd_version));
break;
case KEYD_CMD_GET:
@@
-164,7
+176,8
@@
int sock_do(int fd)
storebuf.offset = 0;
if (ret == 0) {
logthing(LOGTHING_INFO,
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));
keyid,
config.dbbackend->
fetch_key(keyid, &key, false));
@@
-294,7
+307,8
@@
int sock_do(int fd)
}
if (ret == 0) {
logthing(LOGTHING_INFO,
}
if (ret == 0) {
logthing(LOGTHING_INFO,
- "Deleting 0x%llX, result: %d",
+ "Deleting 0x%" PRIX64
+ ", result: %d",
keyid,
config.dbbackend->delete_key(
keyid, false));
keyid,
config.dbbackend->delete_key(
keyid, false));
@@
-309,6
+323,8
@@
int sock_do(int fd)
}
if (ret == 0) {
keyid = config.dbbackend->getfullkeyid(keyid);
}
if (ret == 0) {
keyid = config.dbbackend->getfullkeyid(keyid);
+ cmd = sizeof(keyid);
+ write(fd, &cmd, sizeof(cmd));
write(fd, &keyid, sizeof(keyid));
}
break;
write(fd, &keyid, sizeof(keyid));
}
break;
@@
-321,11
+337,26
@@
int sock_do(int fd)
write(fd, &bytes, sizeof(bytes));
break;
case KEYD_CMD_CLOSE:
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:
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;
trytocleanup();
break;
+ case KEYD_CMD_STATS:
+ cmd = KEYD_REPLY_OK;
+ write(fd, &cmd, sizeof(cmd));
+ cmd = sizeof(*stats);
+ write(fd, &cmd, sizeof(cmd));
+ write(fd, stats,
+ sizeof(*stats));
+ break;
default:
logthing(LOGTHING_ERROR, "Got unknown command: %d",
cmd);
default:
logthing(LOGTHING_ERROR, "Got unknown command: %d",
cmd);
@@
-357,6
+388,7
@@
int sock_accept(int fd)
}
if (ret != -1) {
}
if (ret != -1) {
+ stats->connects++;
while (!sock_do(srv)) ;
sock_close(srv);
}
while (!sock_do(srv)) ;
sock_close(srv);
}
@@
-364,6
+396,19
@@
int sock_accept(int fd)
return 1;
}
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 <file> - use <file> 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;
int main(int argc, char *argv[])
{
int fd = -1;
@@
-373,7
+418,7
@@
int main(int argc, char *argv[])
bool foreground = false;
int optchar;
bool foreground = false;
int optchar;
- while ((optchar = getopt(argc, argv, "c:f")) != -1 ) {
+ while ((optchar = getopt(argc, argv, "c:f
h
")) != -1 ) {
switch (optchar) {
case 'c':
configfile = strdup(optarg);
switch (optchar) {
case 'c':
configfile = strdup(optarg);
@@
-381,6
+426,10
@@
int main(int argc, char *argv[])
case 'f':
foreground = true;
break;
case 'f':
foreground = true;
break;
+ case 'h':
+ default:
+ usage();
+ break;
}
}
}
}
@@
-395,7
+444,17
@@
int main(int argc, char *argv[])
}
catchsignals();
}
catchsignals();
-
+ signal(SIGPIPE, SIG_IGN);
+
+
+ stats = calloc(1, sizeof(*stats));
+ if (!stats) {
+ logthing(LOGTHING_ERROR,
+ "Couldn't allocate memory for stats structure.");
+ exit(EXIT_FAILURE);
+ }
+ stats->started = time(NULL);
+
snprintf(sockname, 1023, "%s/%s", config.db_dir, KEYD_SOCKET);
fd = sock_init(sockname);
snprintf(sockname, 1023, "%s/%s", config.db_dir, KEYD_SOCKET);
fd = sock_init(sockname);
@@
-416,6
+475,8
@@
int main(int argc, char *argv[])
unlink(sockname);
}
unlink(sockname);
}
+ free(stats);
+
cleanuplogthing();
cleanupconfig();
cleanuplogthing();
cleanupconfig();