Accoiunting proxy Issue
Richard J Palmer
richard at merula.net
Mon Nov 27 15:08:45 CET 2017
Thanks Alan
That sounds sensible - I'll have a look at this - it looks very
sensible.
It all seems to make sense but if I have any questions I'll ask but
that looks to be enough to me
Thanks again for your help
Richard
On Monday 27/11/2017 at 1:40 pm, Alan DeKok wrote:
> On Nov 26, 2017, at 3:28 PM, Richard J Palmer <richard at merula.net>
> wrote:
>>
>> However the firebrick does not provide the username in interim updates
>> or stop messages - which means that the proxy based on realm fails
>> (the username / realm is not there).
>
> That's just stupid. I mean, how hard is to to follow a spec which
> was written 20 years ago?
>
>>
>> Is there a way using unlang to proxy these - I was looking at the
>> lines in detail - we do also have the records in our SQL server and
>> from the AcctSessionID I can look up the username which is possible
>>
>> I do have one other possibility. The Interim updates have a field:
>> Chargeable-User-Identity = "XXXXX"
>> Which I can set as part of the auth process (I already add some
>> fields in post_proxy). Is there a way in FreeRadius to inspect this
>> field in a accounting packet and if set to 'resellerx' set the packet
>> to be sent to their proxy / home server ?
>
> You can do anything in "unlang".
>
> - in "post-auth", create a Chargeable-User-Identity
> - store the Chargeable-User-Identity and User-Name into the radacct
> table via an SQL statement
>
> - in "preacct", look up Chargeable-User-Identity in SQL, and get the
> User-Name
>
>
> The simple way is to just mangle the incoming packet (no one cares
> about this by the time post-auth is called):
>
> post-auth {
> ...
> ... create Chargeable-User-Identity in the reply ...
> ...
>
> update request {
> Acct-Status-Type = Start # pretend we're starting a session
> Chargeable-User-Identity := &reply:Chargeable-User-Identity
> ... anything else you need...
> }
> sql.accounting # store the packet into radacct
> ...
> }
>
> and then in preacct:
>
> preacct {
> ...
>
> if (!User-Name && Chargeable-User-Identity) {
> update request {
> User-Name := "%{sql:SELECT username from radacct where cui =
> %{Chargeable-User-Identity}
> }
>
> }
>
> ... and proxying, suffix, etc.
>
> }
>
> You'll need to add a ''cui' column to the radacct table. And,
> update the accounting 'start' query to store Chargeable-User-Identity
> in the 'cui' column.
>
> But that's about it. The details matter, but it's not *too*
> complex.
>
> Alan DeKok.
>
>
> -
> List info/subscribe/unsubscribe? See
> http://www.freeradius.org/list/users.html
More information about the Freeradius-Users
mailing list