private void AddOrReplaceDatabase(ObjectClass oclass, Uid uid, ICollection <ConnectorAttribute> attributes, OperationOptions options, AbstractConfiguration connectorConfiguration) { if (!ObjectClass.ACCOUNT.Equals(oclass)) { LOG.Info("Nothing to do"); return; } // вычисляем значение атрибута Database только если он не был передан // и дополнительно пришёл атрибут RecipientType со значением UserMailbox ConnectorAttribute database = GetAttribute(attributes, "Database"); ConnectorAttribute recipientType = GetAttribute(attributes, "RecipientType"); if (database != null || recipientType == null || !recipientType.Value.First().ToString().Equals("UserMailbox")) { LOG.Info("Nothing to do"); return; } DirectoryEntry container = null; try { ActiveDirectoryConfiguration config = (ActiveDirectoryConfiguration)connectorConfiguration; // вычисляем dn, для update'а находим по uid string dn = ""; if (uid != null) { DirectoryEntry entry = new DirectoryEntry(ActiveDirectoryUtils.GetLDAPPath(config.LDAPHostName, uid.GetUidValue()), config.DirectoryAdminName, config.DirectoryAdminPassword); dn = (string)entry.Properties["distinguishedName"][0]; entry.Dispose(); } else { dn = GetAttribute(attributes, "__NAME__").Value.First().ToString(); } string parentDn = ActiveDirectoryUtils.GetParentDn(dn); string ldapContainerPath = ActiveDirectoryUtils.GetLDAPPath(config.LDAPHostName, parentDn); container = new DirectoryEntry(ldapContainerPath, config.DirectoryAdminName, config.DirectoryAdminPassword); // поиск значения Database в родительских OU string defaultHomeMdb = null; while (defaultHomeMdb == null && container != null) { LOG.Info("Looking for DefaultHomeMdb in {0}", container.Path); defaultHomeMdb = GetDefaultHomeMdb(container); if (defaultHomeMdb != null) { LOG.Info("Found! DefaultHomeMdb = {0} (in container {1})", defaultHomeMdb, container.Path); } else { LOG.Info("Did not found DefaultHomeMdb in container {0}", container.Path); } try { container = container.Parent; } catch (Exception e) { LOG.Info("Error: " + e.Message); container = null; } } // установка значения атрибута, если не нашли указываем значение по умолчанию if (defaultHomeMdb != null) { LOG.Info("Setting DefaultHomeMdb: " + defaultHomeMdb); AddOrReplaceAttribute(attributes, "Database", defaultHomeMdb); } else { LOG.Info("Did not found DefaultHomeMdb, will set default value"); AddOrReplaceAttribute(attributes, "Database", "MSK-RN-DAG01-1GB-02"); } } finally { if (container != null) { container.Dispose(); } } }
public void TestLoad() { ActiveDirectoryConfiguration configuration = ActiveDirectoryConfigurationView.Instance.Configuration; Assert.IsNotNull(configuration); }