+2010-09-08 Robert Millan <rmh@gnu.org>
+
+ * util/grub-mkconfig_lib.in (is_path_readable_by_grub): Improve
+ with (optional) parameters to specify device and relative path.
+ * util/grub-install.in: Use is_path_readable_by_grub() to
+ verify readability of a few critical files.
+ * util/grub-mkconfig.in: Use is_path_readable_by_grub() to
+ verify readability of grub.cfg.new.
+
2010-09-08 Vladimir Serbinenko <phcoder@gmail.com>
Split minix.mod into minix.mod and minix2.mod.
#! /bin/sh
# Install GRUB on your drive.
-# Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc.
+# Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
fi
# Then the partition map module. In order to support partition-less media,
-# this command is allowed to fail (--target=fs already grants us that the
-# filesystem will be accessible).
+# this command is allowed to fail.
partmap_module=
for x in `$grub_probe --target=partmap --device ${grub_device} 2> /dev/null`; do
partmap_module="$partmap_module part_$x";
*) mkimage_target=i386-coreboot;
esac
+# Verify readability of a few critical files
+for file in grubenv core.${imgext} normal.mod ; do
+ if is_path_readable_by_grub ${grubdir}/${file} ${grub_device} ${relative_grubdir}/${file} ; then : ; else
+ echo "GRUB is unable to read ${grubdir}/${file}" >&2
+ exit 1
+ fi
+done
+
if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
$grub_mkimage ${config_opt} -O ${mkimage_target} --output=${grubdir}/core.img --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1
esac
done
+# Verify readability of ${grub_cfg}.new
+if is_path_readable_by_grub ${grub_cfg}.new ; then : ; else
+ echo "GRUB is unable to read ${grubdir}/${file}" >&2
+ exit 1
+fi
+
if test "x${grub_cfg}" != "x" ; then
# none of the children aborted with error, install the new grub.cfg
mv -f ${grub_cfg}.new ${grub_cfg}
is_path_readable_by_grub ()
{
path=$1
+ device=$2
+ relpath=$3
# abort if path doesn't exist
if test -e $path ; then : ;else
return 1
fi
+ if [ "${device}" = "" ] ; then
+ device=$(${grub_probe} --target=device $path)
+ fi
+ if [ "${relpath}" = "" ] ; then
+ relpath=$(${grub_mkrelpath} $path)
+ fi
+
# abort if file read through GRUB doesn't match file read through system
# facilities
- device=$(${grub_probe} --target=device $path)
- relpath=$(${grub_mkrelpath} $path)
if ${grub_fstest} $device cmp $relpath $path > /dev/null 2>&1 ; then : ; else
return 1
fi