nspawn: fix uid patching logic (#3599)

An incorrectly set if/else chain caused aus to apply the access mode of a
symlink to the directory it is located in. Yuck.

Fixes: #3547
This commit is contained in:
Lennart Poettering 2016-06-25 06:04:43 +02:00 committed by Evgeny Vereshchagin
parent d946fb596f
commit 0c6aeb4609

View file

@ -263,9 +263,12 @@ static int patch_fd(int fd, const char *name, const struct stat *st, uid_t shift
return -errno;
/* The Linux kernel alters the mode in some cases of chown(). Let's undo this. */
if (name && !S_ISLNK(st->st_mode))
r = fchmodat(fd, name, st->st_mode, 0);
else
if (name) {
if (!S_ISLNK(st->st_mode))
r = fchmodat(fd, name, st->st_mode, 0);
else /* AT_SYMLINK_NOFOLLOW is not available for fchmodat() */
r = 0;
} else
r = fchmod(fd, st->st_mode);
if (r < 0)
return -errno;