assert(command_length == 0 || command_length >= offsetof(CMD_Reply, data));
}
- if (CNF_GetBindCommandPath()[0])
- sock_fdu = prepare_socket(AF_UNIX, 0);
- else
- sock_fdu = -1;
+ sock_fdu = -1;
port_number = CNF_GetCommandPort();
/* ================================================== */
+void
+CAM_OpenUnixSocket(void)
+{
+ /* This is separated from CAM_Initialise() as it needs to be called when
+ the process has already dropped the root privileges */
+ if (CNF_GetBindCommandPath()[0])
+ sock_fdu = prepare_socket(AF_UNIX, 0);
+}
+
+/* ================================================== */
+
static void
transmit_reply(CMD_Reply *msg, union sockaddr_all *where_to)
{
extern void CAM_Finalise(void);
+extern void CAM_OpenUnixSocket(void);
extern int CAM_AddAccessRestriction(IPAddr *ip_addr, int subnet_bits, int allow, int all);
extern int CAM_CheckAccessRestriction(IPAddr *ip_addr);
MNL_Finalise();
CLG_Finalise();
NSR_Finalise();
+ SST_Finalise();
NCR_Finalise();
- CAM_Finalise();
NIO_Finalise();
- SST_Finalise();
+ CAM_Finalise();
KEY_Finalise();
RCL_Finalise();
SRC_Finalise();
RCL_Initialise();
KEY_Initialise();
+ /* Open privileged ports before dropping root */
+ CAM_Initialise(address_family);
+ NIO_Initialise(address_family);
+ NCR_Initialise();
+ CNF_SetupAccessRestrictions();
+
/* Command-line switch must have priority */
if (!sched_priority) {
sched_priority = CNF_GetSchedPriority();
REF_Initialise();
SST_Initialise();
- NIO_Initialise(address_family);
- CAM_Initialise(address_family);
- NCR_Initialise();
NSR_Initialise();
CLG_Initialise();
MNL_Initialise();
/* From now on, it is safe to do finalisation on exit */
initialised = 1;
- CNF_SetupAccessRestrictions();
+ CAM_OpenUnixSocket();
if (ref_mode == REF_ModeNormal && CNF_GetInitSources() > 0) {
ref_mode = REF_ModeInitStepSlew;