[Libguestfs] [PATCH] fuse: In mount-local-run, test if root filesystem has been mounted (RHBZ#1057504).

Richard W.M. Jones rjones at redhat.com
Fri Jan 24 10:22:58 UTC 2014


It is never normally valid to use the mount-local* APIs when you
haven't mounted some filesystems in the libguestfs namespace.

If you try it, it results in some odd errors.  The mount-local-run
call is successful, but subsequent operations fail:

$ mkdir -p /tmp/mnt
$ guestfish -x -N fs mount-local /tmp/mnt : mount-local-run
libguestfs: error: lstat: lstat_stub: you must call 'mount' first to mount the root filesystem
libguestfs: error: lstat: lstat_stub: you must call 'mount' first to mount the root filesystem

With this commit, the mount-local-run call gives an error.

The error is implemented by calling guestfs_exists (g, "/") which has
the side effect of running the NEED_ROOT macro in the daemon.  (There
is no simple equivalent of NEED_ROOT on the library side.)
---
 src/fuse.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/fuse.c b/src/fuse.c
index dd4f139..c22cbba 100644
--- a/src/fuse.c
+++ b/src/fuse.c
@@ -1028,6 +1028,12 @@ guestfs__mount_local_run (guestfs_h *g)
     return -1;
   }
 
+  /* Test if root is mounted.  We do this by using a side-effect of
+   * guestfs_exists (which is that it calls NEED_ROOT).
+   */
+  if (guestfs_exists (g, "/") == -1)
+    return -1;
+
   debug (g, "%s: entering fuse_loop", __func__);
 
   /* Enter the main loop. */
-- 
1.8.4.2




More information about the Libguestfs mailing list