internal static MailboxData DiscoverTestMailbox(IIdentityParameter identity, IRecipientSession adSession, ADServerSettings serverSettings, DataAccessHelper.CategorizedGetDataObjectDelegate getDataObject, Task.TaskVerboseLoggingDelegate writeVerbose, Task.ErrorLoggerDelegate writeError) { if (identity == null) { MigrationADProvider migrationADProvider = new MigrationADProvider(adSession); return(migrationADProvider.GetMailboxDataForManagementMailbox()); } ADUser aduser = RequestTaskHelper.ResolveADUser(adSession, adSession, serverSettings, identity, null, null, getDataObject, writeVerbose, writeError, true); MailboxData mailboxData = new MailboxData(aduser.ExchangeGuid, new Fqdn(aduser.ServerName), aduser.LegacyExchangeDN, aduser.Id, aduser.ExchangeObjectId); mailboxData.Update(identity.RawIdentity, aduser.OrganizationId); return(mailboxData); }
internal static MailboxData DiscoverPublicFolderTestMailbox(IIdentityParameter identity, IConfigurationSession configurationSession, IRecipientSession recipientSession, ADServerSettings serverSettings, DataAccessHelper.CategorizedGetDataObjectDelegate getDataObject, Task.TaskVerboseLoggingDelegate writeVerbose, Task.ErrorLoggerDelegate writeError) { if (identity == null) { Organization orgContainer = configurationSession.GetOrgContainer(); if (orgContainer.DefaultPublicFolderMailbox.HierarchyMailboxGuid != default(Guid)) { identity = new MailboxIdParameter(orgContainer.DefaultPublicFolderMailbox.HierarchyMailboxGuid.ToString()); } else { writeError(new MigrationPermanentException(Strings.ErrorUnableToFindValidPublicFolderMailbox), ExchangeErrorCategory.Client, null); } } ADUser aduser = RequestTaskHelper.ResolveADUser(recipientSession, recipientSession, serverSettings, identity, new OptionalIdentityData(), null, getDataObject, writeVerbose, writeError, true); if (aduser.RecipientTypeDetails != RecipientTypeDetails.PublicFolderMailbox) { writeError(new MigrationPermanentException(Strings.ErrorNotPublicFolderMailbox(identity.RawIdentity)), ExchangeErrorCategory.Client, null); } return(MailboxData.CreateFromADUser(aduser)); }
internal static Server ResolveExpansionServer(string expansionServer, ITopologyConfigurationSession scSession, DataAccessHelper.CategorizedGetDataObjectDelegate getUniqueDataObjectDelegate, Task.ErrorLoggerDelegate errorHandler) { if (string.IsNullOrEmpty(expansionServer)) { throw new ArgumentNullException("expansionServer"); } if (scSession == null) { throw new ArgumentNullException("scSession"); } if (getUniqueDataObjectDelegate == null) { throw new ArgumentNullException("getUniqueDataObjectDelegate"); } if (errorHandler == null) { throw new ArgumentNullException("errorHandler"); } ServerIdParameter id = null; try { id = ServerIdParameter.Parse(expansionServer); } catch (ArgumentException) { errorHandler(new TaskArgumentException(Strings.ErrorInvalidExpansionServer(expansionServer)), ExchangeErrorCategory.Client, null); } return((Server)getUniqueDataObjectDelegate(id, scSession, null, null, new LocalizedString?(Strings.ErrorServerNotFound(expansionServer)), new LocalizedString?(Strings.ErrorServerNotUnique(expansionServer)), ExchangeErrorCategory.Client)); }
internal static MultiValuedProperty <ADRecipient> ResolveAndSeparateMessageDeliveryRestrictionRecipientIdentities(MultiValuedProperty <DeliveryRecipientIdParameter> identities, string parameterName, IRecipientSession recipientSession, DataAccessHelper.CategorizedGetDataObjectDelegate getDataObject, Task.ErrorLoggerDelegate writeError, out MultiValuedProperty <ADObjectId> resolvedGroups, out MultiValuedProperty <ADObjectId> resolvedIndividuals) { resolvedGroups = null; resolvedIndividuals = null; MultiValuedProperty <ADRecipient> multiValuedProperty = new MultiValuedProperty <ADRecipient>(); foreach (RecipientIdParameter recipientIdParameter in identities) { ADRecipient adrecipient = (ADRecipient)getDataObject(recipientIdParameter, recipientSession, null, null, new LocalizedString?(Strings.ErrorRecipientNotFound(recipientIdParameter.ToString())), new LocalizedString?(Strings.ErrorRecipientNotUnique(recipientIdParameter.ToString())), ExchangeErrorCategory.Client); multiValuedProperty.Add(adrecipient); if ((resolvedGroups != null && resolvedGroups.Contains(adrecipient.Id)) || (resolvedIndividuals != null && resolvedIndividuals.Contains(adrecipient.Id))) { writeError(new RecipientTaskException(Strings.ErrorRecipientIdParamElementsNotUnique(parameterName, adrecipient.Id.ToString())), ExchangeErrorCategory.Client, recipientIdParameter); } bool flag = ADRecipient.IsAllowedDeliveryRestrictionGroup(adrecipient.RecipientType); bool flag2 = ADRecipient.IsAllowedDeliveryRestrictionIndividual(adrecipient.RecipientType); if (!flag && !flag2) { writeError(new RecipientTaskException(Strings.ErrorGroupOrIndividualRecipientNeeded(recipientIdParameter.ToString())), ExchangeErrorCategory.Client, recipientIdParameter); } if (flag) { if (resolvedGroups == null) { resolvedGroups = new MultiValuedProperty <ADObjectId>(); } resolvedGroups.Add(adrecipient.Id); } else { if (resolvedIndividuals == null) { resolvedIndividuals = new MultiValuedProperty <ADObjectId>(); } resolvedIndividuals.Add(adrecipient.Id); } } return(multiValuedProperty); }
public static ADUser ResolveADUser(IRecipientSession dataSession, IRecipientSession globalCatalogSession, ADServerSettings serverSettings, IIdentityParameter identity, OptionalIdentityData optionalData, string domainController, DataAccessHelper.CategorizedGetDataObjectDelegate getDataObjectHandler, Task.TaskVerboseLoggingDelegate logHandler, Task.ErrorLoggerDelegate errorHandler, bool checkScopes) { ADUser aduser = (ADUser)RecipientTaskHelper.ResolveDataObject <ADUser>(dataSession, globalCatalogSession, serverSettings, identity, null, optionalData, domainController, getDataObjectHandler, logHandler, errorHandler); ADScopeException exception; if (checkScopes && !dataSession.TryVerifyIsWithinScopes(aduser, true, out exception)) { errorHandler(exception, (ExchangeErrorCategory)5, identity); } return(aduser); }
internal static MultiValuedProperty <ADObjectId> ResolveSiteMailboxOwnersReferenceParameter(IList <RecipientIdParameter> recipientIdParameters, IRecipientSession recipientSession, DataAccessHelper.CategorizedGetDataObjectDelegate getDataObject, WriteWarningDelegate writeWarning) { if (recipientIdParameters == null || recipientIdParameters.Count == 0) { return(null); } if (recipientSession == null) { throw new ArgumentNullException("recipientSession"); } MultiValuedProperty <ADObjectId> multiValuedProperty = new MultiValuedProperty <ADObjectId>(); foreach (RecipientIdParameter recipientIdParameter in recipientIdParameters) { ADRecipient adrecipient = null; try { adrecipient = (ADRecipient)getDataObject(recipientIdParameter, recipientSession, null, null, new LocalizedString?(Strings.ErrorRecipientNotFound(recipientIdParameter.ToString())), new LocalizedString?(Strings.ErrorRecipientNotUnique(recipientIdParameter.ToString())), ExchangeErrorCategory.Client); } catch (ManagementObjectNotFoundException ex) { writeWarning(new LocalizedString(ex.Message)); continue; } catch (ManagementObjectAmbiguousException ex2) { writeWarning(new LocalizedString(ex2.Message)); continue; } if (adrecipient != null && (adrecipient.RecipientType == RecipientType.User || TeamMailboxMembershipHelper.IsUserQualifiedType(adrecipient))) { multiValuedProperty.Add((ADObjectId)adrecipient.Identity); } } return(multiValuedProperty); }
internal GroupMailboxContext(ADUser groupMailbox, OrganizationId currentOrgId, IRecipientSession adSession, DataAccessHelper.CategorizedGetDataObjectDelegate getUserDataObject, DataAccessHelper.CategorizedGetDataObjectDelegate getGroupDataObject, Task.TaskVerboseLoggingDelegate verboseHandler, Task.TaskWarningLoggingDelegate warningHandler, Task.ErrorLoggerDelegate errorHandler) { this.groupMailbox = groupMailbox; this.currentOrganizationId = currentOrgId; this.adSession = adSession; this.getUserDataObject = getUserDataObject; this.getGroupDataObject = getGroupDataObject; this.warningHandler = warningHandler; this.errorHandler = errorHandler; this.verboseHandler = verboseHandler; }
internal static ADUser ResolvePartitionMailbox(MailboxIdParameter partitionMailboxIdentity, IRecipientSession tenantGlobalCatalogSession, ADServerSettings serverSettings, DataAccessHelper.CategorizedGetDataObjectDelegate getDataObject, Task.ErrorLoggerDelegate writeError, bool datacenterFirstOrg) { ADUser aduser; if (partitionMailboxIdentity != null) { ADObjectId rootID = null; if (datacenterFirstOrg) { rootID = ADSystemConfigurationSession.GetFirstOrgUsersContainerId(); } aduser = (ADUser)getDataObject(partitionMailboxIdentity, tenantGlobalCatalogSession, rootID, null, new LocalizedString?(Strings.MigrationPartitionMailboxNotFound), new LocalizedString?(Strings.MigrationPartitionMailboxAmbiguous), ExchangeErrorCategory.Client); if (!aduser.PersistedCapabilities.Contains(Capability.OrganizationCapabilityMigration)) { writeError(new MigrationPartitionMailboxInvalidException(aduser.Alias), ExchangeErrorCategory.Client, partitionMailboxIdentity); } } else { List <ADUser> organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(tenantGlobalCatalogSession, OrganizationCapability.Migration); if (organizationMailboxesByCapability == null || organizationMailboxesByCapability.Count == 0) { organizationMailboxesByCapability = OrganizationMailbox.GetOrganizationMailboxesByCapability(tenantGlobalCatalogSession, OrganizationCapability.Management); } if (organizationMailboxesByCapability == null || organizationMailboxesByCapability.Count == 0) { writeError(new MigrationPartitionMailboxNotFoundException(), ExchangeErrorCategory.Client, null); } else if (organizationMailboxesByCapability.Count > 1) { writeError(new MigrationPartitionMailboxAmbiguousException(), ExchangeErrorCategory.Client, null); } aduser = organizationMailboxesByCapability[0]; } if (aduser.RecipientTypeDetails != RecipientTypeDetails.ArbitrationMailbox || aduser.Database == null) { writeError(new MigrationPartitionMailboxInvalidException(aduser.Alias), ExchangeErrorCategory.Client, partitionMailboxIdentity); } return(aduser); }
internal static MultiValuedProperty <ADObjectId> ConvertUserListToPresentationFormat(DataAccessTask <App> task, DataAccessHelper.CategorizedGetDataObjectDelegate getDataObject, MultiValuedProperty <RecipientWithAdUserIdParameter <RecipientIdParameter> > userList) { MultiValuedProperty <ADObjectId> multiValuedProperty = null; if (userList != null && userList.Count > 0) { multiValuedProperty = new MultiValuedProperty <ADObjectId>(); foreach (RecipientWithAdUserIdParameter <RecipientIdParameter> recipientWithAdUserIdParameter in userList) { ADRecipient recipient = (ADRecipient)getDataObject(recipientWithAdUserIdParameter, task.TenantGlobalCatalogSession, null, null, new LocalizedString?(Strings.ErrorRecipientNotFound(recipientWithAdUserIdParameter.ToString())), new LocalizedString?(Strings.ErrorRecipientNotUnique(recipientWithAdUserIdParameter.ToString())), ExchangeErrorCategory.Client); if (!Array.Exists <RecipientTypeDetails>(OrgApp.SupportedRecipientTypeDetails, (RecipientTypeDetails item) => item == recipient.RecipientTypeDetails)) { task.WriteError(new LocalizedException(Strings.ErrorUnsupportedRecipientType(recipient.Id.ToString(), string.Join(",", (from detail in OrgApp.SupportedRecipientTypeDetails select detail.ToString()).ToArray <string>()))), ErrorCategory.InvalidArgument, null); } multiValuedProperty.Add(recipient.Guid); } } return(multiValuedProperty); }