How to add VAP based on LDAP group membership
Thomas Stather
Thomas.Stather at mpimf-heidelberg.mpg.de
Mon Feb 22 14:01:09 CET 2016
Hi
I wrote a snippet in policy.d to create a VAP i can then use for the LDAP query:
mac-addr-regexp = '([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})'
# add a VAP "LDAP-MacAddress" to be used for ldap query
# Calling-Station-Id has already been normalized by the "rewrite-calling-station-id" function
add-mac-ldap {
if (&Calling-Station-Id && (&Calling-Station-Id =~ /^${policy.mac-addr-regexp}$/i)) {
update control {
LDAP-MacAddress := "%{tolower:%{1}:%{2}:%{3}:%{4}:%{5}:%{6}}"
}
updated
}
else {
noop
}
}
And then addid this VAP into the dictionary:
ATTRIBUTE LDAP-MacAddress 3000 string
The LDAP query that i use is:
if ("%{ldap1:ldap:///ou=hosts,dc=testdomain,dc=de?macAddress?sub?macAddress=%{LDAP-MacAddress}}") {
...
}
but its still not working. The log shows:
(53) post-auth {
(53) policy add-mac-ldap {
(53) if (&Calling-Station-Id && (&Calling-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})$/i)) {
(53) if (&Calling-Station-Id && (&Calling-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})$/i)) -> TRUE
(53) if (&Calling-Station-Id && (&Calling-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})$/i)) {
(53) update control {
(53) EXPAND %{tolower:%{1}:%{2}:%{3}:%{4}:%{5}:%{6}}
(53) --> a4:34:d9:22:da:5d
(53) LDAP-MacAddress := a4:34:d9:22:da:5d
(53) } # update control = noop
(53) [updated] = updated
(53) } # if (&Calling-Station-Id && (&Calling-Station-Id =~ /^([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})[^0-9a-f]?([0-9a-f]{2})$/i)) = updated
(53) ... skipping else for request 53: Preceding "if" was taken
(53) } # policy add-mac-ldap = updated
(53) if (Realm == "testdomain.de") {
(53) if (Realm == "testdomain.de") -> TRUE
(53) if (Realm == "testdomain.de") {
(53) if ("%{ldap1:ldap:///ou=hosts,dc=testdomain,dc=de?macAddress?sub?macAddress=%{LDAP-MacAddress}}") {
rlm_ldap (ldap1): Reserved connection (8)
(53) Performing search in "ou=hosts,dc=testdomain,dc=de" with filter "macAddress=", scope "sub"
(53) Waiting for search result...
(53) Search returned no results
rlm_ldap (ldap1): Released connection (8)
(53) EXPAND %{ldap1:ldap:///ou=hosts,dc=testdomain,dc=de?macAddress?sub?macAddress=%{LDAP-MacAddress}}
(53) -->
(53) if ("%{ldap1:ldap:///ou=hosts,dc=testdomain,dc=de?macAddress?sub?macAddress=%{LDAP-MacAddress}}") -> FALSE
(53) else {
(53) update reply {
(53) Aruba-User-Vlan = 500
(53) } # update reply = noop
(53) } # else = noop
(53) } # if (Realm == "testdomain.de") = noop
(53) ... skipping else for request 53: Preceding "if" was taken
(53) } # post-auth = updated
What am i doing wrong?
Best,
Thomas
Am 22.02.16 12:01 nachm. schrieb Thomas Stather <Thomas.Stather at mpimf-heidelberg.mpg.de>:
>
>
>
>
>
>
> Hi
>
> Thanks a lot Stefan Paetow and Michael Ströder for pointing me in the right direction :)
> Now i have another (but hopefully not difficult to solve) problem.
>
> I get "Search returned no results" ouput which is obvious, since the mac-address VAP (after "rewrite-calling-station-id") has the format:
>
> AA-BB-CC-DD-EE-FF
>
> but on the ldap-server, the format is
>
> aa:bb:cc:dd:ee:ff
>
> How can i rewrite the mac address only for this ldap query (and not globally)? I hope then it will work in my case.
>
>
> Best,
>
> Thomas
>
>
>
>
> Am 22.02.2016 um 10:25 schrieb Stefan Paetow:
>
>
> >
> > >
> > > if ("%{redundant_ldap:///ou=hosts,dc=testdomain,dc=de?macAddress?sub?macAddress=%{Calling-Station-Id}}") { update reply { Aruba-User-Vlan = "200" }}
> > >
> >
> > Try:if ("%{redundant_ldap:ldap:///ou=hosts,dc=testdomain,dc=de?macAddress?sub?macAddress=%{Calling-Station-Id}}") {::}Your original statement just refers to the ldap module, so it's seen as 'feed "///ou=hosts,..." to redundant_ldap', not 'feed "ldap:///ou=hosts,..."(ldap:///ou=hosts,...) to redundant_ldap'.:-)Stefan PaetowMoonshot Industry & Research Liaison Coordinatort: +44 (0)1235 822 125gpg: 0x3FCE5142xmpp: stefanp at jabber.dev.ja.net(javascript:main.compose()skype: stefan.paetow.janetjisc.ac.ukNetworkshop44, University of Manchester. Save the date: 22-24 March, 2016. #NWS44Jisc is a registered charity (number 1149740) and a company limited by guarantee which is registered in England under Company No. 5747339, VAT No. GB 197 0632 86. Jisc’s registered office is: One Castlepark, Tower Hill, Bristol, BS2 0JA. T 0203 697 5800.Jisc Collections and Janet Ltd. is a wholly owned Jisc subsidiary and a company limited by guarantee which is registered in England under Company No. number 2881024, VAT No. GB 197 0632 86. The registered office is: Lumen House, Library Avenue, Harwell, Didcot, Oxfordshire, OX11 0SG. T 01235 822200.
> >
> >
> >
> > -List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
> >
>
>
> -- Thomas StatherIT ServicesTel: +49 6221-486 628Fax: +49 6221-486 561------------------------------------------------------------------------Max Planck Institute for Medical Research (MPImF)Jahnstrasse 29, 69120 HeidelbergGermany
>
>
>
More information about the Freeradius-Users
mailing list