666
666
check_for_vpd (GUdevDevice *device)
669
669
const gchar *serial;
670
670
const gchar *wwn;
672
673
g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE);
676
/* prefer WWN to serial */
675
/* order of preference: WWN, serial, path */
677
676
serial = g_udev_device_get_property (device, "ID_SERIAL");
678
677
wwn = g_udev_device_get_property (device, "ID_WWN_WITH_EXTENSION");
678
path = g_udev_device_get_property (device, "ID_PATH");
679
679
if (wwn != NULL && strlen (wwn) > 0)
681
681
ret = g_strdup (wwn);
890
is_block_unlocked (GList *objects, const gchar *crypto_object_path)
892
gboolean ret = FALSE;
894
for (l = objects; l != NULL; l = l->next)
896
UDisksObject *object = UDISKS_OBJECT (l->data);
898
block = udisks_object_peek_block (object);
901
if (g_strcmp0 (udisks_block_get_crypto_backing_device (block), crypto_object_path) == 0)
913
* udisks_linux_drive_object_is_not_in_use:
914
* @object: A #UDisksLinuxDriveObject.
915
* @cancellable: (allow-none): A #GCancellable or %NULL.
916
* @error: A #GError or %NULL.
918
* Checks if the drive represented by @object is in use and sets
921
* Returns: %TRUE if @object is not is use, %FALSE if @error is set.
924
udisks_linux_drive_object_is_not_in_use (UDisksLinuxDriveObject *object,
925
GCancellable *cancellable,
928
GDBusObjectManagerServer *object_manager;
929
const gchar *drive_object_path;
931
GList *objects = NULL;
934
g_return_val_if_fail (UDISKS_IS_LINUX_DRIVE_OBJECT (object), FALSE);
935
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
936
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
938
drive_object_path = g_dbus_object_get_object_path (G_DBUS_OBJECT (object));
940
object_manager = udisks_daemon_get_object_manager (object->daemon);
941
objects = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (object_manager));
943
/* Visit all block devices related to the drive... */
944
for (l = objects; l != NULL; l = l->next)
946
GDBusObjectSkeleton *iter_object = G_DBUS_OBJECT_SKELETON (l->data);
948
UDisksFilesystem *filesystem;
950
if (!UDISKS_IS_LINUX_BLOCK_OBJECT (iter_object))
953
block = udisks_object_peek_block (UDISKS_OBJECT (iter_object));
954
filesystem = udisks_object_peek_filesystem (UDISKS_OBJECT (iter_object));
956
if (g_strcmp0 (udisks_block_get_drive (block), drive_object_path) != 0)
959
/* bail if block device is mounted */
960
if (filesystem != NULL)
962
if (g_strv_length ((gchar **) udisks_filesystem_get_mount_points (filesystem)) > 0)
966
UDISKS_ERROR_DEVICE_BUSY,
967
"Device %s is mounted",
968
udisks_block_get_preferred_device (block));
974
/* bail if block device is unlocked (LUKS) */
975
if (is_block_unlocked (objects, g_dbus_object_get_object_path (G_DBUS_OBJECT (iter_object))))
979
UDISKS_ERROR_DEVICE_BUSY,
980
"Encrypted device %s is unlocked",
981
udisks_block_get_preferred_device (block));
988
g_list_free_full (objects, g_object_unref);