masarati@aero.polimi.it wrote:
Also, I note that the glued paged response seems to work incorrectly.
I
made a simple test system, where the root database contains exactly one
entry (the suffix) and a back-ldap is glued on top. If I request
entries
with a page size of 2, searching the suffix return 3 entries;
subsequent
searches return 2 entries from the proxy. I haven't figured out yet
where
the issue is.
I figured out how to fix the issue you reported. It is related to the
fact that slapd internally assumes that ldctl_oid values are constant
strings, so it doesn't duplicate nor free them. However, control OIDs
returned by back-ldap (and friends) have been decoded from the wire by
the
client library, so they are actually malloc'ed. That's why backglue
ends
up with a dangling pointer.
I'm fixing it by having backglue duplicate (and free) control OIDs
consistently. Another option would be to replace those values with
constant strings for known control values. This would prevent gluing
for
unknown proxied controls.
Or just tmpalloc them and don't bother to clean them up.
Yes, I've reworked all the temporary controls allocation using tmpalloc.
Too bad OIDs are char* and not bervals.
With respect to the other issue, to honor the requested pagesize we'd need
to intercept pagedresult requests, modify the page size in the request
when a page crosses two databases, requesting the original page size minus
entries already returned. I wonder whether it's worth the effort, though.
p.