X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=daemon%2Fmount.c;h=ccd07c6bacd9143362dae5a6019df26287e64ca5;hp=548511686390592e1907d91cf9d52db24b78b476;hb=cb7ec8be4ce6068b6cbc6522a67826cdbd161024;hpb=dc706a639eec16084c0618baf7bfde00c6565f63 diff --git a/daemon/mount.c b/daemon/mount.c index 5485116..ccd07c6 100644 --- a/daemon/mount.c +++ b/daemon/mount.c @@ -149,6 +149,7 @@ mounts_or_mountpoints (int mp) char *p, *pend, *p2; int len; char matching[5 + sysroot_len]; + size_t i; r = command (&out, &err, "mount", NULL); if (r == -1) { @@ -204,6 +205,26 @@ mounts_or_mountpoints (int mp) if (add_string (&ret, &size, &alloc, NULL) == -1) return NULL; + /* Convert /dev/mapper LV paths into canonical paths (RHBZ#646432). */ + for (i = 0; ret[i] != NULL; i += mp ? 2 : 1) { + if (STRPREFIX (ret[i], "/dev/mapper/") || STRPREFIX (ret[i], "/dev/dm-")) { + char *canonical; + r = lv_canonical (ret[i], &canonical); + if (r == -1) { + free_strings (ret); + return NULL; + } + if (r == 1) { + free (ret[i]); + ret[i] = canonical; + } + /* Ignore the case where r == 0. This might happen where + * eg. a LUKS /dev/mapper device is mounted, but that won't + * correspond to any LV. + */ + } + } + return ret; }