+authd_reload_handler authd_reload_handlers[256] = {
+ ['D'] = reload_nameservers,
+};
+
+rb_dictionary *authd_option_handlers;
+
+static void
+handle_stat(int parc, char *parv[])
+{
+ authd_stat_handler handler;
+ unsigned long long rid;
+
+ if(parc < 3)
+ {
+ warn_opers(L_CRIT, "BUG: handle_stat received too few parameters (at least 3 expected, got %d)", parc);
+ return;
+ }
+
+ if((rid = strtoull(parv[1], NULL, 16)) > UINT32_MAX)
+ {
+ warn_opers(L_CRIT, "BUG: handle_stat got a rid that was too large: %s", parv[1]);
+ return;
+ }
+
+ if (!(handler = authd_stat_handlers[(unsigned char)parv[2][0]]))
+ return;
+
+ handler((uint32_t)rid, parv[2][0]);
+}
+
+static void
+handle_options(int parc, char *parv[])
+{
+ struct auth_opts_handler *handler;
+
+ if(parc < 2)
+ {
+ warn_opers(L_CRIT, "BUG: handle_options received too few parameters (at least 2 expected, got %d)", parc);
+ return;
+ }
+
+ if((handler = rb_dictionary_retrieve(authd_option_handlers, parv[1])) == NULL)
+ {
+ warn_opers(L_CRIT, "BUG: handle_options got a bad option type %s", parv[1]);
+ return;
+ }
+
+ if((parc - 2) < handler->min_parc)
+ {
+ warn_opers(L_CRIT, "BUG: handle_options received too few parameters (at least %d expected, got %d)", handler->min_parc, parc);
+ return;
+ }
+
+ handler->handler(parv[1], parc - 2, (const char **)&parv[2]);
+}
+
+static void
+handle_reload(int parc, char *parv[])
+{
+ authd_reload_handler handler;
+
+ if(parc <= 2)
+ {
+ /* Reload all handlers */
+ for(size_t i = 0; i < 256; i++)
+ {
+ if ((handler = authd_reload_handlers[(unsigned char) i]) != NULL)
+ handler('\0');
+ }
+
+ return;
+ }
+
+ if (!(handler = authd_reload_handlers[(unsigned char)parv[1][0]]))
+ return;
+
+ handler(parv[1][0]);
+}
+