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

Re: Access conttrol as an overlay function



> Kurt D. Zeilenga wrote:
>
>> However,
>> in responses, the information (such as entry data) can be
>> shared (as managed by the backend).  So, send_entry functions
>> MUST NOT alter the entry struct referenced by sr_entry.
>> They however can alter sr_entry to point to a different entry.
>>
>> If you do provide a replacement entry, then you need to
>> tell send_entry to free it (REP_ENTRY_MUSTBEFREED)
>
> This is setting rs->sr_flags = REP_ENTRY_MUSTBEFREED ?

you should rather | (OR) the flags with that; essentially,
look at rwm overlay, which is the one that drove the
need for that flag.

Before modifying an entry, do

        Entry *e = rs->sr_entry;
        if ( !( rs->sr_flags & REP_ENTRY_MODIFIABLE ) ) {
                e = entry_dup( e );
                if ( e == NULL ) {
                        goto fail;
                }
                rs->sr_flags |=
                        ( REP_ENTRY_MODIFIABLE | REP_ENTRY_MUSTBEFREED );
        }

>
>> or not
>> (and, if not, manage the replacement entry memory by other
>> means).  And if its to be freed, you cannot copy by reference
>> from the original entry.
>
> So what if the complete entry should be removed from the response ?
>
> Should I just set rs->sr_entry = 0 ? Is that safe?

You need to trap the send_search_entry() before it gets sent,
by simply returning 0 (which means success, but don't do
anything more) from the overlay's response handler instead
of SLAP_CB_CONTINUE (which means everything was fine, keep
on going thru overlays)

>
> And what happens with the old entry is it magically freed by the memory
> system ?

It is freed only if it was marked as REP_ENTRY_MUSTBEFREED;
this simply tells the response procedure to free it; if you need
to modify it, it must be marked with REP_ENTRY_MODIFIABLE;
if it is not marked with REP_ENTRY_MUSTBEFREED, the system doesn't
do anything, and in that case, a temporary entry must be freed
by your overlay, by means of the sc_cleanup member of the struct
slap_callback.

I really suggest you look at the available examples after reading
servers/slapd/overlays/slapover.txt

p.

-- 
Pierangelo Masarati
mailto:pierangelo.masarati@sys-net.it


    SysNet - via Dossi,8 27100 Pavia Tel: +390382573859 Fax: +390382476497