[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#5680) pcache not returning cached entries



Full_Name: Quanah Gibson-Mount
Version: 2.4.10
OS: Linux 2.6
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (75.111.29.239)


As reported on the Debian bug tracker as bug#497697.

The pcache overlay caches the entries but fails to return them in later
searches.

Search with empty cache:
| # extended LDIF
| #
| # LDAPv3
| # base <cn=blank,o=Example> with scope subtree
| # filter: (objectclass=person)
| # requesting: cn 
| #
| 
| # blank, Example
| dn: cn=blank,o=Example
| 
| # search result
| search: 2
| result: 0 Success
| 
| # numResponses: 2
| # numEntries: 1

Search with hot cache:
| # extended LDIF
| #
| # LDAPv3
| # base <cn=blank,o=Example> with scope subtree
| # filter: (objectclass=person)
| # requesting: cn 
| #
| 
| # search result
| search: 2
| result: 0 Success
| 
| # numResponses: 1

Config:
| allow bind_anon_cred update_anon
| include         /etc/ldap/schema/core.schema
| pidfile         /var/run/slapd/slapd.pid
| argsfile        /var/run/slapd/slapd.args
| loglevel        none
| modulepath      /usr/lib/ldap
| moduleload      back_bdb
| moduleload      back_ldap
| moduleload      pcache
| sizelimit 500
| tool-threads 1
| 
| database        ldap
| suffix          "o=Example"
| rootdn          "cn=admin,o=Example"
| uri             "ldap://ldap.example.com/";
| protocol-version 3
| 
| overlay pcache
| proxycache bdb 10000 1 500 1000
| proxyattrset 0 cn
| proxytemplate "(objectClass=)" 0 3600
| directory       "/var/lib/ldap/cache"
| 
| access to * by * write

Log of first search:
| conn=0 op=1 SRCH base="cn=blank,o=Example" scope=2 deref=0
filter="(objectClass=person)"
| conn=0 op=1 SRCH attr=cn
| ==> limits_get: conn=0 op=1 dn="[anonymous]"
| query template of incoming query = (objectClass=)
| Entering QC, querystr = (objectClass=person)
| Lock QC index = 0x7d7040
| Not answerable: Unlock QC index=0x7d7040
| QUERY NOT ANSWERABLE
| QUERY CACHEABLE
| [...]
| send_ldap_result: conn=-1 op=0 p=3
| send_ldap_result: err=0 matched="" text=""
| ENTRY ADDED/MERGED, CACHED ENTRIES=1
| STORED QUERIES = 1

Log of second search:
| conn=1 op=1 SRCH base="cn=blank,o=Example" scope=2 deref=0
filter="(objectClass=person)"
| conn=1 op=1 SRCH attr=cn
| ==> limits_get: conn=1 op=1 dn="[anonymous]"
| query template of incoming query = (objectClass=)
| Entering QC, querystr = (objectClass=person)
| Lock QC index = 0x7d7040
| QUERY ANSWERABLE
| => bdb_search
Search in the cache db for (!(objectClass=glue)) or so.

| bdb_dn2entry("cn=blank,ou=cz,o=jura")
| => access_allowed: search access to "cn=blank,o=Example" "entry" requested
| => acl_get: [1] attr entry
| => acl_mask: access to entry "cn=blank,o=Example", attr "entry" requested
| => acl_mask: to all values by "", (=0)
| <= check a_dn_pat: *
| <= acl_mask: [1] applying write(=wrscxd) (stop)
| <= acl_mask: [1] mask: write(=wrscxd)
| => slap_access_allowed: search access granted by write(=wrscxd)
| => access_allowed: search access granted by write(=wrscxd)
| search_candidates: base="cn=blank,ou=cz,o=jura" (0x00000003) scope=2
| => bdb_dn2idl("cn=blank,ou=cz,o=jura")
| bdb_idl_fetch_key: @cn=blank,ou=cz,o=jura
| <= bdb_dn2idl: id=1 first=3 last=3
| => bdb_filter_candidates
|         AND
| => bdb_list_candidates 0xa0
| => bdb_filter_candidates
|         OR
| => bdb_list_candidates 0xa1
| => bdb_filter_candidates
|         EQUALITY
| => bdb_equality_candidates (objectClass)
| <= bdb_equality_candidates: (objectClass) not indexed
| <= bdb_filter_candidates: id=-1 first=1 last=3
| => bdb_filter_candidates
|         EQUALITY
| => bdb_equality_candidates (objectClass)
| <= bdb_equality_candidates: (objectClass) not indexed
| <= bdb_filter_candidates: id=-1 first=1 last=3
| <= bdb_list_candidates: id=-1 first=1 last=3
| <= bdb_filter_candidates: id=-1 first=1 last=3
| <= bdb_list_candidates: id=1 first=3 last=3
| <= bdb_filter_candidates: id=1 first=3 last=3
| bdb_search_candidates: id=1 first=3 last=3
| => test_filter
|     EQUALITY
| => access_allowed: search access to "cn=blank,ou=CZ,o=Jura" "objectClass"
requested
| => acl_get: [1] attr objectClass
| => acl_mask: access to entry "cn=blank,ou=CZ,o=Jura", attr "objectClass"
requested
| => acl_mask: to value by "", (=0)
| <= check a_dn_pat: *
| <= acl_mask: [1] applying write(=wrscxd) (stop)
| <= acl_mask: [1] mask: write(=wrscxd)
| => slap_access_allowed: search access granted by write(=wrscxd)
| => access_allowed: search access granted by write(=wrscxd)
| <= test_filter 21
test_filter returned LDAP_INVALID_SYNTAX.

| bdb_search: 3 does not match filter

Content of the cache db:
| dn: o=Example
| structuralObjectClass: glue
| objectClass: top
| objectClass: glue
| 
| dn: cn=blank,o=Example
| queryId: c975e84a-0e16-102d-8355-4be7c415200f
| queryId: 9b7f1afa-0e17-102d-8bae-452c11e3ff2d
| objectClass: inetOrgPerson
| objectClass: organizationalPerson
| objectClass: person
| objectClass: ndsLoginProperties
| objectClass: top

The backend server is a Novell eDirectory and the proxy don't have
information about the complete schema.

Bastian