New -t luks_uuid

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2011-04-22 23:51:16 +02:00
parent 50ad7d9cae
commit 9d647e4e18
3 changed files with 41 additions and 2 deletions

View file

@ -893,6 +893,13 @@ grub_util_luks_print_ciphers (grub_disk_t disk)
if (dev->essiv_hash) if (dev->essiv_hash)
grub_printf ("%s ", dev->essiv_hash->modname); grub_printf ("%s ", dev->essiv_hash->modname);
} }
void
grub_util_luks_print_uuid (grub_disk_t disk)
{
grub_luks_t dev = (grub_luks_t) disk->data;
grub_printf ("%s ", dev->uuid);
}
#endif #endif
static void static void

View file

@ -37,5 +37,6 @@ ssize_t grub_util_fd_read (int fd, char *buf, size_t len);
grub_err_t grub_err_t
grub_luks_cheat_mount (const char *sourcedev, const char *cheat); grub_luks_cheat_mount (const char *sourcedev, const char *cheat);
void grub_util_luks_print_ciphers (grub_disk_t disk); void grub_util_luks_print_ciphers (grub_disk_t disk);
void grub_util_luks_print_uuid (grub_disk_t disk);
#endif /* ! GRUB_BIOSDISK_MACHINE_UTIL_HEADER */ #endif /* ! GRUB_BIOSDISK_MACHINE_UTIL_HEADER */

View file

@ -55,6 +55,7 @@ enum {
PRINT_DEVICE, PRINT_DEVICE,
PRINT_PARTMAP, PRINT_PARTMAP,
PRINT_ABSTRACTION, PRINT_ABSTRACTION,
PRINT_LUKS_UUID
}; };
int print = PRINT_FS; int print = PRINT_FS;
@ -88,6 +89,27 @@ probe_partmap (grub_disk_t disk)
} }
} }
static void
probe_luks_uuid (grub_disk_t disk)
{
grub_disk_memberlist_t list = NULL, tmp;
/* In case of LVM/RAID, check the member devices as well. */
if (disk->dev->memberlist)
{
list = disk->dev->memberlist (disk);
}
while (list)
{
probe_luks_uuid (list->disk);
tmp = list->next;
free (list);
list = tmp;
}
if (disk->dev->id == GRUB_DISK_DEVICE_LUKS_ID)
grub_util_luks_print_uuid (disk);
}
static int static int
probe_raid_level (grub_disk_t disk) probe_raid_level (grub_disk_t disk)
{ {
@ -194,6 +216,13 @@ probe (const char *path, char *device_name)
goto end; goto end;
} }
if (print == PRINT_LUKS_UUID)
{
probe_luks_uuid (dev->disk);
printf ("\n");
goto end;
}
if (print == PRINT_PARTMAP) if (print == PRINT_PARTMAP)
{ {
/* Check if dev->disk itself is contained in a partmap. */ /* Check if dev->disk itself is contained in a partmap. */
@ -267,8 +296,8 @@ Probe device information for a given path (or device, if the -d option is given)
\n\ \n\
-d, --device given argument is a system device, not a path\n\ -d, --device given argument is a system device, not a path\n\
-m, --device-map=FILE use FILE as the device map [default=%s]\n\ -m, --device-map=FILE use FILE as the device map [default=%s]\n\
-t, --target=(fs|fs_uuid|fs_label|drive|device|partmap|abstraction)\n\ -t, --target=(fs|fs_uuid|fs_label|drive|device|partmap|abstraction|luks_uuid)\n\
print filesystem module, GRUB drive, system device, partition map module or abstraction module [default=fs]\n\ print filesystem module, GRUB drive, system device, partition map module, abstraction module or LUKS UUID [default=fs]\n\
-h, --help display this message and exit\n\ -h, --help display this message and exit\n\
-V, --version print version information and exit\n\ -V, --version print version information and exit\n\
-v, --verbose print verbose messages\n\ -v, --verbose print verbose messages\n\
@ -326,6 +355,8 @@ main (int argc, char *argv[])
print = PRINT_PARTMAP; print = PRINT_PARTMAP;
else if (!strcmp (optarg, "abstraction")) else if (!strcmp (optarg, "abstraction"))
print = PRINT_ABSTRACTION; print = PRINT_ABSTRACTION;
else if (!strcmp (optarg, "luks_uuid"))
print = PRINT_LUKS_UUID;
else else
usage (1); usage (1);
break; break;