From cb8920e642c9b3efa3608bde418f512f024cadbc Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Fri, 15 Oct 2004 15:53:18 +0000 Subject: [PATCH] Fixes to lvcreate vgname processing. --- WHATS_NEW | 1 + tools/lvcreate.c | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index d9a521b83..f327e9ae1 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.00.26 - ===================================== + Fixes to lvcreate vgname parsing. Fix dm_name string size calculation. Improve clvmd error reporting during startup. Make clvmd cope with large gaps in node numbers IDs. diff --git a/tools/lvcreate.c b/tools/lvcreate.c index e2117b4a5..3ef022049 100644 --- a/tools/lvcreate.c +++ b/tools/lvcreate.c @@ -53,6 +53,7 @@ static int _read_name_params(struct lvcreate_params *lp, { int argc = *pargc; char **argv = *pargv, *ptr; + char *vg_name; if (arg_count(cmd, name_ARG)) lp->lv_name = arg_value(cmd, name_ARG); @@ -88,7 +89,20 @@ static int _read_name_params(struct lvcreate_params *lp, } } else { - if (strrchr(argv[0], '/')) { + vg_name = argv[0]; + /* Strip dev_dir (optional) */ + if (*vg_name == '/') { + while (*vg_name == '/') + vg_name++; + vg_name--; + } + if (!strncmp(vg_name, cmd->dev_dir, + strlen(cmd->dev_dir))) { + vg_name += strlen(cmd->dev_dir); + while (*vg_name == '/') + vg_name++; + } + if (strrchr(vg_name, '/')) { log_error("Volume group name expected " "(no slash)"); return 0; @@ -103,16 +117,16 @@ static int _read_name_params(struct lvcreate_params *lp, extract_vgname(cmd, lp->lv_name))) return 0; - if (strcmp(lp->vg_name, argv[0])) { + if (strcmp(lp->vg_name, vg_name)) { log_error("Inconsistent volume group " "names " "given: \"%s\" and \"%s\"", - lp->vg_name, argv[0]); + lp->vg_name, vg_name); return 0; } } - lp->vg_name = argv[0]; + lp->vg_name = vg_name; (*pargv)++, (*pargc)--; } }