Merge pull request #24813 from DaanDeMeyer/at-all-the-things
Add more openat() style variants for existing stuff
This commit is contained in:
@@ -25,12 +25,12 @@ int mkdirat_label(int dirfd, const char *path, mode_t mode) {
|
||||
return mac_smack_fix_full(dirfd, path, NULL, 0);
|
||||
}
|
||||
|
||||
int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
|
||||
return mkdir_safe_internal(path, mode, uid, gid, flags, mkdirat_label);
|
||||
int mkdirat_safe_label(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
|
||||
return mkdirat_safe_internal(dir_fd, path, mode, uid, gid, flags, mkdirat_label);
|
||||
}
|
||||
|
||||
int mkdir_parents_label(const char *path, mode_t mode) {
|
||||
return mkdir_parents_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdirat_label);
|
||||
int mkdirat_parents_label(int dir_fd, const char *path, mode_t mode) {
|
||||
return mkdirat_parents_internal(dir_fd, path, mode, UID_INVALID, UID_INVALID, 0, mkdirat_label);
|
||||
}
|
||||
|
||||
int mkdir_p_label(const char *path, mode_t mode) {
|
||||
|
||||
@@ -12,6 +12,12 @@ static inline int mkdir_label(const char *path, mode_t mode) {
|
||||
return mkdirat_label(AT_FDCWD, path, mode);
|
||||
}
|
||||
|
||||
int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags);
|
||||
int mkdir_parents_label(const char *path, mode_t mod);
|
||||
int mkdirat_safe_label(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags);
|
||||
static inline int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
|
||||
return mkdirat_safe_label(AT_FDCWD, path, mode, uid, gid, flags);
|
||||
}
|
||||
int mkdirat_parents_label(int dir_fd, const char *path, mode_t mod);
|
||||
static inline int mkdir_parents_label(const char *path, mode_t mod) {
|
||||
return mkdirat_parents_label(AT_FDCWD, path, mod);
|
||||
}
|
||||
int mkdir_p_label(const char *path, mode_t mode);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "errno-util.h"
|
||||
#include "fd-util.h"
|
||||
|
||||
typedef enum RemoveFlags {
|
||||
REMOVE_ONLY_DIRECTORIES = 1 << 0, /* Only remove empty directories, no files */
|
||||
@@ -51,3 +52,19 @@ static inline char *rm_rf_subvolume_and_free(char *p) {
|
||||
return mfree(p);
|
||||
}
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(char*, rm_rf_subvolume_and_free);
|
||||
|
||||
static inline int rm_rf_physical_and_close(int fd) {
|
||||
_cleanup_free_ char *p = NULL;
|
||||
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
if (fd_get_path(fd, &p) < 0)
|
||||
return safe_close(fd);
|
||||
|
||||
safe_close(fd);
|
||||
(void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_MISSING_OK|REMOVE_CHMOD);
|
||||
|
||||
return -1;
|
||||
}
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(int, rm_rf_physical_and_close);
|
||||
|
||||
Reference in New Issue
Block a user