[Oops. This is a prerequisite of the previous patch that I forgot to
send. That patch should be 2/2 and this should be 1/2.]

This just simplifies use of virFileOpenAs a bit - if you're in a place
where you don't have access to a different uid|gid, just give "-1".
---
 src/libxl/libxl_driver.c      |    4 ++--
 src/storage/storage_backend.c |    8 +++-----
 src/util/util.c               |    4 ++++
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 0500ed0..d7325c3 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -216,7 +216,7 @@ libxlSaveImageOpen(libxlDriverPrivatePtr driver, const char 
*from,
     libxlSavefileHeader hdr;
     char *xml = NULL;
 
-    if ((fd = virFileOpenAs(from, O_RDONLY, 0, getuid(), getgid(), 0)) < 0) {
+    if ((fd = virFileOpenAs(from, O_RDONLY, 0, -1, -1, 0)) < 0) {
         libxlError(VIR_ERR_OPERATION_FAILED,
                    "%s", _("cannot read domain image"));
         goto error;
@@ -1827,7 +1827,7 @@ libxlDoDomainSave(libxlDriverPrivatePtr driver, 
virDomainObjPtr vm,
     }
 
     if ((fd = virFileOpenAs(to, O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S_IWUSR,
-                            getuid(), getgid(), 0)) < 0) {
+                            -1, -1, 0)) < 0) {
         virReportSystemError(-fd,
                              _("Failed to create domain save file '%s'"), to);
         goto cleanup;
diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
index d7394e0..1bd3e6e 100644
--- a/src/storage/storage_backend.c
+++ b/src/storage/storage_backend.c
@@ -380,8 +380,6 @@ virStorageBackendCreateRaw(virConnectPtr conn 
ATTRIBUTE_UNUSED,
 {
     int ret = -1;
     int fd = -1;
-    uid_t uid;
-    gid_t gid;
     int operation_flags;
 
     virCheckFlags(0, -1);
@@ -393,15 +391,15 @@ virStorageBackendCreateRaw(virConnectPtr conn 
ATTRIBUTE_UNUSED,
         goto cleanup;
     }
 
-    uid = (vol->target.perms.uid == -1) ? getuid() : vol->target.perms.uid;
-    gid = (vol->target.perms.gid == -1) ? getgid() : vol->target.perms.gid;
     operation_flags = VIR_FILE_OPEN_FORCE_PERMS;
     if (pool->def->type == VIR_STORAGE_POOL_NETFS)
         operation_flags |= VIR_FILE_OPEN_AS_UID;
 
     if ((fd = virFileOpenAs(vol->target.path,
                             O_RDWR | O_CREAT | O_EXCL,
-                            vol->target.perms.mode, uid, gid,
+                            vol->target.perms.mode,
+                            vol->target.perms.uid,
+                            vol->target.perms.gid,
                             operation_flags)) < 0) {
         virReportSystemError(-fd,
                              _("cannot create path '%s'"),
diff --git a/src/util/util.c b/src/util/util.c
index 6f46d53..73003fe 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -848,6 +848,10 @@ virFileOpenAs(const char *path, int openflags, mode_t mode,
     int pair[2] = { -1, -1 };
     int forkRet;
 
+    /* allow using -1 to mean "current value" */
+    uid = (uid == -1) ? getuid() : uid;
+    gid = (gid == -1) ? getgid() : gid;
+
     if ((!(flags & VIR_FILE_OPEN_AS_UID))
         || (getuid() != 0)
         || ((uid == 0) && (gid == 0))) {
-- 
1.7.7.5

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to