Hi, Please unblock grub2 1.96+20080724-3. It fixes 3 rc/important bugs and a minor dependency issue (#492543) which was approved by Marc on IRC.
debdiff attached. Thanks -- Robert Millan The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and how) you may access your data; but nobody's threatening your freedom: we still allow you to remove your data and not access it at all."
diff -u grub2-1.96+20080724/debian/changelog grub2-1.96+20080724/debian/changelog --- grub2-1.96+20080724/debian/changelog +++ grub2-1.96+20080724/debian/changelog @@ -1,3 +1,19 @@ +grub2 (1.96+20080724-3) unstable; urgency=low + + [ Felix Zielcke ] + * changed depency for debconf to also support debconf-2.0. (Closes: #492543) + * patches/00_xfs.diff: Fix "out of partition" error with XFS. + (Closes: #436943) + + [ Robert Millan ] + * patches/00_raid_duped_disks.diff: Do not abort when two RAID disks with + the same number are found. (Closes: #492656) + * patches/00_strengthen_apple_partmap_check.diff: Be more strict when probing + for Apple partition maps (this prevents false positives on i386-pc + installs). (Closes: #475718) + + -- Robert Millan <[EMAIL PROTECTED]> Tue, 29 Jul 2008 00:48:01 +0200 + grub2 (1.96+20080724-2) unstable; urgency=high [ Felix Zielcke ] diff -u grub2-1.96+20080724/debian/control grub2-1.96+20080724/debian/control --- grub2-1.96+20080724/debian/control +++ grub2-1.96+20080724/debian/control @@ -20,7 +20,7 @@ Package: grub2 Architecture: i386 kfreebsd-i386 hurd-i386 amd64 kfreebsd-amd64 powerpc ppc64 -Depends: debconf, grub-pc [i386 kfreebsd-i386 hurd-i386 amd64 kfreebsd-amd64] | grub-ieee1275 [powerpc ppc64] +Depends: ${misc:Depends} , grub-pc [i386 kfreebsd-i386 hurd-i386 amd64 kfreebsd-amd64] | grub-ieee1275 [powerpc ppc64] Description: GRand Unified Bootloader, version 2 (dummy package) This is a dummy transitional package to handle GRUB 2 upgrades. It can be safely removed. @@ -42,7 +42,7 @@ Package: grub-pc Architecture: i386 kfreebsd-i386 hurd-i386 amd64 kfreebsd-amd64 -Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (>> 1.96+20080413-1), debconf, ${grub-pc:Depends} +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (>> 1.96+20080413-1), ${grub-pc:Depends} Provides: grub Replaces: pupa, grub, grub2 (<< ${Source-Version}), grub-common (<= 1.96+20080413-1) Conflicts: pupa, grub, desktop-base (= 4.0.5) diff -u grub2-1.96+20080724/debian/legacy/update-grub grub2-1.96+20080724/debian/legacy/update-grub --- grub2-1.96+20080724/debian/legacy/update-grub +++ grub2-1.96+20080724/debian/legacy/update-grub @@ -604,27 +604,14 @@ menu="$menu_file" echo >&2 echo >&2 - echo -n "Could not find $menu_file file. " >&2 if [ "-y" = "$command_line_arguments" ] ; then - echo >&2 - echo "Generating $menu_file" >&2 - answer=y - else - echo -n "Would you like $menu_file generated for you? " >&2 - echo -n "(y/N) " >&2 - read answer + echo "Warning: ignoring deprecated -y option." >&2 fi - - case "$answer" in - y* | Y*) - cat "$newtemplate" > $menu_file - rm -f $newtemplate - unset newtemplate - ;; - *) - abort "Not creating $menu_file as you wish" - ;; - esac + echo >&2 + echo "Generating $menu_file" >&2 + cat "$newtemplate" > $menu_file + rm -f $newtemplate + unset newtemplate fi # Extract the kernel options to use only in patch2: unchanged: --- grub2-1.96+20080724.orig/debian/patches/00_strengthen_apple_partmap_check.diff +++ grub2-1.96+20080724/debian/patches/00_strengthen_apple_partmap_check.diff @@ -0,0 +1,78 @@ + +2008-07-28 Robert Millan <[EMAIL PROTECTED]> + + * partmap/apple.c (GRUB_APPLE_HEADER_MAGIC): New macro. + (struct grub_apple_header): New struct. Describes the layout of + the partmap header. + (apple_partition_map_iterate): Check the header magic as well as the + partition magic (which was already being checked). + +Index: partmap/apple.c +=================================================================== +--- partmap/apple.c (revision 1745) ++++ partmap/apple.c (revision 1746) +@@ -22,11 +22,19 @@ + #include <grub/mm.h> + #include <grub/partition.h> + ++#define GRUB_APPLE_HEADER_MAGIC 0x4552 + #define GRUB_APPLE_PART_MAGIC 0x504D + ++struct grub_apple_header ++{ ++ /* The magic number to identify the partition map, it should have ++ the value `0x4552'. */ ++ grub_uint16_t magic; ++}; ++ + struct grub_apple_part + { +- /* The magic number to idenify this as a partition, it should have ++ /* The magic number to identify this as a partition, it should have + the value `0x504D'. */ + grub_uint16_t magic; + +@@ -98,6 +106,7 @@ + const grub_partition_t partition)) + { + struct grub_partition part; ++ struct grub_apple_header aheader; + struct grub_apple_part apart; + struct grub_disk raw; + int partno = 0; +@@ -109,6 +118,18 @@ + + part.partmap = &grub_apple_partition_map; + ++ if (grub_disk_read (&raw, 0, 0, sizeof (aheader), (char *) &aheader)) ++ return grub_errno; ++ ++ if (grub_be_to_cpu16 (aheader.magic) != GRUB_APPLE_HEADER_MAGIC) ++ { ++ grub_dprintf ("partition", ++ "bad magic (found 0x%x; wanted 0x%x\n", ++ grub_be_to_cpu16 (aheader.magic), ++ GRUB_APPLE_HEADER_MAGIC); ++ goto fail; ++ } ++ + for (;;) + { + if (grub_disk_read (&raw, pos / GRUB_DISK_SECTOR_SIZE, +@@ -147,11 +168,12 @@ + partno++; + } + +- if (pos == GRUB_DISK_SECTOR_SIZE) +- return grub_error (GRUB_ERR_BAD_PART_TABLE, +- "Apple partition map not found."); ++ if (pos != GRUB_DISK_SECTOR_SIZE) ++ return 0; + +- return 0; ++ fail: ++ return grub_error (GRUB_ERR_BAD_PART_TABLE, ++ "Apple partition map not found."); + } + + only in patch2: unchanged: --- grub2-1.96+20080724.orig/debian/patches/00_raid_duped_disks.diff +++ grub2-1.96+20080724/debian/patches/00_raid_duped_disks.diff @@ -0,0 +1,30 @@ +2008-07-28 Robert Millan <[EMAIL PROTECTED]> + + * disk/raid.c (grub_raid_scan_device): Do not abort when two disks + with the same number are found, just use issue a warning with + grub_dprintf(), as this error has been reported to be non-fatal. + +Index: disk/raid.c +=================================================================== +--- disk/raid.c (revision 1741) ++++ disk/raid.c (revision 1742) +@@ -442,16 +442,10 @@ + } + + if (array->device[sb.this_disk.number] != NULL) +- { +- /* We found multiple devices with the same number. Again, +- this shouldn't happen.*/ +- +- grub_error (GRUB_ERR_BAD_NUMBER, +- "Found two disks with the number %d?!?", ++ /* We found multiple devices with the same number. Again, ++ this shouldn't happen.*/ ++ grub_dprintf ("raid", "Found two disks with the number %d?!?", + sb.this_disk.number); +- +- return 0; +- } + } + + /* Add an array to the list if we didn't find any. */ only in patch2: unchanged: --- grub2-1.96+20080724.orig/debian/patches/00_xfs.diff +++ grub2-1.96+20080724/debian/patches/00_xfs.diff @@ -0,0 +1,50 @@ + +Fixes "out of partition" error with XFS. See #436943. + +diff --git a/fs/xfs.c b/fs/xfs.c +index 7da3e40..72d6a5f 100644 +--- a/fs/xfs.c ++++ b/fs/xfs.c +@@ -56,7 +56,7 @@ struct grub_xfs_sblock + struct grub_xfs_dir_header + { + grub_uint8_t count; +- grub_uint8_t i8count; ++ grub_uint8_t smallno; + union + { + grub_uint32_t i4; +@@ -423,7 +423,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir, + case XFS_INODE_FORMAT_INO: + { + struct grub_xfs_dir_entry *de = &diro->inode.data.dir.direntry[0]; +- int smallino = !diro->inode.data.dir.dirhead.i8count; ++ int smallino = !diro->inode.data.dir.dirhead.smallno; + int i; + grub_uint64_t parent; + +@@ -433,12 +433,12 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir, + { + parent = grub_be_to_cpu32 (diro->inode.data.dir.dirhead.parent.i4); + parent = grub_cpu_to_be64 (parent); ++ /* The header is a bit smaller than usual. */ ++ de = (struct grub_xfs_dir_entry *) ((char *) de - 4); + } + else + { +- parent = diro->inode.data.dir.dirhead.parent.i8; +- /* The header is a bit bigger than usual. */ +- de = (struct grub_xfs_dir_entry *) ((char *) de + 4); ++ parent = *(grub_uint64_t *) &diro->inode.data.dir.dirhead.parent.i8; + } + + /* Synthesize the direntries for `.' and `..'. */ +@@ -448,7 +448,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir, + if (call_hook (parent, "..")) + return 1; + +- for (i = 0; i < diro->inode.data.dir.dirhead.count; i++) ++ for (i = 0; i < diro->inode.data.dir.dirhead.count; i++) + { + grub_uint64_t ino; + void *inopos = (((char *) de)