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); }
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); }
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); }
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)); }
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); }
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; }
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); }
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; }
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)); }
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); }
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); }
void IDirectorySession.VerifyIsWithinScopes(ADObject entry, bool isModification) { FfoDirectorySession.LogNotSupportedInFFO(null); }
void IDirectorySession.UpdateServerSettings(PooledLdapConnection connection) { FfoDirectorySession.LogNotSupportedInFFO(null); }
bool IDirectorySession.TryVerifyIsWithinScopes(ADObject entry, bool isModification, out ADScopeException exception) { FfoDirectorySession.LogNotSupportedInFFO(null); exception = null; return(true); }
void IDirectorySession.SaveSecurityDescriptor(ADObject obj, RawSecurityDescriptor sd, bool modifyOwner) { FfoDirectorySession.LogNotSupportedInFFO(null); }
bool IDirectorySession.IsRootIdWithinScope <TObject>(ADObjectId rootId) { FfoDirectorySession.LogNotSupportedInFFO(null); return(true); }
TenantRelocationSyncObject IDirectorySession.RetrieveTenantRelocationSyncObject(ADObjectId entryId, IEnumerable <PropertyDefinition> properties) { FfoDirectorySession.LogNotSupportedInFFO(null); return(null); }
bool IDirectorySession.ReplicateSingleObjectToTargetDC(ADObject instanceToReplicate, string targetServerName) { FfoDirectorySession.LogNotSupportedInFFO(null); return(false); }
SecurityDescriptor IDirectorySession.ReadSecurityDescriptorBlob(ADObjectId id) { FfoDirectorySession.LogNotSupportedInFFO(null); return(null); }
TResult[] IDirectorySession.ObjectsFromEntries <TResult>(SearchResultEntryCollection entries, string originatingServerName, IEnumerable <PropertyDefinition> properties, ADRawEntry dummyInstance) { FfoDirectorySession.LogNotSupportedInFFO(null); return((TResult[])new ADRawEntry[0]); }
ADOperationResultWithData <TResult>[] IDirectorySession.RunAgainstAllDCsInSite <TResult>(ADObjectId siteId, Func <TResult> methodToCall) { FfoDirectorySession.LogNotSupportedInFFO(null); return(null); }
void IDirectorySession.SaveSecurityDescriptor(ADObjectId id, RawSecurityDescriptor sd) { FfoDirectorySession.LogNotSupportedInFFO(null); }
string[] IDirectorySession.ReplicateSingleObject(ADObject instanceToReplicate, ADObjectId[] sites) { FfoDirectorySession.LogNotSupportedInFFO(null); return(new string[0]); }
bool IDirectorySession.IsReadConnectionAvailable() { FfoDirectorySession.LogNotSupportedInFFO(null); return(true); }