On 01/27/2012 01:34 PM, Cole Robinson wrote: > And hook it up for policykit auth. This allows virt-manager to detect > that the user clicked the policykit 'cancel' button and not throw > an 'authentication failed' error message at the user. > --- > daemon/remote.c | 13 +++++++++++-- > include/libvirt/virterror.h | 1 + > src/util/virterror.c | 6 ++++++ > 3 files changed, 18 insertions(+), 2 deletions(-) > > diff --git a/daemon/remote.c b/daemon/remote.c > index 1ada146..2e813d6 100644 > --- a/daemon/remote.c > +++ b/daemon/remote.c > @@ -2471,6 +2471,8 @@ remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED, > const char *action; > int status = -1; > char *ident = NULL; > + int authdismissed = 0; > + char *pkoutput = NULL; > struct daemonClientPrivate *priv = > virNetServerClientGetPrivateData(client); > virCommandPtr cmd = NULL; > @@ -2481,6 +2483,7 @@ remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED, > "org.libvirt.unix.manage"; > > cmd = virCommandNewArgList(PKCHECK_PATH, "--action-id", action, NULL); > + virCommandSetOutputBuffer(cmd, &pkoutput); > > VIR_DEBUG("Start PolicyKit auth %d", virNetServerClientGetFD(client)); > if (virNetServerClientGetAuth(client) != VIR_NET_SERVER_SERVICE_AUTH_POLKIT) { > @@ -2509,6 +2512,7 @@ remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED, > if (virCommandRun(cmd, &status) < 0) > goto authfail; > > + authdismissed = (pkoutput && strstr(pkoutput, "dismissed=true")); > if (status != 0) { > char *tmp = virCommandTranslateStatus(status); > VIR_ERROR(_("Policy kit denied action %s from pid %lld, uid %d: %s"), > @@ -2534,8 +2538,13 @@ error: > virCommandFree(cmd); > VIR_FREE(ident); > virResetLastError(); > - virNetError(VIR_ERR_AUTH_FAILED, "%s", > - _("authentication failed")); > + if (authdismissed) { > + virNetError(VIR_ERR_AUTH_CANCELLED, "%s", > + _("authentication cancelled by user")); > + } else { > + virNetError(VIR_ERR_AUTH_FAILED, "%s", > + _("authentication failed")); > + } This doesn't free pkoutput. Another patch is coming. - Cole -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list