diff --git a/src/calendar/e-cal-backend-ews.c b/src/calendar/e-cal-backend-ews.c index c1742c3..7f9334c 100644 --- a/src/calendar/e-cal-backend-ews.c +++ b/src/calendar/e-cal-backend-ews.c @@ -147,6 +147,41 @@ ecb_ews_get_collection_settings (ECalBackendEws *cbews) return CAMEL_EWS_SETTINGS (settings); } +static GHashTable * +ecb_ews_get_mail_aliases (ECalBackendEws *cbews) +{ + ESource *source; + ESourceRegistry *registry; + GHashTable *aliases = NULL; + GList *identities, *link; + const gchar *parent_uid; + + source = e_backend_get_source (E_BACKEND (cbews)); + parent_uid = e_source_get_parent (source); + + if (!parent_uid || !*parent_uid) + return NULL; + + registry = e_cal_backend_get_registry (E_CAL_BACKEND (cbews)); + identities = e_source_registry_list_enabled (registry, E_SOURCE_EXTENSION_MAIL_IDENTITY); + + for (link = identities; link; link = g_list_next (link)) { + ESource *mail_identity = link->data; + + if (g_strcmp0 (parent_uid, e_source_get_parent (mail_identity)) == 0) { + ESourceMailIdentity *extension; + + extension = e_source_get_extension (mail_identity, E_SOURCE_EXTENSION_MAIL_IDENTITY); + aliases = e_source_mail_identity_get_aliases_as_hash_table (extension); + break; + } + } + + g_list_free_full (identities, g_object_unref); + + return aliases; +} + static void ecb_ews_convert_error_to_edc_error (GError **perror) { @@ -1350,6 +1385,18 @@ ecb_ews_is_organizer (ECalBackendEws *cbews, is_organizer = user_email && g_ascii_strcasecmp (email, user_email) == 0; g_free (user_email); + + if (!is_organizer) { + GHashTable *aliases; + + aliases = ecb_ews_get_mail_aliases (cbews); + + if (aliases) { + is_organizer = g_hash_table_contains (aliases, email); + + g_hash_table_unref (aliases); + } + } } return is_organizer; @@ -2595,6 +2642,10 @@ ecb_ews_save_component_sync (ECalMetaBackend *meta_backend, g_slist_free_full (existing, g_object_unref); g_slist_free_full (changed_instances, change_data_free); g_slist_free_full (removed_instances, g_object_unref); + } else if (e_cal_component_has_organizer (master) && + !ecb_ews_is_organizer (cbews, master)) { + success = FALSE; + g_propagate_error (error, EDC_ERROR_EX (PermissionDenied, _("Cannot create meetings organized by other users in an Exchange Web Services calendar."))); } else { GHashTable *removed_indexes; EwsCalendarConvertData convert_data = { 0 };