2.4. [$dn] マクロの例
[$dn]
マクロは、ターゲットとなるソースの DN を複数回確認します。このマクロは、一致するまで、確認するたびに左端の RDN コンポーネントを削除します。
たとえば、cn=all,ou=groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com
サブツリーをターゲットとする LDAP リクエストと、以下の ACI があるとします。
aci: (target="ldap:///ou=groups,($dn),dc=example,dc=com") (targetattr = "*") (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=domainAdmins,ou=groups,[$dn],dc=example,dc=com";)
マクロは次のように展開されます。
-
ターゲットの
($dn)
はdc=subdomain1,dc=hostedCompany1
と一致します。 サブジェクトの
[$dn]
はdc=subdomain1,dc=hostedCompany1
に置き換えられます。この場合の結果は、
groupdn="ldap:///cn=domainAdmins,ou=Groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"
になります。バインド DN が対象のグループのメンバーである場合は、一致するプロセスが停止し、ACI が評価されます。結果が一致しない場合、処理は続行され、左端部分が削除されます。サブジェクトの [$dn] は
dc=hostedCompany1
です。この場合の結果は、
groupdn="ldap:///cn=domainAdmins,ou=Groups,dc=hostedCompany1,dc=example,dc=com"
になります。バインド DN がそのグループのメンバーでない場合、ACI は評価されません。これがメンバーの場合には、ACI が評価されます。
[$dn]
マクロは、ドメインレベルの管理者に、ディレクトリーツリー内のすべてのサブドメインへのアクセスを許可します。これは、ドメイン間の階層関係を表現するのに便利です。たとえば、以下の ACI について考えてみましょう。
aci: (target="ldap:///ou=*, ($dn),dc=example,dc=com") (targetattr="*")(targetfilter=(objectClass=nsManagedDomain)) (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=domainAdmins,ou=groups,[$dn],dc=example,dc=com";)
この ACI は、cn=domainAdmins,ou=groups,dc=hostedCompany1,dc=example,dc=com
のメンバーに、dc=hostedCompany1
下にあるすべてのサブドメインへのアクセスを許可します。そのグループのメンバーである管理者は、ou=people,dc=subdomain1.1,dc=subdomain1
のようなサブツリーにアクセスできます。ただし、cn=domainAdmins,ou=groups,dc=subdomain1.1
のメンバーに ou=people,dc=hostedCompany1
および ou=people,dc=subdomain1,dc=hostedCompany1
ノードへのアクセスはありません。