[RADIATOR] Realm processing via hook
Heikki Vatiainen
hvn at open.com.au
Wed Nov 15 15:39:55 UTC 2017
On 14.11.2017 19.54, Robert Blayzor wrote:
> I’m trying to figure out the best way to set a realm but need to fill in some blanks on the order of operation.
>
> Using a PreHandlerHook I am looking at the request and trying to set a Realm if one does not exist.
>
> My question is, if a Client has a DefaultRealm I assume that would appear in get_attr('Realm’) ?
get_attr() only looks for attributes that are in the object's attribute
list. If you use Realm, for example in <Handler Realm=example.com>, what
happens is that the username is split with '@' as field delimiter and
the first field is used. In other words, Realm is not an attribute but a
value derived from the username.
> I have clients that cannot have no DefaultRealm so need to set them based on other attribute clues so..
> Second question is, if RADIUS request comes in with user at realm in the UserName, get_attr(‘Realm’) should be set with user supplied realm ?
Since get_attr('Realm') does not work, to get the realm part from the
username you need to do something like below (using shorthand syntax):
> If no value is returned in get_attr('Realm’) I’m trying to set the realm based on clues from another attribute; ie:
>
>
> my $p = ${$_[0]};
> #
# Split once from the first @
my $username = $p->getUserName();
my ($usernamepart, $realmpart) = split(/@/, $username, 2);
if (defined $realmpart && length($realmpart) > 0)
$p->add_attr('X-Realm', $realmpart)
else
# No realm part or it's zero length
$p->add_attr('X-Realm', ...); # Get value like below
> unless (my $r = $p->get_attr('Realm')) {
> if ($p->get_attr('Connect-Info') =~ /([^\.]+\.[^\.]+)$/) {
> $p->add_attr('Realm') = $1;
> }
> }
>
>
> Does the above make sense or should I be using change_attr instead of add_attr for the realm?
If you do something like above, you can do <Handler X-Realm=...>. Since
there's no special X-Realm check item, this returns the attribute added
above.
Adding or changing attribute called 'Realm' will not work because Realm
gets its value from User-Name.
If you want to continue using Realm and want to update the User-Name,
call $p->changeUserName($newname) to update request's attribute cache
too. Both getUserName and changeUserName utilise attribute caching so
it's best to access the User-Name attribute with these two methods.
Thanks,
Heikki
--
Heikki Vatiainen <hvn at open.com.au>
Radiator: the most portable, flexible and configurable RADIUS server
anywhere. SQL, proxy, DBM, files, LDAP, TACACS+, PAM, Active Directory,
EAP, TLS, TTLS, PEAP, WiMAX, RSA, Vasco, Yubikey, HOTP, TOTP,
DIAMETER etc. Full source on Unix, Windows, MacOSX, Solaris, VMS, etc.
More information about the radiator
mailing list