summaryrefslogtreecommitdiffstats
path: root/src/aeswepd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/aeswepd.c')
-rw-r--r--src/aeswepd.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/aeswepd.c b/src/aeswepd.c
index 1f74c64..3c651e1 100644
--- a/src/aeswepd.c
+++ b/src/aeswepd.c
@@ -20,6 +20,10 @@
#define _GNU_SOURCE
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <assert.h>
#include <sys/select.h>
#include <string.h>
@@ -45,11 +49,12 @@
#include "keyapi.h"
uint8_t aes_key[AES_KEY_LEN];
-int rekey_time = 15*60;
-int n_max_keys = 3;
+int rekey_time = 24*60*60, /* prior to 0.4: 15*60*/
+ n_max_keys = 3;
+
int key_map[MAX_WEP_KEYS];
char *interface_name = NULL;
-int daemonize = 1, use_syslog = 1, wait_on_fork = 0, use_status_file = 1;
+int daemonize = 1, use_syslog = 1, wait_on_fork = 0, use_status_file = 1, wait_on_kill = 0;
char log_ident[32], pid_ident[32];
FILE *status_file = NULL;
@@ -321,6 +326,7 @@ void usage(char *p) {
" -E --key-env=KEYENV Specify environment variable to read key from\n"
" -m --max-keys=NR Specify the number of keys to use concurrently (%i)\n"
" -w --wait-on-fork Wait until daemon fork finished (%s)\n"
+ " -W --wait-on-kill When run with -k, wait until the daemon died (%s)\n"
" -l --list-keys Show keys of running daemon\n"
" -h --help Show this help\n"
" -k --kill Kill a running daemon\n"
@@ -334,6 +340,7 @@ void usage(char *p) {
rekey_time,
n_max_keys,
wait_on_fork ? "on" : "off",
+ wait_on_kill ? "on" : "off",
AES_KEY_LEN);
}
@@ -345,6 +352,7 @@ void parse_args(int argc, char *argv[]) {
{"rekey-time", required_argument, 0, 't'},
{"max-keys", required_argument, 0, 'm'},
{"wait-on-fork", no_argument, 0, 'w'},
+ {"wait-on-kill", no_argument, 0, 'W'},
{"help", no_argument, 0, 'h'},
{"kill", no_argument, 0, 'k'},
{"check-running", no_argument, 0, 'c'},
@@ -374,7 +382,7 @@ void parse_args(int argc, char *argv[]) {
for (;;) {
int c;
- if ((c = getopt_long(argc, argv, "nsi:t:m:whkcvlK:F:E:", long_options, &option_index)) < 0)
+ if ((c = getopt_long(argc, argv, "nsi:t:m:whkcvlK:F:E:W", long_options, &option_index)) < 0)
break;
switch (c) {
@@ -469,6 +477,10 @@ void parse_args(int argc, char *argv[]) {
break;
}
+ case 'W':
+ wait_on_kill = !wait_on_kill;
+ break;
+
default:
daemon_log(LOG_ERR, "Unknown parameter.\n");
exit(1);
@@ -490,7 +502,14 @@ void parse_args(int argc, char *argv[]) {
}
if (_kill) {
- if (daemon_pid_file_kill(SIGINT) < 0) {
+ int rv;
+
+ if (wait_on_kill)
+ rv = daemon_pid_file_kill_wait(SIGINT, 5);
+ else
+ rv = daemon_pid_file_kill(SIGINT);
+
+ if (rv < 0) {
daemon_log(LOG_ERR, "Failed to kill daemon. (%s)", strerror(errno));
exit(6);
}