Re: LDAP-defined huntrgroups: docs, pointers, anything?

Jostein Fossheim via Freeradius-Users <[email protected]>
Newsgroups gmane.comp.freeradius.user
Message-ID <[email protected]>
On 2025-03-06 10:06, Jostein Fossheim via Freeradius-Users wrote:
> On 2025-03-05 23:31, Jostein Fossheim via Freeradius-Users wrote:
>>
>> On 05/03/2025 20:34, Alan DeKok wrote:
>>> On Mar 5, 2025, at 1:59 PM, Jostein Fossheim 
>>> <[email protected]> wrote:
>>>> Did some basic tests from the command line:
>>>>
>>>> I have defined one NAS/client in our lab-setup with IP 
>>>> 172.17.10.112, which is a member of two "huntgroups" (hostgroups in 
>>>> FreeIPA), and I can either get them in one query or two queries. 
>>>> Like this:
>>>>
>>>> # One query:
>>>> $ ldapsearch -LLLQ -o ldif_wrap=no 
>>>> "(radiusClientIPAddress=172.17.10.112)" memberOf | grep -v "^dn: "
>>>> memberOf: 
>>>> cn=radius_huntgroup,cn=hostgroups,cn=accounts,dc=lab,dc=skyfritt,dc=net 
>>>>
>>>> memberOf: cn=radius_huntgroup,cn=ng,cn=alt,dc=lab,dc=skyfritt,dc=net
>>>> memberOf: 
>>>> cn=radius_second_huntgroup,cn=hostgroups,cn=accounts,dc=lab,dc=skyfritt,dc=net
>>>> memberOf: 
>>>> cn=radius_second_huntgroup,cn=ng,cn=alt,dc=lab,dc=skyfritt,dc=net
>>>>
>>>> # Two queries:
>>>> $ "ldapsearch -LLLQ -o ldif_wrap=no 
>>>> "(radiusClientIPAddress=172.17.10.112)" fqdn | grep -v "^dn: "
>>>> fqdn: valkyrie3.lab.skyfritt.net
>>>>
>>>> $ ldapsearch -LLLQ -o ldif_wrap=no 
>>>> "(member=*valkyrie3.lab.skyfritt.net*)" cn | grep -v "^dn: "
>>>> cn: radius_huntgroup
>>>> cn: radius_second_huntgroup
>>>>
>>>> So huntgroups should be doable, after the model form the SQL-howto.
>>>    That's good news!
>> I see that the exact structure/syntax for doing ldap-queries in 
>> unlang is somewhat different from the ldapsearch tool, but goes via 
>> standard ldap-urls, like this bellow. I tested with a reply-message 
>> in the post-auth section that queries for my full name:
>>
>> update reply {
>>     Reply-Message += "Welcome to our realm 
>> %{ldap:ldap:///cn=accounts,dc=lab,dc=skyfritt,dc=net?displayName?sub?(uid=%{User-Name})}"
>>
>> }
>
> Almost there!
>
> I am able to sucessfully add the first HuntGroup from my query, so if 
> a NAS is only member of one ldap-group, everything seems to be ok now, 
> but I want multiple groups, if posible. I can do something like this:
>
>         update request {
>               Huntgroup-Name := 
> "%{ldap:ldap:///cn=accounts,dc=lab,dc=skyfritt,dc=net?cn?sub?(member=*valkyrie3.lab.skyfritt.net*)}"
>               Huntgroup-Name += 
> "%{ldap:ldap:///cn=accounts,dc=lab,dc=skyfritt,dc=net?cn?sub?(&(member=*valkyrie3.lab.skyfritt.net*)(!(cn=%{Huntgroup-Name})))}"
>         }
>
> Then Huntgroup-Name will contain both radius_huntgroup and 
> radius_second_huntgroup, but I am uncertain on how to expand this 
> trick into handeling more groups.
>
> The ldap-query seems only to report back one group, but it should 
> report back two. Can I handle this with a foreach, or is the 
> query-functionality limited here?
>

The following code handles HuntGroups in my setup, I have still not 
handled multiple HuntGroups, which should be doable, but I have the 
trick for showing two groups.

         update request {
             Huntgroup-Name := "testgroup"
             Tmp-String-0 := 
"%{ldap:ldap:///cn=accounts,dc=lab,dc=skyfritt,dc=net?fqdn?sub?(radiusClientIPAddress=%{NAS-IP-Address})}"
         }

         update request {
               Huntgroup-Name := 
"%{ldap:ldap:///cn=accounts,dc=lab,dc=skyfritt,dc=net?cn?sub?(member=*%{Tmp-String-0}*)}"
               Huntgroup-Name += 
"%{ldap:ldap:///cn=accounts,dc=lab,dc=skyfritt,dc=net?cn?sub?(&(member=*%{Tmp-String-0}*)(!(cn=%{Huntgroup-Name})))}"
         }

         update reply {
               Reply-Message += "NAS-IP-Address is: %{NAS-IP-Address}"
         }

         update reply {
             Reply-Message += "NAS-FQDN is: %{Tmp-String-0}"
         }

         foreach &Huntgroup-Name {
               update reply {
                     Reply-Message += "NAS is a member of Huntgroup: 
%{Foreach-Variable-0}"
               }
         }

I probably need some help with my query, from someone with more 
unlang-experience.



-- 
Best Regards,

Jostein Fossheim

-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.