From: Bert Hubert Date: Tue, 2 Mar 2010 21:25:25 +0000 (+0000) Subject: David Gavarret discovered socket-owner, socket-group and socket-mode were not hooked... X-Git-Tag: rec-3.2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=387de317201eeb8e2a987b538a1cdcab4d490565;p=pdns David Gavarret discovered socket-owner, socket-group and socket-mode were not hooked up. And not documented either. Code by Aki Tuomi. git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1535 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/docs/pdns.sgml b/pdns/docs/pdns.sgml index 040e3d402..5d80f3d66 100644 --- a/pdns/docs/pdns.sgml +++ b/pdns/docs/pdns.sgml @@ -9264,6 +9264,15 @@ local0.err /var/log/pdns.err + + socket-owner, socket-group, socket-mode + + + Owner, group and mode of the controlsocket. Owner and group can be specified by name, mode is in octal. + + + + spoof-nearmiss-max diff --git a/pdns/pdns_recursor.cc b/pdns/pdns_recursor.cc index 3393e5d55..13a33a3ec 100644 --- a/pdns/pdns_recursor.cc +++ b/pdns/pdns_recursor.cc @@ -658,6 +658,25 @@ void makeControlChannelSocket() { string sockname=::arg()["socket-dir"]+"/pdns_recursor.controlsocket"; s_rcc.listen(sockname); + +#ifndef WIN32 + int sockowner = -1; + int sockgroup = -1; + + if (!::arg().isEmpty("socket-group")) + sockgroup=::arg().asGid("socket-group"); + if (!::arg().isEmpty("socket-owner")) + sockowner=::arg().asUid("socket-owner"); + + if (sockgroup > -1 || sockowner > -1) + chown(sockname.c_str(), sockowner, sockgroup); + + // do mode change if socket-mode is given + if(!::arg().isEmpty("socket-mode")) { + mode_t sockmode=::arg().asMode("socket-mode"); + chmod(sockname.c_str(), sockmode); + } +#endif } void handleRunningTCPQuestion(int fd, FDMultiplexer::funcparam_t& var)