X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/f3e11b1d6f1fc2f58b0e059b0f94ed3911ed7aed..113533041879d6a192e44e8e40661d30e240833d:/authd/authd.c diff --git a/authd/authd.c b/authd/authd.c index f8007a28..4e7c7eb6 100644 --- a/authd/authd.c +++ b/authd/authd.c @@ -23,8 +23,53 @@ #define MAXPARA 10 +static void handle_reload(int parc, char *parv[]); +static void handle_stat(int parc, char *parv[]); + rb_helper *authd_helper = NULL; -authd_cmd_handler authd_cmd_handlers[255] = {}; +authd_cmd_handler authd_cmd_handlers[256] = { + ['H'] = handle_reload, + ['D'] = resolve_dns, + ['S'] = handle_stat, +}; + +authd_stat_handler authd_stat_handlers[256] = { + ['D'] = enumerate_nameservers, +}; + +authd_reload_handler authd_reload_handlers[256] = { + ['D'] = reload_nameservers, +}; + +static void +handle_stat(int parc, char *parv[]) +{ + authd_stat_handler handler; + + if(parc < 3) + /* XXX Should log this somehow */ + return; + + if (!(handler = authd_stat_handlers[(unsigned char)parv[2][0]])) + return; + + handler(parv[1], parv[2][0]); +} + +static void +handle_reload(int parc, char *parv[]) +{ + authd_reload_handler handler; + + if(parc < 2) + /* XXX Should log this somehow */ + return; + + if (!(handler = authd_reload_handlers[(unsigned char)parv[1][0]])) + return; + + handler(parv[1][0]); +} static void parse_request(rb_helper *helper) @@ -42,7 +87,7 @@ parse_request(rb_helper *helper) if(parc < 1) continue; - handler = authd_cmd_handlers[parv[0][0]]; + handler = authd_cmd_handlers[(unsigned char)parv[0][0]]; if (handler != NULL) handler(parc, parv); } @@ -54,7 +99,7 @@ error_cb(rb_helper *helper) exit(1); } -#ifndef WINDOWS +#ifndef _WIN32 static void dummy_handler(int sig) { @@ -65,7 +110,7 @@ dummy_handler(int sig) static void setup_signals(void) { -#ifndef WINDOWS +#ifndef _WIN32 struct sigaction act; act.sa_flags = 0; @@ -103,6 +148,11 @@ main(int argc, char *argv[]) exit(1); } + rb_set_time(); + setup_signals(); + init_resolver(); + rb_init_prng(NULL, RB_PRNG_DEFAULT); + rb_helper_loop(authd_helper, 0); return 0;