Import new version of rarpd from the BPF 1.1 distribution from LBL.

Obtained from: LBL, BPF 1.1 distribution
This commit is contained in:
Bill Paul 1996-11-18 21:53:21 +00:00
parent 9636a39a61
commit 4bef56e86c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/cvs2svn/branches/LBL/; revision=19855
4 changed files with 792 additions and 291 deletions

View File

@ -1,9 +1,18 @@
# from: @(#)Makefile 5.8 (Berkeley) 7/28/90
# $Id: Makefile,v 1.1 1994/08/08 01:03:57 wollman Exp $
# @(#) $Header: Makefile,v 1.12 93/07/19 20:07:30 leres Exp $ (LBL)
PROG= rarpd
MAN8= rarpd.8
SRCS= rarpd.c ether_addr.c
CFLAGS+= -DTFTP_DIR=\"/tftpboot\"
CFLAGS+=-g
.if !defined(sunos3) && !defined(sunos4)
SRCS= rarpd.c etherent.c
BINDIR=/usr/local/sbin
CFLAGS+=-Wall
.endif
.ifdef sunos3
CFLAGS+=-W -DSUNOS3
.endif
.ifdef sunos4
CFLAGS+=-W -DSUNOS4
.endif
MAN8= rarpd.0
.include <bsd.prog.mk>

224
usr.sbin/rarpd/etherent.c Normal file
View File

@ -0,0 +1,224 @@
/*
* Copyright (c) 1990, 1993 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that: (1) source code distributions
* retain the above copyright notice and this paragraph in its entirety, (2)
* distributions including binary code include the above copyright notice and
* this paragraph in its entirety in the documentation or other materials
* provided with the distribution, and (3) all advertising materials mentioning
* features or use of this software display the following acknowledgement:
* ``This product includes software developed by the University of California,
* Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
* the University nor the names of its contributors may be used to endorse
* or promote products derived from this software without specific prior
* written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef lint
static char rcsid[] =
"@(#) $Header: etherent.c,v 1.4 96/06/14 20:34:25 leres Exp $ (LBL)";
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#ifndef ETHERS_FILE
#define ETHERS_FILE "/etc/ethers"
#endif
struct etherent {
u_char addr[6];
char name[122];
};
static FILE *ether_fp = NULL;
/* Hex digit to integer. */
static inline int
xdtoi(c)
int c;
{
if (isdigit(c))
return c - '0';
else if (islower(c))
return c - 'a' + 10;
else
return c - 'A' + 10;
}
static inline int
skip_space(f)
FILE *f;
{
int c;
do {
c = getc(f);
} while (isspace(c) && c != '\n');
return c;
}
static inline int
skip_line(f)
FILE *f;
{
int c;
do
c = getc(f);
while (c != '\n' && c != EOF);
return c;
}
static struct etherent *
next_etherent(fp)
FILE *fp;
{
register int c, d, i;
char *bp;
static struct etherent e;
static int nline = 1;
top:
while (nline) {
/* Find addr */
c = skip_space(fp);
if (c == '\n')
continue;
/* If this is a comment, or first thing on line
cannot be etehrnet address, skip the line. */
else if (!isxdigit(c))
c = skip_line(fp);
else {
/* must be the start of an address */
for (i = 0; i < 6; i += 1) {
d = xdtoi(c);
c = getc(fp);
if (c != ':') {
d <<= 4;
d |= xdtoi(c);
c = getc(fp);
}
e.addr[i] = d;
if (c != ':')
break;
c = getc(fp);
}
nline = 0;
}
if (c == EOF)
return NULL;
}
/* If we started a new line, 'c' holds the char past the ether addr,
which we assume is white space. If we are continuing a line,
'c' is garbage. In either case, we can throw it away. */
c = skip_space(fp);
if (c == '\n') {
nline = 1;
goto top;
}
else if (c == '#') {
(void)skip_line(fp);
nline = 1;
goto top;
}
else if (c == EOF)
return NULL;
/* Must be a name. */
bp = e.name;
/* Use 'd' to prevent buffer overflow. */
d = sizeof(e.name) - 1;
do {
*bp++ = c;
c = getc(fp);
} while (!isspace(c) && c != EOF && --d > 0);
*bp = '\0';
if (c == '\n')
nline = 1;
return &e;
}
/* Open/rewind the ethers files; returns 1 if file was reopened */
int
ether_rewind()
{
struct stat st;
static long mtime = 0, ctime = 0;
if (ether_fp != NULL) {
if (fstat(fileno(ether_fp), &st) < 0 ||
mtime != st.st_mtime || ctime != st.st_ctime ||
fseek(ether_fp, 0L, SEEK_SET) < 0) {
fclose(ether_fp);
ether_fp = NULL;
}
}
if (ether_fp == NULL) {
ether_fp = fopen(ETHERS_FILE, "r");
if (ether_fp == NULL)
return (-1);
if (fstat(fileno(ether_fp), &st) < 0) {
fclose(ether_fp);
ether_fp = NULL;
return (-1);
}
mtime = st.st_mtime;
ctime = st.st_ctime;
return (1);
}
return (0);
}
/* Map an ethernet address to a name; returns 0 on success, else 1. */
int
ether_ntohost(name, ea)
register char *name;
register u_char *ea;
{
register struct etherent *ep;
if (ether_rewind() < 0)
return (1);
while ((ep = next_etherent(ether_fp)) != NULL)
if (bcmp(ep->addr, ea, 6) == 0) {
strcpy(name, ep->name);
return (0);
}
return (1);
}
/* Map an ethernet name to an address; returns 0 on success, else 1. */
int
ether_hostton(name, ea)
register char *name;
register u_char *ea;
{
register struct etherent *ep;
if (ether_rewind() < 0)
return (1);
while ((ep = next_etherent(ether_fp)) != NULL)
if (strcmp(ep->name, name) == 0) {
bcopy(ep->addr, ea, 6);
return (0);
}
return (1);
}

View File

@ -1,7 +1,7 @@
.\" @(#) $Header: tcpdump.1,v 1.30 90/10/11 19:35:03 mccanne Exp $ (LBL)
.\" @(#) $Header: rarpd.8,v 1.3 93/07/19 19:34:24 leres Exp $ (LBL)
.\"
.\" Copyright (c) 1988-1990 The Regents of the University of California.
.\" All rights reserved.
.\" Copyright (c) 1990, 1991, 1993 The Regents of the University of
.\" California. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that: (1) source code distributions
@ -19,14 +19,14 @@
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
.\"
.TH RARPD 8 "26 Oct 1990"
.TH RARPD 8 "19 Jul 1993"
.SH NAME
rarpd \- Reverse ARP Daemon
.SH SYNOPSIS
.na
.B rarpd
[
.B \-af
.B \-afv
]
[
.I interface
@ -70,6 +70,9 @@ If `-a' is omitted, an interface must be specified.
.TP
.B \-f
Run in the foreground.
.TP
.B \-v
Enable verbose sysloging.
.SH FILES
/etc/ethers
@ -83,10 +86,7 @@ bpf(4)
RFC 903: Finlayson, R.; Mann, T.; Mogul, J.C.; Theimer, M. Reverse Address
Resolution Protocol. 1984 June; 4 p.
.SH AUTHORS
Craig Leres (leres@helios.ee.lbl.gov) and
Steven McCanne (mccanne@helios.ee.lbl.gov).
Craig Leres (leres@ee.lbl.gov) and
Steven McCanne (mccanne@ee.lbl.gov).
Lawrence Berkeley Laboratory, University of California, Berkeley, CA.
.SH BUGS
You must have the Berkeley Packet Filter configured into your kernel
in order to use this program. This isn't really a bug, but it isn't
exactly a feature either.

File diff suppressed because it is too large Load Diff