UDisksBlock * udisks_client_get_block_for_dev (UDisksClient *client, dev_t block_device_number) { UDisksBlock *ret = NULL; GList *l, *object_proxies = NULL; g_return_val_if_fail (UDISKS_IS_CLIENT (client), NULL); object_proxies = g_dbus_object_manager_get_objects (client->object_manager); for (l = object_proxies; l != NULL; l = l->next) { UDisksObject *object = UDISKS_OBJECT (l->data); UDisksBlock *block; block = udisks_object_get_block (object); if (block == NULL) continue; if (udisks_block_get_device_number (block) == block_device_number) { ret = block; goto out; } g_object_unref (block); } out: g_list_foreach (object_proxies, (GFunc) g_object_unref, NULL); g_list_free (object_proxies); return ret; }
static UDisksObject * lookup_object_for_block (UDisksClient *client, dev_t block_device) { UDisksObject *ret; GList *objects; GList *l; ret = NULL; objects = g_dbus_object_manager_get_objects (udisks_client_get_object_manager (client)); for (l = objects; l != NULL; l = l->next) { UDisksObject *object = UDISKS_OBJECT (l->data); UDisksBlock *block; block = udisks_object_peek_block (object); if (block != NULL) { if (block_device == udisks_block_get_device_number (block)) { ret = g_object_ref (object); goto out; } } } out: g_list_foreach (objects, (GFunc) g_object_unref, NULL); g_list_free (objects); return ret; }
GUdevDevice * storage_block_get_udev (StorageBlock *self) { dev_t num; g_return_val_if_fail (STORAGE_IS_BLOCK (self), NULL); num = udisks_block_get_device_number (self->real_block); return g_udev_client_query_by_device_number (self->udev_client, G_UDEV_DEVICE_TYPE_BLOCK, num); }
/** * udisks_daemon_util_setup_by_user: * @daemon: A #UDisksDaemon. * @object: The #GDBusObject that the call is on or %NULL. * @user: The user in question. * * Checks whether the device represented by @object (if any) has been * setup by @user. * * Returns: %TRUE if @object has been set-up by @user, %FALSE if not. */ gboolean udisks_daemon_util_setup_by_user (UDisksDaemon *daemon, UDisksObject *object, uid_t user) { gboolean ret; UDisksBlock *block = NULL; UDisksPartition *partition = NULL; UDisksState *state; uid_t setup_by_user; UDisksObject *crypto_object; ret = FALSE; state = udisks_daemon_get_state (daemon); block = udisks_object_get_block (object); if (block == NULL) goto out; partition = udisks_object_get_partition (object); /* loop devices */ if (udisks_state_has_loop (state, udisks_block_get_device (block), &setup_by_user)) { if (setup_by_user == user) { ret = TRUE; goto out; } } /* partition of a loop device */ if (partition != NULL) { UDisksObject *partition_object = NULL; partition_object = udisks_daemon_find_object (daemon, udisks_partition_get_table (partition)); if (partition_object != NULL) { if (udisks_daemon_util_setup_by_user (daemon, partition_object, user)) { ret = TRUE; g_object_unref (partition_object); goto out; } g_object_unref (partition_object); } } /* LUKS devices */ crypto_object = udisks_daemon_find_object (daemon, udisks_block_get_crypto_backing_device (block)); if (crypto_object != NULL) { UDisksBlock *crypto_block; crypto_block = udisks_object_peek_block (crypto_object); if (udisks_state_find_unlocked_luks (state, udisks_block_get_device_number (crypto_block), &setup_by_user)) { if (setup_by_user == user) { ret = TRUE; g_object_unref (crypto_object); goto out; } } g_object_unref (crypto_object); } /* MDRaid devices */ if (g_strcmp0 (udisks_block_get_mdraid (block), "/") != 0) { uid_t started_by_user; if (udisks_state_has_mdraid (state, udisks_block_get_device_number (block), &started_by_user)) { if (started_by_user == user) { ret = TRUE; goto out; } } } out: g_clear_object (&partition); g_clear_object (&block); return ret; }