]> arthur.barton.de Git - netatalk.git/blobdiff - etc/netatalk/netatalk.c
netatalk: fix a crash on Solaris when registering with mDNS
[netatalk.git] / etc / netatalk / netatalk.c
index 1e5e7394df01e866b93a531b96af23929a1d652d..1956ac58a820734447dfd9b340e5521890acb133 100644 (file)
@@ -42,6 +42,7 @@
 #include <atalk/netatalk_conf.h>
 #include <atalk/bstrlib.h>
 #include <atalk/bstradd.h>
+#include "afp_zeroconf.h"
 
 #include <event2/event.h>
 
@@ -173,7 +174,7 @@ static void sigterm_cb(evutil_socket_t fd, short what, void *arg)
     event_del(sigquit_ev);
     event_del(timer_ev);
 
-#ifdef HAVE_TRACKER_SPARQL
+#ifdef HAVE_TRACKER
     system("tracker-control -t");
 #endif
     kill_childs(SIGTERM, &afpd_pid, &cnid_metad_pid, &dbus_pid, NULL);
@@ -183,7 +184,7 @@ static void sigterm_cb(evutil_socket_t fd, short what, void *arg)
 static void sigquit_cb(evutil_socket_t fd, short what, void *arg)
 {
     LOG(log_note, logtype_afpd, "Exiting on SIGQUIT");
-#ifdef HAVE_TRACKER_SPARQL
+#ifdef HAVE_TRACKER
     system("tracker-control -t");
 #endif
     kill_childs(SIGQUIT, &afpd_pid, &cnid_metad_pid, &dbus_pid, NULL);
@@ -193,6 +194,14 @@ static void sigquit_cb(evutil_socket_t fd, short what, void *arg)
 static void sighup_cb(evutil_socket_t fd, short what, void *arg)
 {
     LOG(log_note, logtype_afpd, "Received SIGHUP, sending all processes signal to reload config");
+
+    if (!(obj.options.flags & OPTION_NOZEROCONF)) {
+        zeroconf_deregister();
+        load_volumes(&obj, lv_all | lv_force);
+        zeroconf_register(&obj);
+        LOG(log_note, logtype_default, "Re-registered with Zeroconf");
+    }
+
     kill_childs(SIGHUP, &afpd_pid, &cnid_metad_pid, NULL);
 }
 
@@ -418,27 +427,31 @@ int main(int argc, char **argv)
         setenv("XDG_CACHE_HOME", _PATH_STATEDIR, 0);
         setenv("TRACKER_USE_LOG_FILES", "1", 0);
 
-        dbus_path = atalk_iniparser_getstring(obj.iniconfig, INISEC_GLOBAL, "dbus daemon", DBUS_DAEMON_PATH);
-        LOG(log_debug, logtype_default, "DBUS: '%s'", dbus_path);
-        if ((dbus_pid = run_process(dbus_path, "--config-file=" _PATH_CONFDIR "dbus-session.conf", NULL)) == NETATALK_SRV_ERROR) {
-            LOG(log_error, logtype_default, "Error starting '%s'", dbus_path);
-            netatalk_exit(EXITERR_CONF);
-        }
+        if (atalk_iniparser_getboolean(obj.iniconfig, INISEC_GLOBAL, "start dbus", 1)) {
+            dbus_path = atalk_iniparser_getstring(obj.iniconfig, INISEC_GLOBAL, "dbus daemon", DBUS_DAEMON_PATH);
+            LOG(log_note, logtype_default, "Starting dbus: %s", dbus_path);
+            if ((dbus_pid = run_process(dbus_path, "--config-file=" _PATH_CONFDIR "dbus-session.conf", NULL)) == NETATALK_SRV_ERROR) {
+                LOG(log_error, logtype_default, "Error starting '%s'", dbus_path);
+                netatalk_exit(EXITERR_CONF);
+            }
 
-        /* Allow dbus some time to start up */
-        sleep(1);
-#endif
+            /* Allow dbus some time to start up */
+            sleep(1);
+        }
 
-#ifdef HAVE_TRACKER_SPARQL
-#ifdef SOLARIS
-        setenv("XDG_DATA_DIRS", TRACKER_PREFIX "/share", 0);
-        setenv("TRACKER_DB_ONTOLOGIES_DIR", TRACKER_PREFIX "/share/tracker/ontologies", 0);
-        setenv("TRACKER_EXTRACTOR_RULES_DIR", TRACKER_PREFIX "/share/tracker/extract-rules", 0);
-        setenv("TRACKER_LANGUAGE_STOPWORDS_DIR", TRACKER_PREFIX "/share/tracker/languages", 0);
-#endif
         set_sl_volumes();
-        system(TRACKER_PREFIX "/bin/tracker-control -s");
+
+        if (atalk_iniparser_getboolean(obj.iniconfig, INISEC_GLOBAL, "start tracker", 1)) {
+            LOG(log_note, logtype_default, "Starting Tracker");
+            system(TRACKER_PREFIX "/bin/tracker-control -s");
+        }
+    }
 #endif
+
+    /* Now register with zeroconf, we also need the volumes for that */
+    if (! (obj.options.flags & OPTION_NOZEROCONF)) {
+        zeroconf_register(&obj);
+        LOG(log_note, logtype_default, "Registered with Zeroconf");
     }
 
     /* run the event loop */