我实际上是这个论坛的新手,我一直在尝试几天来找到一种将整个 LDAP 子树复制到另一棵树的简单方法。由于我找不到任何有用的东西,我也想在这里提出一个问题。有人知道如何以编程方式执行此操作吗?
对于添加、删除、搜索等正常操作,我一直在使用 Spring LDAP。
非常感谢 !
我实际上不知道 Spring LDAP,但是如果您的 LDAP 接口没有提供任何高级抽象来移动/重命名或复制整个子树,则您必须递归地移动/重命名或复制所有子树节点。LDAP API 不直接提供这样的选项。
以下是伪代码:
function copySubtree(oldDn, newDn)
{
copyNode(oldDn, newDn); // the new node will be created here
if (nodeHasChildren(oldDn) {
foreach (nodeGetChildren(oldDn) as childDn) {
childRdn=getRdn(childDn); // we have to get the 'local' part, the so called RDN
newChildDn=childRdn + ',' + newDn; // the new DN will be the old RDN concatenated with the new parent's DN
copySubtree(childDn, newChildDn); // call this function recursively
}
}
}
将其转储为 LDIF,通过搜索和替换(或通过脚本)编辑 DN,然后导入新的 LDIF。
Spring 可能不是执行此操作的工具。是否有必要使用 Spring 操作目录?我认为 OpenLDAP 的 ldapsearch 和 ldapadd 应该适用于任何服务器,并且它们将转储/加载 LDIF。
请注意,密码很难复制。您可能无法通过 LDAP API 读取它们。这将取决于您使用它的 LDAP 实现。
因此,复制到新位置可能无法获得您想要或需要的一切。