diff options
author | dm <dm@cvs.openbsd.org> | 1996-03-02 03:01:50 +0000 |
---|---|---|
committer | dm <dm@cvs.openbsd.org> | 1996-03-02 03:01:50 +0000 |
commit | 1bbdd14bf7171a908ef69a509294f1916eb46e20 (patch) | |
tree | ad138be58ac7df3fd9b8ec46b553c6a4f4ba74ed /usr.sbin/ypserv/stdethers | |
parent | b01aa3aca07057b14071da6d0ee38ddbf498045d (diff) |
Added in stuff from 960121. Fixed several bugs in ypxfr.
Diffstat (limited to 'usr.sbin/ypserv/stdethers')
-rw-r--r-- | usr.sbin/ypserv/stdethers/Makefile | 8 | ||||
-rw-r--r-- | usr.sbin/ypserv/stdethers/stdethers.8 | 55 | ||||
-rw-r--r-- | usr.sbin/ypserv/stdethers/stdethers.c | 194 |
3 files changed, 257 insertions, 0 deletions
diff --git a/usr.sbin/ypserv/stdethers/Makefile b/usr.sbin/ypserv/stdethers/Makefile new file mode 100644 index 00000000000..bb999c34956 --- /dev/null +++ b/usr.sbin/ypserv/stdethers/Makefile @@ -0,0 +1,8 @@ +# from: @(#)Makefile 5.8 (Berkeley) 7/28/90 +# $Id: Makefile,v 1.1 1996/03/02 03:01:36 dm Exp $ + +PROG= stdethers +MAN= stdethers.8 +CFLAGS+= -DNTOA_FIX + +.include <bsd.prog.mk> diff --git a/usr.sbin/ypserv/stdethers/stdethers.8 b/usr.sbin/ypserv/stdethers/stdethers.8 new file mode 100644 index 00000000000..5e2ef023c7d --- /dev/null +++ b/usr.sbin/ypserv/stdethers/stdethers.8 @@ -0,0 +1,55 @@ +.\" Copyright (c) 1995 Mats O Jansson <moj@stacken.kth.se> +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Mats O Jansson +.\" 4. The name of the author may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $Id: stdethers.8,v 1.1 1996/03/02 03:01:37 dm Exp $ +.\" +.Dd December 2, 1995 +.Dt STDETHERS 8 +.Os +.Sh NAME +.Nm stdethers +.Nd a YP filter program +.Sh SYNOPSIS +.Nm /usr/sbin/stdethers +.Op Ar file +.Sh DESCRIPTION +.Nm Stdethers +is used to get ride of some unwanted information in file or stdin. This +program is used by YP when creating some YP maps. +.Pp +.Pp +The options are as follows: +.Bl -tag -width indent +.It Ar file +Use this file as input instead of stdin. +.El +.Sh SEE ALSO +.Xr ypserv 8 +.Sh AUTHOR +Mats O Jansson <moj@stacken.kth.se> diff --git a/usr.sbin/ypserv/stdethers/stdethers.c b/usr.sbin/ypserv/stdethers/stdethers.c new file mode 100644 index 00000000000..a1bd2e8812a --- /dev/null +++ b/usr.sbin/ypserv/stdethers/stdethers.c @@ -0,0 +1,194 @@ +/* + * Copyright (c) 1995 Mats O Jansson <moj@stacken.kth.se> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Mats O Jansson + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef LINT +static char rcsid[] = "$Id: stdethers.c,v 1.1 1996/03/02 03:01:37 dm Exp $"; +#endif + +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if.h> +#include <netinet/in.h> +#include <netinet/if_ether.h> +#include <stdio.h> +#include <ctype.h> + +char *ProgramName = "stdethers"; + +extern int ether_line(char *, struct ether_addr *, char *); +extern char *ether_ntoa(struct ether_addr *); + +#ifndef NTOA_FIX +#define NTOA(x) (char *)ether_ntoa(x) +#else +#define NTOA(x) (char *) working_ntoa((u_char *) x) + +/* As of 1995-12-02 NetBSD and OpenBSD has an SunOS 4 incompatible ether_ntoa. + The code in usr/lib/libc/net/ethers seems to do the correct thing + when asking YP but not when returning string from ether_ntoa. + */ + +char * +working_ntoa(e) + u_char *e; +{ + static char a[] = "xx:xx:xx:xx:xx:xx"; + + sprintf(a, "%x:%x:%x:%x:%x:%x", + e[0], e[1], e[2], e[3], e[4], e[5]); + return a; +} +#endif + +static int read_line(fp, buf, size) +FILE *fp; +char *buf; +int size; +{ + int done = 0; + + do { + while (fgets(buf, size, fp)) { + int len = strlen(buf); + done += len; + if (len > 1 && buf[len-2] == '\\' && + buf[len-1] == '\n') { + int ch; + buf += len - 2; + size -= len - 2; + *buf = '\n'; buf[1] = '\0'; + /* + * Skip leading white space on next line + */ + while ((ch = getc(fp)) != EOF && + isascii(ch) && isspace(ch)) + ; + (void) ungetc(ch, fp); + } else { + return done; + } + } + } while (size > 0 && !feof(fp)); + + return done; +} + +int +main (argc,argv) +int argc; +char *argv[]; +{ + FILE *data_file; + char data_line[1024]; + int usage = 0; + int line_no = 0; + int len; + char *p,*k,*v; + struct ether_addr eth_addr; + char hostname[256]; + + if (argc > 2) { + usage++; + } + + if (usage) { + fprintf(stderr, + "usage: %s [file]\n", + ProgramName); + exit(1); + } + + if (argc == 2) { + data_file = fopen(argv[1], "r"); + if (data_file == NULL) { + fprintf(stderr, + "%s: can't open %s\n", + ProgramName, + argv[1]); + exit(1); + } + } else { + data_file = stdin; + } + + while (read_line(data_file,data_line,sizeof(data_line))) { + + line_no++; + len = strlen(data_line); + + if (len > 0) { + if (data_line[0] == '#') + continue; + } + + /* + * Check if we have the whole line + */ + + if (data_line[len-1] != '\n') { + if (argc == 2) { + fprintf(stderr, + "line %d in \"%s\" is too long", + line_no, argv[1]); + } else { + fprintf(stderr, + "line %d in \"stdin\" is too long", + line_no); + } + } else { + data_line[len-1] = '\0'; + } + + p = (char *) &data_line; + + k = p; /* save start of key */ + while (!isspace(*p)) { p++; }; /* find first "space" */ + while (isspace(*p)) { p++; }; /* move over "space" */ + + v = p; /* save start of value */ + while(*p != '\0') { p++; }; /* find end of string */ + + if (ether_line(data_line, ð_addr, hostname) == 0) { + fprintf(stdout, "%s\t%s\n", + NTOA(ð_addr), + hostname); + } else { + fprintf(stderr, + "%s: ignoring line %d: \"%s\"\n", + ProgramName, + line_no, + data_line); + } + } + + return(0); + +} |