mirror of
https://github.com/samba-team/samba.git
synced 2025-08-05 12:22:11 +03:00
s3: Make winbindd_reinit_after_fork return NTSTATUS
This commit is contained in:
@ -378,6 +378,7 @@ static void winbind_msg_validate_cache(struct messaging_context *msg_ctx,
|
|||||||
{
|
{
|
||||||
uint8 ret;
|
uint8 ret;
|
||||||
pid_t child_pid;
|
pid_t child_pid;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
DEBUG(10, ("winbindd_msg_validate_cache: got validate-cache "
|
DEBUG(10, ("winbindd_msg_validate_cache: got validate-cache "
|
||||||
"message.\n"));
|
"message.\n"));
|
||||||
@ -404,7 +405,10 @@ static void winbind_msg_validate_cache(struct messaging_context *msg_ctx,
|
|||||||
|
|
||||||
/* child */
|
/* child */
|
||||||
|
|
||||||
if (!winbindd_reinit_after_fork(NULL, NULL)) {
|
status = winbindd_reinit_after_fork(NULL, NULL);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
DEBUG(1, ("winbindd_reinit_after_fork failed: %s\n",
|
||||||
|
nt_errstr(status)));
|
||||||
_exit(0);
|
_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,6 +189,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
|
|||||||
TALLOC_CTX *mem_ctx = NULL;
|
TALLOC_CTX *mem_ctx = NULL;
|
||||||
pid_t parent_pid = sys_getpid();
|
pid_t parent_pid = sys_getpid();
|
||||||
char *lfile = NULL;
|
char *lfile = NULL;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
if (domain->dc_probe_pid != (pid_t)-1) {
|
if (domain->dc_probe_pid != (pid_t)-1) {
|
||||||
/*
|
/*
|
||||||
@ -233,7 +234,10 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!winbindd_reinit_after_fork(NULL, lfile)) {
|
status = winbindd_reinit_after_fork(NULL, lfile);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
DEBUG(1, ("winbindd_reinit_after_fork failed: %s\n",
|
||||||
|
nt_errstr(status)));
|
||||||
messaging_send_buf(winbind_messaging_context(),
|
messaging_send_buf(winbind_messaging_context(),
|
||||||
pid_to_procid(parent_pid),
|
pid_to_procid(parent_pid),
|
||||||
MSG_WINBIND_FAILED_TO_GO_ONLINE,
|
MSG_WINBIND_FAILED_TO_GO_ONLINE,
|
||||||
|
@ -1167,7 +1167,7 @@ static void child_msg_dump_event_list(struct messaging_context *msg,
|
|||||||
dump_event_list(winbind_event_context());
|
dump_event_list(winbind_event_context());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool winbindd_reinit_after_fork(const struct winbindd_child *myself,
|
NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself,
|
||||||
const char *logfilename)
|
const char *logfilename)
|
||||||
{
|
{
|
||||||
struct winbindd_domain *domain;
|
struct winbindd_domain *domain;
|
||||||
@ -1181,7 +1181,7 @@ bool winbindd_reinit_after_fork(const struct winbindd_child *myself,
|
|||||||
true);
|
true);
|
||||||
if (!NT_STATUS_IS_OK(status)) {
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
DEBUG(0,("reinit_after_fork() failed\n"));
|
DEBUG(0,("reinit_after_fork() failed\n"));
|
||||||
return false;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
close_conns_after_fork();
|
close_conns_after_fork();
|
||||||
@ -1192,10 +1192,10 @@ bool winbindd_reinit_after_fork(const struct winbindd_child *myself,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!winbindd_setup_sig_term_handler(false))
|
if (!winbindd_setup_sig_term_handler(false))
|
||||||
return false;
|
return NT_STATUS_NO_MEMORY;
|
||||||
if (!winbindd_setup_sig_hup_handler(override_logfile ? NULL :
|
if (!winbindd_setup_sig_hup_handler(override_logfile ? NULL :
|
||||||
logfilename))
|
logfilename))
|
||||||
return false;
|
return NT_STATUS_NO_MEMORY;
|
||||||
|
|
||||||
/* Stop zombies in children */
|
/* Stop zombies in children */
|
||||||
CatchChild();
|
CatchChild();
|
||||||
@ -1271,7 +1271,7 @@ bool winbindd_reinit_after_fork(const struct winbindd_child *myself,
|
|||||||
cl = idmap_child();
|
cl = idmap_child();
|
||||||
cl->pid = (pid_t)0;
|
cl->pid = (pid_t)0;
|
||||||
|
|
||||||
return true;
|
return NT_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1291,6 +1291,7 @@ static bool fork_domain_child(struct winbindd_child *child)
|
|||||||
struct winbindd_request request;
|
struct winbindd_request request;
|
||||||
struct winbindd_response response;
|
struct winbindd_response response;
|
||||||
struct winbindd_domain *primary_domain = NULL;
|
struct winbindd_domain *primary_domain = NULL;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
if (child->domain) {
|
if (child->domain) {
|
||||||
DEBUG(10, ("fork_domain_child called for domain '%s'\n",
|
DEBUG(10, ("fork_domain_child called for domain '%s'\n",
|
||||||
@ -1334,7 +1335,10 @@ static bool fork_domain_child(struct winbindd_child *child)
|
|||||||
state.sock = fdpair[0];
|
state.sock = fdpair[0];
|
||||||
close(fdpair[1]);
|
close(fdpair[1]);
|
||||||
|
|
||||||
if (!winbindd_reinit_after_fork(child, child->logfilename)) {
|
status = winbindd_reinit_after_fork(child, child->logfilename);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
DEBUG(1, ("winbindd_reinit_after_fork failed: %s\n",
|
||||||
|
nt_errstr(status)));
|
||||||
_exit(0);
|
_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1434,7 +1438,6 @@ static bool fork_domain_child(struct winbindd_child *child)
|
|||||||
TALLOC_CTX *frame = talloc_stackframe();
|
TALLOC_CTX *frame = talloc_stackframe();
|
||||||
struct iovec iov[2];
|
struct iovec iov[2];
|
||||||
int iov_count;
|
int iov_count;
|
||||||
NTSTATUS status;
|
|
||||||
|
|
||||||
if (run_events_poll(winbind_event_context(), 0, NULL, 0)) {
|
if (run_events_poll(winbind_event_context(), 0, NULL, 0)) {
|
||||||
TALLOC_FREE(frame);
|
TALLOC_FREE(frame);
|
||||||
|
@ -291,7 +291,7 @@ void winbind_msg_ip_dropped_parent(struct messaging_context *msg_ctx,
|
|||||||
uint32_t msg_type,
|
uint32_t msg_type,
|
||||||
struct server_id server_id,
|
struct server_id server_id,
|
||||||
DATA_BLOB *data);
|
DATA_BLOB *data);
|
||||||
bool winbindd_reinit_after_fork(const struct winbindd_child *myself,
|
NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself,
|
||||||
const char *logfilename);
|
const char *logfilename);
|
||||||
struct winbindd_domain *wb_child_domain(void);
|
struct winbindd_domain *wb_child_domain(void);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user