ldapadd dá erros de sintaxe com o openldap

1

Estou usando o ldapadd e quero adicionar um tipo de atributo ao repositório para que ele possa ser usado por outras entradas.

Estou tendo alguns problemas. Aqui está o meu arquivo 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 )

Após verificar as linhas de espaços no final, vejo que tudo está OK:

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 )$

o que eu vejo é um erro misterioso como o seguinte:

ldap_add: Undefined attribute type (17) additional info: add: attribute type undefined

Eu não entendo este erro, o tipo de atributo não está definido, estou tentando adicioná-lo ! Também pouco antes dessa linha, diz:

adding new entry "dc=myorg,dc=co,dc=uk"

Por que está adicionando isso, ele já existe. Eu também não tenho certeza se devo usar ldapadd ou ldapmodify.

Meu comando típico é:

sudo ldapadd -D cn = admin, dc = myorg, dc = co, dc = uk -w senha -v -f attributeType.ldif

Eu também me certifiquei de que há uma linha em branco no final do arquivo, embora isso não faça nenhuma diferença.

Qual é a melhor maneira de adicionar um atributo que possa ser usado por qualquer usuário?

Atualizar

Eu também tentei o seguinte:

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 )

Mas desta vez recebo este erro:

ldap_modify: Invalid syntax (21) additional info: attributeTypes: value #0 invalid per syntax

Atualização 2:

Antes de poder fazer qualquer alteração, tive que atualizar a senha do sistema que O openldap parece estar em segundo plano:

dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: password

Isso funcionou bem, então comecei a tentar atualizar os atributos.

Primeira tentativa:

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: Object class violation (65) additional info: no objectClass attribute

Comentando na classe de objeto, me ocorreu o seguinte erro:

ldap_add: Object class violation (65) additional info: no structural object class provided

Ok, vou tentar o inetOrgPerson

ldap_add: Object class violation (65) additional info: object class 'inetOrgPerson' requires attribute 'sn'

Parar , eu realmente não quero fazer isso, quero apenas adicionar um tipo de atributo disponível para ldap, e pode ser adicionado a um objeto quando e se necessário. Eu não quero especificar o único objeto ou uma entrada neste momento. Isso é possível? Se sim como? Qualquer outro conselho realmente apreciado.

Graças a @grawity, a solução final é a seguinte:

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

Alterei o número OID para um dos números únicos abertos, pois estava usando um número público inválido. O tipo de atributo foi adicionado com sucesso e pode ser usado em outro lugar.

    
por PeterS 08.09.2016 / 16:41

1 resposta

1

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 .)

    
por 08.09.2016 / 17:26

Tags