Allow write access to bpf in pcap_open()

Frank Denis dragonfly at pureftpd.org
Sun Oct 17 12:53:38 PDT 2004


  Hello.
  
  libpcap as shipped in DragonFly 1.1-current opens the descriptor with
O_RDONLY.

  This is not consistent with most other operating systems. Linux doesn't
use bpf but it's possible to inject packets through the descriptor. Same
thing on Solaris. NetBSD and OpenBSD made local changes to pcap_open() a
long time ago to allow this.

  It would be nice if the same change was introduced in DragonFly as well.
It would unbreak things like ucarp.

  Trivial patch follows.

--- contrib/libpcap-0.8.3/pcap-bpf.c.orig	2004-10-17 21:40:36.000000000 +0200
+++ contrib/libpcap-0.8.3/pcap-bpf.c	2004-10-17 21:42:51.000000000 +0200
@@ -467,7 +467,9 @@
 	 */
 	do {
 		(void)snprintf(device, sizeof(device), "/dev/bpf%d", n++);
-		fd = open(device, O_RDONLY);
+		fd = open(device, O_RDWR);
+		if (fd < 0 && errno == EACCES)
+			fd = open(device, O_RDONLY);
 	} while (fd < 0 && errno == EBUSY);
 
 	/*





More information about the Submit mailing list