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

Re: regex in group ACL



Francois,

your mail was very useful to understand what's going on.  I think there
might be a solution with either 2.1 or 2.2, and recent improvements in
HEAD will make it even more efficient, provided it matches your
requirements.  There is still something I need to understand from your
mail; see below.

> # Entry 3:
> dn:cn=exampleSSOStorageV2,uid=denis,ou=Users,dc=example,dc=local
versionNumber: 2
> cn: exampleSSOStorageV2
> objectClass: exampleSSOStorage

1.a) Is there a __finite__ set of account RDNs?  I mean,
"exampleSSOStorageV2", "accountX" and so, but a limited, well defined
number of types, which are known at configure time, so they can be
enumerated in ACLs?
1.b) Or do they change and grow at run-time?
1.c) Furthermore, do users have children that are not accounts?
1.d) Or do accounts have children that are not delegations?

>
> As you can see, the accounts objects are stored as exampleSSOAccount
objectClass entries, under an object of class exampleSSOStorage. The
delegation objects are of class exampleSSOAccountDelegation


>
>> 4) Is the delegation's DN the identity you want to give access rights
for the user's entry?
>
> Probably due to the fact that English is not my natural language, I
don't understand you.

.. or I need to reword my question :)

> But I think my LDIF export will be a good explanation.
>
> In this case, the access right rule would be :
>
> access to
> dn="cn=W02222226CAPP36UMM4SA4JUG6JURRUVWZ2222222222222222,cn=exampleSSOStorageV2,uid=denis,ou=Users,dc=example,dc=local"
>     by dn="uid=francois,ou=Tests FB,dc=example,dc=local" read
>
> Indeed, I want a more generic rule :) and since "uid=francois,ou=Tests
FB,dc=example,dc=local" is stored in the exampleSSOAccountDelegation
object through its exampleUserEntityObject attribute :
>
> access to
> dn="cn=W02222226CAPP36UMM4SA4JUG6JURRUVWZ2222222222222222,cn=exampleSSOStorageV2,uid=denis,ou=Users,dc=example,dc=local"
>     by
> group="cn=dc0d0c04-a7f4-1028-9b7a-c1ad53990353,cn=W02222226CAPP36UMM4SA4JUG6JURRUVWZ2222222222222222,cn=exampleSSOStorageV2,uid=denis,ou=Users,dc=example,dc=local"
read
>
> (Where 'group' has to be replaced with
> 'group/exampleSSOAccountDelegation/exampleUserEntityObject')
>
> But here it only works for one account of one user, so the very generic
rule would be :
>
> access to filter="(objectClass=exampleSSOAccount)" dn.regex="(.*)"
>     by group.regex="(.*),$1" read
>
> But this doesn't work (see my previous posts)
>
> Important precision : *One delegation object is created of each user
which the account is delegated to*. So there can be several
> exampleSSOAccountDelegation objects under one exampleSSOAccount object.
And there is only one value of exampleUserEntityObject in a
> exampleSSOAccountDelegation  entry.
>
> So maybe I could find a way with dnattr... but I don't find one


Initially, I thought your intention was to give __delegation__ access to
the ___user__ entry, so in a rule

access to <what>
  by <who> <rights>

the <what> is __user__ and the <who> is __delegation__

In this case you can do

access to dn.regex="^uid=([^,]+),ou=Tests FB,dc=example,dc=local$"
        by
dn.regex="^cn=[^,]+,cn=[^,],uid=$1,ou=Users,dc=example,dc=local$"
<access>

The DN in the <who> clause, as opposed to groups, __IS__ evaluated as a
regex.

But now I seem to realize that you want to do the opposite, i.e. give
__user__ access to the __delegation__ entry, so in a rule

access to <what>
  by <who> <rights>

the <what> is __delegation__ and the <who> is __user__

In this case you can do (2.2)

access to dn.regex="^cn=[^,]+,cn=[^,],uid=([^,]+),ou=Tests
FB,dc=example,dc=local$"
        by dn.exact,expand="uid=$1,ou=Users,dc=example,dc=local" <access>

or (2.1)

access to dn.regex="^cn=[^,]+,cn=[^,],uid=([^,]+),ou=Tests
FB,dc=example,dc=local$"
        by dn.regex="^uid=$1,ou=Users,dc=example,dc=local$" <access>

Of course these rules do not have granularity on the account or on the
delegation (everything whose RDN has "cn" as naming attribute is fine) but
I assume that's what you want.  In the latter case you can narrow the
selection by adding a filter on the objectClass of the delegation.

Hope it helps.

p.

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





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