Как я могу рекурсивно удалить объект в LDAP

У меня есть следующее дерево в 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 в том порядке, в котором я их написал, работает правильно, но отправка 8 команд удаления для 1 объекта, который я хочу удалить... это не очень элегантно. Я ищу лучший и более элегантный способ сделать это. Я знаю, что не могу удалить запись, под которой есть записи, но я надеюсь найти способ сделать процесс удаления короче и элегантнее.

Я видел вопросы как удалить все записи ldap java, решение это не относится к моей проблеме, так как включает Spring framework, который мы не используем. Мы планируем интегрировать Spring framework в наш проект, но это будет ПОСЛЕ того, как нам нужно предоставить это нашему клиенту.

Есть ли способ рекурсивно удалить объект из дерева? например, я отправлю DN объекта (верхней части дерева), который я хочу удалить, и каким-то образом LDAP автоматически удалит его и все записи под ним.

В настоящее время я смотрю на ldapdelete коммутаторы, чтобы узнать, может ли кто-нибудь из них помочь мне в этом.

Я буду признателен за любую помощь.


person Binyamin Regev    schedule 30.07.2017    source источник
comment
Вы можете использовать элемент управления Удалить поддерево, если ваш сервер LDAP поддерживает его.   -  person user207421    schedule 30.07.2017
comment
Я не знаю ответа на этот вопрос. Я отправляю вопрос инженерной команде нашего клиента. Кроме того, у меня нет управления Subtree. Я отправляю LDIF, он запускается на сервере LDAP клиента, и я получаю ответ Confirm-Reject. Я использую клиент JXplorer для просмотра данных на сервере нашего клиента.   -  person Binyamin Regev    schedule 30.07.2017
comment
ldapdelete должно быть в опциях. Это часть магии, которую вы вкладываете в запрос, но она требует наличия необязательного оверлея, например, в случае сервера OpenLDAP.   -  person user207421    schedule 30.07.2017
comment
Неважно, получил ответ от нашего заказчика - сервер LDAP не поддерживает расширенную операцию TreeDelete.   -  person Binyamin Regev    schedule 03.08.2017


Ответы (1)


Для этого нет решения, поскольку сервер LDAP не поддерживает расширенную операцию TreeDelete.

person Binyamin Regev    schedule 03.08.2017