]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
Revert "libblkid: improve identification of ISO9660 partition"
authorKarel Zak <kzak@redhat.com>
Mon, 13 Jan 2020 10:48:37 +0000 (11:48 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 13 Jan 2020 10:48:37 +0000 (11:48 +0100)
This reverts commit fc84bc0a463480ffb17a39b5375463b7f07d14ce.

libblkid/src/superblocks/iso9660.c
tests/expected/blkid/iso-partitions-grub [deleted file]
tests/ts/blkid/iso-partitions
tests/ts/blkid/iso-partitions-grub.img.xz [deleted file]

index fd7f7cf816df71dcc62e3068d2eae9eaeb354aa0..730939f7064814ab9610d44719bcbe6de4a0d6ba 100644 (file)
@@ -19,9 +19,7 @@
 #include <stdint.h>
 #include <ctype.h>
 
-#include "iso9660.h"
 #include "superblocks.h"
-#include "sysfs.h"
 
 struct iso9660_date {
        unsigned char year[4];
@@ -45,13 +43,11 @@ struct iso_volume_descriptor {
        unsigned char   unused[8];
        unsigned char   space_size[8];
        unsigned char   escape_sequences[8];
-       unsigned char  unused1[32];
-       unsigned char  logical_block_size[4];
-       unsigned char  unused2[186];
+       unsigned char  unused1[222];
        unsigned char  publisher_id[128];
-       unsigned char  unused3[128];
+       unsigned char  unused2[128];
        unsigned char  application_id[128];
-       unsigned char  unused4[111];
+       unsigned char  unused3[111];
        struct iso9660_date created;
        struct iso9660_date modified;
 } __attribute__((packed));
@@ -173,22 +169,15 @@ static int is_str_empty(const unsigned char *str, size_t len)
 /*
  * The ISO format specifically avoids the first 32kb to allow for a
  * partition table to be added, if desired.
- * When an ISO contains a partition table, it is common to have a partition
- * that points at the iso mani filesystem. In such case,
+ * When an ISO contains a partition table, the usual thing to do is to
+ * have a partition that points at the iso filesystem. In such case,
  * we want to only probe the iso metadata for the corresponding partition
  * device, avoiding returning the metadata for the parent block device.
  */
-static bool isofs_belongs_to_device(blkid_probe pr, struct iso_volume_descriptor *iso)
+static bool isofs_belongs_to_device(blkid_probe pr)
 {
-       dev_t devno, disk_devno, isopart_devno;
+       dev_t devno;
        blkid_partlist ls;
-       blkid_loff_t pr_offset;
-       int isopart_partno = -1;
-       int nparts, i;
-       int num_sectors, sector_size;
-       long iso_size;
-       blkid_partition par;
-       struct path_cxt *pc;
 
        /* Get device number, but if that fails, assume we aren't dealing
         * with partitions, and continue probing. */
@@ -202,49 +191,10 @@ static bool isofs_belongs_to_device(blkid_probe pr, struct iso_volume_descriptor
        if (!ls)
                return true;
 
-       /* Calculate size of ISO9660 filesystem */
-       num_sectors = isonum_733(iso->space_size, false);
-       sector_size = isonum_723(iso->logical_block_size, false);
-       iso_size = ((long)num_sectors * (long)sector_size) >> 9;
-
-       /* Look for a partition that matches the ISO9660 filesystem start sector
-        * and size. */
-       pr_offset = blkid_probe_get_offset(pr);
-       nparts = blkid_partlist_numof_partitions(ls);
-       for (i = 0; i < nparts; i++) {
-               par = blkid_partlist_get_partition(ls, i);
-               if (blkid_partition_get_start(par) == pr_offset &&
-                   blkid_partition_get_size(par) == iso_size) {
-                       isopart_partno = blkid_partition_get_partno(par);
-                       break;
-               }
-       }
-
-       /* If we didn't find a matching partition, consider the current
-        * device as an appropriate owner of the ISO9660 filesystem. */
-       if (isopart_partno == -1)
-               return true;
-
-       /* A partition matching the ISO9660 filesystem was found. Look for
-        * a devno that corresponds to this partition. */
-       disk_devno = blkid_probe_get_wholedisk_devno(pr);
-       pc = ul_new_sysfs_path(disk_devno, NULL, NULL);
-       if (!pc)
-               return true;
-
-       isopart_devno = sysfs_blkdev_partno_to_devno(pc, isopart_partno);
-       ul_unref_path(pc);
-
-       /* If no ISO9660 partition devno was found, consider the current device
-        * as an appropriate owner of the filesystem. This can happen for CD/DVDs,
-        * where partitions may exist in the table, but are not usually probed by
-        * the kernel. */
-       if (!isopart_devno)
-               return true;
-
-       /* We found a partition that matches the ISO9660 filesystem. Check that it
-        * corresponds to the device that we are probing. */
-       return devno == isopart_devno;
+       /* Check that the device we're working with corresponds to an
+        * entry in the partition table. If so, this is the correct
+        * device to return the iso metadata on. */
+       return blkid_partlist_devno_to_partition(ls, devno) != NULL;
 }
 
 /* iso9660 [+ Microsoft Joliet Extension] */
@@ -264,7 +214,7 @@ static int probe_iso9660(blkid_probe pr, const struct blkid_idmag *mag)
 
        /* Check if the iso metadata should be returned on a different device
         * instead of this one. */
-       if (!isofs_belongs_to_device(pr, iso))
+       if (!isofs_belongs_to_device(pr))
                return 1;
 
        memcpy(label, iso->volume_id, sizeof(label));
diff --git a/tests/expected/blkid/iso-partitions-grub b/tests/expected/blkid/iso-partitions-grub
deleted file mode 100644 (file)
index 9a403a8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-ID_FS_BLOCK_SIZE=2048
-ID_FS_UUID=2019-12-16-06-07-35-00
-ID_FS_UUID_ENC=2019-12-16-06-07-35-00
-ID_FS_BOOT_SYSTEM_ID=EL TORITO SPECIFICATION
-ID_FS_LABEL=ISOIMAGE
-ID_FS_LABEL_ENC=ISOIMAGE
-ID_FS_TYPE=iso9660
-ID_FS_USAGE=filesystem
-ID_PART_TABLE_UUID=4b46ece2-6efb-4bf9-90a6-858c95e5581d
-ID_PART_TABLE_TYPE=gpt
index cfa0a93fff9591b40cd25d5ee66f8f82a32ac364..4aaa164f7d747c3ead372aeb3a80c0611dd1b66d 100755 (executable)
@@ -69,23 +69,4 @@ udevadm settle
 $TS_CMD_BLKID -p -o udev ${TS_DEVICE} >> $TS_OUTPUT
 ts_finalize_subtest
 
-# This image (created by grub-mkrescue) has a partition table where the
-# partitions do not point to the ISO9660 filesystem.
-xz -dc ${TS_SELF}/iso-partitions-grub.img.xz > ${TS_DEVICE}
-udevadm settle
-
-ts_init_subtest "grub"
-$TS_CMD_PARTX -a ${TS_DEVICE} &>/dev/null
-udevadm settle
-
-# Check that the ISO metadata is shown on the main disk device
-$TS_CMD_BLKID -p -o udev ${TS_DEVICE} >> $TS_OUTPUT
-
-# substitute major/minor number before comparison
-sed -i \
-  -e 's/^\(ID_PART_ENTRY_DISK\)=.*/\1=__ts_majorminor__/' \
-  $TS_OUTPUT
-
-ts_finalize_subtest
-
 ts_finalize
diff --git a/tests/ts/blkid/iso-partitions-grub.img.xz b/tests/ts/blkid/iso-partitions-grub.img.xz
deleted file mode 100644 (file)
index 7fe886a..0000000
Binary files a/tests/ts/blkid/iso-partitions-grub.img.xz and /dev/null differ