Синтаксис добавления / замены LDIF?

(slapd 2.4.47 + dfsg-3 + deb10u3 - из Debian 10)

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

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

Однако ни один из перечисленных ниже подходы работают.

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: foo
-
add: olcTLSCertificateFile
olcTLSCertificateFile: foo
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: foo
-
add: olcTLSCipherSuite
olcTLSCipherSuite: foo
-
add: olcTLSVerifyClient
olcTLSVerifyClient: foo

При запуске с ldapmodify -Y EXTERNAL -H ldapi: /// -f /etc/myconfigs/ldifs/certs.ldif" дает следующую ошибку:

          SASL/EXTERNAL authentication started                                                                                                                                      
          SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth                                                                                                    
          SASL SSF: 0                                                                                                                                                               
          ldap_modify: Inappropriate matching (18)                                                                                                                                  
                additional info: modify/add: olcTLSCACertificateFile: no equality matching rule  

Если я затем адаптируйтесь к стилю replace :

dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: foo
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: foo
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: foo
-
replace: olcTLSCipherSuite
olcTLSCipherSuite: foo
-
replace: olcTLSVerifyClient
olcTLSVerifyClient: foo

Ошибка меняется на:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
ldap_modify: Other (e.g., implementation specific) error (80)

Каков правильный синтаксис для «добавить, если не существует, и заменить, если существует» ?

0
задан 14 November 2020 в 00:13
1 ответ

Replace на самом деле is "добавить, если не существует, и заменить, если существует".

rfc2849 заявляет

«Существует однозначная корреляция между операциями LDAP, которые изменяют каталог (добавление, удаление, изменение и изменение), и типами записей изменений, описанных ниже («добавить» , «удалить», «изменить» и «modrdn» или «moddn»). Это соответствие является преднамеренным и позволяет напрямую преобразовать записи изменений LDIF в операции протокола».

Хорошо, давайте посмотрим, как должны работать эти операции протокола. в rfc4511, раздел 4.6.

"заменить: заменить все существующие значения атрибута модификации перечисленными новыми значениями, создав атрибут, если он еще не существует.Замена без значения удалит весь атрибут, если он существует, и проигнорирует, если атрибут не существует».

Хорошо, это даже лучше, это «добавить, если нет», «заменить, если есть» и даже "удалить".

Давайте попробуем.

Предположим, у меня есть этот объект в моем каталоге.

dn: cn=timor,ou=people,dc=orga,dc=tld
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
cn: timor
gidNumber: 10001
homeDirectory: /home/timor
sn: None
uid: timor
uidNumber: 10001
displayName: Timor
givenName: Timor
userPassword:: <stripped>

Я настроил этот LDIF, который добавляет к объекту три почтовых значений, не используя «добавить», но «заменить».

dn: cn=timor,ou=people,dc=orga,dc=tld
changetype: modify
replace: mail
mail: first
mail: second
mail: third

Просто ldap измените это в каталоге.

timor@somehost ~ $ ldapmodify -x -H ldaps://localhost -D "cn=Manager,dc=orga,dc=tld" -w "superSecret" -f /tmp/3mail.ldif 
modifying entry "cn=timor,ou=people,dc=orga,dc=tld"

Работает нормально. (Я не собираюсь вставлять еще больше LDIF, я думаю, вы доверяете мне, что значения там есть)

Так что это на самом деле показывает, что есть какая-то другая проблема. К сожалению, сообщение об ошибке OpenLDAP «ldap_modify: Другая (например, специфичная для реализации) ошибка (80)» также не очень полезно. Я видел это не раз и часто по совершенно разным причинам, т.е. г. нарушения схемы, проблемы с разрешениями и тому подобное.

Я бы посоветовал придерживаться второго фрагмента (changetype:modify) и включить отладку с помощью -d -1 при вводе команды ldapmodify. . Если это не поможет — а я боюсь, что не поможет — вы можете сделать то же самое с самим slapd, той же опцией -d -1 и внимательно посмотреть на log во время выполнения команды ldapmodify.

1
ответ дан 13 November 2020 в 23:50

Теги

Похожие вопросы