1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-25 17:57:42 +03:00

s4/samba: POPT_COMMON_DAEMON

Note: this also changes logging to go to stderr instead of stdout which is the
same behaviour as smbd, nmbd and winbindd (starting with 4.15).

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14803
RN: smbd/winbindd started in daemon mode generate output on stderr/stdout

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>

Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Mon Sep  6 14:23:15 UTC 2021 on sn-devel-184
This commit is contained in:
Ralph Boehme 2021-09-03 14:04:22 +02:00
parent 9d82454cdf
commit 28686f8713

View File

@ -505,10 +505,7 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
int argc,
const char *argv[])
{
bool opt_daemon = false;
bool opt_fork = true;
bool opt_interactive = false;
bool opt_no_process_group = false;
struct samba_cmdline_daemon_cfg *cmdline_daemon_cfg = NULL;
bool db_is_backup = false;
int opt;
int ret;
@ -523,36 +520,11 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
int max_runtime = 0;
struct stat st;
enum {
OPT_DAEMON = 1000,
OPT_FOREGROUND,
OPT_INTERACTIVE,
OPT_PROCESS_MODEL,
OPT_PROCESS_MODEL = 1000,
OPT_SHOW_BUILD,
OPT_NO_PROCESS_GROUP,
};
struct poptOption long_options[] = {
POPT_AUTOHELP
{
.longName = "daemon",
.shortName = 'D',
.argInfo = POPT_ARG_NONE,
.val = OPT_DAEMON,
.descrip = "Become a daemon (default)",
},
{
.longName = "foreground",
.shortName = 'F',
.argInfo = POPT_ARG_NONE,
.val = OPT_FOREGROUND,
.descrip = "Run the daemon in foreground",
},
{
.longName = "interactive",
.shortName = 'i',
.argInfo = POPT_ARG_NONE,
.val = OPT_INTERACTIVE,
.descrip = "Run interactive (not a daemon)",
},
{
.longName = "model",
.shortName = 'M',
@ -576,13 +548,8 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
.val = OPT_SHOW_BUILD,
.descrip = "show build info",
},
{
.longName = "no-process-group",
.argInfo = POPT_ARG_NONE,
.val = OPT_NO_PROCESS_GROUP,
.descrip = "Don't create a new process group",
},
POPT_COMMON_SAMBA
POPT_COMMON_DAEMON
POPT_COMMON_VERSION
POPT_TABLEEND
};
@ -590,7 +557,6 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
struct tevent_signal *se = NULL;
struct samba_tevent_trace_state *samba_tevent_trace_state = NULL;
struct loadparm_context *lp_ctx = NULL;
bool log_stdout = false;
bool ok;
setproctitle("root process");
@ -604,6 +570,8 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
exit(1);
}
cmdline_daemon_cfg = samba_cmdline_get_daemon_cfg();
pc = samba_popt_get_context(binary_name,
argc,
argv,
@ -617,24 +585,12 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
while((opt = poptGetNextOpt(pc)) != -1) {
switch(opt) {
case OPT_DAEMON:
opt_daemon = true;
break;
case OPT_FOREGROUND:
opt_fork = false;
break;
case OPT_INTERACTIVE:
opt_interactive = true;
break;
case OPT_PROCESS_MODEL:
model = poptGetOptArg(pc);
break;
case OPT_SHOW_BUILD:
show_build();
break;
case OPT_NO_PROCESS_GROUP:
opt_no_process_group = true;
break;
default:
fprintf(stderr, "\nInvalid option %s: %s\n\n",
poptBadOption(pc, 0), poptStrerror(opt));
@ -643,15 +599,16 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
}
}
if (opt_daemon && opt_interactive) {
if (cmdline_daemon_cfg->daemon && cmdline_daemon_cfg->interactive) {
fprintf(stderr,"\nERROR: "
"Option -i|--interactive is "
"not allowed together with -D|--daemon\n\n");
poptPrintUsage(pc, stderr, 0);
return 1;
} else if (!opt_interactive && opt_fork) {
} else if (!cmdline_daemon_cfg->interactive &&
cmdline_daemon_cfg->fork) {
/* default is --daemon */
opt_daemon = true;
cmdline_daemon_cfg->daemon = true;
}
poptFreeContext(pc);
@ -660,16 +617,6 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
talloc_enable_null_tracking();
log_stdout = (debug_get_log_type() == DEBUG_STDOUT);
if (opt_interactive) {
log_stdout = true;
}
if (log_stdout) {
setup_logging(binary_name, DEBUG_STDOUT);
} else {
setup_logging(binary_name, DEBUG_FILE);
}
setup_signals();
/* we want total control over the permissions on created files,
@ -695,10 +642,12 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
return 1;
}
if (opt_daemon) {
if (cmdline_daemon_cfg->daemon) {
DBG_NOTICE("Becoming a daemon.\n");
become_daemon(opt_fork, opt_no_process_group, false);
} else if (!opt_interactive) {
become_daemon(cmdline_daemon_cfg->fork,
cmdline_daemon_cfg->no_process_group,
false);
} else if (!cmdline_daemon_cfg->interactive) {
daemon_status("samba", "Starting process...");
}
@ -794,7 +743,7 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
samba_tevent_trace_callback,
samba_tevent_trace_state);
if (opt_interactive) {
if (cmdline_daemon_cfg->interactive) {
/* terminate when stdin goes away */
stdin_event_flags = TEVENT_FD_READ;
} else {
@ -807,8 +756,11 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
* If we're interactive we want to set our own process group for
* signal management, unless --no-process-group specified.
*/
if (opt_interactive && !opt_no_process_group)
if (cmdline_daemon_cfg->interactive &&
!cmdline_daemon_cfg->no_process_group)
{
setpgid((pid_t)0, (pid_t)0);
}
#endif
/* catch EOF on stdin */
@ -1014,7 +966,7 @@ static int binary_smbd_main(TALLOC_CTX *mem_ctx,
}
}
if (!opt_interactive) {
if (!cmdline_daemon_cfg->interactive) {
daemon_ready("samba");
}