From 87ad64c3ddc7e2f8b05eec8faaa10b5fa4a4ce02 Mon Sep 17 00:00:00 2001
From: Miklos Szeredi <miklos@szeredi.hu>
Date: Wed, 18 Oct 2006 08:17:08 +0000
Subject: [PATCH] fusermount: don't try to create a lock file if /etc/mtab is a
 symlink

---
 ChangeLog         |  6 ++++++
 util/fusermount.c | 14 ++++++++------
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 08f6a9e..3cd4795 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-10-18  Miklos Szeredi <miklos@szeredi.hu>
+
+	* fusermount: don't try to create a lock file if /etc/mtab is a
+	symlink.  Report and patch from Alexei Sheplyakov (debian bug
+	#393693)
+
 2006-10-17  Miklos Szeredi <miklos@szeredi.hu>
 
 	* Minor changes, sync with mainline tree
diff --git a/util/fusermount.c b/util/fusermount.c
index dc30fde..014d4ea 100644
--- a/util/fusermount.c
+++ b/util/fusermount.c
@@ -108,6 +108,13 @@ static int lock_mtab(void)
     const char *mtab_lock = _PATH_MOUNTED ".fuselock";
     int mtablock;
     int res;
+    struct stat mtab_stat;
+
+    /* /etc/mtab could be a symlink to /proc/mounts */
+    if (!lstat(_PATH_MOUNTED, &mtab_stat)) {
+        if (S_ISLNK(mtab_stat.st_mode))
+            return -1;
+    }
 
     mtablock = open(mtab_lock, O_RDWR | O_CREAT, 0600);
     if (mtablock >= 0) {
@@ -880,13 +887,8 @@ static int mount_fuse(const char *mnt, const char *opts)
     if (fd == -1)
         return -1;
 
-    if (geteuid() == 0) {
+    if (geteuid() == 0)
         mtablock = lock_mtab();
-        if (mtablock < 0) {
-            close(fd);
-            return -1;
-        }
-    }
 
     drop_privs();
     read_conf();
-- 
2.30.2