runas: use waitpid instead of wait
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 6 Jan 2012 21:52:28 +0000 (16:52 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 6 Jan 2012 21:52:28 +0000 (16:52 -0500)
Deal with multithreading by waiting specifically for the pid we cloned.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
librunas/runas.c

index 0ffe52ea3792ad8f9e0e6a4d8933bff13c96d998..b3fa81469824ecc6b69979e6a64e408cbd4a5546 100644 (file)
@@ -255,7 +255,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
         * Parent: wait for child to return, in which case the
         * shared memory map will have been created.
         */
-       pid = wait(&status);
+       pid = waitpid(pid, &status, 0);
        if (pid < 0 || !WIFEXITED(status) || WEXITSTATUS(status) != 0) {
                perror("wait");
                ret = -1;
@@ -302,6 +302,8 @@ int open_run_as(const char *path, int flags, mode_t mode, uid_t uid, gid_t gid)
 {
        struct open_data data;
 
+       DBG3("open() %s with flags %X mode %d for uid %d and gid %d",
+                       path, flags, mode, uid, gid);
        data.path = path;
        data.flags = flags;
        data.mode = mode;
This page took 0.031716 seconds and 4 git commands to generate.