我有以下要针对ldap检查的VLAN的列表。
Tmp-String-0 = "CN=vlan10,CN=Users,DC=aaa,DC=local;CN=vlan20,CN=Users,DC=aaa,DC=local"
用ulang,我将它们炸开并循环穿过它们
if ("%{explode:&control:Tmp-String-0 ;}" > 0) {
foreach &control:Tmp-String-0 {
然后我尝试进行检查
Tmp-String-1 := "%{ldap_aaa.local:ldapi://192.168.0.199:389/cn=Users,dc=aaa,dc=local?memberof?sub?(&(objectCategory=User)(sAMAccountName=%{%{Stripped-User-Name}:-%{User-Name}})(memberOf=%{Foreach-Variable-0}))}"
但是%{Foreach-Variable-0}
获取字符串的转义版本:
CN3dvlan202cCN3dUsers2cDC3daaa2cDC3dlocal
转义的版本无法正常工作,如果我将其替换为硬编码的未转义的版本,它将正常工作。
CN=vlan20,CN=Users,DC=aaa,DC=local
如何防止使用unlang来转义变量?
您无法阻止在v3中进行转义。在版本4中,存在“污染的”和“未污染的”值的概念,已污染的值被转义,并且“未污染的”值被逐字插入,但是我不确定LDAP模块扩展中是否已实现。
您可以使用LDAP模块中的组成员资格检查来执行xlat扩展所要实现的任务?
例如
if ("%{explode:&control:Tmp-String-0 ;}" > 0) {
foreach &control:Tmp-String-0 {
if (LDAP-Group == "%{control:Tmp-String-0}") {
update reply {
# VLAN-Attrs
}
}
}
}