mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
smbd: detect EOF on stdin in --foreground mode
if EOF is detected on stdin then exit
This commit is contained in:
parent
645fcc5375
commit
1da318d97d
@ -857,6 +857,23 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
handle stdin becoming readable when we are in --foreground mode
|
||||
*/
|
||||
static void smbd_stdin_handler(struct tevent_context *ev,
|
||||
struct tevent_fd *fde,
|
||||
uint16_t flags,
|
||||
void *private_data)
|
||||
{
|
||||
char c;
|
||||
if (read(0, &c, 1) != 1) {
|
||||
/* we have reached EOF on stdin, which means the
|
||||
parent has exited. Shutdown the server */
|
||||
exit_server_cleanly("EOF on stdin");
|
||||
}
|
||||
}
|
||||
|
||||
static void smbd_parent_loop(struct tevent_context *ev_ctx,
|
||||
struct smbd_parent_context *parent)
|
||||
{
|
||||
@ -1409,6 +1426,14 @@ extern void build_options(bool screen);
|
||||
/* make sure we always have a valid stackframe */
|
||||
frame = talloc_stackframe();
|
||||
|
||||
if (!Fork) {
|
||||
/* if we are running in the foreground then look for
|
||||
EOF on stdin, and exit if it happens. This allows
|
||||
us to die if the parent process dies
|
||||
*/
|
||||
tevent_add_fd(ev_ctx, parent, 0, TEVENT_FD_READ, smbd_stdin_handler, NULL);
|
||||
}
|
||||
|
||||
smbd_parent_loop(ev_ctx, parent);
|
||||
|
||||
exit_server_cleanly(NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user