All the callers of virDirCreate are updated incidentally. --- src/storage/storage_backend_fs.c | 23 ++++++----------------- src/util/util.c | 6 ++++++ 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index bde4528..233e001 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -789,17 +789,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 @@ -811,9 +804,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); @@ -1053,13 +1046,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) { diff --git a/src/util/util.c b/src/util/util.c index ce98d20..aec5512 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -1123,6 +1123,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)) -- 1.7.7.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list