protected void GenerateIdForObject(IConfigurable configurable) { ADObject adobject = configurable as ADObject; if (adobject != null) { if (adobject.Id != null && adobject.Id.ObjectGuid == Guid.Empty && !(adobject is ADConfigurationObject)) { adobject.SetId(new ADObjectId(adobject.Id.DistinguishedName, CombGuidGenerator.NewGuid())); } if ((adobject is TransportRule || adobject is Container) && adobject.Id != null && string.IsNullOrEmpty(adobject.Name)) { adobject.Name = (adobject.Id.Name ?? adobject.Id.ObjectGuid.ToString()); return; } } else { ConfigurablePropertyBag configurablePropertyBag = configurable as ConfigurablePropertyBag; if (configurablePropertyBag != null) { if (configurablePropertyBag is UserCertificate) { configurablePropertyBag[UserCertificate.UserCertificateIdProp] = CombGuidGenerator.NewGuid(); configurablePropertyBag[UserCertificate.CertificateIdProp] = CombGuidGenerator.NewGuid(); } if (configurablePropertyBag is PartnerCertificate) { configurablePropertyBag[PartnerCertificate.PartnerCertificateIdDef] = CombGuidGenerator.NewGuid(); configurablePropertyBag[PartnerCertificate.PartnerIdDef] = CombGuidGenerator.NewGuid(); configurablePropertyBag[PartnerCertificate.CertificateIdDef] = CombGuidGenerator.NewGuid(); return; } } else { ConfigurableObject configurableObject = configurable as ConfigurableObject; if (configurableObject != null) { return; } throw new ArgumentException("IConfigurable object must be driven from ADObject, ConfigurableObject, or ConfigurablePropertyBag"); } } }
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); }