public override PropertyConstraintViolationError Validate(IEnumerable value, PropertyDefinition propertyDefinition, IPropertyBag propertyBag)
        {
            if (value == null)
            {
                return(null);
            }
            HashSet <string> hashSet       = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);
            StringBuilder    stringBuilder = new StringBuilder(128);

            foreach (object obj in value)
            {
                SharingPolicyDomain sharingPolicyDomain = (SharingPolicyDomain)obj;
                if (hashSet.Contains(sharingPolicyDomain.Domain))
                {
                    if (stringBuilder.Length > 0)
                    {
                        stringBuilder.Append(", ");
                    }
                    stringBuilder.Append(sharingPolicyDomain.Domain);
                }
                else
                {
                    hashSet.Add(sharingPolicyDomain.Domain);
                }
            }
            if (stringBuilder.Length > 0)
            {
                return(new PropertyConstraintViolationError(DirectoryStrings.SharingPolicyDuplicateDomain(stringBuilder.ToString()), propertyDefinition, value, this));
            }
            return(null);
        }
        // Token: 0x06000E63 RID: 3683 RVA: 0x00056AF8 File Offset: 0x00054CF8
        private void PopulatePolicyHash()
        {
            SharingPolicyDomain[] array = null;
            if (this.policy.Domains != null)
            {
                array = new SharingPolicyDomain[this.policy.Domains.Count];
                for (int i = 0; i < this.policy.Domains.Count; i++)
                {
                    array[i] = this.policy.Domains[i];
                }
                Array.Sort <SharingPolicyDomain>(array, (SharingPolicyDomain a, SharingPolicyDomain b) => StringComparer.OrdinalIgnoreCase.Compare(a.Domain, b.Domain));
            }
            StringBuilder stringBuilder = new StringBuilder("V1.0", 200);

            stringBuilder.Append(this.policy.Enabled);
            if (array != null)
            {
                foreach (SharingPolicyDomain sharingPolicyDomain in array)
                {
                    stringBuilder.Append(",");
                    stringBuilder.Append(sharingPolicyDomain.Domain);
                    stringBuilder.Append(":");
                    stringBuilder.Append(sharingPolicyDomain.Actions.ToString());
                }
            }
            string text = stringBuilder.ToString();

            SharingPolicyCache.Tracer.TraceDebug <string>(0L, "String representation of policy: {0}", text);
            byte[] bytes = Encoding.ASCII.GetBytes(text);
            using (SHA512Cng sha512Cng = new SHA512Cng())
            {
                this.hash = sha512Cng.ComputeHash(bytes);
            }
        }
Exemplo n.º 3
0
 public SharingRuleEntry(SharingPolicyDomain policyDomain)
 {
     if (policyDomain == null)
     {
         throw new ArgumentNullException("policyDomain");
     }
     this.IsAnyDomain = ("*" == policyDomain.Domain);
     if (!this.IsAnyDomain)
     {
         this.Domain = policyDomain.Domain;
     }
     this.IsCalendarSharing = ((SharingPolicyAction)0 != (~SharingPolicyAction.ContactsSharing & policyDomain.Actions));
     this.CalendarSharing   = (this.IsCalendarSharing ? (~SharingPolicyAction.ContactsSharing & policyDomain.Actions).ToString() : SharingPolicyAction.CalendarSharingFreeBusySimple.ToString());
     this.IsContactsSharing = ((SharingPolicyAction)0 != (policyDomain.Actions & SharingPolicyAction.ContactsSharing));
 }
Exemplo n.º 4
0
        protected static object GetSingleProperty(object prop, Type type)
        {
            if (prop == null)
            {
                return(null);
            }
            object obj = null;

            if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>))
            {
                obj = MockObjectCreator.GetSingleProperty(prop, type.GetGenericArguments()[0]);
            }
            else if (type == typeof(ADObjectId) && prop is PSObject)
            {
                obj = new ADObjectId(((PSObject)prop).Members["DistinguishedName"].Value.ToString(), new Guid(((PSObject)prop).Members["ObjectGuid"].Value.ToString()));
            }
            else if (type == typeof(EnhancedTimeSpan))
            {
                obj = EnhancedTimeSpan.Parse(prop.ToString());
            }
            else if (type == typeof(Unlimited <EnhancedTimeSpan>))
            {
                obj = Unlimited <EnhancedTimeSpan> .Parse(prop.ToString());
            }
            else if (type == typeof(ByteQuantifiedSize))
            {
                obj = ByteQuantifiedSize.Parse(prop.ToString());
            }
            else if (type == typeof(Unlimited <ByteQuantifiedSize>))
            {
                obj = Unlimited <ByteQuantifiedSize> .Parse(prop.ToString());
            }
            else if (type == typeof(Unlimited <int>))
            {
                obj = Unlimited <int> .Parse(prop.ToString());
            }
            else if (type == typeof(ProxyAddress))
            {
                obj = ProxyAddress.Parse(prop.ToString());
            }
            else if (type == typeof(SmtpAddress))
            {
                obj = new SmtpAddress(prop.ToString());
            }
            else if (type == typeof(SmtpDomain))
            {
                obj = SmtpDomain.Parse(prop.ToString());
            }
            else if (type == typeof(CountryInfo))
            {
                obj = CountryInfo.Parse(prop.ToString());
            }
            else if (type == typeof(SharingPolicyDomain))
            {
                obj = SharingPolicyDomain.Parse(prop.ToString());
            }
            else if (type == typeof(ApprovedApplication))
            {
                obj = ApprovedApplication.Parse(prop.ToString());
            }
            else if (type == typeof(SmtpDomainWithSubdomains))
            {
                obj = SmtpDomainWithSubdomains.Parse(prop.ToString());
            }
            else if (type == typeof(UMLanguage))
            {
                obj = UMLanguage.Parse(prop.ToString());
            }
            else if (type == typeof(UMSmartHost))
            {
                obj = UMSmartHost.Parse(prop.ToString());
            }
            else if (type == typeof(ScheduleInterval))
            {
                obj = ScheduleInterval.Parse(prop.ToString());
            }
            else if (type == typeof(NumberFormat))
            {
                obj = NumberFormat.Parse(prop.ToString());
            }
            else if (type == typeof(DialGroupEntry))
            {
                obj = DialGroupEntry.Parse(prop.ToString());
            }
            else if (type == typeof(CustomMenuKeyMapping))
            {
                obj = CustomMenuKeyMapping.Parse(prop.ToString());
            }
            else if (type == typeof(HolidaySchedule))
            {
                obj = HolidaySchedule.Parse(prop.ToString());
            }
            else if (type == typeof(UMTimeZone))
            {
                obj = UMTimeZone.Parse(prop.ToString());
            }
            else if (type == typeof(ServerVersion))
            {
                obj = ServerVersion.ParseFromSerialNumber(prop.ToString());
            }
            else if (type == typeof(X509Certificate2))
            {
                obj = new X509Certificate2(((PSObject)prop).Members["RawData"].Value as byte[]);
            }
            else if (type == typeof(LocalizedString))
            {
                obj = new LocalizedString(prop.ToString());
            }
            else if (type == typeof(ExchangeObjectVersion))
            {
                obj = ExchangeObjectVersion.Parse(prop.ToString());
            }
            else if (type == typeof(bool))
            {
                obj = bool.Parse(prop.ToString());
            }
            else if (type == typeof(SecurityPrincipalIdParameter))
            {
                obj = new SecurityPrincipalIdParameter(prop.ToString());
            }
            else if (type == typeof(ActiveDirectoryAccessRule))
            {
                obj = (prop as ActiveDirectoryAccessRule);
            }
            else if (type == typeof(ObjectId))
            {
                string text = prop.ToString();
                if (!ADObjectId.IsValidDistinguishedName(text) && text.Contains("/"))
                {
                    text = MockObjectCreator.ConvertDNFromTreeStructure(text);
                }
                obj = new ADObjectId(text);
            }
            else if (type.IsEnum)
            {
                try
                {
                    obj = Enum.Parse(type, prop.ToString());
                }
                catch (ArgumentException)
                {
                    obj = Enum.GetValues(type).GetValue(0);
                }
            }
            return(obj ?? prop);
        }
        public bool TryGetProvider(SmtpAddress recipientAddress, ADRecipient adRecipient, IFrontEndLocator frontEndLocator, out SharingProvider provider, out DetailLevelEnumType detailLevel)
        {
            provider    = null;
            detailLevel = DetailLevelEnumType.AvailabilityOnly;
            bool result;

            try
            {
                if (this.mailboxOwner.GetConfiguration().DataStorage.XOWAConsumerSharing.Enabled)
                {
                    provider    = SharingProvider.SharingProviderConsumer;
                    detailLevel = DetailLevelEnumType.Editor;
                    result      = true;
                }
                else
                {
                    if (adRecipient != null)
                    {
                        if (adRecipient.IsValidSecurityPrincipal)
                        {
                            provider    = SharingProvider.SharingProviderInternal;
                            detailLevel = DetailLevelEnumType.Editor;
                            return(true);
                        }
                        if (DelegateUserCollection.IsCrossPremiseDelegateEnabled(this.mailboxOwner) && (adRecipient.RecipientType == RecipientType.User || adRecipient.RecipientType == RecipientType.UserMailbox || adRecipient.RecipientType == RecipientType.MailUser))
                        {
                            provider    = SharingProvider.SharingProviderInternal;
                            detailLevel = DetailLevelEnumType.Editor;
                            return(true);
                        }
                        if (adRecipient.RecipientType != RecipientType.User && adRecipient.RecipientType != RecipientType.UserMailbox && adRecipient.RecipientType != RecipientType.MailUser && adRecipient.RecipientType != RecipientType.Contact && adRecipient.RecipientType != RecipientType.MailContact)
                        {
                            return(false);
                        }
                    }
                    SharingPolicyDomain effectiveCalendarSharingPolicy = this.GetEffectiveCalendarSharingPolicy(recipientAddress.Domain, frontEndLocator);
                    this.TraceDebug("Policy found:{0}", new object[]
                    {
                        (effectiveCalendarSharingPolicy == null) ? "none" : effectiveCalendarSharingPolicy.Domain
                    });
                    int maxAllowed;
                    if (effectiveCalendarSharingPolicy != null && (maxAllowed = PolicyAllowedDetailLevel.GetMaxAllowed(effectiveCalendarSharingPolicy.Actions)) > 0)
                    {
                        detailLevel = (DetailLevelEnumType)maxAllowed;
                        if (effectiveCalendarSharingPolicy.Domain == "Anonymous")
                        {
                            provider = SharingProvider.SharingProviderPublishReach;
                        }
                        else
                        {
                            provider = SharingProvider.SharingProviderExternal;
                        }
                    }
                    result = (provider != null);
                }
            }
            finally
            {
                this.TraceDebug("MailboxOwner:{0},Recipient:{1},RecipientType:{2},Handler={2},DetailLevel={3}", new object[]
                {
                    this.mailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString(),
                    recipientAddress,
                    (adRecipient == null) ? "none" : adRecipient.RecipientType.ToString(),
                    (provider == null) ? "none" : provider.Name,
                    detailLevel
                });
            }
            return(result);
        }
        private SharingPolicyDomain GetEffectiveCalendarSharingPolicy(string recipientDomain, IFrontEndLocator frontEndLocator)
        {
            SharingPolicyDomain sharingPolicyDomain  = null;
            SharingPolicyDomain sharingPolicyDomain2 = null;
            bool enabled = ExternalAuthentication.GetCurrent().Enabled;
            bool flag    = false;

            this.TraceDebug("External authentication enabled:{0}", new object[]
            {
                enabled
            });
            foreach (SharingPolicyDomain sharingPolicyDomain3 in this.SharingPolicy.Domains)
            {
                if (enabled)
                {
                    if (StringComparer.OrdinalIgnoreCase.Equals(sharingPolicyDomain3.Domain, recipientDomain))
                    {
                        this.TraceDebug("Found exact policy for domain {0}", new object[]
                        {
                            sharingPolicyDomain3.Domain
                        });
                        sharingPolicyDomain = sharingPolicyDomain3;
                    }
                    else if (sharingPolicyDomain == null && StringComparer.OrdinalIgnoreCase.Equals(sharingPolicyDomain3.Domain, "*"))
                    {
                        this.TraceDebug("Found asterisk policy", new object[0]);
                        sharingPolicyDomain = sharingPolicyDomain3;
                        flag = true;
                    }
                }
                if (StringComparer.OrdinalIgnoreCase.Equals(sharingPolicyDomain3.Domain, "Anonymous"))
                {
                    if (OwaAnonymousVdirLocater.Instance.IsPublishingAvailable(this.mailboxOwner, frontEndLocator))
                    {
                        this.TraceDebug("Found anonymous policy", new object[0]);
                        sharingPolicyDomain2 = sharingPolicyDomain3;
                    }
                    else
                    {
                        this.TraceDebug("Found anonymous policy but publishing is not allowed", new object[0]);
                    }
                }
            }
            if (flag && sharingPolicyDomain2 != null && PolicyAllowedDetailLevel.GetMaxAllowed(sharingPolicyDomain.Actions) <= PolicyAllowedDetailLevel.GetMaxAllowed(sharingPolicyDomain2.Actions))
            {
                this.TraceDebug("Override AsteriskPolicy with anonymous policy", new object[0]);
                sharingPolicyDomain = null;
            }
            if (sharingPolicyDomain != null)
            {
                if (TargetUriResolver.Resolve(recipientDomain, this.mailboxOwner.MailboxInfo.OrganizationId) != null)
                {
                    return(sharingPolicyDomain);
                }
                this.TraceDebug("Target domain '{0}' is not federated", new object[]
                {
                    recipientDomain
                });
            }
            return(sharingPolicyDomain2);
        }