Bug#557248: Further details
Petr Salinger pointed me at freebsd-hackedutils, which allows me to
decode a ktrace and report that my suspicions as to the cause are
correct. Here's the behavior of remove() under kfreebsd:
10316 tester CALL unlink(0x6dae88)
10316 tester NAMI
"/home/zack/monotone/monotone-0.45/tester_dir/tester-tests/cleanup-1/emptyhomedir"
10316 tester RET unlink -1 errno 1 Operation not permitted
10316 tester CALL write(0x2,0x7fffffffba50,0xa9)
10316 tester GIO fd 2 wrote 169 bytes
"[...]error: could not remove '[...]/emptyhomedir': Operation
not permitted"
Contrast what strace tells me under linux:
unlink("/home/zack/monotone/monotone-0.45/tester_dir/tester-tests/cleanup-1/emptyhomedir")
= -1 EISDIR (Is a directory)
rmdir("/home/zack/monotone/monotone-0.45/tester_dir/tester-tests/cleanup-1/emptyhomedir")
= 0
So, you basically just need to patch remove() in libc to try rmdir()
on EPERM as well as EISDIR.
zw
Reply to: