/**
 * storaged_object_get_block_lvm2:
 * @object: A #StoragedObject.
 *
 * Gets the #StoragedBlockLVM2 instance for the D-Bus interface <link linkend="gdbus-interface-org-storaged-Storaged-Block-LVM2.top_of_page">org.storaged.Storaged.Block.LVM2</link> on @object, if any.
 *
 * Returns: (transfer full): A #StoragedBlockLVM2 that must be freed with g_object_unref() or %NULL if @object does not implement the interface.
 */
StoragedBlockLVM2 *
storaged_object_get_block_lvm2 (StoragedObject *object)
{
  GDBusInterface *ret;
  ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.storaged.Storaged.Block.LVM2");
  if (ret == NULL)
    return NULL;
  return STORAGED_BLOCK_LVM2 (ret);
}
/**
 * storaged_object_get_physical_volume:
 * @object: A #StoragedObject.
 *
 * Gets the #StoragedPhysicalVolume instance for the D-Bus interface <link linkend="gdbus-interface-org-storaged-Storaged-PhysicalVolume.top_of_page">org.storaged.Storaged.PhysicalVolume</link> on @object, if any.
 *
 * Returns: (transfer full): A #StoragedPhysicalVolume that must be freed with g_object_unref() or %NULL if @object does not implement the interface.
 */
StoragedPhysicalVolume *
storaged_object_get_physical_volume (StoragedObject *object)
{
  GDBusInterface *ret;
  ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.storaged.Storaged.PhysicalVolume");
  if (ret == NULL)
    return NULL;
  return STORAGED_PHYSICAL_VOLUME (ret);
}
/**
 * storaged_object_get_volume_group:
 * @object: A #StoragedObject.
 *
 * Gets the #StoragedVolumeGroup instance for the D-Bus interface <link linkend="gdbus-interface-org-storaged-Storaged-VolumeGroup.top_of_page">org.storaged.Storaged.VolumeGroup</link> on @object, if any.
 *
 * Returns: (transfer full): A #StoragedVolumeGroup that must be freed with g_object_unref() or %NULL if @object does not implement the interface.
 */
StoragedVolumeGroup *
storaged_object_get_volume_group (StoragedObject *object)
{
  GDBusInterface *ret;
  ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.storaged.Storaged.VolumeGroup");
  if (ret == NULL)
    return NULL;
  return STORAGED_VOLUME_GROUP (ret);
}
Exemple #4
0
void
storage_daemon_publish (StorageDaemon *self,
                        const gchar *path,
                        gboolean uniquely,
                        gpointer thing)
{
  GDBusInterface *prev;
  GDBusInterfaceInfo *info;
  GDBusObjectSkeleton *object;
  GQuark detail;

  g_return_if_fail (STORAGE_IS_DAEMON (self));
  g_return_if_fail (path != NULL);

  if (G_IS_DBUS_INTERFACE (thing))
    {
      g_debug ("%spublishing iface: %s %s", uniquely ? "uniquely " : "", path,
               g_dbus_interface_get_info(thing)->name);

      object = G_DBUS_OBJECT_SKELETON (g_dbus_object_manager_get_object (G_DBUS_OBJECT_MANAGER (self->object_manager), path));
      if (object != NULL)
        {
          if (uniquely)
            {
              info = g_dbus_interface_get_info (thing);
              prev = g_dbus_object_get_interface (G_DBUS_OBJECT (object), info->name);
              if (prev)
                {
                  g_object_unref (prev);
                  g_object_unref (object);
                  object = NULL;
                }
            }
        }

      if (object == NULL)
          object = g_dbus_object_skeleton_new (path);

      g_dbus_object_skeleton_add_interface (object, thing);
    }
  else
    {
      g_critical ("Unsupported type to publish: %s", G_OBJECT_TYPE_NAME (thing));
      return;
    }

  if (uniquely)
    g_dbus_object_manager_server_export_uniquely (self->object_manager, object);
  else
    g_dbus_object_manager_server_export (self->object_manager, object);

  detail = g_quark_from_static_string (G_OBJECT_TYPE_NAME (thing));
  g_signal_emit (self, signals[PUBLISHED], detail, thing);

  g_object_unref (object);
}
/**
 * storaged_object_peek_logical_volume: (skip)
 * @object: A #StoragedObject.
 *
 * Like storaged_object_get_logical_volume() but doesn't increase the reference count on the returned object.
 *
 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>
 *
 * Returns: (transfer none): A #StoragedLogicalVolume or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object.
 */
StoragedLogicalVolume *
storaged_object_peek_logical_volume (StoragedObject *object)
{
  GDBusInterface *ret;
  ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.storaged.Storaged.LogicalVolume");
  if (ret == NULL)
    return NULL;
  g_object_unref (ret);
  return STORAGED_LOGICAL_VOLUME (ret);
}
Exemple #6
0
static bool uninstall_application(GDBusObjectManager* installed,
                                  const char* appid)
{
  GList* objects = g_dbus_object_manager_get_objects(installed);
  GList* l;
  bool ret = false;

  for (l = objects; l; l = l->next) {
    GDBusObject* object = l->data;
    GDBusInterface* iface = g_dbus_object_get_interface(
        object,
        xwalk_installed_app_iface);
    if (!iface)
      continue;

    GDBusProxy* proxy = G_DBUS_PROXY(iface);

    GVariant* value = g_dbus_proxy_get_cached_property(proxy, "AppID");
    if (!value) {
      g_object_unref(iface);
      continue;
    }

    const char* id;
    g_variant_get(value, "s", &id);

    if (g_strcmp0(appid, id)) {
      g_object_unref(iface);
      continue;
    }

    GError* error = NULL;
    GVariant* result = g_dbus_proxy_call_sync(proxy, "Uninstall", NULL,
                                              G_DBUS_CALL_FLAGS_NONE,
                                              -1, NULL, &error);
    if (!result) {
      g_print("Uninstalling application failed: %s\n", error->message);
      g_error_free(error);
      g_object_unref(iface);
      ret = false;
      goto done;
    }

    g_object_unref(iface);
    ret = true;
    goto done;
  }

  g_print("Application ID '%s' could not be found\n", appid);

done:
  g_list_free_full(objects, g_object_unref);

  return ret;
}
Exemple #7
0
static gboolean
is_realm_with_kerberos_and_membership (gpointer object)
{
        GDBusInterface *interface;

        if (!G_IS_DBUS_OBJECT (object))
                return FALSE;

        interface = g_dbus_object_get_interface (object, "org.freedesktop.realmd.Kerberos");
        if (interface == NULL)
                return FALSE;
        g_object_unref (interface);

        interface = g_dbus_object_get_interface (object, "org.freedesktop.realmd.KerberosMembership");
        if (interface == NULL)
                return FALSE;
        g_object_unref (interface);

        return TRUE;
}
Exemple #8
0
GList *
storage_daemon_get_jobs (StorageDaemon *self)
{
  GList *objects, *l;
  GList *jobs = NULL;

  objects = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (self->object_manager));
  for (l = objects; l != NULL; l = g_list_next (l))
    {
      StorageJob *job = STORAGE_JOB (g_dbus_object_get_interface (l->data, "org.freedesktop.UDisks2.Job"));
      if (job)
        jobs = g_list_prepend (jobs, job);
    }
  g_list_free_full (objects, g_object_unref);

  return jobs;
}
Exemple #9
0
static GDBusInterface *
cockpit_fake_manager_get_interface (GDBusObjectManager *manager,
                                    const gchar *object_path,
                                    const gchar *interface_name)
{
  GDBusInterface *interface;
  GDBusObject *object;

  object = cockpit_fake_manager_get_object (manager, object_path);
  if (object == NULL)
    return NULL;

  interface = g_dbus_object_get_interface (object, interface_name);
  g_object_unref (object);

  return interface;
}
Exemple #10
0
static void
do_list_remote ()
{
  GDBusObjectManager *object_manager;
  UsbemuDBusManager *manager;
  GError *error = NULL;
  const gchar * const *list;
  const gchar * const *path;

  usbip_dbus_init (opt_list_remote_path, &object_manager, &manager);

  list = usbemu_dbus_manager_get_devices (manager);
  if (list == NULL || *list == NULL) {
    g_print ("no exportable devices found on %s\n",
             opt_list_remote_path ? opt_list_remote_path : "(local)");
    return;
  }

  g_print ("Exportable USB devices\n");
  g_print ("======================\n");
  g_print (" - %s\n\n", opt_list_remote_path ? opt_list_remote_path : "(local)");

  path = list;
  while (*path) {
    GDBusObject *device_object;
    UsbemuDBusDevice *device;

    device_object = g_dbus_object_manager_get_object (object_manager, *path);
    device =
      USBEMU_DBUS_DEVICE (g_dbus_object_get_interface (device_object,
                                                       USBEMU_DBUS_DEVICE_PREFIX));

    g_object_unref (device_object);

    g_print ("%s\n", *path);
    g_print ("\n");

    g_object_unref (device);

    ++path;
  }

  g_object_unref (manager);
  g_object_unref (object_manager);
}
static GDBusInterface *
g_dbus_object_manager_server_get_interface  (GDBusObjectManager  *_manager,
                                             const gchar         *object_path,
                                             const gchar         *interface_name)
{
  GDBusInterface *ret;
  GDBusObject *object;

  ret = NULL;

  object = g_dbus_object_manager_get_object (_manager, object_path);
  if (object == NULL)
    goto out;

  ret = g_dbus_object_get_interface (object, interface_name);
  g_object_unref (object);

 out:
  return ret;
}
Exemple #12
0
static void list_applications(GDBusObjectManager* installed) {
  GList* objects = g_dbus_object_manager_get_objects(installed);
  GList* l;

  for (l = objects; l; l = l->next) {
    GDBusObject* object = l->data;
    GDBusInterface* iface = g_dbus_object_get_interface(
        object,
        xwalk_installed_app_iface);
    if (!iface)
      continue;

    GDBusProxy* proxy = G_DBUS_PROXY(iface);
    GVariant* id_variant;
    id_variant = g_dbus_proxy_get_cached_property(proxy, "AppID");
    if (!id_variant) {
      g_object_unref(iface);
      continue;
    }

    const char* id;
    g_variant_get(id_variant, "s", &id);

    GVariant* name_variant;
    name_variant = g_dbus_proxy_get_cached_property(proxy, "Name");
    if (!name_variant) {
      g_object_unref(iface);
      continue;
    }

    const char* name;
    g_variant_get(name_variant, "s", &name);

    g_print("%s\t%s\n", id, name);

    g_object_unref(iface);
  }

  g_list_free_full(objects, g_object_unref);
}
static gboolean
update_iface (StoragedObject                     *object,
              const gchar                        *uevent_action,
              StoragedObjectHasInterfaceFunc      has_func,
              StoragedObjectConnectInterfaceFunc  connect_func,
              StoragedObjectUpdateInterfaceFunc   update_func,
              GType                               skeleton_type,
              gpointer                            _interface_pointer)
{
    gboolean ret = FALSE;
    gboolean has;
    gboolean add;
    GDBusInterface **interface_pointer = _interface_pointer;
    GDBusInterfaceInfo *interface_info = NULL;

    g_return_val_if_fail (object != NULL, FALSE);
    g_return_val_if_fail (has_func != NULL, FALSE);
    g_return_val_if_fail (update_func != NULL, FALSE);
    g_return_val_if_fail (g_type_is_a (skeleton_type, G_TYPE_OBJECT), FALSE);
    g_return_val_if_fail (g_type_is_a (skeleton_type, G_TYPE_DBUS_INTERFACE), FALSE);
    g_return_val_if_fail (interface_pointer != NULL, FALSE);
    g_return_val_if_fail (*interface_pointer == NULL || G_IS_DBUS_INTERFACE (*interface_pointer), FALSE);

    add = FALSE;
    has = has_func (object);
    if (*interface_pointer == NULL)
    {
        if (has)
        {
            *interface_pointer = g_object_new (skeleton_type, NULL);
            if (connect_func != NULL)
                connect_func (object);
            add = TRUE;
        }
    }
    else
    {
        if (!has)
        {
            /* Check before we remove interface from object  */
            interface_info = g_dbus_interface_get_info (*interface_pointer);

            if (g_dbus_object_get_interface ((GDBusObject *) object,
                                             interface_info->name))
                g_dbus_object_skeleton_remove_interface
                (G_DBUS_OBJECT_SKELETON (object),
                 G_DBUS_INTERFACE_SKELETON (*interface_pointer));

            g_object_unref (*interface_pointer);
            *interface_pointer = NULL;
        }
    }

    if (*interface_pointer != NULL)
    {
        if (update_func (object, uevent_action, G_DBUS_INTERFACE (*interface_pointer)))
            ret = TRUE;
        if (add)
            g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object),
                                                  G_DBUS_INTERFACE_SKELETON (*interface_pointer));
    }

    return ret;
}
/*
 * the DBus.Tracker.Properties1 interface returns a list of strings
 * where each selected item brings up both its URI and its Caja
 * mime type.
 *
 * We return to the caller a GList of NASelectedInfo objects
 */
static GList *
targets_from_selection( void )
{
	static const gchar *thisfn = "caja_actions_run_targets_from_selection";
	GList *selection;
	GError *error;
	gchar **paths;

	g_debug( "%s", thisfn );

	selection = NULL;
	error = NULL;
	paths = NULL;

#ifdef HAVE_GDBUS
	GDBusObjectManager *manager;
	gchar *name_owner;
	GDBusObject *object;
	GDBusInterface *iface;

	manager = na_tracker_object_manager_client_new_for_bus_sync(
			G_BUS_TYPE_SESSION,
			G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
			CAJA_ACTIONS_DBUS_SERVICE,
			CAJA_ACTIONS_DBUS_TRACKER_PATH,
			NULL,
			&error );

	if( !manager ){
		g_printerr( "%s: unable to allocate an ObjectManagerClient: %s\n", thisfn, error->message );
		g_error_free( error );
		return( NULL );
	}

	name_owner = g_dbus_object_manager_client_get_name_owner( G_DBUS_OBJECT_MANAGER_CLIENT( manager ));
	g_debug( "%s: name_owner=%s", thisfn, name_owner );
	g_free( name_owner );

	object = g_dbus_object_manager_get_object( manager, CAJA_ACTIONS_DBUS_TRACKER_PATH "/0" );
	if( !object ){
		g_printerr( "%s: unable to get object at %s path\n", thisfn, CAJA_ACTIONS_DBUS_TRACKER_PATH "/0" );
		g_object_unref( manager );
		return( NULL );
	}

	iface = g_dbus_object_get_interface( object, CAJA_ACTIONS_DBUS_TRACKER_IFACE );
	if( !iface ){
		g_printerr( "%s: unable to get %s interface\n", thisfn, CAJA_ACTIONS_DBUS_TRACKER_IFACE );
		g_object_unref( object );
		g_object_unref( manager );
		return( NULL );
	}

	/* note that @iface is really a GDBusProxy instance
	 * and additionally also a NATrackerProperties1 instance
	 */
	na_tracker_properties1_call_get_selected_paths_sync(
			NA_TRACKER_PROPERTIES1( iface ),
			&paths,
			NULL,
			&error );

#else
# ifdef HAVE_DBUS_GLIB
	DBusGConnection *connection;
	DBusGProxy *proxy = NULL;

	connection = dbus_g_bus_get( DBUS_BUS_SESSION, &error );
	if( !connection ){
		if( error ){
			g_printerr( _( "Error: unable to get a connection to session DBus: %s" ), error->message );
			g_error_free( error );
		}
		return( NULL );
	}
	g_debug( "%s: connection is ok", thisfn );

	proxy = dbus_g_proxy_new_for_name( connection,
			CAJA_ACTIONS_DBUS_SERVICE,
			CAJA_ACTIONS_DBUS_TRACKER_PATH "/0",
			CAJA_ACTIONS_DBUS_TRACKER_IFACE );

	if( !proxy ){
		g_printerr( _( "Error: unable to get a proxy on %s service" ), CAJA_ACTIONS_DBUS_SERVICE );
		dbus_g_connection_unref( connection );
		return( NULL );
	}
	g_debug( "%s: proxy is ok", thisfn );

	if( !dbus_g_proxy_call( proxy, "GetSelectedPaths", &error,
			G_TYPE_INVALID,
			G_TYPE_STRV, &paths, G_TYPE_INVALID )){

		g_printerr( _( "Error on GetSelectedPaths call: %s" ), error->message );
		g_error_free( error );
		/* TODO: unref proxy */
		dbus_g_connection_unref( connection );
		return( NULL );
	}
	g_debug( "%s: function call is ok", thisfn );

	/* TODO: unref proxy */
	dbus_g_connection_unref( connection );
# endif
#endif

	selection = get_selection_from_strv(( const gchar ** ) paths, TRUE );

	g_strfreev( paths );

	return( selection );
}