diff --git a/main.c b/main.c index e2cf470..c2c33f5 100644 --- a/main.c +++ b/main.c @@ -49,6 +49,7 @@ #include "refclock.h" #include "clientlog.h" #include "nameserv.h" +#include "privops.h" #include "smooth.h" #include "tempcomp.h" #include "util.h" @@ -111,6 +112,7 @@ MAI_CleanupAndExit(void) NCR_Finalise(); NIO_Finalise(); CAM_Finalise(); + PRV_Finalise(); KEY_Finalise(); RCL_Finalise(); SRC_Finalise(); @@ -484,6 +486,7 @@ int main SRC_Initialise(); RCL_Initialise(); KEY_Initialise(); + PRV_Initialise(); /* Open privileged ports before dropping root */ CAM_Initialise(address_family); diff --git a/privops.c b/privops.c index e0967ab..49fecbb 100644 --- a/privops.c +++ b/privops.c @@ -91,7 +91,7 @@ typedef struct { } u; } PrvResponse; -static int helper_fd = -1; +static int helper_fd; static pid_t helper_pid; static int @@ -477,11 +477,19 @@ PRV_BindSocket(int sock, struct sockaddr *address, socklen_t address_len) /* ======================================================================= */ +void +PRV_Initialise(void) +{ + helper_fd = -1; +} + +/* ======================================================================= */ + /* DAEMON - setup socket(s) then fork to run the helper */ /* must be called before privileges are dropped */ void -PRV_Initialise(void) +PRV_StartHelper(void) { pid_t pid; int fd, sock_pair[2]; diff --git a/privops.h b/privops.h index b3737e4..a513ee9 100644 --- a/privops.h +++ b/privops.h @@ -48,7 +48,12 @@ int PRV_BindSocket(int sock, struct sockaddr *address, socklen_t address_len); #ifdef PRIVOPS_HELPER void PRV_Initialise(void); +void PRV_StartHelper(void); void PRV_Finalise(void); +#else +#define PRV_Initialise() +#define PRV_StartHelper() +#define PRV_Finalise() #endif #endif diff --git a/sys_macosx.c b/sys_macosx.c index 266d2ad..c1592dd 100644 --- a/sys_macosx.c +++ b/sys_macosx.c @@ -417,7 +417,7 @@ SYS_MacOSX_SetScheduler(int SchedPriority) #ifdef FEAT_PRIVDROP void SYS_MacOSX_DropRoot(uid_t uid, gid_t gid) { - PRV_Initialise(); + PRV_StartHelper(); if (setgroups(0, NULL)) LOG_FATAL(LOGF_SysMacOSX, "setgroups() failed : %s", strerror(errno)); @@ -457,9 +457,6 @@ SYS_MacOSX_Finalise(void) SCH_RemoveTimeout(drift_removal_id); clock_finalise(); -#ifdef FEAT_PRIVDROP - PRV_Finalise(); -#endif } /* ================================================== */