【发布时间】:2008-09-30 09:56:12
【问题描述】:
我实际上是这个论坛的新手,我一直在尝试几天来找到一种将整个 LDAP 子树复制到另一棵树的简单方法。由于我找不到任何有用的东西,所以我也想在这里提出一个问题。有人知道如何以编程方式执行此操作吗?
对于添加、删除、搜索等常规操作,我一直在使用 Spring LDAP。
非常感谢!
【问题讨论】:
我实际上是这个论坛的新手,我一直在尝试几天来找到一种将整个 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 实现。
因此,复制到新位置可能无法获得您想要或需要的一切。
【讨论】: