private IEnumerable <BindingStorage> FindBindingStorage(QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize = 2147483647, bool includeScopes = true)
        {
            IEnumerable <BindingStorage> configurables = base.FindAndHandleException <BindingStorage>(filter, rootId, deepSearch, sortBy, pageSize);

            if (configurables == null || configurables.Count <BindingStorage>() == 0)
            {
                configurables = base.GetDefaultArray <BindingStorage>();
            }
            configurables = this.DoPostQueryFilter <BindingStorage>(filter, configurables);
            foreach (BindingStorage configurable in configurables)
            {
                FfoDirectorySession.FixDistinguishedName(configurable, base.TenantId.DistinguishedName, base.TenantId.ObjectGuid, ((ADObjectId)configurable.Identity).ObjectGuid, null);
                IEnumerable <ScopeStorage> childScopes = base.FindAndHandleException <ScopeStorage>(QueryFilter.AndTogether(new QueryFilter[]
                {
                    new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.OrganizationalUnitRoot, base.TenantId),
                    new ComparisonFilter(ComparisonOperator.Equal, DalHelper.ContainerProp, configurable.Id.ObjectGuid)
                }), rootId, deepSearch, sortBy, pageSize);
                foreach (ScopeStorage scopeStorage in childScopes)
                {
                    scopeStorage.ResetChangeTracking();
                }
                configurable.AppliedScopes = new MultiValuedProperty <ScopeStorage>(childScopes);
                yield return(configurable);
            }
            yield break;
        }
        private IEnumerable <TransportRuleCollection> FindTransportRuleCollections(QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize = 2147483647)
        {
            object obj;
            Guid   objectGuid;
            IEnumerable <TransportRuleCollection> enumerable;

            if (DalHelper.TryFindPropertyValueByName(filter, ADObjectSchema.Name.Name, out obj) && obj is string && FfoConfigurationSession.builtInTransportRuleContainers.TryGetValue((string)obj, out objectGuid))
            {
                TransportRuleCollection transportRuleCollection = new TransportRuleCollection
                {
                    Name = (string)obj
                };
                FfoDirectorySession.FixDistinguishedName(transportRuleCollection, base.TenantId.DistinguishedName, base.TenantId.ObjectGuid, objectGuid, null);
                enumerable = new TransportRuleCollection[]
                {
                    transportRuleCollection
                };
            }
            else
            {
                enumerable = base.FindAndHandleException <TransportRuleCollection>(filter, rootId, deepSearch, sortBy, pageSize);
                foreach (TransportRuleCollection transportRuleCollection2 in enumerable)
                {
                    FfoDirectorySession.FixDistinguishedName(transportRuleCollection2, base.TenantId.DistinguishedName, base.TenantId.ObjectGuid, ((ADObjectId)transportRuleCollection2.Identity).ObjectGuid, null);
                }
            }
            return(enumerable);
        }
        private IEnumerable <ExchangeRoleAssignment> FindExchangeRoleAssignments(QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize = 2147483647, bool includeScopes = true)
        {
            IEnumerable <ExchangeRoleAssignment> roleAssignments = base.FindAndHandleException <ExchangeRoleAssignment>(filter, rootId, deepSearch, sortBy, pageSize);
            IEnumerable <string> roleNames = (from roleAssignment in roleAssignments
                                              select roleAssignment.Role.Name).Distinct(StringComparer.OrdinalIgnoreCase).ToArray <string>();
            Dictionary <string, ExchangeRole> cannedRoles = new Dictionary <string, ExchangeRole>(StringComparer.OrdinalIgnoreCase);

            foreach (string text in roleNames)
            {
                ExchangeRole exchangeRole = new ExchangeRole
                {
                    Name = text
                };
                if (this.UpdateImplictScope(exchangeRole))
                {
                    cannedRoles.Add(text, exchangeRole);
                }
            }
            foreach (ExchangeRoleAssignment roleAssignment2 in roleAssignments)
            {
                FfoDirectorySession.FixDistinguishedName(roleAssignment2, base.TenantId.DistinguishedName, base.TenantId.ObjectGuid, ((ADObjectId)roleAssignment2.Identity).ObjectGuid, ExchangeRoleAssignment.RdnContainer);
                roleAssignment2.Role = FfoDirectorySession.GetUpdatedADObjectIdWithDN(roleAssignment2.Role, base.TenantId.DistinguishedName, base.TenantId.ObjectGuid, ExchangeRole.RdnContainer);
                if (roleAssignment2.RoleAssigneeType == RoleAssigneeType.RoleGroup && cannedRoles.ContainsKey(roleAssignment2.Role.Name))
                {
                    ExchangeRole exchangeRole2 = cannedRoles[roleAssignment2.Role.Name];
                    roleAssignment2.RecipientReadScope  = exchangeRole2.ImplicitRecipientReadScope;
                    roleAssignment2.ConfigReadScope     = exchangeRole2.ImplicitConfigReadScope;
                    roleAssignment2.RecipientWriteScope = (RecipientWriteScopeType)exchangeRole2.ImplicitRecipientWriteScope;
                    roleAssignment2.ConfigWriteScope    = (ConfigWriteScopeType)exchangeRole2.ImplicitConfigWriteScope;
                }
                yield return(roleAssignment2);
            }
            yield break;
        }
        ADPagedReader <ManagementScope> IConfigurationSession.GetAllScopes(OrganizationId organizationId, ScopeRestrictionType restrictionType)
        {
            FfoDirectorySession.LogNotSupportedInFFO(null);
            ComparisonFilter filter = new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.OrganizationalUnitRoot, organizationId.OrganizationalUnit);

            return(new FfoPagedReader <ManagementScope>(this, filter, null));
        }
        private IConfigurable ReadImpl <T>(ObjectId id) where T : IConfigurable, new()
        {
            if (typeof(T) == typeof(ExchangeConfigurationUnit))
            {
                FfoTenant ffoTenant = base.ReadAndHandleException <FfoTenant>(base.AddTenantIdFilter(null));
                return(FfoConfigurationSession.GetExchangeConfigurationUnit(ffoTenant));
            }
            if (typeof(T) == typeof(ADOrganizationalUnit))
            {
                FfoTenant ffoTenant2 = base.ReadAndHandleException <FfoTenant>(base.AddTenantIdFilter(null));
                return(FfoConfigurationSession.GetADOrganizationalUnit(ffoTenant2));
            }
            if (typeof(T) == typeof(Organization))
            {
                FfoTenant ffoTenant3 = base.ReadAndHandleException <FfoTenant>(base.AddTenantIdFilter(null));
                return(FfoConfigurationSession.GetOrganization(ffoTenant3));
            }
            T        t        = base.ReadAndHandleException <T>(base.AddTenantIdFilter(new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.Id, id)));
            ADObject adobject = t as ADObject;

            if (adobject != null)
            {
                FfoDirectorySession.FixDistinguishedName(adobject, base.TenantId.DistinguishedName, base.TenantId.ObjectGuid, ((ADObjectId)adobject.Identity).ObjectGuid, null);
            }
            return(t);
        }
Example #6
0
 bool IDirectorySession.GetSchemaAndApplyFilter(ADRawEntry adRawEntry, ADScope scope, out ADObject dummyObject, out string[] ldapAttributes, ref QueryFilter filter, ref IEnumerable <PropertyDefinition> properties)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     dummyObject    = null;
     ldapAttributes = null;
     return(false);
 }
Example #7
0
        private static void FixDistinguishedNameForADObjectIDs(ADObject adObject, string tenantDistinguishedName)
        {
            string[] stdIDs = new string[]
            {
                ADObjectSchema.Id.Name,
                ADObjectSchema.OrganizationalUnitRoot.Name,
                ADObjectSchema.ConfigurationUnit.Name
            };
            IEnumerable <PropertyDefinition> enumerable = adObject.Schema.AllProperties;

            enumerable = from propertyDefinition in enumerable
                         where propertyDefinition != null
                         select propertyDefinition;

            enumerable = from propertyDefinition in enumerable
                         where propertyDefinition.Type == typeof(ADObjectId)
                         select propertyDefinition;

            enumerable = from propertyDefinition in enumerable
                         where propertyDefinition is ProviderPropertyDefinition && !((ProviderPropertyDefinition)propertyDefinition).IsReadOnly
                         select propertyDefinition;

            enumerable = from propertyDefinition in enumerable
                         where !stdIDs.Contains(propertyDefinition.Name)
                         select propertyDefinition;

            foreach (PropertyDefinition propertyDefinition2 in enumerable)
            {
                ProviderPropertyDefinition providerPropertyDefinition = (ProviderPropertyDefinition)propertyDefinition2;
                object obj;
                if (adObject.TryGetValueWithoutDefault(providerPropertyDefinition, out obj) && obj != null)
                {
                    if (providerPropertyDefinition.IsMultivalued)
                    {
                        MultiValuedProperty <ADObjectId> multiValuedProperty = obj as MultiValuedProperty <ADObjectId>;
                        int num = 0;
                        while (multiValuedProperty != null)
                        {
                            if (num >= multiValuedProperty.Count)
                            {
                                break;
                            }
                            ADObjectId adObjectId = multiValuedProperty[num];
                            multiValuedProperty[num] = new ADObjectId(tenantDistinguishedName, Guid.Empty);
                            multiValuedProperty[num] = FfoDirectorySession.ReplaceTenantDistinguishedName(tenantDistinguishedName, adObjectId);
                            num++;
                        }
                    }
                    else
                    {
                        ADObjectId adobjectId = obj as ADObjectId;
                        if (adobjectId != null)
                        {
                            adObject[providerPropertyDefinition] = FfoDirectorySession.ReplaceTenantDistinguishedName(tenantDistinguishedName, adobjectId);
                        }
                    }
                }
            }
        }
 private static void SetTenantIds(FfoTenant ffoTenant, ADObject adTenantObject)
 {
     if (ffoTenant == null)
     {
         return;
     }
     adTenantObject.Name = ffoTenant.TenantName;
     FfoDirectorySession.FixDistinguishedName(adTenantObject, DalHelper.GetTenantDistinguishedName(ffoTenant.TenantName), ffoTenant.TenantId.ObjectGuid, ffoTenant.TenantId.ObjectGuid, null);
 }
Example #9
0
 protected T ReadAndHandleException <T>(QueryFilter filter) where T : IConfigurable, new()
 {
     try
     {
         IConfigurable[] source = this.DataProvider.Find <T>(filter, null, false, null);
         return((T)((object)source.FirstOrDefault <IConfigurable>()));
     }
     catch (DataProviderMappingException ex)
     {
         FfoDirectorySession.LogNotSupportedInFFO(ex);
     }
     return(default(T));
 }
Example #10
0
        private IConfigurable GetExtendedSecurityPrincipal(ADUser user)
        {
            if (user == null)
            {
                return(null);
            }
            FfoDirectorySession.FixDistinguishedName(user, base.TenantId.DistinguishedName, base.TenantId.ObjectGuid, ((ADObjectId)user.Identity).ObjectGuid, null);
            ExtendedSecurityPrincipal extendedSecurityPrincipal = new ExtendedSecurityPrincipal();

            DalHelper.SetConfigurableObject(user.DisplayName, ExtendedSecurityPrincipalSchema.DisplayName, extendedSecurityPrincipal);
            DalHelper.SetConfigurableObject(user.DisplayName, ADObjectSchema.RawName, extendedSecurityPrincipal);
            DalHelper.SetConfigurableObject(new SecurityIdentifier(WellKnownSidType.NullSid, null), IADSecurityPrincipalSchema.Sid, extendedSecurityPrincipal);
            DalHelper.SetConfigurableObject(user.Id.GetChildId(ADUser.ObjectCategoryNameInternal), ADObjectSchema.ObjectCategory, extendedSecurityPrincipal);
            DalHelper.SetConfigurableObject(user.ObjectClass, ADObjectSchema.ObjectClass, extendedSecurityPrincipal);
            DalHelper.SetConfigurableObject(RecipientTypeDetails.MailUser, ExtendedSecurityPrincipalSchema.RecipientTypeDetails, extendedSecurityPrincipal);
            extendedSecurityPrincipal.SetId(user.Id);
            return(extendedSecurityPrincipal);
        }
Example #11
0
        private IConfigurable ReadImpl <T>(ObjectId identity) where T : IConfigurable, new()
        {
            QueryFilter filter = base.AddTenantIdFilter(new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.Id, identity));

            if (typeof(T) == typeof(ExtendedSecurityPrincipal))
            {
                ADUser user = base.ReadAndHandleException <ADUser>(filter);
                return((T)((object)this.GetExtendedSecurityPrincipal(user)));
            }
            T        t        = base.ReadAndHandleException <T>(filter);
            ADObject adobject = t as ADObject;

            if (adobject != null)
            {
                FfoDirectorySession.FixDistinguishedName(adobject, base.TenantId.DistinguishedName, base.TenantId.ObjectGuid, ((ADObjectId)adobject.Identity).ObjectGuid, null);
                return((T)((object)this.FixRecipientProperties(adobject)));
            }
            return(t);
        }
        private static IEnumerable <TenantInboundConnector> GetInboundConnectors(IConfigDataProvider dataProvider, ADPropertyDefinition propertyDefinition, IEnumerable <string> propertyValues, bool enabledOnly)
        {
            IEnumerable <ComparisonFilter> propertyNameFilters = from propertyValue in propertyValues
                                                                 select new ComparisonFilter(ComparisonOperator.Equal, propertyDefinition, propertyValue);
            QueryFilter filter = QueryFilter.AndTogether(new QueryFilter[]
            {
                QueryFilter.OrTogether(propertyNameFilters.ToArray <QueryFilter>()),
                new ComparisonFilter(ComparisonOperator.Equal, DalHelper.CacheFailoverModeProp, CacheFailoverMode.BloomFilter)
            });
            IEnumerable <IConfigurable> inboundConnectors = dataProvider.Find <TenantInboundConnector>(filter, null, false, null);

            foreach (IConfigurable configurable in inboundConnectors)
            {
                TenantInboundConnector inboundConnector = (TenantInboundConnector)configurable;
                if (!enabledOnly || inboundConnector.Enabled)
                {
                    FfoDirectorySession.FixDistinguishedName(inboundConnector, DalHelper.GetTenantDistinguishedName(inboundConnector.OrganizationalUnitRoot.ObjectGuid.ToString()), inboundConnector.OrganizationalUnitRoot.ObjectGuid, inboundConnector.Id.ObjectGuid, null);
                    yield return(inboundConnector);
                }
            }
            yield break;
        }
Example #13
0
        protected IConfigurable[] FindTenantObject <T>(params object[] propNameValues) where T : IConfigurable, new()
        {
            QueryFilter[] array = new QueryFilter[propNameValues.Length / 2];
            for (int i = 0; i < propNameValues.Length; i += 2)
            {
                array[i / 2] = new ComparisonFilter(ComparisonOperator.Equal, (PropertyDefinition)propNameValues[i], propNameValues[i + 1]);
            }
            QueryFilter filter = QueryFilter.AndTogether(array);

            IConfigurable[] array2 = this.FindAndHandleException <T>(filter, null, false, null, int.MaxValue).Cast <IConfigurable>().ToArray <IConfigurable>();
            IConfigurable[] array3 = array2;
            for (int j = 0; j < array3.Length; j++)
            {
                T        t        = (T)((object)array3[j]);
                ADObject adobject = t as ADObject;
                if (adobject != null)
                {
                    FfoDirectorySession.FixDistinguishedName(adobject, this.TenantId.DistinguishedName, this.TenantId.ObjectGuid, ((ADObjectId)adobject.Identity).ObjectGuid, null);
                }
            }
            return(array2);
        }
Example #14
0
 private IEnumerable <T> FindImpl <T>(QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize) where T : IConfigurable, new()
 {
     if (base.TenantId == null)
     {
         FfoDirectorySession.LogNotSupportedInFFO(null);
     }
     else
     {
         filter = this.AddFilterOperator(filter);
         if (typeof(T) == typeof(ExtendedSecurityPrincipal))
         {
             filter = FfoRecipientSession.ReduceSecurityPrincipalFilter(filter);
             IEnumerable <ADUser> users = base.FindAndHandleException <ADUser>(filter, rootId, deepSearch, sortBy, pageSize);
             foreach (ADUser user in users)
             {
                 yield return((T)((object)this.GetExtendedSecurityPrincipal(user)));
             }
         }
         else
         {
             IEnumerable <T> configObjs = base.FindAndHandleException <T>(base.AddTenantIdFilter(filter), rootId, deepSearch, sortBy, pageSize);
             foreach (T configObj in configObjs)
             {
                 ADObject adObject = configObj as ADObject;
                 if (adObject != null)
                 {
                     FfoDirectorySession.FixDistinguishedName(adObject, base.TenantId.DistinguishedName, base.TenantId.ObjectGuid, ((ADObjectId)adObject.Identity).ObjectGuid, null);
                     yield return((T)((object)this.FixRecipientProperties(adObject)));
                 }
                 else
                 {
                     yield return(configObj);
                 }
             }
         }
     }
     yield break;
 }
Example #15
0
        TResult IDirectorySession.ResolveWellKnownGuid <TResult>(Guid wellKnownGuid, string containerDN)
        {
            RoleGroupInitInfo roleGroupInitInfo = FfoDirectorySession.SupportedRoleGroups.FirstOrDefault((RoleGroupInitInfo roleGroup) => roleGroup.WellKnownGuid == wellKnownGuid);

            if (roleGroupInitInfo.WellKnownGuid == Guid.Empty)
            {
                FfoDirectorySession.LogNotSupportedInFFO(null);
                return(default(TResult));
            }
            string      propertyValue = roleGroupInitInfo.Name.Replace(" ", string.Empty).Replace("-", string.Empty);
            QueryFilter filter        = QueryFilter.AndTogether(new QueryFilter[]
            {
                new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.RecipientTypeDetailsValue, RecipientTypeDetails.RoleGroup),
                new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.Name, propertyValue)
            });
            IEnumerable <IConfigurable> enumerable = ((IConfigDataProvider)this).Find <TResult>(filter, null, false, null);

            if (enumerable != null)
            {
                return(enumerable.Cast <TResult>().FirstOrDefault <TResult>());
            }
            return(default(TResult));
        }
Example #16
0
        public static void FixDistinguishedName(ADObject adObject, string tenantDistinguishedName, Guid tenantGuid, Guid objectGuid, ADObjectId relativeConfigDN = null)
        {
            if (adObject == null || string.IsNullOrEmpty(tenantDistinguishedName))
            {
                return;
            }
            if (tenantGuid == Guid.Empty || objectGuid == Guid.Empty)
            {
                throw new InvalidOperationException(string.Format("Unable to fix distinguished name for ADObject = {0}, TenantGuid = {1}, ObjectGuid = {2}, objectName = {3}.", new object[]
                {
                    adObject.GetType().Name,
                    tenantGuid,
                    objectGuid,
                    adObject.Name
                }));
            }
            string     unescapedCommonName = string.IsNullOrEmpty(adObject.Name) ? objectGuid.ToString() : adObject.Name;
            ADObjectId adobjectId          = new ADObjectId(tenantDistinguishedName, tenantGuid);
            ADObjectId adobjectId2         = new ADObjectId(adobjectId.GetChildId("Configuration").DistinguishedName, tenantGuid);

            if (relativeConfigDN != null)
            {
                adobjectId2 = new ADObjectId(adobjectId2.GetDescendantId(relativeConfigDN).DistinguishedName, tenantGuid);
            }
            ADObjectId id          = new ADObjectId(adobjectId2.GetChildId(unescapedCommonName).DistinguishedName, objectGuid);
            ADObjectId adobjectId3 = (ADObjectId)adObject[ADObjectSchema.ConfigurationUnit];

            if (adobjectId3 != null && adobjectId3.Name != null && string.Equals(adobjectId3.Name, adobjectId2.Name, StringComparison.InvariantCultureIgnoreCase))
            {
                return;
            }
            adObject[ADObjectSchema.OrganizationalUnitRoot] = adobjectId;
            adObject[ADObjectSchema.ConfigurationUnit]      = adobjectId2;
            adObject.SetId(id);
            FfoDirectorySession.FixLegacyExchangeDN(adObject, tenantGuid);
            FfoDirectorySession.FixDistinguishedNameForADObjectIDs(adObject, tenantDistinguishedName);
        }
Example #17
0
        protected IEnumerable <T> FindAndHandleException <T>(QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize = 2147483647) where T : IConfigurable, new()
        {
            IEnumerable <T> result;

            try
            {
                IEnumerable <T> enumerable;
                if (pageSize == 2147483647)
                {
                    enumerable = this.DataProvider.Find <T>(this.AddTenantIdFilter(filter), rootId, deepSearch, sortBy).Cast <T>();
                }
                else
                {
                    enumerable = this.DataProvider.FindPaged <T>(this.AddTenantIdFilter(filter), rootId, deepSearch, sortBy, pageSize);
                }
                result = enumerable;
            }
            catch (DataProviderMappingException ex)
            {
                FfoDirectorySession.LogNotSupportedInFFO(ex);
                result = new T[0];
            }
            return(result);
        }
Example #18
0
 void IDirectorySession.VerifyIsWithinScopes(ADObject entry, bool isModification)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
 }
Example #19
0
 void IDirectorySession.UpdateServerSettings(PooledLdapConnection connection)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
 }
Example #20
0
 bool IDirectorySession.TryVerifyIsWithinScopes(ADObject entry, bool isModification, out ADScopeException exception)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     exception = null;
     return(true);
 }
Example #21
0
 void IDirectorySession.SaveSecurityDescriptor(ADObject obj, RawSecurityDescriptor sd, bool modifyOwner)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
 }
Example #22
0
 bool IDirectorySession.IsRootIdWithinScope <TObject>(ADObjectId rootId)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     return(true);
 }
Example #23
0
 TenantRelocationSyncObject IDirectorySession.RetrieveTenantRelocationSyncObject(ADObjectId entryId, IEnumerable <PropertyDefinition> properties)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     return(null);
 }
Example #24
0
 bool IDirectorySession.ReplicateSingleObjectToTargetDC(ADObject instanceToReplicate, string targetServerName)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     return(false);
 }
Example #25
0
 SecurityDescriptor IDirectorySession.ReadSecurityDescriptorBlob(ADObjectId id)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     return(null);
 }
Example #26
0
 TResult[] IDirectorySession.ObjectsFromEntries <TResult>(SearchResultEntryCollection entries, string originatingServerName, IEnumerable <PropertyDefinition> properties, ADRawEntry dummyInstance)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     return((TResult[])new ADRawEntry[0]);
 }
Example #27
0
 ADOperationResultWithData <TResult>[] IDirectorySession.RunAgainstAllDCsInSite <TResult>(ADObjectId siteId, Func <TResult> methodToCall)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     return(null);
 }
Example #28
0
 void IDirectorySession.SaveSecurityDescriptor(ADObjectId id, RawSecurityDescriptor sd)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
 }
Example #29
0
 string[] IDirectorySession.ReplicateSingleObject(ADObject instanceToReplicate, ADObjectId[] sites)
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     return(new string[0]);
 }
Example #30
0
 bool IDirectorySession.IsReadConnectionAvailable()
 {
     FfoDirectorySession.LogNotSupportedInFFO(null);
     return(true);
 }