I'm working on splitting up my Radiator config to use separate front-end and 
back-end instances, along the lines of the discussion in 
http://www.open.com.au/pipermail/radiator/2012-November/018733.html.  Each 
back-end instance (I will have quite a few!) needs a custom port to listen on, 
and of course it's very important that those ports don't collide by mistake.

1. What I'd like to do is define all the ports as GlobalVars in a single 
includable file, e.g.:
DefineGlobalVar AuthPortFoo 10999

and then reference them with e.g.:

# in back-end config
AuthPort %{GlobalVar:AuthPortFoo}

# in front-end config
<AuthBy RADIUS>
    Host 127.0.0.1
    AuthPort %{GlobalVar:AuthPortFoo}
</AuthBy>

The problem is that AuthBy RADIUS doesn't currently honor GlobalVars in 
AuthPort or AcctPort, so we get
*** Sending to 127.0.0.1 port 0 ....

instead of port 10999 as desired.

The below patch to AuthRADIUS.pm adds this capability.


2. While attempting to arrive at the GlobalVar solution above, I also tried:

<AuthBy RADIUS>
    Host 127.0.0.1
    AuthPort file:"%D/ports.foo"
</AuthBy>

but this doesn't work because Perl ends up adding an extra newline as it slurps 
up the file; even if the file itself contains only "10999", the value ends up 
being "10999\n".

(Interestingly Radiator is perfectly happy to ignore the newline when sending 
requests, but when the reply comes back from port 10999 it doesn't recognize it:
WARNING: Unknown reply received in AuthRADIUS for request 1 from 127.0.0.1:10999
)

I'm not sure how many people want to use file:"" for anything other than Perl 
hooks in any case, but the below patch to Configurable.pm solves this problem 
for me.


Hopefully you'll like these enough to include them; I prefer not to run 
anything in production that hasn't made it into an official patch set.  :)

Thanks,
David


diff -ur radiator-20130918/radiator/lib/perl5/Radius/AuthRADIUS.pm 
radiator-dmrz/radiator/lib/perl5/Radius/AuthRADIUS.pm
--- radiator-20130918/radiator/lib/perl5/Radius/AuthRADIUS.pm   2013-09-06 
07:58:34.000000000 -0500
+++ radiator-dmrz/radiator/lib/perl5/Radius/AuthRADIUS.pm       2013-09-18 
18:11:52.328802183 -0500
@@ -1001,6 +1001,7 @@
 
     my $port = $fp->code eq 'Accounting-Request' 
        ? $host->{AcctPort} : $host->{AuthPort};
+    $port = &Radius::Util::format_special($port);
     my $destport = &Radius::Util::pack_sockaddr_in($port, $addr);
     
     # Look for tight proxy routing loops
diff -ur radiator-20130918/radiator/lib/perl5/Radius/Configurable.pm 
radiator-dmrz/radiator/lib/perl5/Radius/Configurable.pm
--- radiator-20130918/radiator/lib/perl5/Radius/Configurable.pm 2013-09-06 
07:58:46.000000000 -0500
+++ radiator-dmrz/radiator/lib/perl5/Radius/Configurable.pm     2013-09-18 
17:36:53.482694780 -0500
@@ -253,6 +253,7 @@
            undef $/; 
            $value = <INCLUDE>; # Slurp the whole file
            $/ = $oldrs;
+           chomp $value;
        }
        else
        {
_______________________________________________
radiator mailing list
radiator@open.com.au
http://www.open.com.au/mailman/listinfo/radiator

Reply via email to