/* SPDX-License-Identifier: LGPL-2.1+ */
-/***
- Copyright 2010 Lennart Poettering
-***/
#include <errno.h>
#include <stddef.h>
return 0;
}
+int fchmod_and_chown(int fd, mode_t mode, uid_t uid, gid_t gid) {
+ /* Under the assumption that we are running privileged we
+ * first change the access mode and only then hand out
+ * ownership to avoid a window where access is too open. */
+
+ if (mode != MODE_INVALID)
+ if (fchmod(fd, mode) < 0)
+ return -errno;
+
+ if (uid != UID_INVALID || gid != GID_INVALID)
+ if (fchown(fd, uid, gid) < 0)
+ return -errno;
+
+ return 0;
+}
+
int fchmod_umask(int fd, mode_t m) {
mode_t u;
int r;
return 0;
}
+#if 0 /// UNNEEDED by elogind
int chase_symlinks_and_open(
const char *path,
const char *root,
return 1;
}
+#endif // 0
int access_fd(int fd, int mode) {
char p[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(fd) + 1];