[RADIATOR] Question: global variables

Heikki Vatiainen hvn at open.com.au
Thu Sep 30 11:48:39 UTC 2021

On 30.9.2021 10.32, Dubravko Penezic wrote:

> I wonder if $main::globals are valid only for one session/request or can
> be used for more then one session/request ?

They are valid for more than one session or request. If needed, they can 
be set again and the new value then persists. In short: they are valid 
forever from the moment they are defined or redefined.

For example, eap_peap.cfg in goodies defines CertDir global variable and 
the configuration then uses something like this:

    EAPTLS_CertificateFile %{GlobalVar:CertDir}/cert-srv.pem

The definition happens at radiusd startup and the actual use happens 
some time later.

> Also how to handle request for global variables which have dot in name ?
> something like
>   &main::setVariable($realm.'ip', $parts[0]);

Add the dot in the fixed string:

main::setVariable($realm.'.ip', $parts[0]);

Or use variable interpolation:

main::setVariable("$realm.ip", $parts[0]);

But I'd say your original idea of using a fixed string with single 
quotes (') makes it clear what is the variable name.

> according setVariable definition , first argument is key in
> $main::globals array .
> Something like
> %{GlobalVar:%R.ip}
> in AuthLog FILE return empty string.

Here's a test config that puts the above ideas together:

LogDir    	.
DbDir    	.
Trace     	4

<Client DEFAULT>
     Secret mysecret

     <AuthBy FILE>
         Filename %D/users

     PostAuthHook sub { my $realm = 'example.com'; my @parts = ('first', 
'second'); \
                       main::setVariable($realm.'.ip', $parts[0]); }

    <AuthLog FILE>
        Filename %L/auth.log
        SuccessFormat %l:%{GlobalVar:%R.ip}:OK

Trying to authenticate with 'radpwtst -user mikem at example.com' logs this 
in auth.log:

Thu Sep 30 14:44:46 2021:first:OK


Heikki Vatiainen
OSC, makers of Radiator
Visit radiatorsoftware.com for Radiator AAA server software

More information about the radiator mailing list