Merge branch 'master' into memleak-finder
[lttng-tools.git] / src / common / runas.c
index bd51cd4ed2b7b6b8c00221b19209a63dba10c698..3ae2e4c38d35e5d943f8ca9f3e49213d14472ed4 100644 (file)
@@ -96,8 +96,15 @@ int _mkdir_recursive(void *_data)
 static
 int _mkdir(void *_data)
 {
+       int ret;
        struct run_as_mkdir_data *data = _data;
-       return mkdir(data->path, data->mode);
+
+       ret = mkdir(data->path, data->mode);
+       if (ret < 0) {
+               ret = -errno;
+       }
+
+       return ret;
 }
 
 static
@@ -130,14 +137,16 @@ int child_run_as(void *_data)
                ret = setegid(data->gid);
                if (ret < 0) {
                        PERROR("setegid");
-                       return EXIT_FAILURE;
+                       sendret.i = -1;
+                       goto write_return;
                }
        }
        if (data->uid != geteuid()) {
                ret = seteuid(data->uid);
                if (ret < 0) {
                        PERROR("seteuid");
-                       return EXIT_FAILURE;
+                       sendret.i = -1;
+                       goto write_return;
                }
        }
        /*
@@ -145,6 +154,8 @@ int child_run_as(void *_data)
         */
        umask(0);
        sendret.i = (*data->cmd)(data->data);
+
+write_return:
        /* send back return value */
        writeleft = sizeof(sendret);
        index = 0;
This page took 0.024104 seconds and 4 git commands to generate.