]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Set socket-dir to RUNTIME_DIRECTORY under systemd. 9073/head
authorPieter Lexis <pieter.lexis@powerdns.com>
Wed, 29 Apr 2020 09:32:23 +0000 (11:32 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Wed, 29 Apr 2020 09:32:23 +0000 (11:32 +0200)
RUNTIME_DIRECTORY is set by systemd to the value to `RuntimeDirectory`
, which is managed by systemd and so it is safe to use for the socket-dir.

pdns/common_startup.cc
pdns/pdns_recursor.cc

index da3c8e337153e386f30219efe87c24e6bdd674d0..c9d7569859509f1dd6becdd871b9ca8fd6261c70 100644 (file)
@@ -70,7 +70,16 @@ void declareArguments()
 {
   ::arg().set("config-dir","Location of configuration directory (pdns.conf)")=SYSCONFDIR;
   ::arg().set("config-name","Name of this virtual configuration - will rename the binary image")="";
-  ::arg().set("socket-dir",string("Where the controlsocket will live, ")+LOCALSTATEDIR+"/pdns when unset and not chrooted" )="";
+  ::arg().set("socket-dir",string("Where the controlsocket will live, ")+LOCALSTATEDIR+"/pdns when unset and not chrooted"
+#ifdef HAVE_SYSTEMD
+      + ". Set to the RUNTIME_DIRECTORY environment variable when that variable has a value (e.g. under systemd).")="";
+   auto runtimeDir = getenv("RUNTIME_DIRECTORY");
+   if (runtimeDir != nullptr) {
+     ::arg().set("socket-dir") = runtimeDir;
+   }
+#else
+      )="";
+#endif
   ::arg().set("module-dir","Default directory for modules")=PKGLIBDIR;
   ::arg().set("chroot","If set, chroot to this directory for more security")="";
   ::arg().set("logging-facility","Log under a specific facility")="";
index 712c9cc6cbe97b44dc88eeb8fc3090ffba900cac..0db01c9d34419bea68d57e1e37e1a340691e86e9 100644 (file)
@@ -4946,7 +4946,16 @@ int main(int argc, char **argv)
     ::arg().set("socket-group","Group of socket")="";
     ::arg().set("socket-mode", "Permissions for socket")="";
 
-    ::arg().set("socket-dir",string("Where the controlsocket will live, ")+LOCALSTATEDIR+"/pdns-recursor when unset and not chrooted" )="";
+    ::arg().set("socket-dir",string("Where the controlsocket will live, ")+LOCALSTATEDIR+"/pdns-recursor when unset and not chrooted"
+#ifdef HAVE_SYSTEMD
+      + ". Set to the RUNTIME_DIRECTORY environment variable when that variable has a value (e.g. under systemd).")="";
+   auto runtimeDir = getenv("RUNTIME_DIRECTORY");
+   if (runtimeDir != nullptr) {
+     ::arg().set("socket-dir") = runtimeDir;
+   }
+#else
+      )="";
+#endif
     ::arg().set("delegation-only","Which domains we only accept delegations from")="";
     ::arg().set("query-local-address","Source IP address for sending queries")="0.0.0.0";
     ::arg().set("query-local-address6","Source IPv6 address for sending queries. IF UNSET, IPv6 WILL NOT BE USED FOR OUTGOING QUERIES")="";