Nicolas wrote:
we need close outfd right before "return RLM_MODULE_FAIL;" at line 236.
.... or get the fixes from CVS head which solve many other problems in rlm_detail. (for example file renamed or unlinked by another program)
Everyone will save a considerable amount of time if you could backport the changes from CVS to 1.1.2, run tests to check the new code, and send unified diff to the list.
i try to examine snapshot-20060616 btw, there are old bug in rlm_detail.c. 279: if ((outfd = open(buffer, O_WRONLY | O_APPEND | O_CREAT, 280: inst->detailperm)) < 0) { 281: radlog(L_ERR, "rlm_detail: Couldn't open file %s: %s", 282: buffer, strerror(errno)); 283: return RLM_MODULE_FAIL; 284: } 286: /* 287: * If we fail to aquire the filelock in 80 tries 288: * (approximately two seconds) we bail out. 289: */ 290: if (inst->locking) { 291: lseek(outfd, 0L, SEEK_SET); 292: if (rad_lockfd_nonblock(outfd, 0) < 0) { 293: close(outfd); 294: tv.tv_sec = 0; 295: tv.tv_usec = 25000; 296: select(0, NULL, NULL, NULL, &tv); 297: lock_count++; 298: continue; 299: } open() executed once. but while we failed to get lock at first try, close(outfd) executed and all the subsequent attempts to lock file fails i comment line 293 out. After this i havn't got any messages like "Error: rlm_detail: Failed to aquire filelock for /var/log/radius/radacct/detail, giving up" in log! so now rlm_detail with "lock=yes" and radrelay all works fine. Mike.