[libvirt] [PATCH] Fix build when using polkit0
Daniel P. Berrange
berrange at redhat.com
Fri Jul 8 14:38:15 UTC 2011
On Thu, Jul 07, 2011 at 03:18:45PM -0600, Jim Fehlig wrote:
> Here's a hacked attempt at fixing the build on older distros using
> polkit0. It works and user is authorized or denied depending on
> settings in PolicyKit.conf.
Sorry for breaking this. It completely slipped my mind to
test this codepath
> I'm not too happy with it but haven't yet digested all the changes in
> rpc and daemon code. In the meantime, hopefully someone can suggest
> improvements.
> diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
> index 5e1719b..6e9eb2c 100644
> --- a/src/rpc/virnetserver.c
> +++ b/src/rpc/virnetserver.c
> @@ -39,6 +39,9 @@
> #if HAVE_AVAHI
> # include "virnetservermdns.h"
> #endif
> +#if HAVE_POLKIT0
> +# include <dbus/dbus.h>
> +#endif
>
> #define VIR_FROM_THIS VIR_FROM_RPC
> #define virNetError(code, ...) \
> @@ -84,6 +87,10 @@ struct _virNetServer {
> virNetServerMDNSGroupPtr mdnsGroup;
> #endif
>
> +#if HAVE_POLKIT0
> + DBusConnection *sysbus;
> +#endif
> +
> size_t nservices;
> virNetServerServicePtr *services;
>
> @@ -270,6 +277,7 @@ virNetServerPtr virNetServerNew(size_t min_workers,
> size_t max_workers,
> size_t max_clients,
> const char *mdnsGroupName,
> + bool usePolkit,
> virNetServerClientInitHook clientInitHook)
> {
> virNetServerPtr srv;
> @@ -306,6 +314,25 @@ virNetServerPtr virNetServerNew(size_t min_workers,
> }
> #endif
>
> +#if HAVE_POLKIT0
> + if (usePolkit) {
> + DBusError derr;
> +
> + dbus_connection_set_change_sigpipe(FALSE);
> + dbus_threads_init_default();
> +
> + dbus_error_init(&derr);
> + srv->sysbus = dbus_bus_get(DBUS_BUS_SYSTEM, &derr);
> + if (!(srv->sysbus)) {
> + VIR_ERROR(_("Failed to connect to system bus for PolicyKit auth: %s"),
> + derr.message);
> + dbus_error_free(&derr);
> + goto error;
> + }
> + dbus_connection_set_exit_on_disconnect(srv->sysbus, FALSE);
> + }
> +#endif
> +
> if (virMutexInit(&srv->lock) < 0) {
> virNetError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("cannot initialize mutex"));
> @@ -363,6 +390,14 @@ bool virNetServerIsPrivileged(virNetServerPtr srv)
> }
>
>
> +#if HAVE_POLKIT0
> +DBusConnection* virNetServerGetDBusConn(virNetServerPtr srv)
> +{
> + return srv->sysbus;
> +}
> +#endif
> +
> +
> void virNetServerAutoShutdown(virNetServerPtr srv,
> unsigned int timeout,
> virNetServerAutoShutdownFunc func,
> @@ -747,6 +782,11 @@ void virNetServerFree(virNetServerPtr srv)
>
> VIR_FREE(srv->mdnsGroupName);
>
> +#if HAVE_POLKIT0
> + if (srv->sysbus)
> + dbus_connection_unref(srv->sysbus);
> +#endif
> +
> virNetServerUnlock(srv);
> virMutexDestroy(&srv->lock);
> VIR_FREE(srv);
> diff --git a/src/rpc/virnetserver.h b/src/rpc/virnetserver.h
> index 6e7a21b..d96280e 100644
> --- a/src/rpc/virnetserver.h
> +++ b/src/rpc/virnetserver.h
> @@ -25,6 +25,9 @@
> # define __VIR_NET_SERVER_H__
>
> # include <signal.h>
> +# if HAVE_POLKIT0
> +# include <dbus/dbus.h>
> +# endif
>
> # include "virnettlscontext.h"
> # include "virnetserverprogram.h"
> @@ -38,6 +41,7 @@ virNetServerPtr virNetServerNew(size_t min_workers,
> size_t max_workers,
> size_t max_clients,
> const char *mdnsGroupName,
> + bool usePolkit,
> virNetServerClientInitHook clientInitHook);
>
> typedef int (*virNetServerAutoShutdownFunc)(virNetServerPtr srv, void *opaque);
> @@ -46,6 +50,10 @@ void virNetServerRef(virNetServerPtr srv);
>
> bool virNetServerIsPrivileged(virNetServerPtr srv);
>
> +# if HAVE_POLKIT0
> +DBusConnection* virNetServerGetDBusConn(virNetServerPtr srv);
> +# endif
> +
I'd like the virNetServer stuff to not have any mention of policy
kit in it. So rather than saying 'bool usePolkit', have a
'bool connectDBus', and just remove those HAVE_POLKIT0 conditionals
so that the DBus API is always available in virNetServer. The changes
you made under daemon/ are all fine
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list