[libvirt] [PATCH] util: Use current uid and gid if they are passed as -1 for virDirCreate

Osier Yang jyang at redhat.com
Tue Jul 10 09:31:54 UTC 2012


ping?

On 2012年06月21日 15:11, Osier Yang wrote:
> 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))




More information about the libvir-list mailing list