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