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

Re: writing a "passthrough" backend



I suggest you look at the glue backend... it "layers"
functionality on top of other backends using backend
callbacks.  There are a number of other uses of these
callbacks in the code, so you might browse about a bit.

At 12:10 PM 2002-10-28, Roland Bauerschmidt wrote:
>In order to be able to run scripts at modifications, I'm trying to
>write a dummy backend which passes all requests through to another
>real backend (say ldbm). Let's call it back-passthrough. How I want the
>passthrough backend to behave is like this:
>
>passthrough_back_modify:
>        1. script for modify defined?
>           - run it with the modlist piped into stdin like back-shell does
>           - script returned error? return LDAP_OPERATIONS_ERROR to
>            client
>        2. call ldbm_back_modify
>        3. ldbm_back_modify returned error and script
>           defined?
>           - run it to do a rollback
>
>What I'm currently having trouble with are ACLs. (1) should only be
>executed if the user has sufficient permissions to do so. As far as I
>understand, those can only be correctly checked within the backend
>(which would be ldbm here) itself. Consequently, the above scenario
>wouldn't work for my purpose since ldbm_back_modify would have to be run
>before in order to find out whether the user has permissions. Is there
>any way to check the permissions before? Or do a dry-run
>ldbm_back_modify in a general way, not restricting to ldbm?
>
>For a second approach, I came up with would be the following:
>
>passthrough_back_modify:
>        1. somehow receive the current version of the entry to be
>           modified. Is there any way to do this by calling one of the
>           BackendDB members (be_search?) of an ldbm instance? Would I
>           basically need to emulate a complete LDAP connection/request
>           in order to do that? Has anybody done something like that?
>        2. call ldbm_back_modify
>           - error: return
>        3. run script if defined with old version of the entry piped
>           into stdin
>           - successful: return
>        4. if the script fails, we would need to go back to the old
>           entry in the database. Would it be possible to call be_modify
>           to do this? Basically the same questions I had in (1) for
>           be_search apply here...
>
>Is any of the above approaches doable? I would greatly appreciate any
>comments on this, since I'm somehow stuck here.
>
>Roland