From 610f234043f936bbb54659327c8c303108dbf4ff Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 8 Dec 2015 14:10:29 +0100 Subject: [PATCH] privops: refactor initialisation/finalisation Rename PRV_Initialise() to PRV_StartHelper() and add a new initialisation function, which just sets the helper fd to -1. Move the initialision/finalisation calls from the system drivers to main.c. If privops is not included in the build, define empty macros for the function names, so their calls don't have to be wrapped in #ifdefs. --- main.c | 3 +++ privops.c | 12 ++++++++++-- privops.h | 5 +++++ sys_macosx.c | 5 +---- 4 files changed, 19 insertions(+), 6 deletions(-) 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 } /* ================================================== */