26 bool *redirect_stderr) {
28 char *redirect_stderr_add = strstr(cmd,
"2>");
29 char *redirect_stdout_add = strstr(cmd,
">");
31 *redirect_stderr = (redirect_stderr_add != NULL);
32 *redirect_stdout = (redirect_stdout_add != redirect_stderr_add && redirect_stdout_add != NULL);
72 const char *timeout_cmd,
const char *user_cmd,
73 bool redirect_stdout,
bool redirect_stderr,
74 bool catch_stds,
const char *stdout_file,
75 const char *stderr_file) {
78 if ((redirect_stderr && redirect_stdout) || !catch_stds) {
80 return snprintf(buffer, buffer_size, format, timeout_cmd, user_cmd) >= buffer_size
84 else if (redirect_stderr) {
85 format =
"%s %s > %s";
86 return snprintf(buffer, buffer_size, format, timeout_cmd, user_cmd,
92 else if (redirect_stdout) {
93 format =
"%s %s 2> %s";
94 return snprintf(buffer, buffer_size, format, timeout_cmd, user_cmd,
101 format =
"%s %s > %s 2> %s";
102 return snprintf(buffer, buffer_size, format, timeout_cmd, user_cmd,
103 stdout_file, stderr_file)
117 char *argv[] = {
"/bin/sh",
"-c", (
char *)cmd_str, NULL };
118 struct subprocess_info *sub_info;
120 sub_info = call_usermodehelper_setup(argv[0], argv, envp, GFP_KERNEL, NULL,
125 return call_usermodehelper_exec(sub_info, UMH_WAIT_PROC);
static int build_full_command(char *buffer, size_t buffer_size, const char *timeout_cmd, const char *user_cmd, bool redirect_stdout, bool redirect_stderr, bool catch_stds, const char *stdout_file, const char *stderr_file)