diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-07-24 18:22:13 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-07-24 18:22:13 +0200 |
commit | f6763917ee757845e2c52e36975d948bc93d8b6e (patch) | |
tree | 632d4cf052123d5cf334d60bb77b0f41f5f80f1b | |
parent | 5e24b6dff532ef82e028a78f020a826032493b2e (diff) |
autospawn: refuse autospawning if process disabled waitpid()
-rw-r--r-- | src/pulse/context.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/pulse/context.c b/src/pulse/context.c index 4ded5565..ab1c1638 100644 --- a/src/pulse/context.c +++ b/src/pulse/context.c @@ -668,11 +668,24 @@ static pa_strlist *prepend_per_user(pa_strlist *l) { static int context_autospawn(pa_context *c) { pid_t pid; int status, r; - - pa_log_debug("Trying to autospawn..."); + struct sigaction sa; pa_context_ref(c); + if (sigaction(SIGCHLD, NULL, &sa) < 0) { + pa_log_debug("sigaction() failed: %s", pa_cstrerror(errno)); + pa_context_fail(c, PA_ERR_INTERNAL); + goto fail; + } + + if ((sa.sa_flags & SA_NOCLDWAIT) || sa.sa_handler == SIG_IGN) { + pa_log_debug("Process disabled waitpid(), cannot autospawn."); + pa_context_fail(c, PA_ERR_CONNECTIONREFUSED); + goto fail; + } + + pa_log_debug("Trying to autospawn..."); + if (c->spawn_api.prefork) c->spawn_api.prefork(); |