Luca Polidoro wrote:
Salve, stavo facendo dei test di query ldap, utilizzando ldapsearch con
determinati tipi di filtri. Utilizzando i filtri, sugli attributi del tipo:

cn=a*n

oppure

cn=*n

oppure

cn=a*

La query restituisce il risultato atteso. Analizzando gli schema utilizzati,
mi sembra di aver capito che ciò è possibile in quanto, l'attributo cn ha la
seguente specifica:

SUBSTR caseIgnoreSubstringsMatch

Infatti, facendo una controprova con un attributo che non ha tale specifica,
i filtri utilizzati sopra non restituisce nessun valore.

Anzi utilizzando tale filtro:

cn=a*n

Protocol error (2)
Additional information: unexpected data in PDU

e la connessione viene persa con il server.

Gli unici, o meglio di quelli che a me serve testare, che funzionano
sembrano essere,

ou=*

oppure

ou=stringa

Ho allora utilizzato gli objectClass per fare i filtri. In questo caso
sembrano  funzionare solamente questi ultimi 2 esempi, ma non quelli
precedenti. Tra l'altro utilizzando il filtro del tipo

cn=a*n

Ottengo di nuovo

Protocol error (2)
Additional information: unexpected data in PDU

Questo e' probabilmente un errore; devo fare un po' di verifiche.

e la connessione con il server viene persa.

Non sono riuscito a trovare un riferimento preciso, per cui volevo sapere se
questo è lo standard LDAP, che è implementato in OpenLDAP, oppure c'è un
modo affinchè sia possibile effettuare una ricerca con degli objectClasses
come filtri, che utilizzano wildcards parziali?

Il server ldap su cui sto testando tali ricerche sono:

- openldap2.3-2.4.9, utilizzando il pacchetto per ubuntu 8.04
- openldap 2.3.8 compilato su Solaris 9

Si tratta in ogni caso di software obsoleto, non e' il massimo con cui fare test.

Mi è stato riferito che SunONE e Tivoli, e una vecchia versione di OpenLdap,
supportano tale tipologia di filtro sugli Object Class. Purtroppo non mi
hanno dato un'informazione più precisa riguarda a versioni usate e file di
configurazioni usate.

L'attributo 'objectClass' e' definito in RFC 4512 come

      ( 2.5.4.0 NAME 'objectClass'
        EQUALITY objectIdentifierMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )

e quindi ha solo la regola di uguaglianza 'objectIdentifierMatch' (RFC4517), che consiste nel confrontare l'OID della classe, dopo averlo eventualmente dereferenziato se la classe era stata indicata con il suo nome descrittivo (ad esempio: 'person' -> '2.5.6.6').

Quindi un filtro di substring non si puo' applicare a questo attributo. Il fatto che altre implementazioni lo consentano e' legato ad una incorretta implementazione della tipizzazione dei dati.

Tra l'altro, mi chiedo che valore possa avere un filtro di substring su objectClass. Se intendi implementare qualcosa del tipo "trova tutti gli oggetti di una certa categoria di classi" devi definire quelle classi come derivate da una classe di base comune. In questo caso l'uguaglianza tra le classi derivate e la classe di base e' data dal fatto che un oggetto di una classe derivata appartiene anche implicitamente a tutte le classi di base da cui e' derivato (ad esempio, 'organizationalPerson' e' derivato da 'person', che e' derivato da 'top'; quindi una ricerca per '(objectClass=person)' becca tutti i 'person' ma anche tutti gli 'organizationalPerson').

Ciao, p.


Ing. Pierangelo Masarati
OpenLDAP Core Team

SysNet s.r.l.
via Dossi, 8 - 27100 Pavia - ITALIA
http://www.sys-net.it
-----------------------------------
Office:  +39 02 23998309
Mobile:  +39 333 4963172
Fax:     +39 0382 476497
Email:   [EMAIL PROTECTED]
-----------------------------------

_______________________________________________
OpenLDAP mailing list
OpenLDAP@mail.sys-net.it
https://www.sys-net.it/mailman/listinfo/openldap


Rispondere a