Use g_access() to check accessibility of local devices. Patch by Martin
authorMatthias Clasen <matthiasc@src.gnome.org>
Mon, 8 Dec 2008 04:33:41 +0000 (04:33 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Mon, 8 Dec 2008 04:33:41 +0000 (04:33 +0000)
       * gunixmounts.c: Use g_access() to check accessibility of local devices.
        Patch by Martin Pitt

svn path=/trunk/; revision=7733

gio/ChangeLog
gio/gunixmounts.c

index 6065762..632c7d9 100644 (file)
@@ -1,3 +1,11 @@
+2008-12-07  Matthias Clasen  <mclasen@redhat.com>
+       
+       Bug 526320 – should not list mounts that the user doesn't have 
+       permission to use
+
+       gunixmounts.c: Use g_access() to check accessibility of local devices.
+       Patch by Martin Pitt
+
 2008-12-01  Matthias Clasen  <mclasen@redhat.com>
 
        * === Released 2.19.2 ===
index ab50b2e..cd49ff1 100644 (file)
@@ -1882,7 +1882,8 @@ g_unix_mount_guess_should_display (GUnixMountEntry *mount_entry)
         /* Avoid displaying mounts that are not accessible to the user.
          *
          * See http://bugzilla.gnome.org/show_bug.cgi?id=526320 for why we
-         * want to avoid g_access() for every mount point.
+         * want to avoid g_access() for mount points which can potentially
+         * block or fail stat()'ing, such as network mounts.
          */
         path = g_path_get_dirname (mount_path);
         if (g_str_has_prefix (path, "/media/"))
@@ -1893,6 +1894,15 @@ g_unix_mount_guess_should_display (GUnixMountEntry *mount_entry)
             }
           }
         g_free (path);
+
+        if (mount_entry->device_path && mount_entry->device_path[0] == '/')
+           {
+             struct stat st;
+             if (g_stat (mount_entry->device_path, &st) == 0 &&
+                 S_ISBLK(st.st_mode) &&
+                 g_access (mount_path, R_OK|X_OK) != 0)
+               return FALSE;
+           }
         return TRUE;
       }