chiark / gitweb /
main: disable nscd properly, if possible
[elogind.git] / src / util.c
index c4ff5aa575d4ea45d6b69cb42c1560354fef7acc..c2ef34dd4378af94500e6cfe3a830186a920c013 100644 (file)
@@ -48,6 +48,7 @@
 #include <pwd.h>
 #include <netinet/ip.h>
 #include <linux/kd.h>
+#include <dlfcn.h>
 
 #include "macro.h"
 #include "util.h"
@@ -2979,6 +2980,24 @@ char *ellipsize(const char *s, unsigned length, unsigned percent) {
         return r;
 }
 
+void nss_disable_nscd(void) {
+
+        void (*func)(void);
+
+        /* This is an internal glibc function call. We are not
+         * supposed to call this, because we are not nscd. However
+         * sometimes we feel really dangerous and do it
+         * nonetheless. Muahahah! But at least we protect this with a
+         * dlsym() just in case glibc takes this away from us. */
+
+        if ((func = dlsym(RTLD_DEFAULT, "__nss_disable_nscd"))) {
+                log_debug("Disabling nscd.");
+                func();
+        } else
+                log_debug("Cannot disable nscd.");
+}
+
+
 static const char *const ioprio_class_table[] = {
         [IOPRIO_CLASS_NONE] = "none",
         [IOPRIO_CLASS_RT] = "realtime",