From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1V04qv-0004Xu-57 for mharc-grub-devel@gnu.org; Fri, 19 Jul 2013 03:11:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46569) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V04qs-0004XC-TX for grub-devel@gnu.org; Fri, 19 Jul 2013 03:11:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V04qr-0003g0-Vd for grub-devel@gnu.org; Fri, 19 Jul 2013 03:11:42 -0400 Received: from mail-la0-x229.google.com ([2a00:1450:4010:c03::229]:60654) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V04qr-0003fu-Ox for grub-devel@gnu.org; Fri, 19 Jul 2013 03:11:41 -0400 Received: by mail-la0-f41.google.com with SMTP id fn20so3174321lab.14 for ; Fri, 19 Jul 2013 00:11:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:x-mailer; bh=vQWlRM6tGfG1ExDO+VCOi/ypixBr9JzFebcn+GCIdO4=; b=WuMggglsp9RSE/lXfLMBgJvpdYvwlVPRJiI1YTvLM0vL2Lifun5aYWsa+oR8KVitY4 eJ+2+XK//CE38Nm4CxBrMhk9egw6DYk9x7INhwi33fuKNp1Txl7Aop/DmiXSKQheYzlp 2D1gLT8ukpSH22GqMI+o+BH96HZkpZ36KkYoASoB9HtM81pdSnXyDvwCE+nfZ52V2peA Yey9cndpmm9VkJ1S1EY25joEKC7JFeHNeNrHiCKXQiwP0tHhbOCU6UR+f9aYoo/xhQAE QBca0a9oLwxjv4+cj/rwgkMzowyiPbs2QzUY/Vwg48jk5RGfHvw0r+KhmoXCabxnCL+V BuSg== X-Received: by 10.112.172.35 with SMTP id az3mr6737831lbc.66.1374217900543; Fri, 19 Jul 2013 00:11:40 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-160-84.pppoe.spdop.ru. [79.139.160.84]) by mx.google.com with ESMTPSA id m14sm5557650lbl.1.2013.07.19.00.11.39 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 19 Jul 2013 00:11:40 -0700 (PDT) From: Andrey Borzenkov To: grub-devel@gnu.org Subject: [PATCH] use vgs --nameprefixes to protect against whitespace changes Date: Fri, 19 Jul 2013 11:11:36 +0400 Message-Id: <1374217896-21412-1-git-send-email-arvidjaar@gmail.com> X-Mailer: git-send-email 1.8.1.4 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4010:c03::229 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jul 2013 07:11:44 -0000 Do not assume single blank at the end of PV name. At least lvm2-2.02.98-24.3 (openSUSE 13.1 M3) puts exra blank at the end. linux-chxo:~ # grub2-probe -t abstraction /lib mdadm: cannot open /dev/md1 : No such file or directory grub2-probe: error: cannot open `/dev/md1 ': No such file or directory. linux-chxo:~ # : Update grub with patch linux-chxo:~ # grub2-probe -t abstraction /lib diskfilter mdraid1x lvm linux-chxo:~ # vgs --options pv_name --noheadings | xxd 0000000: 2020 2f64 6576 2f6d 6431 2020 0a /dev/md1 . linux-chxo:~ # rpm -q lvm2 lvm2-2.02.98-24.3.i586 This patch changes it to use --nameprefixes which returns each PV name as LVM2_PV_NAME='xxx' Signed-off-by: Andrey Borzenkov --- util/getroot.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/util/getroot.c b/util/getroot.c index 2ad8a55..479ab78 100644 --- a/util/getroot.c +++ b/util/getroot.c @@ -1322,7 +1322,7 @@ grub_util_get_dev_abstraction (const char *os_dev) static void pull_lvm_by_command (const char *os_dev) { - char *argv[6]; + char *argv[7]; int fd; pid_t pid; FILE *mdadm; @@ -1355,8 +1355,9 @@ pull_lvm_by_command (const char *os_dev) argv[1] = (char *) "--options"; argv[2] = (char *) "pv_name"; argv[3] = (char *) "--noheadings"; - argv[4] = vgname; - argv[5] = NULL; + argv[4] = (char *) "--nameprefixes"; + argv[5] = vgname; + argv[6] = NULL; pid = exec_pipe (argv, &fd); free (vgname); @@ -1376,10 +1377,19 @@ pull_lvm_by_command (const char *os_dev) while (getline (&buf, &len, mdadm) > 0) { char *ptr; - for (ptr = buf; ptr < buf + 2 && *ptr == ' '; ptr++); + + grub_util_info ("vgs returned PV: %s", buf); + + for (ptr = buf; *ptr == ' '; ptr++); if (*ptr == '\0') continue; - *(ptr + strlen (ptr) - 1) = '\0'; + if (strncmp (buf, "LVM2_PV_NAME='", sizeof ("LVM2_PV_NAME='") - 1)) + continue; + ptr = buf + sizeof ("LVM2_PV_NAME='") - 1; + if (*(buf + len - 1) != '\'') + continue; + *(buf + len - 1) = '\0'; + /* FIXME can PV name contain "'"? */ grub_util_pull_device (ptr); } -- tg: (e1a892d..) u/strip-pv-trailing-blanks (depends on: master)