]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
sys_solaris: add support for dropping root privileges
authorMiroslav Lichvar <mlichvar@redhat.com>
Thu, 10 Dec 2015 10:39:40 +0000 (11:39 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 10 Dec 2015 15:30:38 +0000 (16:30 +0100)
On Solaris, use the privops helper for the ntp_adjtime(),
settimeofday(), and bind() system calls.

configure
sys.c
sys_solaris.c
sys_solaris.h

index 24f52c46953928a215e9ed781acd22a4edadbc42..9869f5577c3b94ed27538790560937b51a072a66 100755 (executable)
--- a/configure
+++ b/configure
@@ -411,6 +411,10 @@ case $OPERATINGSYSTEM in
         add_def __EXTENSIONS__
         add_def _XOPEN_SOURCE 1
         add_def _XOPEN_SOURCE_EXTENDED 1
+        if [ $feat_droproot = "1" ]; then
+          add_def FEAT_PRIVDROP
+          priv_ops="ADJUSTTIMEX SETTIME BINDSOCKET"
+        fi
         echo "Configuring for Solaris (" $SYSTEM "SunOS version" $VERSION ")" 
     ;;                                                                        
     * )
diff --git a/sys.c b/sys.c
index bd3441edaa14f90c1f95cba39e979733f3f748c7..9375af62692a062cb82addb55037dc4efe34814d 100644 (file)
--- a/sys.c
+++ b/sys.c
@@ -90,6 +90,8 @@ void SYS_DropRoot(uid_t uid, gid_t gid)
 {
 #if defined(LINUX) && defined (FEAT_PRIVDROP)
   SYS_Linux_DropRoot(uid, gid);
+#elif defined(SOLARIS) && defined(FEAT_PRIVDROP)
+  SYS_Solaris_DropRoot(uid, gid);
 #elif (defined(NETBSD) || defined(FREEBSD)) && defined(FEAT_PRIVDROP)
   SYS_NetBSD_DropRoot(uid, gid);
 #elif defined(MACOSX) && defined(FEAT_PRIVDROP)
index afd693e637318a01a13dc32d3a947cd6bc3e55b7..21197b932351d902970720805b29b39a671ea641 100644 (file)
 
 #include "sysincl.h"
 
+#include "privops.h"
 #include "sys_solaris.h"
 #include "sys_timex.h"
+#include "util.h"
 
 /* ================================================== */
 
@@ -48,3 +50,14 @@ SYS_Solaris_Finalise(void)
 {
   SYS_Timex_Finalise();
 }
+
+/* ================================================== */
+
+#ifdef FEAT_PRIVDROP
+void
+SYS_Solaris_DropRoot(uid_t uid, gid_t gid)
+{
+  PRV_StartHelper();
+  UTI_DropRoot(uid, gid);
+}
+#endif
index 0cce7b34737bd66eed06ce839585514c3e63ceef..46015ba86605bec19872d5c8293ce06d27bd29e6 100644 (file)
@@ -31,4 +31,6 @@ void SYS_Solaris_Initialise(void);
 
 void SYS_Solaris_Finalise(void);
 
+void SYS_Solaris_DropRoot(uid_t uid, gid_t gid);
+
 #endif