Freeradius-Proxied-To, radrelay and 2.0

Milan Holub holub at thenet.ch
Fri May 25 14:58:30 CEST 2007


Hi Alan&others,

On Mon, May 21, 2007 at 04:57:51PM +0200, Alan Dekok wrote:
> Milan Holub wrote:
> > I wonder whether there is any use for Freeradius-Proxied-To attribute
> > with freeradius 2.0.
> 
>   It should be there for backwards compatibility, but there are likely
> better ways of achieving the same result.
> 
> > Now when I'm relaying some accounting packets to my freeradius server
> > using radrelay binary from 1.1.6 and there is a packet which has
> > already "Freeradius-Proxied-To" attribute set then freeradius 2.0(cvs head)
> > just ignores it and tries to proxy the packet to remote home server.
> 
>   See src/modules/rlm_realm/rlm_realm.c  That code needs to be fixed.
> 
> > Would it be possible that 2.0 also honors the Freeradius-Proxied-To
> > attribute as in 1.X?
> 
>   That *is* the idea.
> 

==> my humble attempt to add the backwards compatibility for
Freeradius-Proxied-To attribute:

Index: src/modules/rlm_realm/rlm_realm.c
===================================================================
RCS file: /source/radiusd/src/modules/rlm_realm/rlm_realm.c,v
retrieving revision 1.66
diff -u -r1.66 rlm_realm.c
--- src/modules/rlm_realm/rlm_realm.c   20 Apr 2007 14:31:30 -0000      1.66
+++ src/modules/rlm_realm/rlm_realm.c   25 May 2007 12:48:08 -0000
@@ -64,6 +64,7 @@
        char *ptr;
        VALUE_PAIR *vp;
        REALM *realm;
+       lrad_ipaddr_t my_ipaddr;

         struct realm_config_t *inst = instance;

@@ -241,12 +242,18 @@
         */
        vp = pairfind(request->packet->vps, PW_FREERADIUS_PROXIED_TO);
        if (vp) {
-#if 0
                /*
                 *      FIXME: HOME SERVER
                 *
                 *      What the heck is this code doing, and why?
                 */
+               my_ipaddr.af = AF_INET;
+               my_ipaddr.ipaddr.ip4addr = vp->data.ipaddr;
+               if (home_server_find(&my_ipaddr, request->packet->dst_port)) {
+                       DEBUG2("    rlm_realm: Request not proxied due to Freeradius-Proxied-To");
+                       return 0;
+               }
+#if 0

                if (request->packet->code == PW_AUTHENTICATION_REQUEST &&
                    vp->vp_ipaddr == realm->home_auth->ipaddr.ipaddr.ip4addr.s_addr) {


==> I works for me well(incomming accounting/authorization packet containing
Freeradius-Proxied-To is no more sent to IP present as a value of the
attribute); this might not work for home servers which listen on
non-standard ports(due to dst_port passed in to home_server_find
function)

==> the patch might be useful for setups where you have some home_servers
already FR 2.0 but but some of them still FR 1.X

==> could you comment, Alan?


Milan Holub
holub (at) thenet (dot) ch

--------------------------------------
 TheNet-Internet Services AG,
 im Bernertechnopark, Morgenstr. 129
 CH-3018, Bern, Switzerland
 031 998 4333, Fax 031 998 4330
 http://www.thenet.ch
 http://wlan.thenet.ch
--------------------------------------



More information about the Freeradius-Users mailing list