From: Andrew Tridgell Date: Wed, 30 Nov 2011 03:08:28 +0000 (+1100) Subject: smbd: detect EOF on stdin in --foreground mode X-Git-Tag: samba-4.0.0alpha19~688 X-Git-Url: http://git.samba.org/samba.git/?a=commitdiff_plain;h=1da318d97da6c7f9e8d5d389fc06619b423fcda0;p=samba.git smbd: detect EOF on stdin in --foreground mode if EOF is detected on stdin then exit --- diff --git a/source3/smbd/server.c b/source3/smbd/server.c index f89bfd44755..986eb214397 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -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);