Blame SOURCES/0046-Make-SET_VARIABLE-get-handled-individually-in-GetNex.patch

56d25d
From 8a3357d1257e5e36648c944ff1e461f0f77c88f4 Mon Sep 17 00:00:00 2001
56d25d
From: Peter Jones <pjones@redhat.com>
56d25d
Date: Thu, 6 Aug 2015 10:07:11 -0400
56d25d
Subject: [PATCH 3/3] Make SET_VARIABLE get handled individually in
56d25d
 GetNextLine()
56d25d
56d25d
Resolves: rhbz#1152550
56d25d
56d25d
Signed-off-by: Peter Jones <pjones@redhat.com>
56d25d
---
56d25d
 .gitignore               |   2 +
56d25d
 grubby.c                 | 118 ++++++++++++++++++++++++++------
56d25d
 test.sh                  |   8 +++
56d25d
 test/grub2.16            | 156 +++++++++++++++++++++++++++++++++++++++++++
56d25d
 test/results/add/g2-1.16 | 170 +++++++++++++++++++++++++++++++++++++++++++++++
56d25d
 5 files changed, 433 insertions(+), 21 deletions(-)
56d25d
 create mode 100644 test/grub2.16
56d25d
 create mode 100644 test/results/add/g2-1.16
56d25d
56d25d
diff --git a/.gitignore b/.gitignore
56d25d
index e64d3bc..e78a392 100644
56d25d
--- a/.gitignore
56d25d
+++ b/.gitignore
56d25d
@@ -1,3 +1,5 @@
56d25d
 grubby
56d25d
 version.h
56d25d
 *.o
56d25d
+core.*
56d25d
+vgcore.*
56d25d
diff --git a/grubby.c b/grubby.c
56d25d
index 53c11a8..04c5bcb 100644
56d25d
--- a/grubby.c
56d25d
+++ b/grubby.c
56d25d
@@ -75,6 +75,7 @@ struct lineElement {
56d25d
 };
56d25d
 
56d25d
 enum lineType_e {
56d25d
+	LT_UNIDENTIFIED = 0,
56d25d
 	LT_WHITESPACE = 1 << 0,
56d25d
 	LT_TITLE = 1 << 1,
56d25d
 	LT_KERNEL = 1 << 2,
56d25d
@@ -740,6 +741,33 @@ static char *sdupprintf(const char *format, ...)
56d25d
 	return buf;
56d25d
 }
56d25d
 
56d25d
+static inline int
56d25d
+kwcmp(struct keywordTypes *kw, const char * label, int case_insensitive)
56d25d
+{
56d25d
+    int kwl = strlen(kw->key);
56d25d
+    int ll = strlen(label);
56d25d
+    int rc;
56d25d
+    int (*snc)(const char *s1, const char *s2, size_t n) =
56d25d
+           case_insensitive ? strncasecmp : strncmp;
56d25d
+    int (*sc)(const char *s1, const char *s2) =
56d25d
+           case_insensitive ? strcasecmp : strcmp;
56d25d
+
56d25d
+    rc = snc(kw->key, label, kwl);
56d25d
+    if (rc)
56d25d
+       return rc;
56d25d
+
56d25d
+    for (int i = kwl; i < ll; i++) {
56d25d
+       if (isspace(label[i]))
56d25d
+           return 0;
56d25d
+       if (kw->separatorChar && label[i] == kw->separatorChar)
56d25d
+           return 0;
56d25d
+       else if (kw->nextChar && label[i] == kw->nextChar)
56d25d
+           return 0;
56d25d
+       return sc(kw->key+kwl, label+kwl);
56d25d
+    }
56d25d
+    return 0;
56d25d
+}
56d25d
+
56d25d
 static enum lineType_e preferredLineType(enum lineType_e type,
56d25d
 					 struct configFileInfo *cfi)
56d25d
 {
56d25d
@@ -805,13 +833,8 @@ static enum lineType_e getTypeByKeyword(char *keyword,
56d25d
 					struct configFileInfo *cfi)
56d25d
 {
56d25d
 	for (struct keywordTypes * kw = cfi->keywords; kw->key; kw++) {
56d25d
-		if (cfi->caseInsensitive) {
56d25d
-			if (!strcasecmp(keyword, kw->key))
56d25d
-				return kw->type;
56d25d
-		} else {
56d25d
-			if (!strcmp(keyword, kw->key))
56d25d
-				return kw->type;
56d25d
-		}
56d25d
+		if (!kwcmp(kw, keyword, cfi->caseInsensitive))
56d25d
+			return kw->type;
56d25d
 	}
56d25d
 	return LT_UNKNOWN;
56d25d
 }
56d25d
@@ -906,6 +929,7 @@ static int readFile(int fd, char **bufPtr)
56d25d
 
56d25d
 static void lineInit(struct singleLine *line)
56d25d
 {
56d25d
+	line->type = LT_UNIDENTIFIED;
56d25d
 	line->indent = NULL;
56d25d
 	line->elements = NULL;
56d25d
 	line->numElements = 0;
56d25d
@@ -987,7 +1011,7 @@ static int lineWrite(FILE * out, struct singleLine *line,
56d25d
 
56d25d
 		if (fprintf(out, "%s", line->elements[i].item) == -1)
56d25d
 			return -1;
56d25d
-		if (i < line->numElements - 1)
56d25d
+		if (i < line->numElements - 1 || line->type == LT_SET_VARIABLE)
56d25d
 			if (fprintf(out, "%s", line->elements[i].indent) == -1)
56d25d
 				return -1;
56d25d
 	}
56d25d
@@ -1042,6 +1066,8 @@ static int getNextLine(char **bufPtr, struct singleLine *line,
56d25d
 				break;
56d25d
 			chptr++;
56d25d
 		}
56d25d
+		if (line->type == LT_UNIDENTIFIED)
56d25d
+			line->type = getTypeByKeyword(start, cfi);
56d25d
 		element->item = strndup(start, chptr - start);
56d25d
 		start = chptr;
56d25d
 
56d25d
@@ -1105,7 +1131,7 @@ static int getNextLine(char **bufPtr, struct singleLine *line,
56d25d
 				line->type = LT_WHITESPACE;
56d25d
 				line->numElements = 0;
56d25d
 			}
56d25d
-		} else {
56d25d
+		} else if (line->type == LT_INITRD) {
56d25d
 			struct keywordTypes *kw;
56d25d
 
56d25d
 			kw = getKeywordByType(line->type, cfi);
56d25d
@@ -1167,6 +1193,39 @@ static int getNextLine(char **bufPtr, struct singleLine *line,
56d25d
 					}
56d25d
 				}
56d25d
 			}
56d25d
+		} else if (line->type == LT_SET_VARIABLE) {
56d25d
+			/* and if it's a "set blah=" we need to split it
56d25d
+			 * yet a third way to avoid rhbz# XXX FIXME :/
56d25d
+			 */
56d25d
+			char *eq;
56d25d
+			int l;
56d25d
+			int numElements = line->numElements;
56d25d
+			struct lineElement *newElements;
56d25d
+			eq = strchr(line->elements[1].item, '=');
56d25d
+			if (!eq)
56d25d
+				return 0;
56d25d
+			l = eq - line->elements[1].item;
56d25d
+			if (eq[1] != 0)
56d25d
+				numElements++;
56d25d
+			newElements = calloc(numElements,sizeof (*newElements));
56d25d
+			memcpy(&newElements[0], &line->elements[0],
56d25d
+			       sizeof (newElements[0]));
56d25d
+			newElements[1].item =
56d25d
+				strndup(line->elements[1].item, l);
56d25d
+			newElements[1].indent = "=";
56d25d
+			*(eq++) = '\0';
56d25d
+			newElements[2].item = strdup(eq);
56d25d
+			free(line->elements[1].item);
56d25d
+			if (line->elements[1].indent)
56d25d
+				newElements[2].indent = line->elements[1].indent;
56d25d
+			for (int i = 2; i < line->numElements; i++) {
56d25d
+				newElements[i+1].item = line->elements[i].item;
56d25d
+				newElements[i+1].indent =
56d25d
+					line->elements[i].indent;
56d25d
+			}
56d25d
+			free(line->elements);
56d25d
+			line->elements = newElements;
56d25d
+			line->numElements = numElements;
56d25d
 		}
56d25d
 	}
56d25d
 
56d25d
@@ -1272,8 +1331,8 @@ static struct grubConfig *readConfig(const char *inName,
56d25d
 			    getKeywordByType(LT_DEFAULT, cfi);
56d25d
 			if (kwType && line->numElements == 3
56d25d
 			    && !strcmp(line->elements[1].item, kwType->key)
56d25d
-			    && !is_special_grub2_variable(line->elements[2].
56d25d
-							  item)) {
56d25d
+			    && !is_special_grub2_variable(
56d25d
+						line->elements[2].item)) {
56d25d
 				dbgPrintf("Line sets default config\n");
56d25d
 				cfg->flags &= ~GRUB_CONFIG_NO_DEFAULT;
56d25d
 				defaultLine = line;
56d25d
@@ -1529,16 +1588,33 @@ static struct grubConfig *readConfig(const char *inName,
56d25d
 				}
56d25d
 			}
56d25d
 		} else if (cfi->defaultIsVariable) {
56d25d
-			char *value = defaultLine->elements[2].item;
56d25d
-			while (*value && (*value == '"' || *value == '\'' ||
56d25d
-					  *value == ' ' || *value == '\t'))
56d25d
-				value++;
56d25d
-			cfg->defaultImage = strtol(value, &end, 10);
56d25d
-			while (*end && (*end == '"' || *end == '\'' ||
56d25d
-					*end == ' ' || *end == '\t'))
56d25d
-				end++;
56d25d
-			if (*end)
56d25d
-				cfg->defaultImage = -1;
56d25d
+			if (defaultLine->numElements == 2) {
56d25d
+				char *value = defaultLine->elements[1].item + 8;
56d25d
+				while (*value && (*value == '"' ||
56d25d
+						  *value == '\'' ||
56d25d
+						  *value == ' ' ||
56d25d
+						  *value == '\t'))
56d25d
+					value++;
56d25d
+				cfg->defaultImage = strtol(value, &end, 10);
56d25d
+				while (*end && (*end == '"' || *end == '\'' ||
56d25d
+						*end == ' ' || *end == '\t'))
56d25d
+					end++;
56d25d
+				if (*end)
56d25d
+					cfg->defaultImage = -1;
56d25d
+			} else if (defaultLine->numElements == 3) {
56d25d
+				char *value = defaultLine->elements[2].item;
56d25d
+				while (*value && (*value == '"' ||
56d25d
+						  *value == '\'' ||
56d25d
+						  *value == ' ' ||
56d25d
+						  *value == '\t'))
56d25d
+					value++;
56d25d
+				cfg->defaultImage = strtol(value, &end, 10);
56d25d
+				while (*end && (*end == '"' || *end == '\'' ||
56d25d
+						*end == ' ' || *end == '\t'))
56d25d
+					end++;
56d25d
+				if (*end)
56d25d
+					cfg->defaultImage = -1;
56d25d
+			}
56d25d
 		} else if (cfi->defaultSupportSaved &&
56d25d
 			   !strncmp(defaultLine->elements[1].item, "saved",
56d25d
 				    5)) {
56d25d
diff --git a/test.sh b/test.sh
56d25d
index c2a66e2..9e9be23 100755
56d25d
--- a/test.sh
56d25d
+++ b/test.sh
56d25d
@@ -542,6 +542,14 @@ if [ "$testgrub2" == "y" ]; then
56d25d
             ;;
56d25d
         esac
56d25d
 
56d25d
+    # a grub2 add with a "set" of the form: set foo="bar=1,2".  bz#1152550
56d25d
+    # has this being emitted as: set foo="bar=1,2"=1,2"
56d25d
+    # which is wrong.
56d25d
+    grub2Test grub2.16 add/g2-1.16 \
56d25d
+        --add-kernel=/boot/vmlinuz-foo \
56d25d
+        --copy-default --title 'Red Hat Enterprise Linux Server' \
56d25d
+        --args=root=/dev/mapper/foo--
56d25d
+
56d25d
     testing="GRUB2 add initrd"
56d25d
     grub2Test grub2.2 add/g2-1.4 --update-kernel=/boot/new-kernel.img \
56d25d
         --initrd=/boot/new-initrd --boot-filesystem=/boot/
56d25d
diff --git a/test/grub2.16 b/test/grub2.16
56d25d
new file mode 100644
56d25d
index 0000000..136880a
56d25d
--- /dev/null
56d25d
+++ b/test/grub2.16
56d25d
@@ -0,0 +1,156 @@
56d25d
+#
56d25d
+# DO NOT EDIT THIS FILE
56d25d
+#
56d25d
+# It is automatically generated by grub2-mkconfig using templates
56d25d
+# from /etc/grub.d and settings from /etc/default/grub
56d25d
+#
56d25d
+
56d25d
+### BEGIN /etc/grub.d/00_header ###
56d25d
+set pager=1
56d25d
+
56d25d
+if [ -s $prefix/grubenv ]; then
56d25d
+  load_env
56d25d
+fi
56d25d
+if [ "${next_entry}" ] ; then
56d25d
+   set default="${next_entry}"
56d25d
+   set next_entry=
56d25d
+   save_env next_entry
56d25d
+   set boot_once=true
56d25d
+else
56d25d
+   set default="${saved_entry}"
56d25d
+fi
56d25d
+
56d25d
+if [ x"${feature_menuentry_id}" = xy ]; then
56d25d
+  menuentry_id_option="--id"
56d25d
+else
56d25d
+  menuentry_id_option=""
56d25d
+fi
56d25d
+
56d25d
+export menuentry_id_option
56d25d
+
56d25d
+if [ "${prev_saved_entry}" ]; then
56d25d
+  set saved_entry="${prev_saved_entry}"
56d25d
+  save_env saved_entry
56d25d
+  set prev_saved_entry=
56d25d
+  save_env prev_saved_entry
56d25d
+  set boot_once=true
56d25d
+fi
56d25d
+
56d25d
+function savedefault {
56d25d
+  if [ -z "${boot_once}" ]; then
56d25d
+    saved_entry="${chosen}"
56d25d
+    save_env saved_entry
56d25d
+  fi
56d25d
+}
56d25d
+
56d25d
+function load_video {
56d25d
+  if [ x$feature_all_video_module = xy ]; then
56d25d
+    insmod all_video
56d25d
+  else
56d25d
+    insmod efi_gop
56d25d
+    insmod efi_uga
56d25d
+    insmod ieee1275_fb
56d25d
+    insmod vbe
56d25d
+    insmod vga
56d25d
+    insmod video_bochs
56d25d
+    insmod video_cirrus
56d25d
+  fi
56d25d
+}
56d25d
+
56d25d
+serial --speed=115200
56d25d
+terminal_input serial console
56d25d
+terminal_output serial console
56d25d
+if [ x$feature_timeout_style = xy ] ; then
56d25d
+  set timeout_style=menu
56d25d
+  set timeout=5
56d25d
+# Fallback normal timeout code in case the timeout_style feature is
56d25d
+# unavailable.
56d25d
+else
56d25d
+  set timeout=5
56d25d
+fi
56d25d
+### END /etc/grub.d/00_header ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/00_tuned ###
56d25d
+set tuned_params="isolcpus=1,3"
56d25d
+### END /etc/grub.d/00_tuned ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/01_users ###
56d25d
+if [ -f ${prefix}/user.cfg ]; then
56d25d
+  source ${prefix}/user.cfg
56d25d
+  if [ -n ${GRUB2_PASSWORD} ]; then
56d25d
+    set superusers="root"
56d25d
+    export superusers
56d25d
+    password_pbkdf2 root ${GRUB2_PASSWORD}
56d25d
+  fi
56d25d
+fi
56d25d
+### END /etc/grub.d/01_users ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/10_linux ###
56d25d
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-297.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
56d25d
+	load_video
56d25d
+	set gfxpayload=keep
56d25d
+	insmod gzio
56d25d
+	insmod part_msdos
56d25d
+	insmod xfs
56d25d
+	set root='hd0,msdos1'
56d25d
+	if [ x$feature_platform_search_hint = xy ]; then
56d25d
+	  search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	else
56d25d
+	  search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	fi
56d25d
+	linux16 /vmlinuz-3.10.0-297.el7.x86_64 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81  $tuned_params LANG=en_US.UTF-8
56d25d
+}
56d25d
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
56d25d
+	load_video
56d25d
+	set gfxpayload=keep
56d25d
+	insmod gzio
56d25d
+	insmod part_msdos
56d25d
+	insmod xfs
56d25d
+	set root='hd0,msdos1'
56d25d
+	if [ x$feature_platform_search_hint = xy ]; then
56d25d
+	  search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	else
56d25d
+	  search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	fi
56d25d
+	linux16 /vmlinuz-3.10.0-296.el7.x86_64 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81  $tuned_params
56d25d
+	initrd16 /initramfs-3.10.0-296.el7.x86_64.img
56d25d
+}
56d25d
+menuentry 'Red Hat Enterprise Linux Server (0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
56d25d
+	load_video
56d25d
+	insmod gzio
56d25d
+	insmod part_msdos
56d25d
+	insmod xfs
56d25d
+	set root='hd0,msdos1'
56d25d
+	if [ x$feature_platform_search_hint = xy ]; then
56d25d
+	  search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	else
56d25d
+	  search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	fi
56d25d
+	linux16 /vmlinuz-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81  $tuned_params
56d25d
+	initrd16 /initramfs-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7.img
56d25d
+}
56d25d
+if [ "x$default" = 'Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)' ]; then default='Advanced options for Red Hat Enterprise Linux Server>Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)'; fi;
56d25d
+### END /etc/grub.d/10_linux ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/20_linux_xen ###
56d25d
+### END /etc/grub.d/20_linux_xen ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/20_ppc_terminfo ###
56d25d
+### END /etc/grub.d/20_ppc_terminfo ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/30_os-prober ###
56d25d
+### END /etc/grub.d/30_os-prober ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/40_custom ###
56d25d
+# This file provides an easy way to add custom menu entries.  Simply type the
56d25d
+# menu entries you want to add after this comment.  Be careful not to change
56d25d
+# the 'exec tail' line above.
56d25d
+### END /etc/grub.d/40_custom ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/41_custom ###
56d25d
+if [ -f  ${config_directory}/custom.cfg ]; then
56d25d
+  source ${config_directory}/custom.cfg
56d25d
+elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
56d25d
+  source $prefix/custom.cfg;
56d25d
+fi
56d25d
+### END /etc/grub.d/41_custom ###
56d25d
diff --git a/test/results/add/g2-1.16 b/test/results/add/g2-1.16
56d25d
new file mode 100644
56d25d
index 0000000..fc98757
56d25d
--- /dev/null
56d25d
+++ b/test/results/add/g2-1.16
56d25d
@@ -0,0 +1,170 @@
56d25d
+#
56d25d
+# DO NOT EDIT THIS FILE
56d25d
+#
56d25d
+# It is automatically generated by grub2-mkconfig using templates
56d25d
+# from /etc/grub.d and settings from /etc/default/grub
56d25d
+#
56d25d
+
56d25d
+### BEGIN /etc/grub.d/00_header ###
56d25d
+set pager=1
56d25d
+
56d25d
+if [ -s $prefix/grubenv ]; then
56d25d
+  load_env
56d25d
+fi
56d25d
+if [ "${next_entry}" ] ; then
56d25d
+   set default="${next_entry}"
56d25d
+   set next_entry=
56d25d
+   save_env next_entry
56d25d
+   set boot_once=true
56d25d
+else
56d25d
+   set default="${saved_entry}"
56d25d
+fi
56d25d
+
56d25d
+if [ x"${feature_menuentry_id}" = xy ]; then
56d25d
+  menuentry_id_option="--id"
56d25d
+else
56d25d
+  menuentry_id_option=""
56d25d
+fi
56d25d
+
56d25d
+export menuentry_id_option
56d25d
+
56d25d
+if [ "${prev_saved_entry}" ]; then
56d25d
+  set saved_entry="${prev_saved_entry}"
56d25d
+  save_env saved_entry
56d25d
+  set prev_saved_entry=
56d25d
+  save_env prev_saved_entry
56d25d
+  set boot_once=true
56d25d
+fi
56d25d
+
56d25d
+function savedefault {
56d25d
+  if [ -z "${boot_once}" ]; then
56d25d
+    saved_entry="${chosen}"
56d25d
+    save_env saved_entry
56d25d
+  fi
56d25d
+}
56d25d
+
56d25d
+function load_video {
56d25d
+  if [ x$feature_all_video_module = xy ]; then
56d25d
+    insmod all_video
56d25d
+  else
56d25d
+    insmod efi_gop
56d25d
+    insmod efi_uga
56d25d
+    insmod ieee1275_fb
56d25d
+    insmod vbe
56d25d
+    insmod vga
56d25d
+    insmod video_bochs
56d25d
+    insmod video_cirrus
56d25d
+  fi
56d25d
+}
56d25d
+
56d25d
+serial --speed=115200
56d25d
+terminal_input serial console
56d25d
+terminal_output serial console
56d25d
+if [ x$feature_timeout_style = xy ] ; then
56d25d
+  set timeout_style=menu
56d25d
+  set timeout=5
56d25d
+# Fallback normal timeout code in case the timeout_style feature is
56d25d
+# unavailable.
56d25d
+else
56d25d
+  set timeout=5
56d25d
+fi
56d25d
+### END /etc/grub.d/00_header ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/00_tuned ###
56d25d
+set tuned_params="isolcpus=1,3"
56d25d
+### END /etc/grub.d/00_tuned ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/01_users ###
56d25d
+if [ -f ${prefix}/user.cfg ]; then
56d25d
+  source ${prefix}/user.cfg
56d25d
+  if [ -n ${GRUB2_PASSWORD} ]; then
56d25d
+    set superusers="root"
56d25d
+    export superusers
56d25d
+    password_pbkdf2 root ${GRUB2_PASSWORD}
56d25d
+  fi
56d25d
+fi
56d25d
+### END /etc/grub.d/01_users ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/10_linux ###
56d25d
+menuentry 'Red Hat Enterprise Linux Server' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
56d25d
+	load_video
56d25d
+	set gfxpayload=keep
56d25d
+	insmod gzio
56d25d
+	insmod part_msdos
56d25d
+	insmod xfs
56d25d
+	set root='hd0,msdos1'
56d25d
+	if [ x$feature_platform_search_hint = xy ]; then
56d25d
+	  search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	else
56d25d
+	  search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	fi
56d25d
+	linux16 /vmlinuz-foo root=/dev/mapper/foo-- ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81  $tuned_params LANG=en_US.UTF-8
56d25d
+}
56d25d
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-297.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
56d25d
+	load_video
56d25d
+	set gfxpayload=keep
56d25d
+	insmod gzio
56d25d
+	insmod part_msdos
56d25d
+	insmod xfs
56d25d
+	set root='hd0,msdos1'
56d25d
+	if [ x$feature_platform_search_hint = xy ]; then
56d25d
+	  search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	else
56d25d
+	  search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	fi
56d25d
+	linux16 /vmlinuz-3.10.0-297.el7.x86_64 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81  $tuned_params LANG=en_US.UTF-8
56d25d
+}
56d25d
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
56d25d
+	load_video
56d25d
+	set gfxpayload=keep
56d25d
+	insmod gzio
56d25d
+	insmod part_msdos
56d25d
+	insmod xfs
56d25d
+	set root='hd0,msdos1'
56d25d
+	if [ x$feature_platform_search_hint = xy ]; then
56d25d
+	  search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	else
56d25d
+	  search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	fi
56d25d
+	linux16 /vmlinuz-3.10.0-296.el7.x86_64 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81  $tuned_params
56d25d
+	initrd16 /initramfs-3.10.0-296.el7.x86_64.img
56d25d
+}
56d25d
+menuentry 'Red Hat Enterprise Linux Server (0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
56d25d
+	load_video
56d25d
+	insmod gzio
56d25d
+	insmod part_msdos
56d25d
+	insmod xfs
56d25d
+	set root='hd0,msdos1'
56d25d
+	if [ x$feature_platform_search_hint = xy ]; then
56d25d
+	  search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	else
56d25d
+	  search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
56d25d
+	fi
56d25d
+	linux16 /vmlinuz-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81  $tuned_params
56d25d
+	initrd16 /initramfs-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7.img
56d25d
+}
56d25d
+if [ "x$default" = 'Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)' ]; then default='Advanced options for Red Hat Enterprise Linux Server>Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)'; fi;
56d25d
+### END /etc/grub.d/10_linux ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/20_linux_xen ###
56d25d
+### END /etc/grub.d/20_linux_xen ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/20_ppc_terminfo ###
56d25d
+### END /etc/grub.d/20_ppc_terminfo ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/30_os-prober ###
56d25d
+### END /etc/grub.d/30_os-prober ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/40_custom ###
56d25d
+# This file provides an easy way to add custom menu entries.  Simply type the
56d25d
+# menu entries you want to add after this comment.  Be careful not to change
56d25d
+# the 'exec tail' line above.
56d25d
+### END /etc/grub.d/40_custom ###
56d25d
+
56d25d
+### BEGIN /etc/grub.d/41_custom ###
56d25d
+if [ -f  ${config_directory}/custom.cfg ]; then
56d25d
+  source ${config_directory}/custom.cfg
56d25d
+elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
56d25d
+  source $prefix/custom.cfg;
56d25d
+fi
56d25d
+### END /etc/grub.d/41_custom ###
56d25d
-- 
56d25d
2.4.3
56d25d