From: "Vladimir 'φ-coder/phcoder' Serbinenko" <phcoder@gmail.com>
To: The development of GNU GRUB <grub-devel@gnu.org>
Subject: Re: [PATCH] use vgs --nameprefixes to protect against whitespace changes
Date: Wed, 14 Aug 2013 18:16:42 +0200 [thread overview]
Message-ID: <520BAD6A.1040801@gmail.com> (raw)
In-Reply-To: <1374217896-21412-1-git-send-email-arvidjaar@gmail.com>
On 19.07.2013 09:11, Andrey Borzenkov wrote:
> 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'
>
This code wouldn't handle name containing \n correctly but it's a
subject for another patch as issue is already present.
Go ahead.
> Signed-off-by: Andrey Borzenkov <arvidjaar@gmail.com>
>
> ---
> 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);
> }
>
>
prev parent reply other threads:[~2013-08-14 16:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-19 7:11 [PATCH] use vgs --nameprefixes to protect against whitespace changes Andrey Borzenkov
2013-07-27 10:09 ` [PATCH] fix parsing of LVM PV names for short names Andrey Borzenkov
2013-08-14 15:24 ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-08-14 16:16 ` Vladimir 'φ-coder/phcoder' Serbinenko [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=520BAD6A.1040801@gmail.com \
--to=phcoder@gmail.com \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.