如何以递归方式删除LDAP中的实体

时间:2017-07-30 11:40:53

标签: recursion ldap subscriber ldif

我在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整合到我们的项目中,但是 AFTER 我们需要为我们的客户提供此服务。

是否有办法以递归方式从树中删除实体?例如,我将发送我想要删除的对象的DN(树的顶部),并且LDAP会以某种方式自动删除它以及它下面的所有条目。

我目前正在查看ldapdelete个问题,看看是否有任何一个可以帮我解决这个问题。

我将不胜感激。

1 个答案:

答案 0 :(得分:1)

没有解决方案,因为LDAP服务器不支持TreeDelete扩展操作。