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

Re: regex in group ACL



Ok, now I can explain my whole access control problem :

In my directory (OpenLDAP of course), under each user, I store objects representing an account in a given application. This account contains a login and a password and is used to open a session in the application. I wrote the access control rules which give each user special rights on its objects (the ones under its own entry).

But know I want sometimes (understand : at run time, so no rule in configuration file) to give somebody else access right on an account object under a given user.
I did not designed the data model, and did not write the whole software (which is originally wrote to work with Active Directory), and currently when such an operation is made, an object of class delegation is created under the account object, and this object contains the DN of the user to which the right is given.
So under an object of class account, there is one object of class delegation for each user who can use the account.


user1
|    \--account
|            \------delegation2
|            \------delegation3
|            \------delegation4
|
user2
|
user3
|
user4


Now, I want to write generic rules in slapd.conf that gives the concrete access rights on the account to the users referenced in the delegation objects under it, so the access rights are automatic when a delegation operation is done


My first idea was to consider the delegation objects as groups, and use such an access rule, which I found very simple and clear for such a complex behavior :

access to filter="objectClass=account" dn="(.*)"
   by group/delegation/delegatedUserDN.regex=".*,$1" read

(I use 'regex' or 'expand' depending on the version of OpenLDAP the customer use)

so every object of class delegation located under an account object automatically give access on the account object to the user DN referenced in its attribute delegatedUserDN.

But, too bad for me, one can't use wildcards in a group.regex expression.

What can I do to solve my problem ?

Thank you very much to every one who reached this point of my post :-)

François