O básico
what I see is a mysterious error like the following:
ldap_add: Undefined attribute type (17) additional info: add: attribute type undefinedI 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 .)