Andrea Bolognani writes:
On Mon, 2019-07-29 at 18:11 +0100, Daniel P. Berrangé wrote:
> util: storage identity attrs as virTypedParameter internally
> - 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.
Thanks ;-)
[...]
> 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.
Curious why (I'm too lazy to look it up in earlier discussions)?
In general, giving a name to an int type is a good idea, isn't it?
> - *pid = (pid_t)val;
> + if (ret == 1)
> + *pid = (gid_t)val;
This should be
*pid = (pid_t)val;
You made me look at that code again, and now I'm confused as to why it's
OK to leave garbage in *pid if we fail to find the corresponding typed
param. Previously, the function returned -1 in that case, to indicate
failure. Now, it returns 0, but does not update *uid. Is that intentional?
[...]
> +++ 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
--
Cheers,
Christophe de Dinechin (IRC c3d)