Auth failed accounts and write to SQL database
Matthew Newton
mcn at freeradius.org
Wed Mar 15 09:38:01 UTC 2023
On 15/03/2023 06:21, Steven Walters wrote:
> I am not sure what I am trying dp=o is possible but lets try.
Most things are possible...
> I have the following statement under authenticate to accept "guest" users
> even if the password is correct.
>
> Auth-Type PAP {
> pap{
> reject=1
> }
> if (reject && (User-Name == "guest")) {
> accept
> }
> }
Don't do it in authenticate{}. Update authorize{} instead.
if (&User-Name == "guest") {
update control {
&Auth-Type := Accept
}
}
> Under post-auth I write failed requests to postauth_table. In the case of
> a "guest" user's password being incorrect, it will accept the
> authentication and not write the record to the postauth_table.
OK. Though it should write to radpostauth for all authentications,
unless you've commented "sql" out of the "Post-Auth-Type REJECT" section.
> What I require is that in the case of the password being incorrect for a
> "guest" user, I need to accept the request but write a record to the
> postauth_table (reply field) as access-reject. This is that we have a
> record of access-rejects for "guest" users but still allow them to connect
> with limited connectivity.
Hmm, OK. Confusing as your records will show someone wasn't allowed on,
but actually they were. I'm not sure why you would want to do this - you
already know that any authentications with username "guest" are
permitted because of a different criteria from other users, so you can
just query the database on that basis.
> I thought of using a variable, like below, to write the value to the reply
> field in the postauth_table but it seems one can't do much under Auth-Type
> PAP.
No, don't do this sort of thing in authenticate{}.
The clearest is probably to add a new Auth-Type column to the
radpostauth table, then update the query to include
'%{control:Auth-Type}' as well, then you'll see "pap" or "accept", which
makes it much clearer what happened.
Otherwise if you really want to log an "incorrect" value you could add
something like this to the above "update" section
if (&User-Name == "guest") {
update control {
&Auth-Type := Accept
&Tmp-String-1 := "Access-Reject"
}
}
Then update the postauth query to log
'%{%{control:Tmp-String-1}:-%{reply:Packet-Type}}'
instead of just
'%{reply:Packet-Type}'
i.e. if the Tmp-String-1 attribute is set, log that, otherwise log
reply:Packet-Type as usual.
I would just add a new column and be entirely clear about it, though.
--
Matthew
More information about the Freeradius-Users
mailing list