]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
util: Use current uid and gid if they are passed as -1 for virDirCreate
authorOsier Yang <jyang@redhat.com>
Thu, 21 Jun 2012 07:11:20 +0000 (15:11 +0800)
committerOsier Yang <jyang@redhat.com>
Tue, 10 Jul 2012 13:42:16 +0000 (21:42 +0800)
All the callers of virDirCreate are updated incidentally.

src/storage/storage_backend_fs.c
src/util/util.c

index 5eb486ef700655333f89f700a1cbe79aea6b2253..4894994649e80aa25cd77c20b5891d3e1be2c956 100644 (file)
@@ -786,17 +786,10 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED,
     /* Now create the final dir in the path with the uid/gid/mode
      * requested in the config. If the dir already exists, just set
      * the perms. */
-    uid_t uid;
-    gid_t gid;
-
-    uid = (pool->def->target.perms.uid == (uid_t) -1)
-        ? getuid() : pool->def->target.perms.uid;
-    gid = (pool->def->target.perms.gid == (gid_t) -1)
-        ? getgid() : pool->def->target.perms.gid;
-
     if ((err = virDirCreate(pool->def->target.path,
                             pool->def->target.perms.mode,
-                            uid, gid,
+                            pool->def->target.perms.uid,
+                            pool->def->target.perms.gid,
                             VIR_DIR_CREATE_FORCE_PERMS |
                             VIR_DIR_CREATE_ALLOW_EXIST |
                             (pool->def->type == VIR_STORAGE_POOL_NETFS
@@ -808,9 +801,9 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED,
 
     /* Reflect the actual uid and gid to the config. */
     if (pool->def->target.perms.uid == (uid_t) -1)
-        pool->def->target.perms.uid = uid;
+        pool->def->target.perms.uid = getuid();
     if (pool->def->target.perms.gid == (gid_t) -1)
-        pool->def->target.perms.gid = gid;
+        pool->def->target.perms.gid = getgid();
 
     if (flags != 0) {
         ret = virStorageBackendMakeFileSystem(pool, flags);
@@ -1050,13 +1043,9 @@ static int createFileDir(virConnectPtr conn ATTRIBUTE_UNUSED,
         return -1;
     }
 
-    uid_t uid = (vol->target.perms.uid == -1)
-        ? getuid() : vol->target.perms.uid;
-    gid_t gid = (vol->target.perms.gid == -1)
-        ? getgid() : vol->target.perms.gid;
-
     if ((err = virDirCreate(vol->target.path, vol->target.perms.mode,
-                            uid, gid,
+                            vol->target.perms.uid,
+                            vol->target.perms.gid,
                             VIR_DIR_CREATE_FORCE_PERMS |
                             (pool->def->type == VIR_STORAGE_POOL_NETFS
                              ? VIR_DIR_CREATE_AS_UID : 0))) < 0) {
index 47b13662f352429f18dd247ce90e61bc745647de..07dc70461fdb0608e300984c834b69cd99c5ad83 100644 (file)
@@ -1126,6 +1126,12 @@ int virDirCreate(const char *path, mode_t mode,
     int waitret;
     int status, ret = 0;
 
+    /* allow using -1 to mean "current value" */
+    if (uid == (uid_t) -1)
+        uid = getuid();
+    if (gid == (gid_t) -1)
+        gid = getgid();
+
     if ((!(flags & VIR_DIR_CREATE_AS_UID))
         || (getuid() != 0)
         || ((uid == 0) && (gid == 0))