Add run_as_unlink implementation
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 24 Sep 2015 01:47:13 +0000 (21:47 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 24 Sep 2015 01:47:45 +0000 (21:47 -0400)
run_as_unlink() is used by
Fix: Relay daemon ownership and reference counting

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/runas.c
src/common/runas.h

index a8fe47e8eafe7b2f91fb7ea0a1bb205c02c50117..c1d07b3a5e7e16f759540603ceb10efeea14fe79 100644 (file)
@@ -77,6 +77,10 @@ struct run_as_open_data {
        mode_t mode;
 };
 
+struct run_as_unlink_data {
+       const char *path;
+};
+
 #ifdef VALGRIND
 static
 int use_clone(void)
@@ -132,6 +136,20 @@ 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 child_run_as(void *_data)
 {
@@ -343,3 +361,14 @@ 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);
+}
index 9840eb056942ad7eb56fb83ee8a3aef4c29d49e4..2516738bffbc3f256dda61eb36d4d3396f0a5ab8 100644 (file)
@@ -25,6 +25,7 @@
 int run_as_mkdir_recursive(const char *path, mode_t mode, uid_t uid, gid_t gid);
 int run_as_mkdir(const char *path, mode_t mode, uid_t uid, gid_t gid);
 int run_as_open(const char *path, int flags, mode_t mode, uid_t uid, gid_t gid);
+int run_as_unlink(const char *path, uid_t uid, gid_t gid);
 
 /*
  * We need to lock pthread exit, which deadlocks __nptl_setxid in the
This page took 0.026758 seconds and 4 git commands to generate.