mirror of
https://github.com/samba-team/samba.git
synced 2025-03-10 12:58:35 +03:00
r24879: Activate the winbindd cache-validation message handler.
Now the winbindd cache can be checked at runtime by calling "smbcontrol winbindd validate-cache". For the execution of the validation code, I fork a child and in the child restore the default SIGCHLD handler in order for the fork/waitpid mechanism of tdb_validate to work. Michael (This used to be commit f379a5c47d5004a5a66b6c12ec119c739b9e146d)
This commit is contained in:
parent
60abd094fa
commit
f9a177772d
@ -210,18 +210,52 @@ static void winbind_msg_validate_cache(struct messaging_context *msg_ctx,
|
||||
DATA_BLOB *data)
|
||||
{
|
||||
uint8 ret;
|
||||
pid_t child_pid;
|
||||
struct sigaction act;
|
||||
struct sigaction oldact;
|
||||
|
||||
DEBUG(10, ("winbindd_msg_validate_cache: got validate-cache "
|
||||
"message.\n"));
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* call the validation code from a child:
|
||||
* so we don't block the main winbindd and the validation
|
||||
* code can safely use fork/waitpid...
|
||||
*/
|
||||
CatchChild();
|
||||
child_pid = sys_fork();
|
||||
|
||||
if (child_pid == -1) {
|
||||
DEBUG(1, ("winbind_msg_validate_cache: Could not fork: %s\n",
|
||||
strerror(errno)));
|
||||
return;
|
||||
}
|
||||
|
||||
if (child_pid != 0) {
|
||||
/* parent */
|
||||
DEBUG(5, ("winbind_msg_validate_cache: child created with "
|
||||
"pid %d.\n", child_pid));
|
||||
return;
|
||||
}
|
||||
|
||||
/* child */
|
||||
|
||||
/* install default SIGCHLD handler: validation code uses fork/waitpid */
|
||||
ZERO_STRUCT(act);
|
||||
act.sa_handler = SIG_DFL;
|
||||
#ifdef SA_RESTART
|
||||
/* We *want* SIGALRM to interrupt a system call. */
|
||||
act.sa_flags = SA_RESTART;
|
||||
#endif
|
||||
sigemptyset(&act.sa_mask);
|
||||
sigaddset(&act.sa_mask,SIGCHLD);
|
||||
sigaction(SIGCHLD,&act,&oldact);
|
||||
|
||||
ret = (uint8)winbindd_validate_cache_nobackup();
|
||||
DEBUG(10, ("winbindd_msg_validata_cache: got return value %d\n", ret));
|
||||
#else
|
||||
ret = 0;
|
||||
#endif
|
||||
messaging_send_buf(msg_ctx, server_id, MSG_WINBIND_VALIDATE_CACHE, &ret,
|
||||
(size_t)1);
|
||||
_exit(0);
|
||||
}
|
||||
|
||||
static struct winbindd_dispatch_table {
|
||||
|
Loading…
x
Reference in New Issue
Block a user