【发布时间】:2018-01-06 01:15:53
【问题描述】:
我在 LDAP 中有以下树
Legend
$Msisdn = 13217654321 // 11 digits phone number: (contry)+(area)+(number)
$Imsi = 999888000007777 // standard 15 digits IMSI number
$MobileDomain = ims.mnc888.mcc999.3gppnetwork.org
+ HssNodeName
| + HSS
| | + HSS-Subscribers
| | | + HSS-Subscriber (HSS-SubscriberID=$Msisdn@$MobileDomain)
| | | | + HSS-User (HSS-PrivateUserId=$Imsi)
| | | | + HSS-Msisdn (HSS-Msisdn=$Msisdn)
| | | | + HSS-SubscriberServiceProfile
| | | | + HSS-PublicIdentificationData (sip:$Imsi@$MobileDomain)
| | | | + HSS-PublicIdentificationData (sip:\+$Msisdn@$MobileDomain)
| | | | + HSS-PublicIdentificationData (tel:\+$Msisdn)
我需要删除 HSS-Subscriber 及其下的所有实体。我有带有以下命令的 LDIF 文件(每个 LDIF 文件包含 1 个命令):
** PublicIdentificationDataTel.ldif **
dn: HSS-PublicIdValue=tel:\+$Msisdn,
HSS-SubscriberID=$Msisdn@$MobileDomain,
HSS-SubscriberContainerName=HSS-Subscribers,
applicationName=HSS,nodeName=HssNodeName
changeType: delete
** PublicIdentificationDataSip2.ldif **
dn: HSS-PublicIdValue=sip:\+$Msisdn@$MobileDomain,
HSS-SubscriberID=$Msisdn@$MobileDomain,
HSS-SubscriberContainerName=HSS-Subscribers,
applicationName=HSS,nodeName=HssNodeName
changeType: delete
** PublicIdentificationDataSip1.ldif **
dn: HSS-PublicIdValue=sip:$Imsi@$MobileDomain,
HSS-SubscriberID=$Msisdn@$MobileDomain,
HSS-SubscriberContainerName=HSS-Subscribers,
applicationName=HSS,nodeName=HssNodeName
** SubscriberServiceProfile.ldif **
dn: HSS-SubscriberServiceProfileId=SubServProf$Msisdn,
HSS-SubscriberID= $Msisdn@$MobileDomain,
HSS-SubscriberContainerName=HSS-Subscribers,
applicationName=HSS,nodeName=HssNodeName
changetype: delete
** MsIsdn.ldif **
dn: HSS-Msisdn=$Msisdn,
HSS-PrivateUserID=$Imsi@$MobileDomain,
HSS-SubscriberID=$Msisdn@$MobileDomain,
HSS-SubscriberContainerName=HSS-Subscribers,
applicationName=HSS,nodeName=HssNodeName
changeType: delete
** HssUser.ldif **
dn: HSS-PrivateUserID=$Imsi,
HSS-SubscriberId=$Msisdn@$MobileDomain,
HSS-SubscriberContainerName=HSS-Subscribers,
applicationName=HSS,nodeName=HssNodeName
changeType: delete
** HssSubscriber.ldif **
dn: HSS-SubscriberId=$Msisdn@$MobileDomain,
HSS-SubscriberContainerName=HSS-Subscribers,
applicationName=HSS,nodeName=$NODENAME
changeType: delete
按照我编写的顺序运行上述 LDIF 文件可以正常工作,但是为我要删除的 1 个对象发送 8 个删除命令……这不是很优雅。我正在寻找一种更好、更优雅的方式来做到这一点。我知道我无法删除下面有条目的条目,但我希望找到一种方法让我的删除过程更短、更优雅。
我看到问题how to delete all entries ldap java,那里的解决方案不适用于我的问题,因为它涉及我们不使用的Spring framework。我们计划将 Spring framework 集成到我们的项目中,但我们需要在之后为我们的客户提供此功能。
有没有办法从树中递归删除实体?例如,我将发送我想要删除的对象(树的顶部)的 DN,并且 LDAP 会以某种方式自动删除它以及它下面的所有条目。
我目前正在查看ldapdelete 开关,看看它们是否可以帮助我解决这个问题。
我将不胜感激。
【问题讨论】:
-
如果您的 LDAP 服务器支持,您可以使用删除子树控件。
-
我不知道那个答案。我向我们客户的工程团队发送了一个问题。另外,我没有“子树”控件。我正在发送一个 LDIF,它在客户的 LDAP 服务器上运行,我得到一个确认拒绝响应。我正在使用 JXplorer 客户端查看客户服务器上的数据。
-
ldapdelete应该在选项中包含它。这是您在请求中添加的一种魔法,但在 OpenLDAP 服务器的情况下,它需要存在可选的覆盖。 -
没关系,我从客户那里得到了答复——LDAP服务器不支持TreeDelete扩展操作。
标签: recursion ldap subscriber ldif