From 9a5b0a54fa460c56fd895974ca41db4e869ae0e0 Mon Sep 17 00:00:00 2001 From: Pieter Lexis Date: Wed, 29 Apr 2020 11:32:23 +0200 Subject: [PATCH] Set socket-dir to RUNTIME_DIRECTORY under systemd. 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 | 11 ++++++++++- pdns/pdns_recursor.cc | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/pdns/common_startup.cc b/pdns/common_startup.cc index da3c8e3371..c9d7569859 100644 --- a/pdns/common_startup.cc +++ b/pdns/common_startup.cc @@ -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")=""; diff --git a/pdns/pdns_recursor.cc b/pdns/pdns_recursor.cc index 712c9cc6cb..0db01c9d34 100644 --- a/pdns/pdns_recursor.cc +++ b/pdns/pdns_recursor.cc @@ -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")=""; -- 2.47.2