diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2010-10-27 14:51:17 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2010-10-28 15:16:14 +0100 |
commit | fea2e61ac1129a2f01036d4dfbee8947f3d00886 (patch) | |
tree | 09a6614f76d78e4f7b5b1e9418023ec79a0c7ad7 /daemon/mount.c | |
parent | 2f52a40bed27e49972b957f1ef3276c422d5ef96 (diff) | |
download | libguestfs-fea2e61ac1129a2f01036d4dfbee8947f3d00886.tar.gz libguestfs-fea2e61ac1129a2f01036d4dfbee8947f3d00886.tar.xz libguestfs-fea2e61ac1129a2f01036d4dfbee8947f3d00886.zip |
daemon: Fix /dev/mapper paths from mounts and mountpoints (RHBZ#646432).
Make the LV paths returned by these two commands canonical.
Diffstat (limited to 'daemon/mount.c')
-rw-r--r-- | daemon/mount.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/daemon/mount.c b/daemon/mount.c index 54851168..ccd07c6b 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; } |