> masarati(a)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.