mirror of
https://github.com/systemd/systemd.git
synced 2025-01-12 13:18:14 +03:00
tmpfiles: with "e" don't attempt to set permissions when file doesn't exist (#6682)
tmpfiles.d option "e" when run through systemd-tmpfiles --create should apply configured permissions (uid,gid) only to already existing files. When file doesn't exist we bail out with error. Instead we should silently ignore non-existing files. $ useradd test $ cat /etc/tmpfiles.d/foobar.conf e /tmp/test - test test 1d $ ls -l /tmp/test ls: cannot access '/tmp/test': No such file or directory Before: $ systemd-tmpfiles --create /etc/tmpfiles.d/foobar.conf Adjusting owner and mode for /tmp/test failed: No such file or directory $ echo $? 1 After: $ systemd-tmpfiles --create /etc/tmpfiles.d/foobar.conf $ echo $? 0
This commit is contained in:
parent
617da14cfd
commit
780e2ee187
@ -617,8 +617,20 @@ static int path_set_perms(Item *i, const char *path) {
|
||||
* O_PATH. */
|
||||
|
||||
fd = open(path, O_NOFOLLOW|O_CLOEXEC|O_PATH);
|
||||
if (fd < 0)
|
||||
return log_error_errno(errno, "Adjusting owner and mode for %s failed: %m", path);
|
||||
if (fd < 0) {
|
||||
int level = LOG_ERR, r = -errno;
|
||||
|
||||
/* Option "e" operates only on existing objects. Do not
|
||||
* print errors about non-existent files or directories */
|
||||
if (i->type == EMPTY_DIRECTORY && errno == ENOENT) {
|
||||
level = LOG_DEBUG;
|
||||
r = 0;
|
||||
}
|
||||
|
||||
log_full_errno(level, errno, "Adjusting owner and mode for %s failed: %m", path);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
if (fstatat(fd, "", &st, AT_EMPTY_PATH) < 0)
|
||||
return log_error_errno(errno, "Failed to fstat() file %s: %m", path);
|
||||
|
Loading…
Reference in New Issue
Block a user