O básico
what I see is a mysterious error like the following:
ldap_add: Undefined attribute type (17) additional info: add: attribute type undefined
I don't understand this error, the attribute type is not defined, I'm trying to add it!
Não está falando sobre seu atributo. Está falando sobre a linha add: attributetypes
- não conhece um atributo chamado add
.
No LDIF, os atributos add:
, replace:
, delete:
são necessários apenas quando modifica uma entrada (ou seja, com changetype: modify
). Mas se você quiser adicionar uma nova entrada, você só precisa fornecer dados brutos, nada mais.
Veja a manpage 'ldif' para exemplos e diferenças entre "adicionar" LDIFs e "modificar" LDIFs.
Also just before that line it says:
adding new entry "dc=myorg,dc=co,dc=uk"
Why is it adding this, it already exists.
Porque você usou changetype: add
- em outras palavras, você perguntou ldapmodify para criar uma nova entrada.
Para esclarecer, "adicionar nova entrada" é completamente separado de "modificar entrada, adicionar novos atributos". As ações possíveis são:
-
changetype: add
- cria uma nova entrada, exatamente conforme especificado. -
changetype: modify
- edita atributos de uma entrada existente, aceita uma combinação de:-
add: ...
- adiciona novo atributo (ou adiciona mais valores) -
replace: ...
- adiciona ou sobrescreve completamente um atributo -
delete: ...
- delete attribute (ou valores específicos)
-
-
changetype: modrdn
- altera o DN (renomeia ou move a entrada) -
changetype: delete
- exclui toda a entrada.
Consulte esta documentação .
I'm also not sure whether I should be using ldapadd or ldapmodify.
A única diferença entre eles é qual changetype
eles usam se você não especificar nenhum. Ou seja, o ldapadd será o padrão para changetype: add
e o ldapmodify será o padrão para changetype: modify
.
Se você especificar manualmente um changetype:
em seu LDIF, ambos os comandos se tornarão idênticos.
Agora, esquema
A configuração do esquema varia muito entre os servidores LDAP, e seu LDIF está totalmente errado para o OpenLDAP. A descrição real do atributo é boa, mas precisa ser armazenada em um DN diferente, em um atributo diferente.
Para começar, você não adiciona o esquema diretamente ao seu banco de dados regular, mas para uma árvore de configuração especial - o OpenLDAP usa subentradas abaixo de cn=schema,cn=config
, com uma olcSchemaConfig
de entrada por esquema.
Os atributos também começam com olc
- ou seja, olcAttributeTypes
e olcObjectClasses
.
Para adicionar um novo esquema com 1 atributo e zero objectClasses, use:
dn: cn=ecd,cn=schema,cn=config
changetype: add
objectClass: olcSchemaConfig
olcAttributeTypes: ( 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 )
Observe que o OpenLDAP adicionará automaticamente um número ao RDN, por exemplo, %código%. Depois, você pode adicionar mais atributos ou classes ao mesmo esquema:
dn: cn={5}ecd,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 4.5.6.7 NAME 'foo' ... )
olcAttributeTypes: ( 4.5.6.8 NAME 'bar' ... )
-
add: olcObjectClasses
olcObjectClasses: ( 4.5.6.9
NAME 'ecdwhatever'
AUXILIARY
MAY ( ecdvisibility $ foo $ bar ) )
-
(O cn={5}ecd
OID realmente pertence a você? Se isso não acontecer, é melhor você conseguir sua própria da IANA .)