virsh doesn't reject or absolutify a passed relative path, which can give unexpected results. Convert a relative path to an absolute one before calling the API https://bugzilla.redhat.com/show_bug.cgi?id=1300177 --- tools/virsh-domain.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index a1d4a75..7074ded 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -2256,8 +2256,9 @@ static bool cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) { virDomainPtr dom = NULL; - const char *dest = NULL; + const char *dest_cli = NULL; const char *format = NULL; + char *dest = NULL; unsigned long bandwidth = 0; unsigned int granularity = 0; unsigned long long buf_size = 0; @@ -2281,7 +2282,7 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0) return false; - if (vshCommandOptStringReq(ctl, cmd, "dest", &dest) < 0) + if (vshCommandOptStringReq(ctl, cmd, "dest", &dest_cli) < 0) return false; if (vshCommandOptStringReq(ctl, cmd, "xml", &xml) < 0) return false; @@ -2308,6 +2309,11 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) if (async) abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC; + if (dest_cli && virFileAbsPath(dest_cli, &dest) < 0) { + vshError(ctl, _("failed to build absolute path for %s"), dest_cli); + return false; + } + VSH_EXCLUSIVE_OPTIONS_VAR(dest, xml); VSH_EXCLUSIVE_OPTIONS_VAR(format, xml); VSH_EXCLUSIVE_OPTIONS_VAR(blockdev, xml); @@ -2462,6 +2468,7 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd) ret = true; cleanup: + VIR_FREE(dest); VIR_FREE(xmlstr); virTypedParamsFree(params, nparams); virDomainFree(dom); -- 2.7.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list