]> arthur.barton.de Git - netatalk.git/commitdiff
Start netalockd
authorFrank Lahm <franklahm@googlemail.com>
Mon, 17 Jan 2011 11:49:00 +0000 (12:49 +0100)
committerFrank Lahm <franklahm@googlemail.com>
Mon, 17 Jan 2011 11:49:00 +0000 (12:49 +0100)
configure.in
etc/Makefile.am
etc/netalockd/.gitignore [new file with mode: 0644]
etc/netalockd/Makefile.am [new file with mode: 0644]
etc/netalockd/main.c [new file with mode: 0644]
include/atalk/paths.h

index 3d3d0cb7be8e5fed9054ea783f0274b3954ad153..aeff81340e784ad8f19ba6b16c2f6e2fe5ca8495 100644 (file)
@@ -1326,6 +1326,7 @@ AC_OUTPUT([Makefile
        etc/afpd/Makefile
        etc/atalkd/Makefile
        etc/cnid_dbd/Makefile
+       etc/netalockd/Makefile
        etc/uams/Makefile
        etc/uams/uams_krb4/Makefile
        etc/papd/Makefile
index 6ad182a5693bd5b7278f9804bf0c0708e52282ca..95823e5199525a127b1ba7f5cf74f402e7838bd5 100644 (file)
@@ -1,6 +1,6 @@
 # Makefile.am for etc/
 
-SUBDIRS = afpd cnid_dbd uams
+SUBDIRS = afpd cnid_dbd uams netalockd
 
 if USE_APPLETALK
 SUBDIRS += atalkd papd psf
diff --git a/etc/netalockd/.gitignore b/etc/netalockd/.gitignore
new file mode 100644 (file)
index 0000000..10516a8
--- /dev/null
@@ -0,0 +1,6 @@
+Makefile
+Makefile.in
+.deps
+.libs
+*.o
+netalockd
diff --git a/etc/netalockd/Makefile.am b/etc/netalockd/Makefile.am
new file mode 100644 (file)
index 0000000..cb13679
--- /dev/null
@@ -0,0 +1,6 @@
+# Makefile.am for etc/netalockd/
+
+sbin_PROGRAMS = netalockd
+
+netalockd_SOURCES = main.c
+netalockd_LDADD = $(top_builddir)/libatalk/libatalk.la
diff --git a/etc/netalockd/main.c b/etc/netalockd/main.c
new file mode 100644 (file)
index 0000000..36ce95e
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2010 Frank Lahm
+ * All Rights Reserved.  See COPYRIGHT.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <sys/param.h>
+#include <sys/time.h>
+#include <sys/socket.h>
+#include <errno.h>
+
+#include <atalk/logger.h>
+#include <atalk/adouble.h>
+#include <atalk/paths.h>
+#include <atalk/util.h>
+
+static int reloadconfig;
+
+static void sighandler(int sig)
+{
+    switch( sig ) {
+
+    case SIGTERM :
+        LOG(log_note, logtype_default, "netalockd shutting down on SIGTERM");
+        exit(0);
+        break;
+
+    case SIGHUP :
+        reloadconfig = 1;
+        break;
+
+    default :
+        LOG(log_error, logtype_default, "bad signal" );
+    }
+    return;
+}
+
+
+static void set_signal(void)
+{
+    struct sigaction sv;
+
+    sv.sa_handler = sighandler;
+    sv.sa_flags = SA_RESTART;
+    sigemptyset(&sv.sa_mask);
+    if (sigaction(SIGTERM, &sv, NULL) < 0) {
+        LOG(log_error, logtype_default, "error in sigaction(SIGTERM): %s", strerror(errno));
+        exit(EXIT_FAILURE);
+    }        
+    if (sigaction(SIGINT, &sv, NULL) < 0) {
+        LOG(log_error, logtype_default, "error in sigaction(SIGINT): %s", strerror(errno));
+        exit(EXIT_FAILURE);
+    }        
+
+    memset(&sv, 0, sizeof(struct sigaction));
+    sv.sa_handler = SIG_IGN;
+    sigemptyset(&sv.sa_mask);
+
+    if (sigaction(SIGABRT, &sv, NULL) < 0) {
+        LOG(log_error, logtype_default, "error in sigaction(SIGABRT): %s", strerror(errno));
+        exit(EXIT_FAILURE);
+    }        
+    if (sigaction(SIGHUP, &sv, NULL) < 0) {
+        LOG(log_error, logtype_default, "error in sigaction(SIGHUP): %s", strerror(errno));
+        exit(EXIT_FAILURE);
+    }        
+    if (sigaction(SIGQUIT, &sv, NULL) < 0) {
+        LOG(log_error, logtype_default, "error in sigaction(SIGQUIT): %s", strerror(errno));
+        exit(EXIT_FAILURE);
+    }        
+    if (sigaction(SIGALRM, &sv, NULL) < 0) {
+        LOG(log_error, logtype_default, "error in sigaction(SIGALRM): %s", strerror(errno));
+        exit(EXIT_FAILURE);
+    }        
+    if (sigaction(SIGUSR1, &sv, NULL) < 0) {
+        LOG(log_error, logtype_default, "error in sigaction(SIGUSR1): %s", strerror(errno));
+        exit(EXIT_FAILURE);
+    }        
+    if (sigaction(SIGUSR2, &sv, NULL) < 0) {
+        LOG(log_error, logtype_default, "error in sigaction(SIGUSR2): %s", strerror(errno));
+        exit(EXIT_FAILURE);
+    }        
+
+}
+
+int main(int ac, char **av)
+{
+    sigset_t            sigs;
+    int                 ret;
+
+    /* Log SIGBUS/SIGSEGV SBT */
+    fault_setup(NULL);
+
+    /* Default log setup: log to syslog */
+    setuplog("default log_note");
+
+    switch(server_lock("netalockd", _PATH_NETALOCKD_LOCK, 0)) {
+    case -1: /* error */
+        exit(EXITERR_SYS);
+    case 0: /* child */
+        break;
+    default: /* server */
+        exit(0);
+    }
+
+    set_signal();
+
+    while (1) {
+        if (reloadconfig) {
+            reloadconfig = 0;
+        }
+    }
+
+    return 0;
+}
index 2e75b461b53c0ab198b2a8f44aecf08057c32ea3..689d8b6133cf42eba0d2d9112d57a24d10e43d78 100644 (file)
 #  define _PATH_CNID_METAD_LOCK        ATALKPATHCAT(_PATH_LOCKDIR,"cnid_metad")
 #endif
 
+/*
+ * netalockd paths
+ */
+#if defined (FHS_COMPATIBILITY) || defined (__NetBSD__)
+#  define _PATH_NETALOCKD_LOCK ATALKPATHCAT(_PATH_LOCKDIR,"netalockd.pid")
+#else
+#  define _PATH_NETALOCKD_LOCK ATALKPATHCAT(_PATH_LOCKDIR,"netalockd")
+#endif
+
 #endif /* atalk/paths.h */