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
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));
20
+safe_to_launch_desktop_file (NautilusFile *file)
22
+ gboolean ret = TRUE;
23
+ GFile *uri = nautilus_file_get_location (file);
25
+ char *scheme = NULL;
28
+ path = g_file_get_parse_name (uri);
32
+ eel_str_has_prefix (path, "/mnt") ||
33
+ eel_str_has_prefix (path, "/media") ||
34
+ !eel_str_has_suffix (path, ".desktop")) {
38
+ scheme = g_file_get_uri_scheme (file);
39
+ if (scheme != NULL && strncmp (scheme, "file://", 7) == 0) {
40
+ char *path_tmp = path + 7;
42
+ if (eel_str_has_prefix (path, "/mnt") ||
43
+ eel_str_has_prefix (path, "/media")) {
49
+ if (file->details->uid != -1 &&
50
+ file->details->uid != 0 &&
51
+ (uid_t) file->details->uid != geteuid ())
54
+ g_object_unref (uri);
59
/* Return the actual uri associated with the passed-in file. */
61
nautilus_file_get_uri (NautilusFile *file)
64
g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
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);
74
g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
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);
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
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)));
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 @@
100
file = NAUTILUS_FILE (node->data);
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;