[libvirt] [PATCH v1 03/23] virSecurityDACSetOwnershipInternal: Don't chown so often

John Ferlan jferlan at redhat.com
Thu Oct 15 21:56:36 UTC 2015



On 10/12/2015 06:25 AM, Michal Privoznik wrote:
> It's better if we stat() file that we are about to chown() at
> first and check if there's something we need to change. Not that
> it would make much difference, but for the upcoming patches we
> need to be doing stat() anyway.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/security/security_dac.c | 19 ++++++++++---------
>  1 file changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/src/security/security_dac.c b/src/security/security_dac.c
> index 0dfe570..9b079e0 100644
> --- a/src/security/security_dac.c
> +++ b/src/security/security_dac.c
> @@ -271,17 +271,18 @@ virSecurityDACSetOwnershipInternal(virSecurityDACDataPtr priv,
>              path = src->path;
>          }
>  
> +        if (stat(path, &sb) < 0) {
> +            virReportSystemError(errno, _("unable to stat: %s"), path);
> +            return -1;
> +        }
> +
> +        if (sb.st_uid == uid && sb.st_gid == gid) {
> +            /* nothing to chown */
> +            return 0;
> +        }
> +
>          rc = chown(path, uid, gid);
>          chown_errno = errno;
> -
> -        if (rc < 0 &&
> -            stat(path, &sb) >= 0) {
> -            if (sb.st_uid == uid &&
> -                sb.st_gid == gid) {
> -                /* It's alright, there's nothing to change anyway. */
> -                return 0;
> -            }
> -        }

I don't believe chown_errno is necessary anymore either since a failure
in stat() won't overwrite errno.

Your call to keep it or not since it's also part of the "if" portion
(although that path doesn't overwrite either).

ACK -

John



>      }
>  
>      if (rc < 0) {
> 




More information about the libvir-list mailing list