Allows for more control over executed processes. Signed-off-by: Nadav Tasher <tasherna...@gmail.com> --- miscutils/crond.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/miscutils/crond.c b/miscutils/crond.c index b3762d327..e3f333edb 100644 --- a/miscutils/crond.c +++ b/miscutils/crond.c @@ -699,6 +699,8 @@ fork_job(const char *user, int mailFd, CronLine *line, bool run_sendmail) const char *shell, *prog; smallint sv_logmode; pid_t pid; + char* shell_argv[4]; + const char* sendmail_argv[] = {SENDMAIL, SENDMAIL_ARGS, NULL}; /* prepare things before vfork */ pas = getpwnam(user); @@ -725,10 +727,15 @@ fork_job(const char *user, int mailFd, CronLine *line, bool run_sendmail) } /* crond 3.0pl1-100 puts tasks in separate process groups */ bb_setpgrp(); - if (!run_sendmail) - execlp(prog, prog, "-c", line->cl_cmd, (char *) NULL); - else - execlp(prog, prog, SENDMAIL_ARGS, (char *) NULL); + if (!run_sendmail) { + shell_argv[0] = (char *) shell; + shell_argv[1] = (char *) "-c"; + shell_argv[2] = line->cl_cmd; + shell_argv[3] = NULL; + BB_EXECVP(shell_argv[0], shell_argv); + } else { + BB_EXECVP(sendmail_argv[0], (char **) sendmail_argv); + } /* * I want this error message on stderr too, * even if other messages go only to syslog: @@ -845,6 +852,7 @@ static pid_t start_one_job(const char *user, CronLine *line) const char *shell; struct passwd *pas; pid_t pid; + char* shell_argv[4]; pas = getpwnam(user); if (!pas) { @@ -865,7 +873,11 @@ static pid_t start_one_job(const char *user, CronLine *line) log5("child running %s", shell); /* crond 3.0pl1-100 puts tasks in separate process groups */ bb_setpgrp(); - execl(shell, shell, "-c", line->cl_cmd, (char *) NULL); + shell_argv[0] = (char *) shell; + shell_argv[1] = (char *) "-c"; + shell_argv[2] = line->cl_cmd; + shell_argv[3] = NULL; + BB_EXECVP(shell_argv[0], shell_argv); bb_error_msg_and_die("can't execute '%s' for user %s", shell, user); } if (pid < 0) { -- 2.43.0 _______________________________________________ busybox mailing list busybox@busybox.net https://lists.busybox.net/mailman/listinfo/busybox