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)
遇到此问题的任何人都可能有兴趣知道所提到的功能是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
小智 5
当前,内存目录服务器不支持在线模式更改(即,通过LDAP修改操作更新cn = schema条目)。那是我的工作清单,但尚未实施。
但是,如果您只想自定义服务器运行时所使用的架构,则只需使用要使用的架构来初始化服务器。您可以根据多个文件中的信息创建模式(并且docs / standard-schema.ldif文件中包含内存服务器默认使用的一个模式,因此您可以添加第二个文件,其中包含所需的自定义模式元素使用)。
尼尔
| 归档时间: |
|
| 查看次数: |
3877 次 |
| 最近记录: |