~mitya57/nautilus/lp1224217

« back to all changes in this revision

Viewing changes to debian/patches/07_desktop_file_activation.patch

  • Committer: seb128
  • Date: 2009-04-01 10:10:49 UTC
  • Revision ID: seb128@seb128-desktop-20090401101049-x0mfut4l85f65jh3
initial nautilus import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Fixes two security issues about disguised .desktop files.
 
2
Debian #408556, GNOME #405291
 
3
Debian #408948, GNOME #405052
 
4
diff -Naur nautilus-2.22.0.old/libnautilus-private/nautilus-file.c nautilus-2.22.0/libnautilus-private/nautilus-file.c
 
5
--- nautilus-2.22.0.old/libnautilus-private/nautilus-file.c     2008-03-19 16:04:39.000000000 +0100
 
6
+++ nautilus-2.22.0/libnautilus-private/nautilus-file.c 2008-03-19 16:06:54.000000000 +0100
 
7
@@ -41,6 +41,7 @@
 
8
 #include "nautilus-link.h"
 
9
 #include "nautilus-metadata.h"
 
10
 #include "nautilus-module.h"
 
11
+#include "nautilus-program-choosing.h"
 
12
 #include "nautilus-search-directory.h"
 
13
 #include "nautilus-search-directory-file.h"
 
14
 #include "nautilus-thumbnails.h"
 
15
@@ -1084,6 +1085,46 @@
 
16
        return g_file_get_child (dir, eel_ref_str_peek (file->details->name));
 
17
 }
 
18
 
 
19
+static gboolean
 
20
+safe_to_launch_desktop_file (NautilusFile *file)
 
21
+{
 
22
+       gboolean ret = TRUE;
 
23
+       GFile *uri = nautilus_file_get_location (file);
 
24
+       char *path = NULL;
 
25
+       char *scheme = NULL;
 
26
+
 
27
+       if (uri) {
 
28
+               path = g_file_get_parse_name (uri);
 
29
+       }
 
30
+
 
31
+       if (!path ||
 
32
+           eel_str_has_prefix (path, "/mnt") ||
 
33
+           eel_str_has_prefix (path, "/media") ||
 
34
+           !eel_str_has_suffix (path, ".desktop")) {
 
35
+               ret = FALSE;
 
36
+       }
 
37
+       
 
38
+       scheme = g_file_get_uri_scheme (file);
 
39
+       if (scheme != NULL && strncmp (scheme, "file://", 7) == 0) {
 
40
+         char *path_tmp = path + 7;
 
41
+
 
42
+         if (eel_str_has_prefix (path, "/mnt") ||
 
43
+             eel_str_has_prefix (path, "/media")) {
 
44
+               ret = FALSE;
 
45
+         }
 
46
+       }
 
47
+       g_free (scheme);
 
48
+
 
49
+       if (file->details->uid != -1 &&
 
50
+           file->details->uid != 0 &&
 
51
+           (uid_t) file->details->uid != geteuid ())
 
52
+               ret = FALSE;
 
53
+
 
54
+       g_object_unref (uri);
 
55
+       g_free (path);
 
56
+       return ret;
 
57
+}
 
58
+
 
59
 /* Return the actual uri associated with the passed-in file. */
 
60
 char *
 
61
 nautilus_file_get_uri (NautilusFile *file)
 
62
@@ -3053,7 +3094,8 @@
 
63
 {
 
64
        g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
 
65
 
 
66
-       if (file->details->activation_location != NULL) {
 
67
+       if (file->details->activation_location != NULL &&
 
68
+           safe_to_launch_desktop_file (file)) {
 
69
                return g_file_get_uri (file->details->activation_location);
 
70
        }
 
71
        
 
72
@@ -3065,7 +3107,8 @@
 
73
 {
 
74
        g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
 
75
 
 
76
-       if (file->details->activation_location != NULL) {
 
77
+       if (file->details->activation_location != NULL &&
 
78
+           safe_to_launch_desktop_file (file)) {
 
79
                return g_object_ref (file->details->activation_location);
 
80
        }
 
81
        
 
82
diff -Naur nautilus-2.22.0.old/libnautilus-private/nautilus-mime-actions.c nautilus-2.22.0/libnautilus-private/nautilus-mime-actions.c
 
83
--- nautilus-2.22.0.old/libnautilus-private/nautilus-mime-actions.c     2008-03-19 16:04:39.000000000 +0100
 
84
+++ nautilus-2.22.0/libnautilus-private/nautilus-mime-actions.c 2008-03-19 16:04:48.000000000 +0100
 
85
@@ -727,7 +727,8 @@
 
86
 {
 
87
   return (nautilus_file_is_directory (file) ||
 
88
          NAUTILUS_IS_DESKTOP_ICON_FILE (file) ||
 
89
-         nautilus_file_is_nautilus_link (file));
 
90
+         (nautilus_file_is_nautilus_link (file) &&
 
91
+          !nautilus_file_is_launcher (file)));
 
92
 }
 
93
 
 
94
 static ActivationAction
 
95
diff -Naur nautilus-2.22.0.old/src/file-manager/fm-directory-view.c nautilus-2.22.0/src/file-manager/fm-directory-view.c
 
96
--- nautilus-2.22.0.old/src/file-manager/fm-directory-view.c    2008-03-19 16:04:39.000000000 +0100
 
97
+++ nautilus-2.22.0/src/file-manager/fm-directory-view.c        2008-03-19 16:04:48.000000000 +0100
 
98
@@ -4264,9 +4264,11 @@
 
99
 
 
100
                file = NAUTILUS_FILE (node->data);
 
101
 
 
102
-               other_applications_visible &=
 
103
-                       (!nautilus_mime_file_opens_in_view (file) ||
 
104
-                        nautilus_file_is_directory (file));
 
105
+               if (nautilus_mime_file_opens_in_external_app (file) &&
 
106
+                   (NAUTILUS_IS_DESKTOP_ICON_FILE (file) ||
 
107
+                    nautilus_file_is_nautilus_link (file))) {
 
108
+                       other_applications_visible = FALSE;
 
109
+               }
 
110
        }
 
111
 
 
112
        default_app = NULL;