2 * Copyright (c) 2010 Frank Lahm
3 * All Rights Reserved. See COPYRIGHT.
8 #endif /* HAVE_CONFIG_H */
14 #include <sys/param.h>
16 #include <sys/socket.h>
19 #include <atalk/logger.h>
20 #include <atalk/paths.h>
21 #include <atalk/util.h>
22 #include <atalk/tevent.h>
24 static int reloadconfig;
26 static void sighandler(int sig)
31 LOG(log_note, logtype_default, "netalockd shutting down on SIGTERM");
40 LOG(log_error, logtype_default, "bad signal" );
46 static void set_signal(void)
50 sv.sa_handler = sighandler;
51 sv.sa_flags = SA_RESTART;
52 sigemptyset(&sv.sa_mask);
53 if (sigaction(SIGTERM, &sv, NULL) < 0) {
54 LOG(log_error, logtype_default, "error in sigaction(SIGTERM): %s", strerror(errno));
57 if (sigaction(SIGINT, &sv, NULL) < 0) {
58 LOG(log_error, logtype_default, "error in sigaction(SIGINT): %s", strerror(errno));
62 memset(&sv, 0, sizeof(struct sigaction));
63 sv.sa_handler = SIG_IGN;
64 sigemptyset(&sv.sa_mask);
66 if (sigaction(SIGABRT, &sv, NULL) < 0) {
67 LOG(log_error, logtype_default, "error in sigaction(SIGABRT): %s", strerror(errno));
70 if (sigaction(SIGHUP, &sv, NULL) < 0) {
71 LOG(log_error, logtype_default, "error in sigaction(SIGHUP): %s", strerror(errno));
74 if (sigaction(SIGQUIT, &sv, NULL) < 0) {
75 LOG(log_error, logtype_default, "error in sigaction(SIGQUIT): %s", strerror(errno));
78 if (sigaction(SIGALRM, &sv, NULL) < 0) {
79 LOG(log_error, logtype_default, "error in sigaction(SIGALRM): %s", strerror(errno));
82 if (sigaction(SIGUSR1, &sv, NULL) < 0) {
83 LOG(log_error, logtype_default, "error in sigaction(SIGUSR1): %s", strerror(errno));
86 if (sigaction(SIGUSR2, &sv, NULL) < 0) {
87 LOG(log_error, logtype_default, "error in sigaction(SIGUSR2): %s", strerror(errno));
93 int main(int ac, char **av)
95 struct tevent_context *event_ctx;
99 /* Default log setup: log to syslog */
100 set_processname("netalockd");
101 setuplog("default log_note");
103 /* Check lockfile and daemonize */
104 switch(server_lock("netalockd", _PATH_NETALOCKD_LOCK, 0)) {
109 default: /* server */
113 /* Setup signal stuff */
115 /* Log SIGBUS/SIGSEGV SBT */
118 if ((event_ctx = tevent_context_init(talloc_autofree_context())) == NULL) {
119 LOG(log_error, logtype_default, "Error initializing event lib");
123 LOG(log_warning, logtype_default, "Running...");
125 /* wait for events - this is where we sit for most of our life */
126 tevent_loop_wait(event_ctx);
128 talloc_free(event_ctx);