diff --git a/gio/ChangeLog b/gio/ChangeLog index 60657623d..632c7d942 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,3 +1,11 @@ +2008-12-07 Matthias Clasen + + 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 * === Released 2.19.2 === diff --git a/gio/gunixmounts.c b/gio/gunixmounts.c index ab50b2e4c..cd49ff16f 100644 --- a/gio/gunixmounts.c +++ b/gio/gunixmounts.c @@ -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; }