summaryrefslogtreecommitdiffstats
path: root/worker/helpers.c
diff options
context:
space:
mode:
authorSumit Bose <sbose@nb.localdomain>2008-12-08 09:19:13 +0100
committerSumit Bose <sbose@nb.localdomain>2008-12-08 09:19:13 +0100
commit73635bb1b32450a86c78866ed8c485cc1ce3a1de (patch)
tree8540c0825412e021c691e976f16b7e17c6a2e238 /worker/helpers.c
parent1be6a957fa90294f982f9e8531a05c86c49028fb (diff)
downloadipa_policy-73635bb1b32450a86c78866ed8c485cc1ce3a1de.tar.gz
ipa_policy-73635bb1b32450a86c78866ed8c485cc1ce3a1de.tar.xz
ipa_policy-73635bb1b32450a86c78866ed8c485cc1ce3a1de.zip
some memory handling fixes
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;
}