mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 19:35:06 -05:00
main: create new file when writing pidfile
When writing the pidfile, open the file with the O_CREAT|O_EXCL flags to avoid following a symlink and writing the PID to an unexpected file, when chronyd still has the root privileges. The Linux open(2) man page warns about O_EXCL not working as expected on NFS versions before 3 and Linux versions before 2.6. Saving pidfiles on a distributed filesystem like NFS is not generally expected, but if there is a reason to do that, these old kernel and NFS versions are not considered to be supported for saving files by chronyd. This is a minimal backport specific to this issue of the following commits: - commit2fc8edacb8("use PATH_MAX") - commitf4c6a00b2a("logging: call exit() in LOG_Message()") - commit7a4c396bba("util: add functions for common file operations") - commite18903a6b5("switch to new util file functions") Reported-by: Matthias Gerstner <mgerstner@suse.de>
This commit is contained in:
11
util.h
11
util.h
@@ -176,6 +176,17 @@ extern int UTI_CreateDirAndParents(const char *path, mode_t mode, uid_t uid, gid
|
||||
permissions and its uid/gid must match the specified values. */
|
||||
extern int UTI_CheckDirPermissions(const char *path, mode_t perm, uid_t uid, gid_t gid);
|
||||
|
||||
/* Open a file. The full path of the file is constructed from the basedir
|
||||
(may be NULL), '/' (if basedir is not NULL), name, and suffix (may be NULL).
|
||||
Created files have specified permissions (umasked). Returns NULL on error.
|
||||
The following modes are supported (if the mode is an uppercase character,
|
||||
errors are fatal):
|
||||
r/R - open an existing file for reading
|
||||
w/W - open a new file for writing (remove existing file)
|
||||
a/A - open an existing file for appending (create if does not exist) */
|
||||
extern FILE *UTI_OpenFile(const char *basedir, const char *name, const char *suffix,
|
||||
char mode, mode_t perm);
|
||||
|
||||
/* Set process user/group IDs and drop supplementary groups */
|
||||
extern void UTI_DropRoot(uid_t uid, gid_t gid);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user