Beispiel #1
0
static BMAuthChain *
_auth_chain_new (PolkitAuthority *authority,
                 DBusGMethodInvocation *context,
                 DBusGProxy *proxy,
                 DBusMessage *message,
                 BMAuthChainResultFunc done_func,
                 gpointer user_data)
{
	BMAuthChain *self;

	g_return_val_if_fail (context || proxy || message, NULL);

	self = g_malloc0 (sizeof (BMAuthChain));
	self->refcount = 1;
	self->authority = g_object_ref (authority);
	self->data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_data);
	self->done_func = done_func;
	self->call_func = /* call_func ? call_func : */ default_call_func;
	self->user_data = user_data;
	self->context = context;

	if (proxy)
		self->owner = g_strdup (dbus_g_proxy_get_bus_name (proxy));
	else if (context)
		self->owner = dbus_g_method_get_sender (context);
	else if (message)
		self->owner = g_strdup (dbus_message_get_sender (message));

	if (!self->owner) {
		/* Need an owner */
		g_warn_if_fail (self->owner);
		bm_auth_chain_unref (self);
		self = NULL;
	}

	return self;
}
Beispiel #2
0
gboolean
bm_auth_uid_authorized (gulong uid,
                        BMDBusManager *dbus_mgr,
                        DBusGProxy *user_proxy,
                        const char **out_error_desc)
{
	DBusConnection *connection;
	DBusError dbus_error;
	char *service_owner = NULL;
	const char *service_name;
	gulong service_uid = G_MAXULONG;

	g_return_val_if_fail (dbus_mgr != NULL, FALSE);
	g_return_val_if_fail (out_error_desc != NULL, FALSE);

	/* Ensure the request to activate the user connection came from the
	 * same session as the user settings service.  FIXME: use ConsoleKit
	 * too.
	 */

	if (!user_proxy) {
		*out_error_desc = "No user settings service available";
		return FALSE;
	}

	service_name = dbus_g_proxy_get_bus_name (user_proxy);
	if (!service_name) {
		*out_error_desc = "Could not determine user settings service name";
		return FALSE;
	}

	connection = bm_dbus_manager_get_dbus_connection (dbus_mgr);
	if (!connection) {
		*out_error_desc = "Could not get the D-Bus system bus";
		return FALSE;
	}

	service_owner = bm_dbus_manager_get_name_owner (dbus_mgr, service_name, NULL);
	if (!service_owner) {
		*out_error_desc = "Could not determine D-Bus owner of the user settings service";
		return FALSE;
	}

	dbus_error_init (&dbus_error);
	service_uid = dbus_bus_get_unix_user (connection, service_owner, &dbus_error);
	g_free (service_owner);

	if (dbus_error_is_set (&dbus_error)) {
		dbus_error_free (&dbus_error);
		*out_error_desc = "Could not determine the Unix UID of the sender of the request";
		return FALSE;
	}

	/* And finally, the actual UID check */
	if (uid != service_uid) {
		*out_error_desc = "Requestor UID does not match the UID of the user settings service";
		return FALSE;
	}

	return TRUE;
}
Beispiel #3
0
DBusGProxy* epris_client_get_tracklist (EprisClient* self, const char* listname) {
	DBusGProxy* result;
	char* _tmp1_;
	char* _tmp0_;
	DBusGProxy* _tmp2_;
	DBusGProxy* list;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (listname != NULL, NULL);
	_tmp1_ = NULL;
	_tmp0_ = NULL;
	_tmp2_ = NULL;
	list = (_tmp2_ = dbus_g_proxy_new_for_name (epris_dbus_proxy_get_conn ((EprisDBusProxy*) self), dbus_g_proxy_get_bus_name (((EprisDBusProxy*) self)->iself), _tmp1_ = g_strconcat (_tmp0_ = g_strconcat (dbus_g_proxy_get_path (((EprisDBusProxy*) self)->iself), "/lists/", NULL), listname, NULL), "org.mpris.EprisTrackList"), _tmp1_ = (g_free (_tmp1_), NULL), _tmp0_ = (g_free (_tmp0_), NULL), _tmp2_);
	result = list;
	return result;
}