Allows for more control over executed processes.
Signed-off-by: Nadav Tasher <[email protected]>
---
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
[email protected]
https://lists.busybox.net/mailman/listinfo/busybox