summaryrefslogtreecommitdiffstats
path: root/src/providers/ad
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2016-05-17 11:52:00 +0200
committerLukas Slebodnik <lslebodn@redhat.com>2016-05-19 13:56:57 +0200
commitde8815aba87d08b6b7ac5d502dcb1755787e0857 (patch)
tree32a7cf823321aa6ff5af4173d6613b06d89244ca /src/providers/ad
parentc2e3176eaff7c219d63f328570a79f6e5b6f4aec (diff)
downloadsssd-de8815aba87d08b6b7ac5d502dcb1755787e0857.tar.gz
sssd-de8815aba87d08b6b7ac5d502dcb1755787e0857.tar.xz
sssd-de8815aba87d08b6b7ac5d502dcb1755787e0857.zip
UTIL: exit() the forked process if exec()-ing a child process fails
When exec() fails, we should not attempt to continue, but just kill the forked process. The patch adds this logic to the exec_child() and exec_child_ex() functions to avoid code duplication Resolves: https://fedorahosted.org/sssd/ticket/3016 Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
Diffstat (limited to 'src/providers/ad')
-rw-r--r--src/providers/ad/ad_gpo.c14
-rw-r--r--src/providers/ad/ad_machine_pw_renewal.c16
2 files changed, 14 insertions, 16 deletions
diff --git a/src/providers/ad/ad_gpo.c b/src/providers/ad/ad_gpo.c
index 22ac80337..ec2ae2883 100644
--- a/src/providers/ad/ad_gpo.c
+++ b/src/providers/ad/ad_gpo.c
@@ -4189,13 +4189,13 @@ gpo_fork_child(struct tevent_req *req)
pid = fork();
if (pid == 0) { /* child */
- err = exec_child_ex(state,
- pipefd_to_child, pipefd_from_child,
- GPO_CHILD, gpo_child_debug_fd, NULL, false,
- STDIN_FILENO, AD_GPO_CHILD_OUT_FILENO);
- DEBUG(SSSDBG_CRIT_FAILURE, "Could not exec gpo_child: [%d][%s].\n",
- err, strerror(err));
- return err;
+ exec_child_ex(state,
+ pipefd_to_child, pipefd_from_child,
+ GPO_CHILD, gpo_child_debug_fd, NULL, false,
+ STDIN_FILENO, AD_GPO_CHILD_OUT_FILENO);
+
+ /* We should never get here */
+ DEBUG(SSSDBG_CRIT_FAILURE, "BUG: Could not exec gpo_child:\n");
} else if (pid > 0) { /* parent */
state->child_pid = pid;
state->io->read_from_child_fd = pipefd_from_child[0];
diff --git a/src/providers/ad/ad_machine_pw_renewal.c b/src/providers/ad/ad_machine_pw_renewal.c
index 7997fbb0c..3d79aa0a6 100644
--- a/src/providers/ad/ad_machine_pw_renewal.c
+++ b/src/providers/ad/ad_machine_pw_renewal.c
@@ -174,15 +174,13 @@ ad_machine_account_password_renewal_send(TALLOC_CTX *mem_ctx,
child_pid = fork();
if (child_pid == 0) { /* child */
- ret = exec_child_ex(state, pipefd_to_child, pipefd_from_child,
- renewal_data->prog_path, -1,
- extra_args, true,
- STDIN_FILENO, STDERR_FILENO);
- if (ret != EOK) {
- DEBUG(SSSDBG_CRIT_FAILURE, "Could not exec renewal child: [%d][%s].\n",
- ret, strerror(ret));
- goto done;
- }
+ exec_child_ex(state, pipefd_to_child, pipefd_from_child,
+ renewal_data->prog_path, -1,
+ extra_args, true,
+ STDIN_FILENO, STDERR_FILENO);
+
+ /* We should never get here */
+ DEBUG(SSSDBG_CRIT_FAILURE, "Could not exec renewal child\n");
} else if (child_pid > 0) { /* parent */
state->read_from_child_fd = pipefd_from_child[0];