diff -Nur nautilus-2.14.1/libnautilus-private/nautilus-dnd.c nautilus-2.14.1.new/libnautilus-private/nautilus-dnd.c
--- nautilus-2.14.1/libnautilus-private/nautilus-dnd.c	2006-05-29 15:48:59.000000000 +0300
+++ nautilus-2.14.1.new/libnautilus-private/nautilus-dnd.c	2006-05-29 17:10:03.000000000 +0300
@@ -323,6 +323,41 @@
 	return user_owned;
 }
 
+static gboolean
+uri_is_readonly (GnomeVFSURI *uri)
+{
+	GnomeVFSURI *test_uri;
+	gboolean readonly;
+
+	readonly = FALSE;
+	test_uri = NULL;
+
+	if (uri != NULL)
+	{
+		if (gnome_vfs_uri_has_parent (uri))
+			test_uri = gnome_vfs_uri_get_parent (uri);
+		else
+			test_uri = uri;
+	}
+	else
+		return readonly;
+
+	if (!strcmp (gnome_vfs_uri_get_scheme (test_uri), "file"))
+	{
+		GnomeVFSFileInfo *info;
+
+		info = gnome_vfs_file_info_new ();
+		if (gnome_vfs_get_file_info_uri (test_uri, info, GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS) == GNOME_VFS_OK)
+		{
+			readonly = !((info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_ACCESS) &&
+				     (info->permissions & GNOME_VFS_PERM_ACCESS_WRITABLE));
+		}
+		gnome_vfs_file_info_unref (info);
+	}
+	gnome_vfs_uri_unref (test_uri);
+	return readonly;
+}
+
 void
 nautilus_drag_default_drop_action_for_icons (GdkDragContext *context,
 	const char *target_uri_string, const GList *items,
@@ -410,7 +445,8 @@
 	if ((same_fs || target_is_source_parent) &&
 	    /* use copy by default when dragging from user-owned location
 	     * to location owned by somebody else */
-	    !(uri_is_user_owned (dropped_uri) && !uri_is_user_owned (target_uri))) {
+	    !(uri_is_user_owned (dropped_uri) && !uri_is_user_owned (target_uri)) &&
+	    !(uri_is_readonly (dropped_uri))) {
 		if (actions & GDK_ACTION_MOVE) {
 			*action = GDK_ACTION_MOVE;
 		} else {
