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

_______________________________________________
Libguestfs mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libguestfs

Reply via email to