diff options
Diffstat (limited to 'worker/helpers.c')
-rw-r--r-- | worker/helpers.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/worker/helpers.c b/worker/helpers.c index 5359422..18b4d77 100644 --- a/worker/helpers.c +++ b/worker/helpers.c @@ -44,7 +44,6 @@ int open_temporary_file(char *name, const char *permission, const char *user, co int ret; struct passwd *pwd_info; struct group *grp_info; - pwd_info=getpwnam(user); CHECK(pwd_info, NULL, ("Cannot find user %s.\n", user), return -1); grp_info=getgrnam(group); @@ -69,7 +68,6 @@ int open_temporary_file(char *name, const char *permission, const char *user, co CHECK(ret, -1, ("fsetfilecon failed: %s\n",strerror(errno)), return -1); } - return fd; } @@ -134,12 +132,12 @@ int exec_command(const char *command, const char *user, const char *group, char } ret=pipe(stdout_pipe); - CHECK(ret, -1, ("pipe failed: %s\n",strerror(errno)), return -1); + CHECK(ret, -1, ("pipe failed: %s\n",strerror(errno)), goto error); ret=pipe(stderr_pipe); - CHECK(ret, -1, ("pipe failed: %s\n",strerror(errno)), return -1); + CHECK(ret, -1, ("pipe failed: %s\n",strerror(errno)), goto error); pid=fork(); - CHECK(pid, -1, ("fork failed: %s",strerror(errno)), return -1); + CHECK(pid, -1, ("fork failed: %s",strerror(errno)), goto error); if (!pid) { /* FIXME: missing error checking */ close(stdout_pipe[0]); @@ -173,6 +171,9 @@ int exec_command(const char *command, const char *user, const char *group, char buffer[ret]='\0'; DEBUG(3,("stderr from child: >>%s<<\n",buffer)); + close(stdout_pipe[0]); + close(stderr_pipe[0]); + ret = waitpid(pid, & status, 0); if (WIFEXITED(status)) { DEBUG(3,("Child terminated normally with exit status %d\n",WEXITSTATUS(status))); @@ -185,4 +186,10 @@ int exec_command(const char *command, const char *user, const char *group, char free(argv[i]); } return WEXITSTATUS(status); + +error: + for(i=0;i<c;i++){ + free(argv[i]); + } + return -1; } |