Move file creation/unlink from liblttng-ust-ctl to consumerd
[lttng-tools.git] / src / common / runas.c
index 471bb22046c3d3bf9f44dbf24c176f089a3e3c2e..9d9091638a5a9910c8cec2b6810357ca087e4499 100644 (file)
@@ -79,6 +79,14 @@ struct run_as_open_data {
        mode_t mode;
 };
 
+struct run_as_unlink_data {
+       const char *path;
+};
+
+struct run_as_recursive_rmdir_data {
+       const char *path;
+};
+
 #ifdef VALGRIND
 static
 int use_clone(void)
@@ -130,6 +138,34 @@ int _open(void *_data)
        return open(data->path, data->flags, data->mode);
 }
 
+static
+int _unlink(void *_data)
+{
+       int ret;
+       struct run_as_unlink_data *data = _data;
+
+       ret = unlink(data->path);
+       if (ret < 0) {
+               ret = -errno;
+       }
+
+       return ret;
+}
+
+static
+int _recursive_rmdir(void *_data)
+{
+       int ret;
+       struct run_as_recursive_rmdir_data *data = _data;
+
+       ret = utils_recursive_rmdir(data->path);
+       if (ret < 0) {
+               ret = -errno;
+       }
+
+       return ret;
+}
+
 static
 int child_run_as(void *_data)
 {
@@ -341,3 +377,25 @@ int run_as_open(const char *path, int flags, mode_t mode, uid_t uid, gid_t gid)
        data.mode = mode;
        return run_as(_open, &data, uid, gid);
 }
+
+LTTNG_HIDDEN
+int run_as_unlink(const char *path, uid_t uid, gid_t gid)
+{
+       struct run_as_unlink_data data;
+
+       DBG3("unlink() %s with for uid %d and gid %d",
+                       path, uid, gid);
+       data.path = path;
+       return run_as(_unlink, &data, uid, gid);
+}
+
+LTTNG_HIDDEN
+int run_as_recursive_rmdir(const char *path, uid_t uid, gid_t gid)
+{
+       struct run_as_recursive_rmdir_data data;
+
+       DBG3("recursive_rmdir() %s with for uid %d and gid %d",
+                       path, uid, gid);
+       data.path = path;
+       return run_as(_recursive_rmdir, &data, uid, gid);
+}
This page took 0.023697 seconds and 4 git commands to generate.