为内存中的UnboundID LDAP服务器创建自定义架构/添加到现有架构

Mic*_*out 6 unit-testing ldap active-directory

我正在尝试从我的应用程序必须处理的字段复制LDAP布局/架构 - 我正在尝试使用可嵌入的UnboundID LDAP服务器通过自动化测试重新创建+测试它.

它必须处理的情况是用户模式的'memberOf'属性,如Active Directory ...但我不太确定如何在内存中为此ldap添加'用户'类.

1)这可能吗?2)有更好的策略吗?3)我应该做些什么?我是一个LDAP新手.

下面是我的非工作代码.

谢谢,迈克Kohout

public class TestOpenLdap2
{
    private InMemoryDirectoryServer server;

    @Before
    public void start() throws Exception
    {
        InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig("dc=com");
        config.addAdditionalBindCredentials("cn=admin,ou=People,dc=example,dc=com", "cred");
        InMemoryListenerConfig listenerConfig = new InMemoryListenerConfig("test", null, 33390, null, null, null);
        config.setListenerConfigs(listenerConfig);
        server = new InMemoryDirectoryServer(config);
        server.startListening();
    }

    @Test
    public void testMemberOf() throws Exception
    {

        addEntry("dn: dc=com", "objectClass: top", "objectClass: domain", "dc: com");

        ObjectClassDefinition oc = new ObjectClassDefinition("10.19.19.78", new String[]{"user"}, "", false, new String[]{"TOP"},
                                                                              ObjectClassType.STRUCTURAL, new String[]{"memberOf"},
                                                                              new String[]{}, new HashMap());
        addEntry("dn: cn=schema2,dc=com", "objectClass: top", "objectClass: ldapSubEntry", "objectClass: subschema", "cn: schema2",
                    "objectClasses:  " + oc.toString());

        addEntry("dn: dc=people,dc=com", "objectClass: top", "objectClass: domain", "dc: people");
        addEntry("dn: dc=groups,dc=com", "objectClass: top", "objectClass: domain", "dc: groups");
        addEntry("dn: cn=test-group,dc=groups,dc=com", "objectClass: groupOfUniqueNames", "cn: test group");
        addEntry("dn: cn=Testy Tester,dc=people,dc=com", "objectClass: Person", "objectClass: user", "objectClass: organizationalPerson", "sn: Tester", "cn: Testy Tester", "memberOf: cn=test-group,dc=groups,dc=com");
    }

    public void addEntry(String... args) throws LDIFException, LDAPException
    {
        LDAPResult result = server.add(args);
        assert (result.getResultCode().intValue() == 0);
        System.out.println("added entry:" + Arrays.asList(args));
    }
Run Code Online (Sandbox Code Playgroud)

Jam*_*ter 6

遇到此问题的任何人都可能有兴趣知道所提到的功能是Neil Wilson已经实现(至少在com.unboundid:unboundid -ldapsdk:2.3.1):)

以下是如何使用包含userPrincipalName属性的personClass替换personClass的方法:

dn: cn=schema
changetype: modify
add: attributetypes
attributetypes: ( 1.2.3.4.5.6.7 NAME 'userPrincipalName' DESC 'userPrincipalName as per Active Directory' EQUALITY caseIgnoreMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )

dn: cn=schema
changetype: modify
delete: objectClasses
objectClasses: ( 2.5.6.6
                 NAME 'person'
                 SUP top
                 STRUCTURAL
                 MUST ( sn $
                        cn )
                 MAY ( userPassword $
                       telephoneNumber $
                       seeAlso $
                       description )
                 X-ORIGIN 'RFC 4519' )

dn: cn=schema
changetype: modify
add: objectClasses
objectClasses: ( 2.5.6.6
                 NAME 'person'
                 SUP top
                 STRUCTURAL
                 MUST ( sn $
                        cn $
                        userPrincipalName )
                 MAY ( userPassword $
                       telephoneNumber $
                       seeAlso $
                       description ) )
Run Code Online (Sandbox Code Playgroud)

请注意,必须删除person objectClass.它被定义为'objectClasses'属性,您必须指定整个定义才能引用它.该定义位于Neil提到的默认模式中:docs/standard-schema.ldif

我从一些描述如何修改模式元素的Oracle文档中复制了userPrincipalName属性定义:http://docs.oracle.com/cd/E12839_01/oid.1111/e10035/ldif_appendix.htm#CHDCCJIG

  • 我得到一个``````````````````````````````````````s (3认同)

小智 5

当前,内存目录服务器不支持在线模式更改(即,通过LDAP修改操作更新cn = schema条目)。那是我的工作清单,但尚未实施。

但是,如果您只想自定义服务器运行时所使用的架构,则只需使用要使用的架构来初始化服务器。您可以根据多个文件中的信息创建模式(并且docs / standard-schema.ldif文件中包含内存服务器默认使用的一个模式,因此您可以添加第二个文件,其中包含所需的自定义模式元素使用)。

尼尔