I was playing with bind9 and got the typical:
On FreeBSD systems, the server logs error messages like "fcntl(8,
F_SETFL, 4): Inappropriate ioctl for device". This is due to
a bug in the FreeSBD /dev/random device. The bug has been
reported to the FreeBSD maintainers. Versions of OpenBSD prior
to 2.8 have a similar problem.
I took a look at what OpenBSD did and it looks like they just
no-op'd out the ioctl:
http://www.openbsd.org/cgi-bin/cvsweb/src/sys/dev/rnd.c?r1=1.40&r2=1.41
I have a patch that seems to shut bind up, but I'm not 100% sure
this is the right fix, as it looks like it just fakes the nonblocking
access to the random devices.
Here's my patch (I can probably generate this for alpha):
Index: mem.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/i386/mem.c,v
retrieving revision 1.79.2.4
diff -u -u -r1.79.2.4 mem.c
--- mem.c 2000/08/04 22:31:07 1.79.2.4
+++ mem.c 2000/11/13 23:53:43
@@ -57,6 +57,7 @@
#include <sys/proc.h>
#include <sys/random.h>
#include <sys/signalvar.h>
+#include <sys/filio.h>
#include <sys/uio.h>
#include <machine/frame.h>
@@ -465,8 +466,20 @@
* selecting and inspecting which interrupts are used in the muck
* gathering business.
*/
- if (cmd != MEM_SETIRQ && cmd != MEM_CLEARIRQ && cmd != MEM_RETURNIRQ)
+ switch (cmd) {
+ case FIOASYNC:
+ /* rnd has no async flag in softc so this is really a no-op. */
+ /* FALLTHROUGH */
+ case FIONBIO:
+ /* Handled in the upper FS layer. */
+ return (0);
+ case MEM_SETIRQ:
+ case MEM_CLEARIRQ:
+ case MEM_RETURNIRQ:
+ break;
+ default:
return (ENOTTY);
+ }
/*
* Even inspecting the state is privileged, since it gives a hint
Did I miss part of the OpenBSD delta? This looks too easy. :(
--
-Alfred Perlstein - [[EMAIL PROTECTED]|[EMAIL PROTECTED]]
"I have the heart of a child; I keep it in a jar on my desk."
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message