mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-08 14:05:19 +00:00
qemuOpenFile: Don't force chown on NFS
If dynamic_ownership is off and we are creating a file on NFS
we force chown. This will fail as chown/chmod are not supported
on NFS. However, with no dynamic_ownership we are not required
to do any chown.
(cherry picked from commit b1256816ff
)
This commit is contained in:
parent
9b72feecc3
commit
27ef74ff40
@ -2429,6 +2429,7 @@ qemuOpenFile(struct qemud_driver *driver, const char *path, int oflags,
|
|||||||
bool bypass_security = false;
|
bool bypass_security = false;
|
||||||
unsigned int vfoflags = 0;
|
unsigned int vfoflags = 0;
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
|
int path_shared = virStorageFileIsSharedFS(path);
|
||||||
uid_t uid = getuid();
|
uid_t uid = getuid();
|
||||||
gid_t gid = getgid();
|
gid_t gid = getgid();
|
||||||
|
|
||||||
@ -2437,7 +2438,12 @@ qemuOpenFile(struct qemud_driver *driver, const char *path, int oflags,
|
|||||||
* in the failure case */
|
* in the failure case */
|
||||||
if (oflags & O_CREAT) {
|
if (oflags & O_CREAT) {
|
||||||
need_unlink = true;
|
need_unlink = true;
|
||||||
vfoflags |= VIR_FILE_OPEN_FORCE_OWNER;
|
|
||||||
|
/* Don't force chown on network-shared FS
|
||||||
|
* as it is likely to fail. */
|
||||||
|
if (path_shared <= 0 || driver->dynamicOwnership)
|
||||||
|
vfoflags |= VIR_FILE_OPEN_FORCE_OWNER;
|
||||||
|
|
||||||
if (stat(path, &sb) == 0) {
|
if (stat(path, &sb) == 0) {
|
||||||
is_reg = !!S_ISREG(sb.st_mode);
|
is_reg = !!S_ISREG(sb.st_mode);
|
||||||
/* If the path is regular file which exists
|
/* If the path is regular file which exists
|
||||||
@ -2475,7 +2481,7 @@ qemuOpenFile(struct qemud_driver *driver, const char *path, int oflags,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* On Linux we can also verify the FS-type of the directory. */
|
/* On Linux we can also verify the FS-type of the directory. */
|
||||||
switch (virStorageFileIsSharedFS(path)) {
|
switch (path_shared) {
|
||||||
case 1:
|
case 1:
|
||||||
/* it was on a network share, so we'll continue
|
/* it was on a network share, so we'll continue
|
||||||
* as outlined above
|
* as outlined above
|
||||||
|
Loading…
Reference in New Issue
Block a user