machined: be more thorough when checking whether an image is writable or not

This commit is contained in:
Lennart Poettering
2014-12-26 19:21:58 +01:00
parent 92ee6447b1
commit 86e339c884
+6 -3
View File
@@ -86,6 +86,7 @@ static int image_new(
static int image_make(int dfd, const char *name, const char *path, Image **ret) {
struct stat st;
bool writable;
int r;
assert(dfd >= 0);
@@ -98,6 +99,8 @@ static int image_make(int dfd, const char *name, const char *path, Image **ret)
if (fstatat(dfd, name, &st, 0) < 0)
return -errno;
writable = faccessat(dfd, name, W_OK, AT_EACCESS) >= 0;
if (S_ISDIR(st.st_mode)) {
if (!ret)
@@ -127,7 +130,7 @@ static int image_make(int dfd, const char *name, const char *path, Image **ret)
r = image_new(IMAGE_SUBVOLUME,
name,
path,
info.read_only,
info.read_only || !writable,
info.otime,
0,
ret);
@@ -143,7 +146,7 @@ static int image_make(int dfd, const char *name, const char *path, Image **ret)
r = image_new(IMAGE_DIRECTORY,
name,
path,
false,
!writable,
0,
0,
ret);
@@ -168,7 +171,7 @@ static int image_make(int dfd, const char *name, const char *path, Image **ret)
r = image_new(IMAGE_GPT,
truncated,
path,
!(st.st_mode & 0222),
!(st.st_mode & 0222) || !writable,
crtime,
timespec_load(&st.st_mtim),
ret);