glib r6459 - trunk/gio
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: glib r6459 - trunk/gio
- Date: Wed, 6 Feb 2008 10:06:55 +0000 (GMT)
Author: alexl
Date: Wed Feb 6 10:06:54 2008
New Revision: 6459
URL: http://svn.gnome.org/viewvc/glib?rev=6459&view=rev
Log:
2008-02-06 Alexander Larsson <alexl redhat com>
* glocalfile.c (g_local_file_trash):
Don't succeed with trash if newly created
trash dir has the wrong owner. (#514696)
Modified:
trunk/gio/ChangeLog
trunk/gio/glocalfile.c
Modified: trunk/gio/glocalfile.c
==============================================================================
--- trunk/gio/glocalfile.c (original)
+++ trunk/gio/glocalfile.c Wed Feb 6 10:06:54 2008
@@ -1546,25 +1546,45 @@
if (trashdir == NULL)
{
+ gboolean tried_create;
+
/* No global trash dir, or it failed the tests, fall back to $topdir/.Trash-$uid */
dirname = g_strdup_printf (".Trash-%s", uid_str);
trashdir = g_build_filename (topdir, dirname, NULL);
g_free (dirname);
-
+
+ tried_create = FALSE;
+
+ retry:
if (g_lstat (trashdir, &trash_stat) == 0)
{
if (!S_ISDIR (trash_stat.st_mode) ||
trash_stat.st_uid != uid)
{
+ /* Remove the failed directory */
+ if (tried_create)
+ g_remove (trashdir);
+
/* Not a directory or not owned by user, ignore */
g_free (trashdir);
trashdir = NULL;
}
}
- else if (g_mkdir (trashdir, 0700) == -1)
+ else
{
- g_free (trashdir);
- trashdir = NULL;
+ if (!tried_create &&
+ g_mkdir (trashdir, 0700) != -1)
+ {
+ /* Ensure that the created dir has the right uid etc.
+ This might fail on e.g. a FAT dir */
+ tried_create = TRUE;
+ goto retry;
+ }
+ else
+ {
+ g_free (trashdir);
+ trashdir = NULL;
+ }
}
}
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]