[libvirt] [PATCH v6 2/5] util: Create virFileAccessibleAs function

Eric Blake eblake at redhat.com
Mon Oct 24 23:31:09 UTC 2011


On 10/24/2011 04:23 AM, Michal Privoznik wrote:
> This function checks if a given path is accessible under
> given uid and gid.
> ---
>   src/util/util.c |   72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>   src/util/util.h |    3 ++
>   2 files changed, 75 insertions(+), 0 deletions(-)
>
> +
> +    if (pid) { /* parent */
> +        if (virPidWait(pid,&status)<  0) {
> +            /* virPidWait() already
> +             * reported error */
> +                return -1;
> +        }
> +
> +        return -(status&  0xFF);

Per the method docs, I think this has to be:

errno = status;
return -1;

> +    }
> +
> +    /* child.
> +     * Return positive value here. Parent
> +     * will change it to negative one. */
> +
> +    if (forkRet<  0) {
> +        ret = 1;

ret = errno;

> +        goto childerror;
> +    }
> +
> +    if (virSetUIDGID(uid, gid)<  0) {
> +        ret = 1;

ret = errno;

> +        goto childerror;
> +    }
> +
> +    if (access(path, mode)<  0)
> +        ret = 1;

ret = errno;

> +
> +childerror:
> +    if ((ret&  0xFF) != ret) {
> +        VIR_WARN("unable to pass desired return value %d", ret);
> +        ret = 0xFF;
> +    }
> +
> +    _exit(ret);

That way, your exit status is 0 on success, and an errno value on error.

ACK - I'm comfortable with you making those changes and pushing, without 
having to see v7.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list