Я использую ldapadd и хочу добавить тип атрибута в хранилище, чтобы он мог использоваться другими записями.
У меня есть несколько вопросов. Вот мой файл ldif.
dn: dc=myorg,dc=co,dc=uk
changetype: add
add: attributetypes
attributetype: ( 2.2.980.1.1 NAME ( 'ecdvisibility' 'ecdvis' ) DESC 'The visibility of the object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE USAGE userApplications )
После проверки строк на наличие пробелов в конце я вижу, что все в порядке:
dn: dc=myorg,dc=co,dc=uk$
changetype: add$
add: attributetypes$
attributetype: ( 2.2.980.1.1 NAME ( 'ecdvisibility' 'ecdvis' )$
DESC 'The visibility of the object'$
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15$
SINGLE-VALUE$
USAGE userApplications )$
то, что я вижу, является таинственной ошибкой, подобной следующей:
ldap_add: неопределенный тип атрибута (17) дополнительная информация: add: тип атрибута не определен
Я не понимаю эту ошибку, тип атрибута не определен, я пытаюсь добавить его ! Также перед этой строкой написано:
добавление новой записи "dc = myorg, dc = co, dc = uk"
Почему это добавляет это, это уже существует. Я также не уверен, должен ли я использовать ldapadd или ldapmodify.
Моя типичная команда:
sudo ldapadd -D cn = admin, dc = myorg, dc = co, dc = uk -w пароль -v -f attributeType.ldif
Я также позаботился о том, чтобы в конце файла была пробная пустая строка, хотя это, похоже, не имеет никакого значения.
Каков наилучший способ добавить такой атрибут, который может использоваться любым пользователем?
Обновить
Я также попробовал следующее:
dn: cn=schema
changetype: modify
add: attributeTypes
##
## The new attribute type
##
attributeTypes: ( ecdvisibility.oid NAME ( 'ecdvisibility' 'ecdvis' ) DESC 'The visibility of the object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE USAGE userApplications )
Но на этот раз я получаю эту ошибку:
ldap_modify: неверный синтаксис (21) дополнительная информация: attributeTypes: значение # 0 недопустимо для синтаксиса
Обновление 2:
Прежде чем я смог внести какие-либо изменения, мне пришлось обновить системный пароль, который openldap, кажется, устанавливает в фоновом режиме:
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: password
Это работало нормально, поэтому я попытался обновить атрибуты.
1-я попытка:
dn: cn=schema,cn=config
changetype: add
olcAttributeTypes: ( ecdvisibility.oid
NAME ( 'ecdvisibility' 'ecdvis' )
DESC 'The visibility of the object'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE
USAGE userApplications )
olcRootDN: cn=config
olcRootPW: password
#objectClass: top
ldap_add: нарушение класса объекта (65) дополнительная информация: нет атрибута objectClass
Комментируя в классе объекта, выдал мне следующую ошибку:
ldap_add: нарушение класса объекта (65) дополнительная информация: класс структурного объекта не предоставлен
Хорошо, так что я попробую inetOrgPerson
ldap_add: нарушение класса объекта (65) дополнительная информация: класс объекта 'inetOrgPerson' требует атрибута 'sn'
Стоп, я не хочу этого делать, я просто хочу добавить тип атрибута, который доступен для ldap, и который может быть добавлен к объекту, когда и при необходимости. Я не хочу указывать отдельный объект или запись в этой точке. Это возможно? Если так, как? Любые дальнейшие советы действительно приветствуются.
Благодаря @grawity, окончательное решение выглядит следующим образом:
dn: cn=test,cn=schema,cn=config
changetype: add
olcAttributeTypes: ( 2.25.247072656268950430024439664556757516066
NAME ( 'ecdvisibility' 'ecdvis' )
DESC 'The visibility of the object'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE
USAGE userApplications )
objectClass: olcSchemaConfig
Я изменил номер OID на один из открытых уникальных номеров, так как использовал недопустимый общедоступный. Тип атрибута был успешно добавлен и может использоваться в другом месте.