projects
/
onak.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for calculating SKS style key hashes
[onak.git]
/
keyd.c
diff --git
a/keyd.c
b/keyd.c
index 919b61b899a886609f29caebf86e841b725c9fce..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)
{
@@
-148,6
+153,11
@@
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;
switch (cmd) {
case KEYD_CMD_VERSION:
cmd = KEYD_REPLY_OK;
@@
-334,9
+344,19
@@
int sock_do(int fd)
case KEYD_CMD_QUIT:
cmd = KEYD_REPLY_OK;
write(fd, &cmd, sizeof(cmd));
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;
ret = 1;
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);
@@
-368,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);
}
@@
-375,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;
@@
-384,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);
@@
-392,6
+426,10
@@
int main(int argc, char *argv[])
case 'f':
foreground = true;
break;
case 'f':
foreground = true;
break;
+ case 'h':
+ default:
+ usage();
+ break;
}
}
}
}
@@
-406,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);
@@
-427,6
+475,8
@@
int main(int argc, char *argv[])
unlink(sockname);
}
unlink(sockname);
}
+ free(stats);
+
cleanuplogthing();
cleanupconfig();
cleanuplogthing();
cleanupconfig();