]> jfr.im git - solanum.git/blobdiff - authd/authd.c
Merge pull request #171 from staticfox/warnings
[solanum.git] / authd / authd.c
index f9f81edfe08833e564a9b6a9a7cc7bec78891e45..4e7c7eb6dda7133aac3fd190c6d9133d96ba2698 100644 (file)
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <ratbox_lib.h>
-#include <stdio.h>
-
-#include "setup.h"
-#include "common.h"
+#include "authd.h"
+#include "dns.h"
 
 #define MAXPARA 10
 
-static rb_helper *authd_helper = NULL;
+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[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)
@@ -35,6 +78,7 @@ parse_request(rb_helper *helper)
        static char readbuf[READBUF_SIZE];
        int parc;
        int len;
+       authd_cmd_handler handler;
 
        while((len = rb_helper_read(helper, readbuf, sizeof(readbuf))) > 0)
        {
@@ -43,11 +87,9 @@ parse_request(rb_helper *helper)
                if(parc < 1)
                        continue;
 
-               switch (parv[0][0])
-               {
-               default:
-                       break;
-               }
+               handler = authd_cmd_handlers[(unsigned char)parv[0][0]];
+               if (handler != NULL)
+                       handler(parc, parv);
        }
 }
 
@@ -57,7 +99,7 @@ error_cb(rb_helper *helper)
        exit(1);
 }
 
-#ifndef WINDOWS
+#ifndef _WIN32
 static void
 dummy_handler(int sig)
 {
@@ -68,7 +110,7 @@ dummy_handler(int sig)
 static void
 setup_signals(void)
 {
-#ifndef WINDOWS
+#ifndef _WIN32
        struct sigaction act;
 
        act.sa_flags = 0;
@@ -106,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;