コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
 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);
 }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
 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;
         }
     }
 }
コード例 #6
0
        // 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());
        }
コード例 #7
0
 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;
 }
コード例 #8
0
        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);
            }
        }