Blame SOURCES/evolution-ews-3.28.5-save-only-if-organizer.patch

12156d
diff -up evolution-ews-3.28.5/src/calendar/e-cal-backend-ews.c.save-only-if-organizer evolution-ews-3.28.5/src/calendar/e-cal-backend-ews.c
12156d
--- evolution-ews-3.28.5/src/calendar/e-cal-backend-ews.c.save-only-if-organizer	2019-11-13 07:44:37.295278517 +0100
12156d
+++ evolution-ews-3.28.5/src/calendar/e-cal-backend-ews.c	2019-11-13 07:55:27.656269523 +0100
12156d
@@ -147,6 +147,41 @@ ecb_ews_get_collection_settings (ECalBac
12156d
 	return CAMEL_EWS_SETTINGS (settings);
12156d
 }
12156d
 
12156d
+static GHashTable *
12156d
+ecb_ews_get_mail_aliases (ECalBackendEws *cbews)
12156d
+{
12156d
+	ESource *source;
12156d
+	ESourceRegistry *registry;
12156d
+	GHashTable *aliases = NULL;
12156d
+	GList *identities, *link;
12156d
+	const gchar *parent_uid;
12156d
+
12156d
+	source = e_backend_get_source (E_BACKEND (cbews));
12156d
+	parent_uid = e_source_get_parent (source);
12156d
+
12156d
+	if (!parent_uid || !*parent_uid)
12156d
+		return NULL;
12156d
+
12156d
+	registry = e_cal_backend_get_registry (E_CAL_BACKEND (cbews));
12156d
+	identities = e_source_registry_list_enabled (registry, E_SOURCE_EXTENSION_MAIL_IDENTITY);
12156d
+
12156d
+	for (link = identities; link; link = g_list_next (link)) {
12156d
+		ESource *mail_identity = link->data;
12156d
+
12156d
+		if (g_strcmp0 (parent_uid, e_source_get_parent (mail_identity)) == 0) {
12156d
+			ESourceMailIdentity *extension;
12156d
+
12156d
+			extension = e_source_get_extension (mail_identity, E_SOURCE_EXTENSION_MAIL_IDENTITY);
12156d
+			aliases = e_source_mail_identity_get_aliases_as_hash_table (extension);
12156d
+			break;
12156d
+		}
12156d
+	}
12156d
+
12156d
+	g_list_free_full (identities, g_object_unref);
12156d
+
12156d
+	return aliases;
12156d
+}
12156d
+
12156d
 static void
12156d
 ecb_ews_convert_error_to_edc_error (GError **perror)
12156d
 {
12156d
@@ -1350,6 +1385,18 @@ ecb_ews_is_organizer (ECalBackendEws *cb
12156d
 		is_organizer = user_email && g_ascii_strcasecmp (email, user_email) == 0;
12156d
 
12156d
 		g_free (user_email);
12156d
+
12156d
+		if (!is_organizer) {
12156d
+			GHashTable *aliases;
12156d
+
12156d
+			aliases = ecb_ews_get_mail_aliases (cbews);
12156d
+
12156d
+			if (aliases) {
12156d
+				is_organizer = g_hash_table_contains (aliases, email);
12156d
+
12156d
+				g_hash_table_unref (aliases);
12156d
+			}
12156d
+		}
12156d
 	}
12156d
 
12156d
 	return is_organizer;
12156d
@@ -2595,6 +2642,10 @@ ecb_ews_save_component_sync (ECalMetaBac
12156d
 		g_slist_free_full (existing, g_object_unref);
12156d
 		g_slist_free_full (changed_instances, change_data_free);
12156d
 		g_slist_free_full (removed_instances, g_object_unref);
12156d
+	} else if (e_cal_component_has_organizer (master) &&
12156d
+		   !ecb_ews_is_organizer (cbews, master)) {
12156d
+		success = FALSE;
12156d
+		g_propagate_error (error, EDC_ERROR_EX (PermissionDenied, _("Cannot create meetings organized by other users in an Exchange Web Services calendar.")));
12156d
 	} else {
12156d
 		GHashTable *removed_indexes;
12156d
 		EwsCalendarConvertData convert_data = { 0 };