]> granicus.if.org Git - pdns/commitdiff
David Gavarret discovered socket-owner, socket-group and socket-mode were not hooked...
authorBert Hubert <bert.hubert@netherlabs.nl>
Tue, 2 Mar 2010 21:25:25 +0000 (21:25 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Tue, 2 Mar 2010 21:25:25 +0000 (21:25 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1535 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/docs/pdns.sgml
pdns/pdns_recursor.cc

index 040e3d402ba63f994d0949319a4f62307e27977e..5d80f3d666d9a09b325757e0c5c5e2a4d528ca0c 100644 (file)
@@ -9264,6 +9264,15 @@ local0.err                        /var/log/pdns.err
              </para>
            </listitem>
          </varlistentry>
+         <varlistentry>
+           <term>socket-owner, socket-group, socket-mode</term>
+           <listitem>
+             <para>
+               Owner, group and mode of the controlsocket. Owner and group can be specified by name, mode is in octal.
+             </para>
+           </listitem>
+         </varlistentry>
+
          <varlistentry>
            <term>spoof-nearmiss-max</term>
            <listitem>
index 3393e5d55036253c07ee1423cf172d948a18b977..13a33a3ec4198e458e325a1acbc2dd468dc1dedf 100644 (file)
@@ -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)