summaryrefslogtreecommitdiffstats
path: root/worker/helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'worker/helpers.c')
-rw-r--r--worker/helpers.c17
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;
}