projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add run_as_unlink implementation
[lttng-tools.git]
/
src
/
common
/
runas.c
diff --git
a/src/common/runas.c
b/src/common/runas.c
index 5ab42717a9058b4a5083516aa142a3c1efda226d..c1d07b3a5e7e16f759540603ceb10efeea14fe79 100644
(file)
--- a/
src/common/runas.c
+++ b/
src/common/runas.c
@@
-77,6
+77,10
@@
struct run_as_open_data {
mode_t mode;
};
mode_t mode;
};
+struct run_as_unlink_data {
+ const char *path;
+};
+
#ifdef VALGRIND
static
int use_clone(void)
#ifdef VALGRIND
static
int use_clone(void)
@@
-91,6
+95,9
@@
int use_clone(void)
}
#endif
}
#endif
+LTTNG_HIDDEN
+int _utils_mkdir_recursive_unsafe(const char *path, mode_t mode);
+
/*
* Create recursively directory using the FULL path.
*/
/*
* Create recursively directory using the FULL path.
*/
@@
-104,7
+111,8
@@
int _mkdir_recursive(void *_data)
path = data->path;
mode = data->mode;
path = data->path;
mode = data->mode;
- return utils_mkdir_recursive(path, mode);
+ /* Safe to call as we have transitioned to the requested uid/gid. */
+ return _utils_mkdir_recursive_unsafe(path, mode);
}
static
}
static
@@
-128,6
+136,20
@@
int _open(void *_data)
return open(data->path, data->flags, data->mode);
}
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)
{
static
int child_run_as(void *_data)
{
@@
-339,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);
}
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);
+}
This page took
0.023709 seconds
and
4
git commands to generate.