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

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