Как изменить адрес IPv4 с помощью файлов LDIF

введите описание изображения здесьМне нужно изменить адрес IPv4 на несколько адресов IPv4 с помощью файла LDIF. Исходный файл LDIF, который использовался для создания HSS ESM, выглядит следующим образом:

dn: HSS-EsmImsi=312720000000207,HSS-EsmSubscriptionId=BR-02061969,
    HSS-EsmSubscriptionContainerName=HSS-EsmSubscriptionContainer,
    applicationName=HSS_ESM,nodeName=bnyrgvhss1
    changeType: modify
    add: HSS-EsmUserProfileId
    HSS-EsmUserProfileId: HSS-EsmProfile_APCCI_METERING
    -
    add: HSS-EsmUserIpV4Address
    HSS-EsmUserIpV4Address: 4$10.11.12.13
    -
    add: HSS-EsmMsisdn
    HSS-EsmMsisdn: +1 234 567 8901
    -

Теперь мне нужно сделать 2 вещи:

  1. Измените адрес IPv4 (например, 10.13.15.17).
  2. Измените класс пользовательских объектов HSS ESM, чтобы HSS-EsmUserIpV4Address сохранял несколько адресов IPv4.

Согласно Описанию интерфейса ESM LDAP от Erickson, это должно быть сделано с помощью строки в следующем формате: [contextId1]$[IPv4-Address1]\n [contextId2 ]$[IPv4-адрес2]\n ...[contextIdNN]$[IPv4-адресNN]\n.

Легенда:

  1. Тип данных [contextId] — uint32.
  2. $ — это КОНСТАНТА (знак доллара США).
  3. [IPv4-Address] IP-адреса являются десятичными с точками строкового типа данных, например. 10.12.14.16.
  4. \n — это КОНСТАНТ (новая строка).

Я новичок в LDAP и буду признателен за любую помощь в том, как должен выглядеть файл LDIF, чтобы HSS-EsmUserIpV4Address хранил, например, следующие адреса IPv4:

2$159.10.1.20
7$159.10.1.21
8$159.10.1.22

Я попытался изменить файл LDIF, чтобы сделать Delete и Add следующим образом:

... (the original code)...
changeType: modify
delete: HSS-EsmUserProfileId
-
add: HSS-EsmUserProfileId
HSS-EsmUserProfileId: 2$159.10.1.20\n7$159.10.1.21\n8$159.10.1.22\n
-

Но это не сработало (нет сообщений об ошибках, просто нет изменений).

Я буду признателен за любую помощь, я здесь (на работе), чтобы остаться, пока я не сделаю это.


person Binyamin Regev    schedule 27.02.2017    source источник
comment
2$ — это не uint32, за которым следует $, это одна цифра ASCII, за которой следует $. Странный формат. Я ожидал увидеть несколько значений атрибута HSS-EsmUserProfileId. Можете дать реферальную ссылку?   -  person user207421    schedule 28.02.2017
comment
2 — это значение uint32, $ используется как разделитель IPv4-адреса, поэтому, если вы напишете 210.11.12.13, вы не перепутаете «210» с «2$10».   -  person Binyamin Regev    schedule 28.02.2017
comment
0x00000002 является значением uint32. 2 — это однозначное значение ASCI 0x32, занимающее 8 бит. Вина Эриксона, а не ваша, и документация, которую вы цитируете, противоречит сама себе. В первую очередь я бы пожаловался им.   -  person user207421    schedule 28.02.2017
comment
Подключаюсь, но файл LDIF работает и данные сейчас в HSS-EsmUserIpV4Address и если работает то не меняю. Просто нужно найти способ поместить несколько адресов IPv4 в HSS-EsmUserIpV4Address.   -  person Binyamin Regev    schedule 28.02.2017
comment
Если файл LDIF действительно работает, у вас нет проблем, поэтому я не знаю, почему вы публикуете. Я ничего не вижу в документе Эриксона о новых строках. Я подозреваю, что это так, как я сказал: должно быть несколько значений атрибута.   -  person user207421    schedule 01.03.2017
comment
Прочитайте мой исходный пост - вопрос - мне нужно ИЗМЕНИТЬ файл LDIF, который HSS-EsmUserIpV4Address может хранить 1 или несколько адресов IPv4. Также мне нужно поддерживать изменение содержимого HSS-EsmUserIpV4Address, содержащего 1 адрес IPv4, на более чем 1 адрес IPv4. Как я уже писал - я новичок в LDAP и все еще изучаю его.   -  person Binyamin Regev    schedule 01.03.2017


Ответы (2)


add: HSS-EsmUserProfileId
HSS-EsmUserProfileId: 2$159.10.1.20\n7$159.10.1.21\n8$159.10.1.22\n

Во-первых, вы меняете не тот атрибут. Так должно быть

add: HSS-EsmUserIpV4Address
HSS-EsmUserIpV4Address: 2$159.10.1.20\n7$159.10.1.21\n8$159.10.1.22\n

и вы, возможно, повредили исходное значение этого атрибута, поэтому вам нужно вернуть его обратно:

delete: HSS-EsmUserProfileId
add: HSS-EsmUserProfileId
HSS-EsmUserProfileId: HSS-EsmProfile_APCCI_METERING

Во-вторых, я не знаю, откуда вы взяли этот формат с разделителями \n. Я не вижу этого в документации, которую вы привели. Обычный синтаксис LDIF для нескольких значений атрибутов:

add: HSS-EsmUserIpV4Address
HSS-EsmUserIpV4Address: 2$159.10.1.20
HSS-EsmUserIpV4Address: 7$159.10.1.21
HSS-EsmUserIpV4Address: 8$159.10.1.22

Обратите внимание, что это сохранит предыдущее значение, начинающееся с 4$, если вы ранее не использовали delete:, как указано выше.

person user207421    schedule 01.03.2017
comment
\n предназначен только для обозначения/отметки наличия символа NEW_LINE, и строка текста не прерывалась в вопросе или ответе. - person Binyamin Regev; 01.03.2017
comment
@BinyaminRegev \n не прерывает мой ответ, да и не предполагалось. Так ли это в вашем вопросе, не имеет никакого значения. В процитированном вами документе Эриксона ничего о \n нет. Я предлагаю вам попробовать оба метода, упомянутые здесь. Вместо того, чтобы просто спорить. - person user207421; 01.03.2017

Спасибо, EJP, вы помогли мне найти ответ и причину моей предыдущей ошибки.

Решение: в файле LDIF используйте changeType: modify с replace или delete.

И правильный файл LDIF должен быть:

dn: HSS-EsmImsi=312720000000207,HSS-EsmSubscriptionId=BR-02061969,
HSS-EsmSubscriptionContainerName=HSS-EsmSubscriptionContainer,
applicationName=HSS_ESM,nodeName=bnyrgvhss1
changeType: modify
add: HSS-EsmUserProfileId
HSS-EsmUserProfileId: HSS-EsmProfile_APCCI_METERING
-
delete: HSS-EsmUserIpV4Address
-
add: HSS-EsmUserIpV4Address
HSS-EsmUserIpV4Address: 1$159.10.1.20
HSS-EsmUserIpV4Address: 2$159.10.1.21
HSS-EsmUserIpV4Address: 3$159.10.1.22
-
add: HSS-EsmMsisdn
HSS-EsmMsisdn: +12345678901
-

Это удалит определенное значение из атрибута и добавит 2 других:

dn: HSS-EsmImsi=312720000000207,HSS-EsmSubscriptionId=BR-02061969,
HSS-EsmSubscriptionContainerName=HSS-EsmSubscriptionContainer,
applicationName=HSS_ESM,nodeName=bnyrgvhss1
changeType: modify
delete: HSS-EsmUserIpV4Address
HSS-EsmUserIpV4Address: 2$159.10.1.20
-
add: HSS-EsmUserIpV4Address
HSS-EsmUserIpV4Address: 1$159.10.1.23
HSS-EsmUserIpV4Address: 2$159.10.1.24
-

Следующий код удалит все экземпляры атрибута и снова добавит атрибут с 3 другими значениями:

dn: HSS-EsmImsi=312720000000207,HSS-EsmSubscriptionId=BR-02061969,
HSS-EsmSubscriptionContainerName=HSS-EsmSubscriptionContainer,
applicationName=HSS_ESM,nodeName=bnyrgvhss1
changeType: modify
delete: HSS-EsmUserIpV4Address
-
add: HSS-EsmUserIpV4Address
HSS-EsmUserIpV4Address: 1$159.10.1.25
HSS-EsmUserIpV4Address: 2$159.10.1.26
HSS-EsmUserIpV4Address: 3$159.10.1.27
-

Я нашел это на Как использовать файлы LDIF для внесения изменений в систему OpenLDAP.

Скриншот прикрепленной ссылки

Спасибо @EJP за его ОГРОМНУЮ помощь.

person Binyamin Regev    schedule 01.03.2017
comment
Параметр delete не требует строк значений, которые следуют в вашем примере. Он удаляет все значения указанного атрибута, как указано в вашей ссылке. Формат LDIF определен в RFC. Не нужно смотреть на произвольный интернет-мусор. Здесь нет ничего, что не согласуется с моим ответом, и, в частности, вы доказали, что моя догадка о разделителе \n верна. - person user207421; 01.03.2017