public static ADContainer GetAdminSDHolder(ADObjectId domainId, IConfigurationSession session) { ExchangeOrganizationalUnit exchangeOrganizationalUnit = session.ResolveWellKnownGuid <ExchangeOrganizationalUnit>(WellKnownGuid.SystemWkGuid, domainId); if (exchangeOrganizationalUnit == null) { throw new SystemContainerNotFoundException(DNConvertor.FqdnFromDomainDistinguishedName(domainId.DistinguishedName), WellKnownGuid.SystemWkGuid); } ADContainer adcontainer = session.Read <ADContainer>(exchangeOrganizationalUnit.Id.GetChildId("AdminSDHolder")); if (adcontainer == null) { throw new AdminSDHolderNotFoundException(exchangeOrganizationalUnit.DistinguishedName); } return(adcontainer); }
public static string RedactLegacyDN(string legacyDN, out string raw, out string redacted) { raw = null; redacted = null; if (string.IsNullOrWhiteSpace(legacyDN)) { return(legacyDN); } int num = DNConvertor.LastIndexOfUnescapedChar(legacyDN, legacyDN.Length - 1, '/') + 1; if (string.Compare(legacyDN, num, "cn=", 0, "cn=".Length, StringComparison.OrdinalIgnoreCase) != 0) { return(legacyDN); } num += "cn=".Length; return(legacyDN.Substring(0, num) + SuppressingPiiData.Redact(legacyDN.Substring(num), out raw, out redacted)); }
public static string RedactDN(string dn, out string raw, out string redacted) { raw = null; redacted = null; if (string.IsNullOrWhiteSpace(dn)) { return(dn); } if (dn.StartsWith("cn=", StringComparison.OrdinalIgnoreCase)) { int num = DNConvertor.IndexOfUnescapedChar(dn, 0, ','); if (num < 0) { num = dn.Length; } return(dn.Substring(0, "cn=".Length) + SuppressingPiiData.Redact(dn.Substring("cn=".Length, num - "cn=".Length), out raw, out redacted) + dn.Substring(num)); } return(dn); }
protected override void InternalProcessRecord() { if (!this.isContainerExisted) { base.InternalProcessRecord(); } QueryFilter filter = new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.Name, EmailAddressPolicy.DefaultName); IConfigurationSession configurationSession = (IConfigurationSession)base.DataSession; ADObjectId currentOrgContainerId = base.CurrentOrgContainerId; EmailAddressPolicy[] array = configurationSession.Find <EmailAddressPolicy>(currentOrgContainerId, QueryScope.SubTree, filter, null, 0); if (array == null || array.Length == 0) { EmailAddressPolicy emailAddressPolicy = new EmailAddressPolicy(); emailAddressPolicy.SetId(this.DataObject.Id.GetChildId(EmailAddressPolicy.DefaultName)); emailAddressPolicy[EmailAddressPolicySchema.Enabled] = true; emailAddressPolicy.Priority = EmailAddressPolicyPriority.Lowest; if (Datacenter.GetExchangeSku() == Datacenter.ExchangeSku.Enterprise) { emailAddressPolicy.RecipientFilterApplied = true; } emailAddressPolicy.IncludedRecipients = new WellKnownRecipientType?(WellKnownRecipientType.AllRecipients); if (this.DomainName == null) { emailAddressPolicy.EnabledPrimarySMTPAddressTemplate = "@" + DNConvertor.FqdnFromDomainDistinguishedName(currentOrgContainerId.DomainId.DistinguishedName); } else { emailAddressPolicy.EnabledPrimarySMTPAddressTemplate = "@" + this.DomainName.ToString(); } RecipientFilterHelper.StampE2003FilterMetadata(emailAddressPolicy, emailAddressPolicy.LdapRecipientFilter, EmailAddressPolicySchema.PurportedSearchUI); if (base.CurrentOrganizationId != null) { emailAddressPolicy.OrganizationId = base.CurrentOrganizationId; } else { emailAddressPolicy.OrganizationId = base.ExecutingUserOrganizationId; } configurationSession.Save(emailAddressPolicy); } }
private void AddLeaf(Node node, DirectoryObject adObject) { string[] array = DNConvertor.SplitDistinguishedName(adObject.Properties["distinguishedname"][0].ToString(), ',').Reverse <string>().ToArray <string>(); for (int i = 0; i < array.Length; i++) { if (string.Compare(node.Name, array[i]) != 0) { if (!node.Children.ContainsKey(array[i])) { Node value = new Node(array[i]); node.Children.Add(array[i], value); } node = node.Children[array[i]]; } if (i == array.Length - 1) { node.Value = adObject; } } }
// Token: 0x06000AFA RID: 2810 RVA: 0x000235D4 File Offset: 0x000217D4 internal static string GetHierarchicalIdentityFromDN(string dnString) { string distinguishedName = ADObjectId.ParseDnOrGuid(dnString).DistinguishedName; string[] array = DNConvertor.SplitDistinguishedName(distinguishedName, ','); bool flag = false; StringBuilder stringBuilder = new StringBuilder(); for (int i = array.Length - 1; i >= 0; i--) { if (!flag) { if (array[i].StartsWith("OU=Microsoft Exchange Hosted Organizations", StringComparison.OrdinalIgnoreCase)) { flag = true; } } else { if (array[i].Length <= 3 || !array[i].StartsWith("OU=")) { throw new FormatException(Strings.ErrorInvalidOrganizationalUnitDNFormat(dnString)); } if (stringBuilder.Length != 0) { stringBuilder.Append("\\"); } stringBuilder.Append(array[i].Substring(3)); } } if (!flag) { throw new FormatException(Strings.ErrorInvalidOrganizationalUnitDNFormat(dnString)); } return(stringBuilder.ToString()); }
internal static void PrepareDomainControllerRecipientSessionForUpdate(IRecipientSession domainControllerSession, ADObjectId recipientId, string domainController, string domainControllerDomainName) { if (domainControllerSession == null) { throw new ArgumentNullException("domainControllerSession"); } if (recipientId == null) { throw new ArgumentNullException("recipientId"); } if (string.IsNullOrEmpty(recipientId.DistinguishedName)) { throw new ArgumentNullException("recipientId.DistinguishedName"); } if (string.Equals(recipientId.DescendantDN(1).Rdn.UnescapedName, "Configuration", StringComparison.OrdinalIgnoreCase)) { domainControllerSession.UseConfigNC = true; domainControllerSession.DomainController = domainController; return; } if (!string.IsNullOrEmpty(domainControllerDomainName) && string.Equals(domainControllerDomainName, DNConvertor.FqdnFromDomainDistinguishedName(recipientId.DomainId.DistinguishedName), StringComparison.InvariantCultureIgnoreCase)) { domainControllerSession.UseConfigNC = false; domainControllerSession.DomainController = domainController; return; } domainControllerSession.UseConfigNC = false; domainControllerSession.DomainController = null; }
private static void UpdateRecipients(EmailAddressPolicy eap, OrganizationId organizationId, string domainController, IRecipientSession globalCatalogSession, Task.TaskVerboseLoggingDelegate writeVerbose, Task.TaskWarningLoggingDelegate writeWarning, WriteProgress writeProgress, Task cmdlet, bool fixMissingAlias) { UpdateEmailAddressPolicy.AssertArgumentNotNull(eap, "eap"); UpdateEmailAddressPolicy.AssertArgumentNotNull(writeVerbose, "writeVerbose"); UpdateEmailAddressPolicy.AssertArgumentNotNull(writeWarning, "writeWarning"); UpdateEmailAddressPolicy.AssertArgumentNotNull(writeProgress, "writeProgress"); if (string.IsNullOrEmpty(eap.LdapRecipientFilter) && !fixMissingAlias) { return; } int num = 0; try { if (cmdlet != null && cmdlet.Stopping) { return; } IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(false, ConsistencyMode.PartiallyConsistent, globalCatalogSession.SessionSettings, 409, "UpdateRecipients", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\SystemConfigurationTasks\\RecipientPolicy\\UpdateEmailAddressPolicy.cs"); tenantOrRootOrgRecipientSession.EnforceDefaultScope = false; IEnumerable <ADRecipient> enumerable = eap.FindMatchingRecipientsPaged(globalCatalogSession, organizationId, null, fixMissingAlias); string text = null; Hashtable hashtable = new Hashtable(); foreach (ADRecipient adrecipient in enumerable) { if (cmdlet != null && cmdlet.Stopping) { return; } if (!string.IsNullOrEmpty(domainController) && string.IsNullOrEmpty(text)) { try { string configurationDomainControllerFqdn = SystemConfigurationTasksHelper.GetConfigurationDomainControllerFqdn(domainController); int num2 = configurationDomainControllerFqdn.IndexOf("."); if (0 <= num2) { text = configurationDomainControllerFqdn.Substring(num2); } } catch (SocketException ex) { writeWarning(Strings.ErrorResolveFqdnForDomainController(domainController, ex.Message)); return; } } string text2 = adrecipient.Id.DomainId.DistinguishedName.ToLowerInvariant(); if (!hashtable.ContainsKey(text2)) { SystemConfigurationTasksHelper.PrepareDomainControllerRecipientSessionForUpdate(tenantOrRootOrgRecipientSession, adrecipient.Id, domainController, text); IEnumerable <ADRecipient> collection = eap.FindMatchingRecipientsPaged(tenantOrRootOrgRecipientSession, organizationId, adrecipient.Id, fixMissingAlias); List <ADRecipient> list = new List <ADRecipient>(); Exception ex2 = null; Exception ex3 = null; try { list.AddRange(collection); } catch (DataSourceOperationException ex4) { TaskLogger.Trace("Exception caught when re-read recipient from DC : {0}", new object[] { ex4.ToString() }); if (ex4.InnerException is ActiveDirectoryObjectNotFoundException || ex4.InnerException is AuthenticationException) { ex3 = ex4; } else { ex2 = ex4; } } catch (DataSourceTransientException ex5) { TaskLogger.Trace("Exception caught when re-read recipient from DC : {0}", new object[] { ex5.ToString() }); if (ex5.InnerException is ActiveDirectoryOperationException || ex5.InnerException is ActiveDirectoryServerDownException) { ex3 = ex5; } else { ex2 = ex5; } } if (ex3 != null) { hashtable.Add(text2, null); writeWarning(Strings.ErrorCannotUpdateRecipientOfDomain(DNConvertor.FqdnFromDomainDistinguishedName(text2), ex3.Message)); } else if (ex2 != null) { writeWarning(Strings.ErrorFailedToReadRecipientForUpdate(adrecipient.Id.ToString(), ex2.Message)); } else if (1 == list.Count) { ADRecipient adrecipient2 = list[0]; if (cmdlet != null && cmdlet.Stopping) { return; } num = num++ % 99 + 1; writeProgress(Strings.ProgressActivityUpdateRecipient, Strings.ProgressStatusUpdateRecipient(adrecipient2.Id.ToString()), num); writeVerbose(Strings.ProgressStatusUpdateRecipient(adrecipient2.Id.ToString())); try { if (fixMissingAlias && string.IsNullOrEmpty(adrecipient2.Alias)) { if (adrecipient2 is ADMicrosoftExchangeRecipient) { adrecipient2.Alias = RecipientTaskHelper.GenerateUniqueAlias(globalCatalogSession, adrecipient2.OrganizationId, ADMicrosoftExchangeRecipient.DefaultName, writeVerbose); } else if (adrecipient2 is ADSystemAttendantMailbox) { adrecipient2.Alias = RecipientTaskHelper.GenerateUniqueAlias(globalCatalogSession, adrecipient2.OrganizationId, (adrecipient2 as ADSystemAttendantMailbox).ServerName + "-SA", writeVerbose); } else { adrecipient2.Alias = RecipientTaskHelper.GenerateUniqueAlias(globalCatalogSession, adrecipient2.OrganizationId, adrecipient2.Name, writeVerbose); } writeWarning(Strings.WarningGeneratingMissingAlias(adrecipient2.Identity.ToString(), adrecipient2.Alias)); } if (!adrecipient2.IsReadOnly) { ProvisioningLayer.UpdateAffectedIConfigurable(cmdlet, RecipientTaskHelper.ConvertRecipientToPresentationObject(adrecipient2), true); } if (!adrecipient2.IsValid || adrecipient2.IsReadOnly) { writeWarning(Strings.ErrorCannotUpdateInvalidRecipient(adrecipient2.Id.ToString())); } else { if (cmdlet.IsVerboseOn && adrecipient2.ObjectState != ObjectState.Unchanged) { writeVerbose(TaskVerboseStringHelper.GetConfigurableObjectChangedProperties(adrecipient2)); } tenantOrRootOrgRecipientSession.Save(adrecipient2); } } catch (DataSourceTransientException ex6) { writeWarning(Strings.ErrorUpdateRecipient(adrecipient2.Id.ToString(), ex6.Message)); TaskLogger.Trace("Exception is raised while updating recipient '{0}': {1}", new object[] { adrecipient2.Id.ToString(), ex6.Message }); } catch (DataSourceOperationException ex7) { writeWarning(Strings.ErrorUpdateRecipient(adrecipient2.Id.ToString(), ex7.Message)); TaskLogger.Trace("Exception is raised while updating recipient '{0}': {1}", new object[] { adrecipient2.Id.ToString(), ex7.Message }); } catch (DataValidationException ex8) { writeWarning(Strings.ErrorUpdateRecipient(adrecipient2.Id.ToString(), ex8.Message)); TaskLogger.Trace("Exception is raised while updating recipient '{0}': {1}", new object[] { adrecipient2.Id.ToString(), ex8.Message }); } } } } } finally { if (cmdlet != null && cmdlet.Stopping) { ExManagementApplicationLogger.LogEvent(ManagementEventLogConstants.Tuple_RecipientsUpdateForEmailAddressPolicyCancelled, new string[] { eap.Identity.ToString(), eap.LdapRecipientFilter, ADRecipientSchema.EmailAddresses.Name }); } } if (num != 0) { writeVerbose(Strings.ProgressStatusFinished); writeProgress(Strings.ProgressActivityUpdateRecipient, Strings.ProgressStatusFinished, 100); } }