r += add_key(keys, "wildcards", WILDCARDS, 0);
r += add_key(keys, "quit", QUIT, 0);
r += add_key(keys, "exit", QUIT, 0);
+ r += add_key(keys, "shutdown", SHUTDOWN, 0);
if (r) {
free_keys(keys);
add_handler(REINSTATE+PATH, NULL);
add_handler(FAIL+PATH, NULL);
add_handler(QUIT, NULL);
+ add_handler(SHUTDOWN, NULL);
return 0;
}
__FMT,
__WILDCARDS,
__QUIT,
+ __SHUTDOWN,
};
#define LIST (1 << __LIST)
#define TOPOLOGY (1 << __TOPOLOGY)
#define CONFIG (1 << __CONFIG)
#define BLACKLIST (1 << __BLACKLIST)
-#define DEVICES (1 << __DEVICES)
-#define FMT (1 << __FMT)
+#define DEVICES (1 << __DEVICES)
+#define FMT (1 << __FMT)
#define COUNT (1 << __COUNT)
#define WILDCARDS (1 << __WILDCARDS)
#define QUIT (1 << __QUIT)
+#define SHUTDOWN (1 << __SHUTDOWN)
#define INITIAL_REPLY_LEN 1000
{
return 0;
}
+
+int
+cli_shutdown (void * v, char ** reply, int * len, void * data)
+{
+ condlog(3, "shutdown (operator)");
+
+ return exit_daemon(0);
+}
int cli_reinstate(void * v, char ** reply, int * len, void * data);
int cli_fail(void * v, char ** reply, int * len, void * data);
int cli_quit(void * v, char ** reply, int * len, void * data);
+int cli_shutdown(void * v, char ** reply, int * len, void * data);
set_handler_callback(DISABLEQ+MAPS, cli_disable_all_queueing);
set_handler_callback(RESTOREQ+MAPS, cli_restore_all_queueing);
set_handler_callback(QUIT, cli_quit);
+ set_handler_callback(SHUTDOWN, cli_shutdown);
umask(077);
uxsock_listen(&uxsock_trigger, ap);
return NULL;
}
-static int
+int
exit_daemon (int status)
{
if (status != 0)
#define MAPGCINT 5
+int exit_daemon(int);
int reconfigure (struct vectors *);
int ev_add_path (char *, struct vectors *);
int ev_remove_path (char *, struct vectors *);