Você provavelmente deve conseguir remover qualquer entrada de esquema que não esteja em uso, mas eu não tentei. Esta resposta cobre a questão do bônus. 'slapd -d alguma coisa' pode iluminar o que está acontecendo com a primeira pergunta.
Estou tendo problemas para usar o olc do openldap para modificar um esquema sem desligar o servidor. Para testar algumas coisas, fiz o seguinte esquema:
objectIdentifier tests orgUlyssisOID:4
objectIdentifier testAttribute tests:1
objectIdentifier testObjectClass tests:2
attributeType ( testAttribute:1 NAME 'attr1'
DESC 'attribuut 1'
SYNTAX '1.3.6.1.4.1.1466.115.121.1.40' )
attributeType ( testAttribute:2 NAME 'attr2'
DESC 'attribuut 2'
SUP userPassword
SINGLE-VALUE )
objectclass ( testObjectClass:1 NAME 'class1'
DESC 'objectclass 1'
SUP top
STRUCTURAL
MUST (attr1 $ attr2 ) )
E o adicionou a um novo esquema chamado test. (cn = {9} test.ldif em cn = esquema). Agora não consigo descobrir como excluir class1 desse esquema. Eu uso o seguinte LDIF (e tentei muitas variações também, sem sucesso)
dn : cn={9}test,cn=schema,cn=config
changetype: modify
delete: olcObjectClasses
olcObjectClasses: ( testObjectClass:1 NAME 'class1' DESC 'objectclass 1' SUP top STRUCTURAL MUST ( attr1 $ attr2 ) )
Rodando ldapmodify -x -W -D cn = admin, cn = config -f teste.ldif -d 0 não produz saída. -d 1 dá isto:
ldap_create
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP localhost:389
ldap_new_socket: 4
ldap_prepare_socket: 4
ldap_connect_to_host: Trying 127.0.0.1:389
ldap_pvt_connect: fd: 4 tm: -1 async: 0
ldap_open_defconn: successful
ldap_send_server_request
ber_scanf fmt ({it) ber:
ber_scanf fmt ({i) ber:
ber_flush2: 38 bytes to sd 4
ldap_result ld 0x7f2a8ccf3430 msgid 1
wait4msg ld 0x7f2a8ccf3430 msgid 1 (infinite timeout)
wait4msg continue ld 0x7f2a8ccf3430 msgid 1 all 1
** ld 0x7f2a8ccf3430 Connections:
* host: localhost port: 389 (default)
refcnt: 2 status: Connected
last used: Mon Sep 10 11:29:57 2012
** ld 0x7f2a8ccf3430 Outstanding Requests:
* msgid 1, origid 1, status InProgress
outstanding referrals 0, parent count 0
ld 0x7f2a8ccf3430 request count 1 (abandoned 0)
** ld 0x7f2a8ccf3430 Response Queue:
Empty
ld 0x7f2a8ccf3430 response count 0
ldap_chkResponseList ld 0x7f2a8ccf3430 msgid 1 all 1
ldap_chkResponseList returns ld 0x7f2a8ccf3430 NULL
ldap_int_select
read1msg: ld 0x7f2a8ccf3430 msgid 1 all 1
ber_get_next
ber_get_next: tag 0x30 len 12 contents:
read1msg: ld 0x7f2a8ccf3430 msgid 1 message type bind
ber_scanf fmt ({eAA) ber:
read1msg: ld 0x7f2a8ccf3430 0 new referrals
read1msg: mark request completed, ld 0x7f2a8ccf3430 msgid 1
request done: ld 0x7f2a8ccf3430 msgid 1
res_errno: 0, res_error: <>, res_matched: <>
ldap_free_request (origid 1, msgid 1)
ldap_parse_result
ber_scanf fmt ({iAA) ber:
ber_scanf fmt (}) ber:
ldap_msgfree
ldap_free_connection 1 1
ldap_send_unbind
ber_flush2: 7 bytes to sd 4
ldap_free_connection: actually freed
Portanto, não há indicação real de erro. Onde estou fazendo errado? Pergunta de bônus: Se eu tiver algumas entradas de uma determinada classe de objeto, posso modificá-la (adicionar / remover atributosTipo) sem remover as entradas?
Agradecemos antecipadamente por toda a ajuda.
Você provavelmente deve conseguir remover qualquer entrada de esquema que não esteja em uso, mas eu não tentei. Esta resposta cobre a questão do bônus. 'slapd -d alguma coisa' pode iluminar o que está acontecendo com a primeira pergunta.