[libvirt] [PATCH v3 46/48] util: storage identity attrs as virTypedParameter internally

Andrea Bolognani abologna at redhat.com
Tue Jul 30 20:22:50 UTC 2019


On Mon, 2019-07-29 at 18:11 +0100, Daniel P. Berrangé wrote:
> util: storage identity attrs as virTypedParameter internally

s/storage/store/

[...]
> +++ b/src/util/viridentity.c
> @@ -188,6 +176,7 @@ virIdentityPtr virIdentityGetSystem(void)
>                                   _("Unable to lookup SELinux process context"));
>              return ret;
>          }
> +        VIR_DEBUG("Set con %s", con);

This looks like a leftover from development.

[...]
> -/**
> - * virIdentityIsEqual:
> - * @identA: the first identity
> - * @identB: the second identity
> - *
> - * Compares every attribute in @identA and @identB
> - * to determine if they refer to the same identity
> - *
> - * Returns true if they are equal, false if not equal
> - */
> -bool virIdentityIsEqual(virIdentityPtr identA,
> -                        virIdentityPtr identB)

This function was introduced with

  commit 3aabe27247711324df2bfa623e9a5e8d2442e3a5
  Author: Daniel P. Berrange <berrange at redhat.com>
  Date:   Fri Jan 20 17:49:32 2012 +0000

    Define internal APIs for managing identities

    Introduce a local object virIdentity for managing security
    attributes used to form a client application's identity.
    Instances of this object are intended to be used as if they
    were immutable, once created & populated with attributes

    Signed-off-by: Daniel P. Berrange <berrange at redhat.com>

and apparently never used. Please drop it in a separate commit.

[...]
>  int virIdentityGetOSUserName(virIdentityPtr ident,
>                               const char **username)
>  {
> -    return virIdentityGetAttr(ident,
> -                              VIR_IDENTITY_ATTR_OS_USER_NAME,
> -                              username);

You forgot to do

  *username = NULL;

here.

[...]
>  int virIdentityGetOSUserID(virIdentityPtr ident,
>                             uid_t *uid)
>  {
> -    int val;
> -    const char *userid;
> +    unsigned long long val;
> +    int ret;

Usually we use 'ret' to store the return value of the current
function, and 'rc' for the return value of any sub-function we might
need to call. Please use 'rc' here to avoid any confusion.

> -    if (virStrToLong_i(userid, NULL, 10, &val) < 0)
> +    ret = virTypedParamsGetULLong(ident->params,
> +                                  ident->nparams,
> +                                  VIR_CONNECT_IDENTITY_OS_USER_ID,
> +                                  &val);
> +    if (ret < 0)
>          return -1;
>  
> -    *uid = (uid_t)val;
> +    if (ret == 1)
> +        *uid = (uid_t)val;

In case Christophe is following along: this is one of the cases where
libvirt functions don't follow the usual 0 means success, <0 means
failure mantra.

[...]
>  int virIdentityGetOSProcessID(virIdentityPtr ident,
>                                pid_t *pid)
>  {
> -    unsigned long long val;
> -    const char *processid;
> +    int ret;
> +    long long val;

I still think we should be using ull for pids.

> -    *pid = (pid_t)val;
> +    if (ret == 1)
> +        *pid = (gid_t)val;

This should be

  *pid = (pid_t)val;

[...]
> +++ b/tests/viridentitytest.c
> @@ -166,7 +109,8 @@ static int testIdentityGetSystem(const void *data)
>          goto cleanup;
>  
>      if (STRNEQ_NULLABLE(val, context)) {
> -        VIR_DEBUG("Unexpected SELinux context attribute");
> +        VIR_DEBUG("Unexpected SELinux context attribute '%s' != '%s'",
> +                  val, context);
>          goto cleanup;
>      }

This change also doesn't belong in this patch. You can put it in the
same one as the other SELinux-related test suite fix, though.

And since you're tweaking the message, I suggest something like

  VIR_DEBUG("Unexpected SELinux context: expected='%s' actual='%s'",
            context, val);

for easier debugging.

-- 
Andrea Bolognani / Red Hat / Virtualization




More information about the libvir-list mailing list