John Morrissey wrote:
When this happens, a short packet can be written to a detail file, causing this assertion failure:
ASSERT FAILED detail.c[573]: data->state == STATE_QUEUED
OK. That should be changed to a conditional check.
The writes in rlm_detail's do_detail() are unchecked, so failed writes allow a successful Accounting-Response to be returned to the NAS even though the detail is incomplete and won't be processed by the detail reader.
It seems the best way around this is for do_detail() to keep track of the number of bytes it's written, ftruncate() the detail file on a short write, and return RLM_MODULE_FAIL. fprintf() would need to be replaced with separate sprintf() and fwrite() in order to keep track of the number of bytes written for the current packet.
That should be fixed, too.
Does this course of action make sense? I can work on this, but it may be a few weeks before I have more time.
I'll see if I can fix the assert for 2.1.9. It should treat that condition as an EOF, and delete the file. Alan DeKok.