dealing with 'corrupt' detail file
Alan DeKok
aland at deployingradius.com
Thu Jun 4 08:51:50 CEST 2009
A.L.M.Buxey at lboro.ac.uk wrote:
> okay. so i've been preaching that people use eg
> the buffered-sql virtual machine rather than do accounting
> DB entries 'live' - therefore giving the admin better
> FR performance with slower DBs etc...
Yup.
> however, I've been approached today by someone who has a
> rather large detail file (few gigs)
Bad. Bad, bad, bad. They should be writing detail files per day, or
per hour. If they're using a version of the server from the last 6
months, it supports file globbing, which helps with this.
> that has 'corrupt'
> records in it... eg entries with no Acct-Status-Type
> set (broken NAS, duff RADIUS server or possibly
> attrbute filtering along the path)...
But... that can happen no matter what the NAS. This needs to be
handled in any case.
> anyway, my first
> though was edit the accouting stanza of buffered-sql
> so that it looks like
>
> if(Acct-Status-Type){
> sql
> }
>
> instead of just calling sql and borking over the
> lack of Accounting status in the packet.
>
> but, of course, whilst this stop the bork, it also
> stops the ingestion of the detail file as it sticks
> at that point, doesnt flush that entry and move on...
> so...can anyone info me the magic or steps to bypass
> this entry in the detail file so it can continue
> working on it? the code itself seems to need to go
> through something before flushing the packet..
Easy. The accounting section has to be told "it's OK to continue":
if (broken nas) {
ok
}
else {
sql
}
Or maybe better:
sql
if (noop || invalid) {
ok
}
The module returns FAIL if it can't write to SQL, OK if it succeeded.
It returns INVALID if there's no Acct-Status-Type, and NOOP for unknown
Acct-Status-Type or zero session length.
> which reminds me...any best practice from the
> FR community regarding the detail file and
> the aforementioned protection from duff NAS etc
Write small detail files, and handle failure codes from SQL as above.
> (I've already got, on my list, use Calling-Station-Id
> instead of NAS-Port for the unique function as many
> NAS use the same port for every accounting packet :-|)
Create a patch, and send it to the list via git format-patch. "Best
practices" really need to go into the server configuration. Anything
else is too frustrating for the end users.
Alan DeKok.
More information about the Freeradius-Users
mailing list