- Timestamp:
- 04/09/08 00:29:49 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pkg/viola/main/nautilus/trunk/debian/patches/07_desktop_file_activation.patch
r3275 r3516 1 See Debian #408556, #408948. 2 3 --- nautilus-2.21.1.orig/libnautilus-private/nautilus-file.c 2007-12-20 16:48:14.000000000 +0100 4 +++ nautilus-2.21.1/libnautilus-private/nautilus-file.c 2008-01-07 15:11:12.000000000 +0100 5 @@ -40,6 +40,7 @@ 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 @@ 6 8 #include "nautilus-link.h" 7 9 #include "nautilus-metadata.h" … … 11 13 #include "nautilus-search-directory-file.h" 12 14 #include "nautilus-thumbnails.h" 13 @@ - 2978,6 +2979,33@@14 monitor_remove, (file, client));15 } 15 @@ -1084,6 +1085,46 @@ 16 return g_file_get_child (dir, eel_ref_str_peek (file->details->name)); 17 } 16 18 17 19 +static gboolean … … 19 21 +{ 20 22 + gboolean ret = TRUE; 21 + char *uri = nautilus_file_get_uri(file);23 + GFile *uri = nautilus_file_get_location (file); 22 24 + char *path = NULL; 25 + char *scheme = NULL; 23 26 + 24 27 + if (uri) { 25 + path = g nome_vfs_get_local_path_from_uri(uri);28 + path = g_file_get_parse_name (uri); 26 29 + } 27 30 + … … 32 35 + ret = FALSE; 33 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; 34 41 + 35 + if (file->details->info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_IDS && 36 + file->details->info->uid && 37 + (uid_t) file->details->info->uid != geteuid ()) 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 ()) 38 52 + ret = FALSE; 39 53 + 40 + g_ free(uri);54 + g_object_unref (uri); 41 55 + g_free (path); 42 56 + return ret; 43 57 +} 44 45 /* Return the uri associated with the passed-in file, which may not be 46 * the actual uri if the file is an desktop file or a nautilus 47 @@ -2988,7 +3016,9 @@ 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 @@ 48 63 { 49 64 g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); 50 65 51 66 - if (file->details->activation_location != NULL) { 52 + if ((file->details->activation_location != NULL) && 53 + (!eel_str_has_prefix (file->details->activation_location, NAUTILUS_DESKTOP_COMMAND_SPECIFIER) || 54 + safe_to_launch_desktop_file (file))) { 67 + if (file->details->activation_location != NULL && 68 + safe_to_launch_desktop_file (file)) { 55 69 return g_file_get_uri (file->details->activation_location); 56 70 } 57 71 58 @@ -5764,6 +5794,12 @@ 59 return nautilus_file_is_mime_type (file, "application/x-desktop"); 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))); 60 92 } 61 93 62 +gboolean 63 +nautilus_file_is_desktop_launcher (NautilusFile *file) 64 +{ 65 + return eel_str_has_prefix (file->details->activation_uri, NAUTILUS_DESKTOP_COMMAND_SPECIFIER); 66 +} 67 + 68 /** 69 * nautilus_file_is_directory 70 * 71 --- nautilus-2.21.1.orig/src/file-manager/fm-directory-view.c 2008-01-07 14:35:36.000000000 +0100 72 +++ nautilus-2.21.1/src/file-manager/fm-directory-view.c 2008-01-07 15:21:57.000000000 +0100 73 @@ -4197,9 +4197,11 @@ 74 for (node = selection; node != NULL; node = node->next) { 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 75 100 file = NAUTILUS_FILE (node->data); 76 101 … … 78 103 - (!nautilus_mime_file_opens_in_view (file) || 79 104 - nautilus_file_is_directory (file)); 80 + if ( activation_action != ACTIVATION_ACTION_OPEN_IN_APPLICATION&&81 + (NAUTILUS_IS_DESKTOP_ICON_FILE (file) ||82 + nautilus_file_is_nautilus_link (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))) { 83 108 + other_applications_visible = FALSE; 84 109 + } … … 86 111 87 112 default_app = NULL; 88 --- nautilus-2.21.1.orig/libnautilus-private/nautilus-file.h 2007-12-14 11:25:48.000000000 +010089 +++ nautilus-2.21.1/libnautilus-private/nautilus-file.h 2008-01-07 15:03:55.000000000 +010090 @@ -177,6 +177,7 @@91 char * nautilus_file_get_symbolic_link_target_uri (NautilusFile *file);92 gboolean nautilus_file_is_broken_symbolic_link (NautilusFile *file);93 gboolean nautilus_file_is_nautilus_link (NautilusFile *file);94 +gboolean nautilus_file_is_desktop_launcher (NautilusFile *file);95 gboolean nautilus_file_is_executable (NautilusFile *file);96 gboolean nautilus_file_is_directory (NautilusFile *file);97 gboolean nautilus_file_is_in_trash (NautilusFile *file);98 --- nautilus-2.21.1.orig/libnautilus-private/nautilus-mime-actions.c 2008-01-07 15:18:21.000000000 +010099 +++ nautilus-2.21.1/libnautilus-private/nautilus-mime-actions.c 2008-01-07 15:19:14.000000000 +0100100 @@ -702,7 +702,8 @@101 {102 return (nautilus_file_is_directory (file) ||103 NAUTILUS_IS_DESKTOP_ICON_FILE (file) ||104 - nautilus_file_is_nautilus_link (file));105 + (nautilus_file_is_nautilus_link (file) &&106 + !nautilus_file_is_desktop_launcher (file)));107 }108 109 static ActivationAction
Note: See TracChangeset
for help on using the changeset viewer.


