openbsd-ports/net/arpcatch/patches/patch-aa
kevlo 1d3d78add4 This is a 4.4BSD program that implements, in userland, third-party
proxy ARP. In a nutshell, this lets you proxy-ARP an arbitrary IP
address to an arbitrary MAC address, from any machine on the network.
This is useful if your router doesn't do proxy ARP, or does it only
in an all-or-none fashion.

This code will not work outside of 4.4BSD (it relies on BPF). Furthermore,
it won't run on most 4.4BSD operating systems, because a problem with the
standard BPF implementation (try spoofing your source ethernet frame
address on NetBSD).

See: http://www.enteract.com/~tqbf
2000-01-21 15:39:59 +00:00

147 lines
3.0 KiB
Plaintext

diff -u Makefile.orig Makefile
--- Makefile.orig Tue Aug 19 02:54:00 1997
+++ Makefile Fri Jan 21 06:02:32 2000
@@ -1,4 +1,5 @@
-CFLAGS= -g
+CC=gcc
+CFLAGS= -g -Wall
LDFLAGS=
LIBS= -lpcap
TARGET= aproxyd
diff -u arpcatch.c.orig arpcatch.c
--- arpcatch.c.orig Fri Aug 22 06:57:01 1997
+++ arpcatch.c Fri Jan 21 07:12:04 2000
@@ -37,6 +37,7 @@
}
}
+ printf("Starting on %s interface\n",device);
if(!(at = read_config(configfile))) {
perror("config file read");
exit(errno);
@@ -50,6 +51,7 @@
read_loop(fd, at);
perror("read");
+return 1;
}
/* needs cleaning up */
@@ -63,7 +65,6 @@
struct ether_addr *ea;
struct ether_arp *ah;
- struct in_addr foo;
for(;;) {
struct in_addr ia;
@@ -129,7 +130,7 @@
fd = bpf_open(device);
if(fd < 0) {
- perror("bpf open");
+ fprintf(stderr,"Error initializing bpf filter\nExiting..\n");
exit(errno);
}
diff -u arpcatch.h.orig arpcatch.h
--- arpcatch.h.orig Tue Aug 19 03:51:02 1997
+++ arpcatch.h Fri Jan 21 07:08:36 2000
@@ -5,6 +5,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <syslog.h>
@@ -12,6 +13,7 @@
#include <limits.h>
#include <fcntl.h>
#include <assert.h>
+#include <ctype.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/param.h>
@@ -25,8 +27,6 @@
#include <net/bpf.h>
#include <net/if.h>
-#include <net/ethernet.h>
-#include <net/if_arp.h>
#include <netinet/if_ether.h>
#include "list.h"
@@ -76,5 +76,12 @@
int bpf_promisc(int, int);
table_t *read_config(char *);
+void chop(char *);
+void *NEW(const int);
+u_long resolve(char *);
+
+int arp_send(int, u_long *, u_long *, struct ether_addr *, struct ether_addr *);
+
+
#endif
diff -u bpf.c.orig bpf.c
--- bpf.c.orig Tue Aug 19 03:38:20 1997
+++ bpf.c Fri Jan 21 06:53:13 2000
@@ -47,21 +47,26 @@
do {
snprintf(file, PATH_MAX, "/dev/bpf%d", i++);
- if((fd = open(file, O_RDWR)) < 0)
- continue;
- } while(errno == EBUSY && fd < 0);
+ fd = open(file, O_RDWR);
+ } while(fd < 0 && errno == EBUSY);
- if(fd < 0)
+ if(fd < 0) {
+ perror("bpf open");
return(-1);
+ }
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, device, 15);
- if(bpf_setbuf(fd, DEFAULT_BUFLEN) < 0)
+ if(bpf_setbuf(fd, DEFAULT_BUFLEN) < 0) {
+ perror("bpf setbuf");
return(-2);
+ }
- if(ioctl(fd, BIOCSETIF, (char *) &ifr) < 0)
+ if(ioctl(fd, BIOCSETIF, (char *) &ifr) < 0) {
+ perror("bpf ioctl");
return(-3);
+ }
return(fd);
}
diff -u config.c.orig arpcatch/config.c
--- config.c.orig Mon Nov 24 16:18:54 1997
+++ config.c Fri Jan 21 06:07:06 2000
@@ -1,7 +1,6 @@
#include "arpcatch.h"
#include <sys/types.h>
#include <sys/socket.h>
-#include <net/ethernet.h>
static list_t *add_host(char *buffer, list_t *hosts);
static int add_proxy(char *buffer, table_t *at);
diff -u libtqbf.c.orig arpcatch/libtqbf.c
--- libtqbf.c.orig Tue Aug 19 02:02:13 1997
+++ libtqbf.c Fri Jan 21 06:55:56 2000
@@ -349,8 +349,6 @@
int jday (int month, int day, int year) {
int c, ya, jd;
- int brit_jd = 2361222;
-
if (month > 2)
month -= 3;
else