summaryrefslogtreecommitdiff
path: root/usr.sbin/ypserv/stdethers
diff options
context:
space:
mode:
authordm <dm@cvs.openbsd.org>1996-03-02 03:01:50 +0000
committerdm <dm@cvs.openbsd.org>1996-03-02 03:01:50 +0000
commit1bbdd14bf7171a908ef69a509294f1916eb46e20 (patch)
treead138be58ac7df3fd9b8ec46b553c6a4f4ba74ed /usr.sbin/ypserv/stdethers
parentb01aa3aca07057b14071da6d0ee38ddbf498045d (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/Makefile8
-rw-r--r--usr.sbin/ypserv/stdethers/stdethers.855
-rw-r--r--usr.sbin/ypserv/stdethers/stdethers.c194
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, &eth_addr, hostname) == 0) {
+ fprintf(stdout, "%s\t%s\n",
+ NTOA(&eth_addr),
+ hostname);
+ } else {
+ fprintf(stderr,
+ "%s: ignoring line %d: \"%s\"\n",
+ ProgramName,
+ line_no,
+ data_line);
+ }
+ }
+
+ return(0);
+
+}