summaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
Diffstat (limited to 'libexec')
-rw-r--r--libexec/bootpgw/Makefile12
-rw-r--r--libexec/bootpgw/bootpgw.c675
-rw-r--r--libexec/getty/Makefile10
-rw-r--r--libexec/getty/extern.h56
-rw-r--r--libexec/getty/getty.8127
-rw-r--r--libexec/getty/gettytab.5325
-rw-r--r--libexec/getty/gettytab.h145
-rw-r--r--libexec/getty/init.c121
-rw-r--r--libexec/getty/main.c549
-rw-r--r--libexec/getty/pathnames.h39
-rw-r--r--libexec/getty/subr.c531
-rw-r--r--libexec/getty/ttys.5139
-rw-r--r--libexec/rbootd/Makefile11
-rw-r--r--libexec/rbootd/bpf.c422
-rw-r--r--libexec/rbootd/conf.c90
-rw-r--r--libexec/rbootd/defs.h185
-rw-r--r--libexec/rbootd/parseconf.c359
-rw-r--r--libexec/rbootd/pathnames.h51
-rw-r--r--libexec/rbootd/rbootd.8156
-rw-r--r--libexec/rbootd/rbootd.c508
-rw-r--r--libexec/rbootd/rmp.h95
-rw-r--r--libexec/rbootd/rmp_var.h244
-rw-r--r--libexec/rbootd/rmpproto.c593
-rw-r--r--libexec/rbootd/utils.c557
-rw-r--r--libexec/rpc.rquotad/Makefile10
-rw-r--r--libexec/rpc.rquotad/rpc.rquotad.858
-rw-r--r--libexec/rpc.rquotad/rquotad.c331
-rw-r--r--libexec/rpc.sprayd/Makefile11
-rw-r--r--libexec/rpc.sprayd/rpc.sprayd.854
-rw-r--r--libexec/rpc.sprayd/sprayd.c169
30 files changed, 0 insertions, 6633 deletions
diff --git a/libexec/bootpgw/Makefile b/libexec/bootpgw/Makefile
deleted file mode 100644
index a155e0e4f7c32..0000000000000
--- a/libexec/bootpgw/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-# Makefile
-# $Id$
-
-PROG= bootpgw
-NOMAN= true
-SRCS= bootpgw.c getif.c hwaddr.c report.c rtmsg.c
-
-SRCDIR= ${.CURDIR}/../bootpd
-CFLAGS+=-I${SRCDIR}
-.PATH: ${SRCDIR}
-
-.include <bsd.prog.mk>
diff --git a/libexec/bootpgw/bootpgw.c b/libexec/bootpgw/bootpgw.c
deleted file mode 100644
index 4e7538bb4defb..0000000000000
--- a/libexec/bootpgw/bootpgw.c
+++ /dev/null
@@ -1,675 +0,0 @@
-/*
- * bootpgw.c - BOOTP GateWay
- * This program forwards BOOTP Request packets to a BOOTP server.
- */
-
-/************************************************************************
- Copyright 1988, 1991 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Carnegie Mellon University not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-************************************************************************/
-
-#ifndef lint
-static char rcsid[] = "$Id: bootpgw.c,v 1.1.1.1 1994/09/10 14:44:54 csgr Exp $";
-#endif
-
-/*
- * BOOTPGW is typically used to forward BOOTP client requests from
- * one subnet to a BOOTP server on a different subnet.
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/file.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-
-#include <net/if.h>
-#include <netinet/in.h>
-#include <arpa/inet.h> /* inet_ntoa */
-
-#ifndef NO_UNISTD
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <netdb.h>
-#include <syslog.h>
-#include <assert.h>
-
-#ifdef NO_SETSID
-# include <fcntl.h> /* for O_RDONLY, etc */
-#endif
-
-#ifndef USE_BFUNCS
-# include <memory.h>
-/* Yes, memcpy is OK here (no overlapped copies). */
-# define bcopy(a,b,c) memcpy(b,a,c)
-# define bzero(p,l) memset(p,0,l)
-# define bcmp(a,b,c) memcmp(a,b,c)
-#endif
-
-#include "bootp.h"
-#include "getif.h"
-#include "hwaddr.h"
-#include "report.h"
-#include "patchlevel.h"
-
-/* Local definitions: */
-#define MAX_MSG_SIZE (3*512) /* Maximum packet size */
-#define TRUE 1
-#define FALSE 0
-#define get_network_errmsg get_errmsg
-
-
-
-/*
- * Externals, forward declarations, and global variables
- */
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-static void usage P((void));
-static void handle_reply P((void));
-static void handle_request P((void));
-
-#undef P
-
-/*
- * IP port numbers for client and server obtained from /etc/services
- */
-
-u_short bootps_port, bootpc_port;
-
-
-/*
- * Internet socket and interface config structures
- */
-
-struct sockaddr_in bind_addr; /* Listening */
-struct sockaddr_in recv_addr; /* Packet source */
-struct sockaddr_in send_addr; /* destination */
-
-
-/*
- * option defaults
- */
-int debug = 0; /* Debugging flag (level) */
-struct timeval actualtimeout =
-{ /* fifteen minutes */
- 15 * 60L, /* tv_sec */
- 0 /* tv_usec */
-};
-u_int maxhops = 4; /* Number of hops allowed for requests. */
-u_int minwait = 3; /* Number of seconds client must wait before
- its bootrequest packets are forwarded. */
-
-/*
- * General
- */
-
-int s; /* Socket file descriptor */
-char *pktbuf; /* Receive packet buffer */
-int pktlen;
-char *progname;
-char *servername;
-int32 server_ipa; /* Real server IP address, network order. */
-
-char myhostname[64];
-struct in_addr my_ip_addr;
-
-
-
-
-/*
- * Initialization such as command-line processing is done and then the
- * main server loop is started.
- */
-
-void
-main(argc, argv)
- int argc;
- char **argv;
-{
- struct timeval *timeout;
- struct bootp *bp;
- struct servent *servp;
- struct hostent *hep;
- char *stmp;
- int n, ba_len, ra_len;
- int nfound, readfds;
- int standalone;
-
- progname = strrchr(argv[0], '/');
- if (progname) progname++;
- else progname = argv[0];
-
- /*
- * Initialize logging.
- */
- report_init(0); /* uses progname */
-
- /*
- * Log startup
- */
- report(LOG_INFO, "version %s.%d", VERSION, PATCHLEVEL);
-
- /* Debugging for compilers with struct padding. */
- assert(sizeof(struct bootp) == BP_MINPKTSZ);
-
- /* Get space for receiving packets and composing replies. */
- pktbuf = malloc(MAX_MSG_SIZE);
- if (!pktbuf) {
- report(LOG_ERR, "malloc failed");
- exit(1);
- }
- bp = (struct bootp *) pktbuf;
-
- /*
- * Check to see if a socket was passed to us from inetd.
- *
- * Use getsockname() to determine if descriptor 0 is indeed a socket
- * (and thus we are probably a child of inetd) or if it is instead
- * something else and we are running standalone.
- */
- s = 0;
- ba_len = sizeof(bind_addr);
- bzero((char *) &bind_addr, ba_len);
- errno = 0;
- standalone = TRUE;
- if (getsockname(s, (struct sockaddr *) &bind_addr, &ba_len) == 0) {
- /*
- * Descriptor 0 is a socket. Assume we are a child of inetd.
- */
- if (bind_addr.sin_family == AF_INET) {
- standalone = FALSE;
- bootps_port = ntohs(bind_addr.sin_port);
- } else {
- /* Some other type of socket? */
- report(LOG_INFO, "getsockname: not an INET socket");
- }
- }
- /*
- * Set defaults that might be changed by option switches.
- */
- stmp = NULL;
- timeout = &actualtimeout;
- gethostname(myhostname, sizeof(myhostname));
- hep = gethostbyname(myhostname);
- if (!hep) {
- printf("Can not get my IP address\n");
- exit(1);
- }
- bcopy(hep->h_addr, (char *)&my_ip_addr, sizeof(my_ip_addr));
-
- /*
- * Read switches.
- */
- for (argc--, argv++; argc > 0; argc--, argv++) {
- if (argv[0][0] != '-')
- break;
- switch (argv[0][1]) {
-
- case 'd': /* debug level */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else if (argv[1] && argv[1][0] == '-') {
- /*
- * Backwards-compatible behavior:
- * no parameter, so just increment the debug flag.
- */
- debug++;
- break;
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) || (n < 0)) {
- fprintf(stderr,
- "%s: invalid debug level\n", progname);
- break;
- }
- debug = n;
- break;
-
- case 'h': /* hop count limit */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) ||
- (n < 0) || (n > 16))
- {
- fprintf(stderr,
- "bootpgw: invalid hop count limit\n");
- break;
- }
- maxhops = (u_int)n;
- break;
-
- case 'i': /* inetd mode */
- standalone = FALSE;
- break;
-
- case 's': /* standalone mode */
- standalone = TRUE;
- break;
-
- case 't': /* timeout */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) || (n < 0)) {
- fprintf(stderr,
- "%s: invalid timeout specification\n", progname);
- break;
- }
- actualtimeout.tv_sec = (int32) (60 * n);
- /*
- * If the actual timeout is zero, pass a NULL pointer
- * to select so it blocks indefinitely, otherwise,
- * point to the actual timeout value.
- */
- timeout = (n > 0) ? &actualtimeout : NULL;
- break;
-
- case 'w': /* wait time */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) ||
- (n < 0) || (n > 60))
- {
- fprintf(stderr,
- "bootpgw: invalid wait time\n");
- break;
- }
- minwait = (u_int)n;
- break;
-
- default:
- fprintf(stderr, "%s: unknown switch: -%c\n",
- progname, argv[0][1]);
- usage();
- break;
-
- } /* switch */
- } /* for args */
-
- /* Make sure server name argument is suplied. */
- servername = argv[0];
- if (!servername) {
- fprintf(stderr, "bootpgw: missing server name\n");
- usage();
- }
- /*
- * Get address of real bootp server.
- */
- if (isdigit(servername[0]))
- server_ipa = inet_addr(servername);
- else {
- hep = gethostbyname(servername);
- if (!hep) {
- fprintf(stderr, "bootpgw: can't get addr for %s\n", servername);
- exit(1);
- }
- bcopy(hep->h_addr, (char *)&server_ipa, sizeof(server_ipa));
- }
-
- if (standalone) {
- /*
- * Go into background and disassociate from controlling terminal.
- * XXX - This is not the POSIX way (Should use setsid). -gwr
- */
- if (debug < 3) {
- if (fork())
- exit(0);
-#ifdef NO_SETSID
- setpgrp(0,0);
-#ifdef TIOCNOTTY
- n = open("/dev/tty", O_RDWR);
- if (n >= 0) {
- ioctl(n, TIOCNOTTY, (char *) 0);
- (void) close(n);
- }
-#endif /* TIOCNOTTY */
-#else /* SETSID */
- if (setsid() < 0)
- perror("setsid");
-#endif /* SETSID */
- } /* if debug < 3 */
- /*
- * Nuke any timeout value
- */
- timeout = NULL;
-
- /*
- * Here, bootpd would do:
- * chdir
- * tzone_init
- * rdtab_init
- * readtab
- */
-
- /*
- * Create a socket.
- */
- if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- report(LOG_ERR, "socket: %s", get_network_errmsg());
- exit(1);
- }
- /*
- * Get server's listening port number
- */
- servp = getservbyname("bootps", "udp");
- if (servp) {
- bootps_port = ntohs((u_short) servp->s_port);
- } else {
- bootps_port = (u_short) IPPORT_BOOTPS;
- report(LOG_ERR,
- "udp/bootps: unknown service -- assuming port %d",
- bootps_port);
- }
-
- /*
- * Bind socket to BOOTPS port.
- */
- bind_addr.sin_family = AF_INET;
- bind_addr.sin_port = htons(bootps_port);
- bind_addr.sin_addr.s_addr = INADDR_ANY;
- if (bind(s, (struct sockaddr *) &bind_addr,
- sizeof(bind_addr)) < 0)
- {
- report(LOG_ERR, "bind: %s", get_network_errmsg());
- exit(1);
- }
- } /* if standalone */
- /*
- * Get destination port number so we can reply to client
- */
- servp = getservbyname("bootpc", "udp");
- if (servp) {
- bootpc_port = ntohs(servp->s_port);
- } else {
- report(LOG_ERR,
- "udp/bootpc: unknown service -- assuming port %d",
- IPPORT_BOOTPC);
- bootpc_port = (u_short) IPPORT_BOOTPC;
- }
-
- /* no signal catchers */
-
- /*
- * Process incoming requests.
- */
- for (;;) {
- readfds = 1 << s;
- nfound = select(s + 1, (fd_set *)&readfds, NULL, NULL, timeout);
- if (nfound < 0) {
- if (errno != EINTR) {
- report(LOG_ERR, "select: %s", get_errmsg());
- }
- continue;
- }
- if (!(readfds & (1 << s))) {
- report(LOG_INFO, "exiting after %ld minutes of inactivity",
- actualtimeout.tv_sec / 60);
- exit(0);
- }
- ra_len = sizeof(recv_addr);
- n = recvfrom(s, pktbuf, MAX_MSG_SIZE, 0,
- (struct sockaddr *) &recv_addr, &ra_len);
- if (n <= 0) {
- continue;
- }
- if (debug > 3) {
- report(LOG_INFO, "recvd pkt from IP addr %s",
- inet_ntoa(recv_addr.sin_addr));
- }
- if (n < sizeof(struct bootp)) {
- if (debug) {
- report(LOG_INFO, "received short packet");
- }
- continue;
- }
- pktlen = n;
-
- switch (bp->bp_op) {
- case BOOTREQUEST:
- handle_request();
- break;
- case BOOTREPLY:
- handle_reply();
- break;
- }
- }
-}
-
-
-
-
-/*
- * Print "usage" message and exit
- */
-
-static void
-usage()
-{
- fprintf(stderr,
- "usage: bootpgw [-d level] [-i] [-s] [-t timeout] server\n");
- fprintf(stderr, "\t -d n\tset debug level\n");
- fprintf(stderr, "\t -h n\tset max hop count\n");
- fprintf(stderr, "\t -i\tforce inetd mode (run as child of inetd)\n");
- fprintf(stderr, "\t -s\tforce standalone mode (run without inetd)\n");
- fprintf(stderr, "\t -t n\tset inetd exit timeout to n minutes\n");
- fprintf(stderr, "\t -w n\tset min wait time (secs)\n");
- exit(1);
-}
-
-
-
-/*
- * Process BOOTREQUEST packet.
- *
- * Note, this just forwards the request to a real server.
- */
-static void
-handle_request()
-{
- struct bootp *bp = (struct bootp *) pktbuf;
- struct ifreq *ifr;
- u_short secs, hops;
-
- /* XXX - SLIP init: Set bp_ciaddr = recv_addr here? */
-
- if (debug) {
- report(LOG_INFO, "request from %s",
- inet_ntoa(recv_addr.sin_addr));
- }
- /* Has the client been waiting long enough? */
- secs = ntohs(bp->bp_secs);
- if (secs < minwait)
- return;
-
- /* Has this packet hopped too many times? */
- hops = ntohs(bp->bp_hops);
- if (++hops > maxhops) {
- report(LOG_NOTICE, "reqest from %s reached hop limit",
- inet_ntoa(recv_addr.sin_addr));
- return;
- }
- bp->bp_hops = htons(hops);
-
- /*
- * Here one might discard a request from the same subnet as the
- * real server, but we can assume that the real server will send
- * a reply to the client before it waits for minwait seconds.
- */
-
- /* If gateway address is not set, put in local interface addr. */
- if (bp->bp_giaddr.s_addr == 0) {
-#if 0 /* BUG */
- struct sockaddr_in *sip;
- /*
- * XXX - This picks the wrong interface when the receive addr
- * is the broadcast address. There is no portable way to
- * find out which interface a broadcast was received on. -gwr
- * (Thanks to <walker@zk3.dec.com> for finding this bug!)
- */
- ifr = getif(s, &recv_addr.sin_addr);
- if (!ifr) {
- report(LOG_NOTICE, "no interface for request from %s",
- inet_ntoa(recv_addr.sin_addr));
- return;
- }
- sip = (struct sockaddr_in *) &(ifr->ifr_addr);
- bp->bp_giaddr = sip->sin_addr;
-#else /* BUG */
- /*
- * XXX - Just set "giaddr" to our "official" IP address.
- * RFC 1532 says giaddr MUST be set to the address of the
- * interface on which the request was received. Setting
- * it to our "default" IP address is not strictly correct,
- * but is good enough to allow the real BOOTP server to
- * get the reply back here. Then, before we forward the
- * reply to the client, the giaddr field is corrected.
- * (In case the client uses giaddr, which it should not.)
- * See handle_reply()
- */
- bp->bp_giaddr = my_ip_addr;
-#endif /* BUG */
-
- /*
- * XXX - DHCP says to insert a subnet mask option into the
- * options area of the request (if vendor magic == std).
- */
- }
- /* Set up socket address for send. */
- send_addr.sin_family = AF_INET;
- send_addr.sin_port = htons(bootps_port);
- send_addr.sin_addr.s_addr = server_ipa;
-
- /* Send reply with same size packet as request used. */
- if (sendto(s, pktbuf, pktlen, 0,
- (struct sockaddr *) &send_addr,
- sizeof(send_addr)) < 0)
- {
- report(LOG_ERR, "sendto: %s", get_network_errmsg());
- }
-}
-
-
-
-/*
- * Process BOOTREPLY packet.
- */
-static void
-handle_reply()
-{
- struct bootp *bp = (struct bootp *) pktbuf;
- struct ifreq *ifr;
- struct sockaddr_in *sip;
- u_char canon_haddr[MAXHADDRLEN];
- unsigned char *ha;
- int len;
-
- if (debug) {
- report(LOG_INFO, " reply for %s",
- inet_ntoa(bp->bp_yiaddr));
- }
- /* Make sure client is directly accessible. */
- ifr = getif(s, &(bp->bp_yiaddr));
- if (!ifr) {
- report(LOG_NOTICE, "no interface for reply to %s",
- inet_ntoa(bp->bp_yiaddr));
- return;
- }
-#if 1 /* Experimental (see BUG above) */
-/* #ifdef CATER_TO_OLD_CLIENTS ? */
- /*
- * The giaddr field has been set to our "default" IP address
- * which might not be on the same interface as the client.
- * In case the client looks at giaddr, (which it should not)
- * giaddr is now set to the address of the correct interface.
- */
- sip = (struct sockaddr_in *) &(ifr->ifr_addr);
- bp->bp_giaddr = sip->sin_addr;
-#endif
-
- /* Set up socket address for send to client. */
- send_addr.sin_family = AF_INET;
- send_addr.sin_addr = bp->bp_yiaddr;
- send_addr.sin_port = htons(bootpc_port);
-
- /* Create an ARP cache entry for the client. */
- ha = bp->bp_chaddr;
- len = bp->bp_hlen;
- if (len > MAXHADDRLEN)
- len = MAXHADDRLEN;
- if (bp->bp_htype == HTYPE_IEEE802) {
- haddr_conv802(ha, canon_haddr, len);
- ha = canon_haddr;
- }
- if (debug > 1)
- report(LOG_INFO, "setarp %s - %s",
- inet_ntoa(bp->bp_yiaddr), haddrtoa(ha, len));
- setarp(s, &bp->bp_yiaddr, ha, len);
-
- /* Send reply with same size packet as request used. */
- if (sendto(s, pktbuf, pktlen, 0,
- (struct sockaddr *) &send_addr,
- sizeof(send_addr)) < 0)
- {
- report(LOG_ERR, "sendto: %s", get_network_errmsg());
- }
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/libexec/getty/Makefile b/libexec/getty/Makefile
deleted file mode 100644
index 7f2eabe6f0d70..0000000000000
--- a/libexec/getty/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-# @(#)Makefile 8.1 (Berkeley) 6/4/93
-
-PROG= getty
-SRCS= main.c init.c subr.c ttydefaults.c
-DPADD= ${LIBUTIL}
-LDADD= -lutil
-MAN5= gettytab.0 ttys.0
-MAN8= getty.0
-
-.include <bsd.prog.mk>
diff --git a/libexec/getty/extern.h b/libexec/getty/extern.h
deleted file mode 100644
index 644f93f107470..0000000000000
--- a/libexec/getty/extern.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 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 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)extern.h 8.1 (Berkeley) 6/4/93
- */
-
-struct delayval;
-
-int adelay __P((int, struct delayval *));
-char *autobaud __P((void));
-int delaybits __P((void));
-void edithost __P((char *));
-void gendefaults __P((void));
-int getent __P((char *, char *));
-int getflag __P((char *));
-long getnum __P((char *));
-char *getstr __P((char *, char **));
-void gettable __P((char *, char *));
-void makeenv __P((char *[]));
-char *portselector __P((void));
-void set_ttydefaults __P((int));
-void setchars __P((void));
-void setdefaults __P((void));
-long setflags __P((int));
-int speed __P((int));
-
-int login_tty __P((int)); /* From libutil. */
diff --git a/libexec/getty/getty.8 b/libexec/getty/getty.8
deleted file mode 100644
index ffd506064046c..0000000000000
--- a/libexec/getty/getty.8
+++ /dev/null
@@ -1,127 +0,0 @@
-.\" Copyright (c) 1980, 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 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 the University of
-.\" California, Berkeley and its contributors.
-.\" 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
-.\"
-.\" @(#)getty.8 8.1 (Berkeley) 6/4/93
-.\"
-.Dd June 4, 1993
-.Dt GETTY 8
-.Os BSD 4
-.Sh NAME
-.Nm getty
-.Nd set terminal mode
-.Sh SYNOPSIS
-.Nm getty
-.Oo
-.Ar type
-.Op Ar tty
-.Oc
-.Sh DESCRIPTION
-The
-.Nm getty
-program
-is called by
-.Xr init 8
-to open and initialize the tty line, read a login name, and invoke
-.Xr login 1 .
-.Pp
-The argument
-.Ar tty
-is the special device file in
-.Pa /dev
-to open for the terminal (for example, ``ttyh0'').
-If there is no argument or the argument is
-.Ql Fl ,
-the tty line is assumed to be open as file descriptor 0.
-.Pp
-The
-.Ar type
-argument can be used to make
-.Nm getty
-treat the terminal line specially.
-This argument is used as an index into the
-.Nm gettytab 5
-database, to determine the characteristics of the line.
-If there is no argument, or there is no such table, the
-.Em default
-table is used.
-If there is no
-.Pa /etc/gettytab
-a set of system defaults is used.
-If indicated by the table located,
-.Nm getty
-will clear the terminal screen,
-print a banner heading,
-and prompt for a login name.
-Usually either the banner or the login prompt will include
-the system hostname.
-.Pp
-Most of the default actions of
-.Nm getty
-can be circumvented, or modified, by a suitable
-.Nm gettytab
-table.
-.Pp
-The
-.Nm getty
-program
-can be set to timeout after some interval,
-which will cause dial up lines to hang up
-if the login name is not entered reasonably quickly.
-.Sh DIAGNOSTICS
-.Bl -diag
-.It "ttyxx: No such device or address."
-.It "ttyxx: No such file or address."
-A terminal which is turned
-on in the
-.Xr ttys
-file cannot be opened, likely because the requisite
-lines are either not configured into the system, the associated device
-was not attached during boot-time system configuration,
-or the special file in
-.Pa /dev
-does not exist.
-.El
-.Sh FILES
-.Bl -tag -width /etc/gettytab -compact
-.It Pa /etc/gettytab
-.El
-.Sh SEE ALSO
-.Xr gettytab 5 ,
-.Xr init 8 ,
-.Xr login 1 ,
-.Xr ioctl 2 ,
-.Xr tty 4 ,
-.Xr ttys 5
-.Sh HISTORY
-A
-.Nm getty
-program appeared in
-.At v6 .
diff --git a/libexec/getty/gettytab.5 b/libexec/getty/gettytab.5
deleted file mode 100644
index e5de06bd976be..0000000000000
--- a/libexec/getty/gettytab.5
+++ /dev/null
@@ -1,325 +0,0 @@
-.\" Copyright (c) 1983, 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 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 the University of
-.\" California, Berkeley and its contributors.
-.\" 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
-.\"
-.\" @(#)gettytab.5 8.5 (Berkeley) 6/1/94
-.\"
-.Dd June 1, 1994
-.Dt GETTYTAB 5
-.Os BSD 4.2
-.Sh NAME
-.Nm gettytab
-.Nd terminal configuration data base
-.Sh SYNOPSIS
-.Nm gettytab
-.Sh DESCRIPTION
-The
-.Nm gettytab
-file
-is a simplified version of the
-.Xr termcap 5
-data base
-used to describe terminal lines.
-The initial terminal login process
-.Xr getty 8
-accesses the
-.Nm gettytab
-file each time it starts, allowing simpler
-reconfiguration of terminal characteristics.
-Each entry in the data base
-is used to describe one class of terminals.
-.Pp
-There is a default terminal class,
-.Em default ,
-that is used to set global defaults for all other classes.
-(That is, the
-.Em default
-entry is read, then the entry for the class required
-is used to override particular settings.)
-.Sh CAPABILITIES
-Refer to
-.Xr termcap 5
-for a description of the file layout.
-The
-.Em default
-column below lists defaults obtained if there is
-no entry in the table obtained, nor one in the special
-.Em default
-table.
-.Bl -column Namexx /usr/bin/login Default
-.It Sy Name Type Default Description
-.It "ap bool false terminal uses any parity"
-.It "bd num 0 backspace delay"
-.It "bk str 0377 alternate end of line character (input break)"
-.It "cb bool false use crt backspace mode"
-.It "cd num 0 carriage-return delay"
-.It "ce bool false use crt erase algorithm"
-.It "ck bool false use crt kill algorithm"
-.It "cl str" Ta Dv NULL Ta
-.No "screen clear sequence"
-.It "co bool false console - add"
-.Ql \en
-after login prompt
-.It "ds str" Ta So Li ^Y Sc Ta
-.No "delayed suspend character"
-.It "dx bool false set"
-.Dv DECCTLQ
-.It "ec bool false leave echo"
-.Tn OFF
-.It "ep bool false terminal uses even parity"
-.It "er str" Ta So Li ^? Sc Ta
-.No "erase character"
-.It "et str" Ta So Li ^D Sc Ta
-.No "end of text"
-.Pq Dv EOF
-character
-.It "ev str" Ta Dv NULL Ta
-.No "initial environment"
-.It "f0 num unused tty mode flags to write messages"
-.It "f1 num unused tty mode flags to read login name"
-.It "f2 num unused tty mode flags to leave terminal as"
-.It "fd num 0 form-feed (vertical motion) delay"
-.It "fl str" Ta So Li ^O Sc Ta
-.No "output flush character"
-.It "hc bool false do"
-.Tn NOT
-hangup line on last close
-.It "he str" Ta Dv NULL Ta
-.No "hostname editing string"
-.It "hn str hostname hostname"
-.It "ht bool false terminal has real tabs"
-.It "ig bool false ignore garbage characters in login name"
-.It "im str" Ta Dv NULL Ta
-.No "initial (banner) message"
-.It "in str" Ta So Li ^C Sc Ta
-.No "interrupt character"
-.It "is num unused input speed"
-.It "kl str" Ta So Li ^U Sc Ta
-.No "kill character"
-.It "lc bool false terminal has lower case"
-.It "lm str login: login prompt"
-.It "ln str" Ta So Li ^V Sc Ta
-.No "``literal next'' character"
-.It "lo str" Ta Pa /usr/bin/login Ta
-.No "program to exec when name obtained"
-.It "nd num 0 newline (line-feed) delay"
-.It "nl bool false terminal has (or might have) a newline character"
-.It "np bool false terminal uses no parity (i.e. 8-bit characters)"
-.It "nx str default next table (for auto speed selection)"
-.It "op bool false terminal uses odd parity"
-.It "os num unused output speed"
-.It "pc str" Ta So Li \e0 Sc Ta
-.No "pad character"
-.It "pe bool false use printer (hard copy) erase algorithm"
-.It "pf num 0 delay"
-between first prompt and following flush (seconds)
-.It "ps bool false line connected to a"
-.Tn MICOM
-port selector
-.It "qu str" Ta So Li \&^\e Sc Ta
-.No "quit character"
-.It "rp str" Ta So Li ^R Sc Ta
-.No "line retype character"
-.It "rw bool false do"
-.Tn NOT
-use raw for input, use cbreak
-.It "sp num unused line speed (input and output)"
-.It "su str" Ta So Li ^Z Sc Ta
-.No "suspend character"
-.It "tc str none table continuation"
-.It "to num 0 timeout (seconds)"
-.It "tt str" Ta Dv NULL Ta
-.No "terminal type (for environment)"
-.It "ub bool false do unbuffered output (of prompts etc)"
-.It "uc bool false terminal is known upper case only"
-.It "we str" Ta So Li ^W Sc Ta
-.No "word erase character"
-.It "xc bool false do
-.Tn NOT
-echo control chars as
-.Ql ^X
-.It "xf str" Ta So Li ^S Sc Ta Dv XOFF
-(stop output) character
-.It "xn str" Ta So Li ^Q Sc Ta Dv XON
-(start output) character
-.El
-.Pp
-If no line speed is specified, speed will not be altered
-from that which prevails when getty is entered.
-Specifying an input or output speed will override
-line speed for stated direction only.
-.Pp
-Terminal modes to be used for the output of the message,
-for input of the login name,
-and to leave the terminal set as upon completion,
-are derived from the boolean flags specified.
-If the derivation should prove inadequate,
-any (or all) of these three may be overridden
-with one of the
-.Em \&f0 ,
-.Em \&f1 ,
-or
-.Em \&f2
-numeric specifications, which can be used to specify
-(usually in octal, with a leading '0')
-the exact values of the flags.
-Local (new tty) flags are set in the top 16 bits
-of this (32 bit) value.
-.Pp
-Should
-.Xr getty
-receive a null character
-(presumed to indicate a line break)
-it will restart using the table indicated by the
-.Em nx
-entry. If there is none, it will re-use its original table.
-.Pp
-Delays are specified in milliseconds, the nearest possible
-delay available in the tty driver will be used.
-Should greater certainty be desired, delays
-with values 0, 1, 2, and 3 are interpreted as
-choosing that particular delay algorithm from the driver.
-.Pp
-The
-.Em \&cl
-screen clear string may be preceded by a (decimal) number
-of milliseconds of delay required (a la termcap).
-This delay is simulated by repeated use of the pad character
-.Em \&pc .
-.pl -1
-.Pp
-The initial message, and login message,
-.Em \&im
-and
-.Em \&lm
-may include the character sequence
-.Em \&%h
-or
-.Em \&%t
-to obtain
-the hostname or tty name respectively.
-.Pf ( Em %%
-obtains a single '%' character.)
-The hostname is normally obtained from the system,
-but may be set by the
-.Em \&hn
-table entry.
-In either case it may be edited with
-.Em \&he .
-The
-.Em \&he
-string is a sequence of characters, each character that
-is neither '@' nor '#' is copied into the final hostname.
-A '@' in the
-.Em \&he
-string, causes one character from the real hostname to
-be copied to the final hostname.
-A '#' in the
-.Em \&he
-string, causes the next character of the real hostname
-to be skipped.
-Surplus '@' and '#' characters are ignored.
-.Pp
-When getty execs the login process, given
-in the
-.Em \&lo
-string (usually
-.Dq Pa /usr/bin/login ) ,
-it will have set
-the environment to include the terminal type, as indicated
-by the
-.Em \&tt
-string (if it exists).
-The
-.Em \&ev
-string, can be used to enter additional data into
-the environment.
-It is a list of comma separated strings, each of which
-will presumably be of the form
-.Em name=value .
-.Pp
-If a non-zero timeout is specified, with
-.Em \&to ,
-then getty will exit within the indicated
-number of seconds, either having
-received a login name and passed control
-to
-.Xr login ,
-or having received an alarm signal, and exited.
-This may be useful to hangup dial in lines.
-.Pp
-Output from
-.Xr getty
-is even parity unless
-.Em \&op
-is specified.
-The
-.Em \&op
-string
-may be specified with
-.Em \&ap
-to allow any parity on input, but generate odd parity output.
-Note: this only applies while getty is being run,
-terminal driver limitations prevent a more complete
-implementation.
-.Xr Getty
-does not check parity of input characters in
-.Dv RAW
-mode.
-.Sh SEE ALSO
-.Xr login 1 ,
-.Xr termcap 5 ,
-.Xr getty 8 .
-.Sh BUGS
-The special characters (erase, kill, etc.) are reset to system defaults
-by
-.Xr login 1 .
-In
-.Em all
-cases, '#' or '^H' typed in a login name will be treated as
-an erase character, and '@' will be treated as a kill character.
-.Pp
-The delay stuff is a real crock.
-Apart form its general lack of flexibility, some
-of the delay algorithms are not implemented.
-The terminal driver should support sane delay settings.
-.Pp
-The
-.Em \&he
-capability is stupid.
-.Pp
-The
-.Xr termcap
-format is horrid, something more rational should
-have been chosen.
-.Sh HISTORY
-The
-.Nm gettytab
-file format appeared in 4.2BSD.
diff --git a/libexec/getty/gettytab.h b/libexec/getty/gettytab.h
deleted file mode 100644
index fb2b14f280d6c..0000000000000
--- a/libexec/getty/gettytab.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 1983, 1993, 1994
- * 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 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)gettytab.h 8.2 (Berkeley) 3/30/94
- */
-
-/*
- * Getty description definitions.
- */
-struct gettystrs {
- char *field; /* name to lookup in gettytab */
- char *defalt; /* value we find by looking in defaults */
- char *value; /* value that we find there */
-};
-
-struct gettynums {
- char *field; /* name to lookup */
- long defalt; /* number we find in defaults */
- long value; /* number we find there */
- int set; /* we actually got this one */
-};
-
-struct gettyflags {
- char *field; /* name to lookup */
- char invrt; /* name existing in gettytab --> false */
- char defalt; /* true/false in defaults */
- char value; /* true/false flag */
- char set; /* we found it */
-};
-
-/*
- * String values.
- */
-#define NX gettystrs[0].value
-#define CL gettystrs[1].value
-#define IM gettystrs[2].value
-#define LM gettystrs[3].value
-#define ER gettystrs[4].value
-#define KL gettystrs[5].value
-#define ET gettystrs[6].value
-#define PC gettystrs[7].value
-#define TT gettystrs[8].value
-#define EV gettystrs[9].value
-#define LO gettystrs[10].value
-#define HN gettystrs[11].value
-#define HE gettystrs[12].value
-#define IN gettystrs[13].value
-#define QU gettystrs[14].value
-#define XN gettystrs[15].value
-#define XF gettystrs[16].value
-#define BK gettystrs[17].value
-#define SU gettystrs[18].value
-#define DS gettystrs[19].value
-#define RP gettystrs[20].value
-#define FL gettystrs[21].value
-#define WE gettystrs[22].value
-#define LN gettystrs[23].value
-
-/*
- * Numeric definitions.
- */
-#define IS gettynums[0].value
-#define OS gettynums[1].value
-#define SP gettynums[2].value
-#define ND gettynums[3].value
-#define CD gettynums[4].value
-#define TD gettynums[5].value
-#define FD gettynums[6].value
-#define BD gettynums[7].value
-#define TO gettynums[8].value
-#define F0 gettynums[9].value
-#define F0set gettynums[9].set
-#define F1 gettynums[10].value
-#define F1set gettynums[10].set
-#define F2 gettynums[11].value
-#define F2set gettynums[11].set
-#define PF gettynums[12].value
-
-/*
- * Boolean values.
- */
-#define HT gettyflags[0].value
-#define NL gettyflags[1].value
-#define EP gettyflags[2].value
-#define EPset gettyflags[2].set
-#define OP gettyflags[3].value
-#define OPset gettyflags[3].set
-#define AP gettyflags[4].value
-#define APset gettyflags[4].set
-#define EC gettyflags[5].value
-#define CO gettyflags[6].value
-#define CB gettyflags[7].value
-#define CK gettyflags[8].value
-#define CE gettyflags[9].value
-#define PE gettyflags[10].value
-#define RW gettyflags[11].value
-#define XC gettyflags[12].value
-#define LC gettyflags[13].value
-#define UC gettyflags[14].value
-#define IG gettyflags[15].value
-#define PS gettyflags[16].value
-#define HC gettyflags[17].value
-#define UB gettyflags[18].value
-#define AB gettyflags[19].value
-#define DX gettyflags[20].value
-#define NP gettyflags[21].value
-
-int getent __P((char *, char *));
-long getnum __P((char *));
-int getflag __P((char *));
-char *getstr __P((char *, char **));
-
-extern struct gettyflags gettyflags[];
-extern struct gettynums gettynums[];
-extern struct gettystrs gettystrs[];
-extern int hopcount;
diff --git a/libexec/getty/init.c b/libexec/getty/init.c
deleted file mode 100644
index 835acd753b439..0000000000000
--- a/libexec/getty/init.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 1983, 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 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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 sccsid[] = "@(#)init.c 8.1 (Berkeley) 6/4/93";
-#endif /* not lint */
-
-/*
- * Getty table initializations.
- *
- * Melbourne getty.
- */
-#include <sgtty.h>
-#include "gettytab.h"
-#include "pathnames.h"
-
-extern struct sgttyb tmode;
-extern struct tchars tc;
-extern struct ltchars ltc;
-extern char hostname[];
-
-struct gettystrs gettystrs[] = {
- { "nx" }, /* next table */
- { "cl" }, /* screen clear characters */
- { "im" }, /* initial message */
- { "lm", "login: " }, /* login message */
- { "er", &tmode.sg_erase }, /* erase character */
- { "kl", &tmode.sg_kill }, /* kill character */
- { "et", &tc.t_eofc }, /* eof chatacter (eot) */
- { "pc", "" }, /* pad character */
- { "tt" }, /* terminal type */
- { "ev" }, /* enviroment */
- { "lo", _PATH_LOGIN }, /* login program */
- { "hn", hostname }, /* host name */
- { "he" }, /* host name edit */
- { "in", &tc.t_intrc }, /* interrupt char */
- { "qu", &tc.t_quitc }, /* quit char */
- { "xn", &tc.t_startc }, /* XON (start) char */
- { "xf", &tc.t_stopc }, /* XOFF (stop) char */
- { "bk", &tc.t_brkc }, /* brk char (alt \n) */
- { "su", &ltc.t_suspc }, /* suspend char */
- { "ds", &ltc.t_dsuspc }, /* delayed suspend */
- { "rp", &ltc.t_rprntc }, /* reprint char */
- { "fl", &ltc.t_flushc }, /* flush output */
- { "we", &ltc.t_werasc }, /* word erase */
- { "ln", &ltc.t_lnextc }, /* literal next */
- { 0 }
-};
-
-struct gettynums gettynums[] = {
- { "is" }, /* input speed */
- { "os" }, /* output speed */
- { "sp" }, /* both speeds */
- { "nd" }, /* newline delay */
- { "cd" }, /* carriage-return delay */
- { "td" }, /* tab delay */
- { "fd" }, /* form-feed delay */
- { "bd" }, /* backspace delay */
- { "to" }, /* timeout */
- { "f0" }, /* output flags */
- { "f1" }, /* input flags */
- { "f2" }, /* user mode flags */
- { "pf" }, /* delay before flush at 1st prompt */
- { 0 }
-};
-
-struct gettyflags gettyflags[] = {
- { "ht", 0 }, /* has tabs */
- { "nl", 1 }, /* has newline char */
- { "ep", 0 }, /* even parity */
- { "op", 0 }, /* odd parity */
- { "ap", 0 }, /* any parity */
- { "ec", 1 }, /* no echo */
- { "co", 0 }, /* console special */
- { "cb", 0 }, /* crt backspace */
- { "ck", 0 }, /* crt kill */
- { "ce", 0 }, /* crt erase */
- { "pe", 0 }, /* printer erase */
- { "rw", 1 }, /* don't use raw */
- { "xc", 1 }, /* don't ^X ctl chars */
- { "lc", 0 }, /* terminal las lower case */
- { "uc", 0 }, /* terminal has no lower case */
- { "ig", 0 }, /* ignore garbage */
- { "ps", 0 }, /* do port selector speed select */
- { "hc", 1 }, /* don't set hangup on close */
- { "ub", 0 }, /* unbuffered output */
- { "ab", 0 }, /* auto-baud detect with '\r' */
- { "dx", 0 }, /* set decctlq */
- { "np", 0 }, /* no parity at all (8bit chars) */
- { 0 }
-};
diff --git a/libexec/getty/main.c b/libexec/getty/main.c
deleted file mode 100644
index c27ddf40a4801..0000000000000
--- a/libexec/getty/main.c
+++ /dev/null
@@ -1,549 +0,0 @@
-/*-
- * Copyright (c) 1980, 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 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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 copyright[] =
-"@(#) Copyright (c) 1980, 1993\n\
- The Regents of the University of California. All rights reserved.\n";
-#endif /* not lint */
-
-#ifndef lint
-static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 6/20/93";
-#endif /* not lint */
-
-#define USE_OLD_TTY
-
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/resource.h>
-
-#include <ctype.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <setjmp.h>
-#include <sgtty.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <time.h>
-#include <unistd.h>
-
-#include "gettytab.h"
-#include "pathnames.h"
-#include "extern.h"
-
-/*
- * Set the amount of running time that getty should accumulate
- * before deciding that something is wrong and exit.
- */
-#define GETTY_TIMEOUT 60 /* seconds */
-
-struct sgttyb tmode = {
- 0, 0, CERASE, CKILL, 0
-};
-struct tchars tc = {
- CINTR, CQUIT, CSTART,
- CSTOP, CEOF, CBRK,
-};
-struct ltchars ltc = {
- CSUSP, CDSUSP, CRPRNT,
- CFLUSH, CWERASE, CLNEXT
-};
-
-int crmod, digit, lower, upper;
-
-char hostname[MAXHOSTNAMELEN];
-char name[16];
-char dev[] = _PATH_DEV;
-char ttyn[32];
-char *portselector();
-char *ttyname();
-
-#define OBUFSIZ 128
-#define TABBUFSIZ 512
-
-char defent[TABBUFSIZ];
-char tabent[TABBUFSIZ];
-
-char *env[128];
-
-char partab[] = {
- 0001,0201,0201,0001,0201,0001,0001,0201,
- 0202,0004,0003,0205,0005,0206,0201,0001,
- 0201,0001,0001,0201,0001,0201,0201,0001,
- 0001,0201,0201,0001,0201,0001,0001,0201,
- 0200,0000,0000,0200,0000,0200,0200,0000,
- 0000,0200,0200,0000,0200,0000,0000,0200,
- 0000,0200,0200,0000,0200,0000,0000,0200,
- 0200,0000,0000,0200,0000,0200,0200,0000,
- 0200,0000,0000,0200,0000,0200,0200,0000,
- 0000,0200,0200,0000,0200,0000,0000,0200,
- 0000,0200,0200,0000,0200,0000,0000,0200,
- 0200,0000,0000,0200,0000,0200,0200,0000,
- 0000,0200,0200,0000,0200,0000,0000,0200,
- 0200,0000,0000,0200,0000,0200,0200,0000,
- 0200,0000,0000,0200,0000,0200,0200,0000,
- 0000,0200,0200,0000,0200,0000,0000,0201
-};
-
-#define ERASE tmode.sg_erase
-#define KILL tmode.sg_kill
-#define EOT tc.t_eofc
-
-jmp_buf timeout;
-
-static void
-dingdong()
-{
-
- alarm(0);
- signal(SIGALRM, SIG_DFL);
- longjmp(timeout, 1);
-}
-
-jmp_buf intrupt;
-
-static void
-interrupt()
-{
-
- signal(SIGINT, interrupt);
- longjmp(intrupt, 1);
-}
-
-/*
- * Action to take when getty is running too long.
- */
-void
-timeoverrun(signo)
- int signo;
-{
-
- syslog(LOG_ERR, "getty exiting due to excessive running time\n");
- exit(1);
-}
-
-static int getname __P((void));
-static void oflush __P((void));
-static void prompt __P((void));
-static void putchr __P((int));
-static void putf __P((char *));
-static void putpad __P((char *));
-static void puts __P((char *));
-
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- extern char **environ;
- char *tname;
- long allflags;
- int repcnt = 0;
- struct rlimit limit;
-
- signal(SIGINT, SIG_IGN);
-/*
- signal(SIGQUIT, SIG_DFL);
-*/
- openlog("getty", LOG_ODELAY|LOG_CONS, LOG_AUTH);
- gethostname(hostname, sizeof(hostname));
- if (hostname[0] == '\0')
- strcpy(hostname, "Amnesiac");
-
- /*
- * Limit running time to deal with broken or dead lines.
- */
- (void)signal(SIGXCPU, timeoverrun);
- limit.rlim_max = RLIM_INFINITY;
- limit.rlim_cur = GETTY_TIMEOUT;
- (void)setrlimit(RLIMIT_CPU, &limit);
-
- /*
- * The following is a work around for vhangup interactions
- * which cause great problems getting window systems started.
- * If the tty line is "-", we do the old style getty presuming
- * that the file descriptors are already set up for us.
- * J. Gettys - MIT Project Athena.
- */
- if (argc <= 2 || strcmp(argv[2], "-") == 0)
- strcpy(ttyn, ttyname(0));
- else {
- int i;
-
- strcpy(ttyn, dev);
- strncat(ttyn, argv[2], sizeof(ttyn)-sizeof(dev));
- if (strcmp(argv[0], "+") != 0) {
- chown(ttyn, 0, 0);
- chmod(ttyn, 0600);
- revoke(ttyn);
- /*
- * Delay the open so DTR stays down long enough to be detected.
- */
- sleep(2);
- while ((i = open(ttyn, O_RDWR)) == -1) {
- if (repcnt % 10 == 0) {
- syslog(LOG_ERR, "%s: %m", ttyn);
- closelog();
- }
- repcnt++;
- sleep(60);
- }
- login_tty(i);
- }
- }
-
- gettable("default", defent);
- gendefaults();
- tname = "default";
- if (argc > 1)
- tname = argv[1];
- for (;;) {
- int off;
-
- gettable(tname, tabent);
- if (OPset || EPset || APset)
- APset++, OPset++, EPset++;
- setdefaults();
- off = 0;
- ioctl(0, TIOCFLUSH, &off); /* clear out the crap */
- ioctl(0, FIONBIO, &off); /* turn off non-blocking mode */
- ioctl(0, FIOASYNC, &off); /* ditto for async mode */
- if (IS)
- tmode.sg_ispeed = speed(IS);
- else if (SP)
- tmode.sg_ispeed = speed(SP);
- if (OS)
- tmode.sg_ospeed = speed(OS);
- else if (SP)
- tmode.sg_ospeed = speed(SP);
- tmode.sg_flags = setflags(0);
- ioctl(0, TIOCSETP, &tmode);
- setchars();
- ioctl(0, TIOCSETC, &tc);
- if (HC)
- ioctl(0, TIOCHPCL, 0);
- if (AB) {
- extern char *autobaud();
-
- tname = autobaud();
- continue;
- }
- if (PS) {
- tname = portselector();
- continue;
- }
- if (CL && *CL)
- putpad(CL);
- edithost(HE);
- if (IM && *IM)
- putf(IM);
- if (setjmp(timeout)) {
- tmode.sg_ispeed = tmode.sg_ospeed = 0;
- ioctl(0, TIOCSETP, &tmode);
- exit(1);
- }
- if (TO) {
- signal(SIGALRM, dingdong);
- alarm(TO);
- }
- if (getname()) {
- register int i;
-
- oflush();
- alarm(0);
- signal(SIGALRM, SIG_DFL);
- if (name[0] == '-') {
- puts("user names may not start with '-'.");
- continue;
- }
- if (!(upper || lower || digit))
- continue;
- allflags = setflags(2);
- tmode.sg_flags = allflags & 0xffff;
- allflags >>= 16;
- if (crmod || NL)
- tmode.sg_flags |= CRMOD;
- if (upper || UC)
- tmode.sg_flags |= LCASE;
- if (lower || LC)
- tmode.sg_flags &= ~LCASE;
- ioctl(0, TIOCSETP, &tmode);
- ioctl(0, TIOCSLTC, &ltc);
- ioctl(0, TIOCLSET, &allflags);
- signal(SIGINT, SIG_DFL);
- for (i = 0; environ[i] != (char *)0; i++)
- env[i] = environ[i];
- makeenv(&env[i]);
-
- /*
- * this is what login was doing anyway.
- * soon we rewrite getty completely.
- */
- set_ttydefaults(0);
- limit.rlim_max = RLIM_INFINITY;
- limit.rlim_cur = RLIM_INFINITY;
- (void)setrlimit(RLIMIT_CPU, &limit);
- execle(LO, "login", "-p", name, (char *) 0, env);
- syslog(LOG_ERR, "%s: %m", LO);
- exit(1);
- }
- alarm(0);
- signal(SIGALRM, SIG_DFL);
- signal(SIGINT, SIG_IGN);
- if (NX && *NX)
- tname = NX;
- }
-}
-
-static int
-getname()
-{
- register int c;
- register char *np;
- char cs;
-
- /*
- * Interrupt may happen if we use CBREAK mode
- */
- if (setjmp(intrupt)) {
- signal(SIGINT, SIG_IGN);
- return (0);
- }
- signal(SIGINT, interrupt);
- tmode.sg_flags = setflags(0);
- ioctl(0, TIOCSETP, &tmode);
- tmode.sg_flags = setflags(1);
- prompt();
- if (PF > 0) {
- oflush();
- sleep(PF);
- PF = 0;
- }
- ioctl(0, TIOCSETP, &tmode);
- crmod = digit = lower = upper = 0;
- np = name;
- for (;;) {
- oflush();
- if (read(STDIN_FILENO, &cs, 1) <= 0)
- exit(0);
- if ((c = cs&0177) == 0)
- return (0);
- if (c == EOT)
- exit(1);
- if (c == '\r' || c == '\n' || np >= &name[sizeof name]) {
- putf("\r\n");
- break;
- }
- if (islower(c))
- lower = 1;
- else if (isupper(c))
- upper = 1;
- else if (c == ERASE || c == '#' || c == '\b') {
- if (np > name) {
- np--;
- if (tmode.sg_ospeed >= B1200)
- puts("\b \b");
- else
- putchr(cs);
- }
- continue;
- } else if (c == KILL || c == '@') {
- putchr(cs);
- putchr('\r');
- if (tmode.sg_ospeed < B1200)
- putchr('\n');
- /* this is the way they do it down under ... */
- else if (np > name)
- puts(" \r");
- prompt();
- np = name;
- continue;
- } else if (isdigit(c))
- digit++;
- if (IG && (c <= ' ' || c > 0176))
- continue;
- *np++ = c;
- putchr(cs);
- }
- signal(SIGINT, SIG_IGN);
- *np = 0;
- if (c == '\r')
- crmod = 1;
- if (upper && !lower && !LC || UC)
- for (np = name; *np; np++)
- if (isupper(*np))
- *np = tolower(*np);
- return (1);
-}
-
-static
-short tmspc10[] = {
- 0, 2000, 1333, 909, 743, 666, 500, 333, 166, 83, 55, 41, 20, 10, 5, 15
-};
-
-static void
-putpad(s)
- register char *s;
-{
- register pad = 0;
- register mspc10;
-
- if (isdigit(*s)) {
- while (isdigit(*s)) {
- pad *= 10;
- pad += *s++ - '0';
- }
- pad *= 10;
- if (*s == '.' && isdigit(s[1])) {
- pad += s[1] - '0';
- s += 2;
- }
- }
-
- puts(s);
- /*
- * If no delay needed, or output speed is
- * not comprehensible, then don't try to delay.
- */
- if (pad == 0)
- return;
- if (tmode.sg_ospeed <= 0 ||
- tmode.sg_ospeed >= (sizeof tmspc10 / sizeof tmspc10[0]))
- return;
-
- /*
- * Round up by a half a character frame, and then do the delay.
- * Too bad there are no user program accessible programmed delays.
- * Transmitting pad characters slows many terminals down and also
- * loads the system.
- */
- mspc10 = tmspc10[tmode.sg_ospeed];
- pad += mspc10 / 2;
- for (pad /= mspc10; pad > 0; pad--)
- putchr(*PC);
-}
-
-static void
-puts(s)
- register char *s;
-{
- while (*s)
- putchr(*s++);
-}
-
-char outbuf[OBUFSIZ];
-int obufcnt = 0;
-
-static void
-putchr(cc)
- int cc;
-{
- char c;
-
- c = cc;
- if (!NP) {
- c |= partab[c&0177] & 0200;
- if (OP)
- c ^= 0200;
- }
- if (!UB) {
- outbuf[obufcnt++] = c;
- if (obufcnt >= OBUFSIZ)
- oflush();
- } else
- write(STDOUT_FILENO, &c, 1);
-}
-
-static void
-oflush()
-{
- if (obufcnt)
- write(STDOUT_FILENO, outbuf, obufcnt);
- obufcnt = 0;
-}
-
-static void
-prompt()
-{
-
- putf(LM);
- if (CO)
- putchr('\n');
-}
-
-static void
-putf(cp)
- register char *cp;
-{
- extern char editedhost[];
- time_t t;
- char *slash, db[100];
-
- while (*cp) {
- if (*cp != '%') {
- putchr(*cp++);
- continue;
- }
- switch (*++cp) {
-
- case 't':
- slash = strrchr(ttyn, '/');
- if (slash == (char *) 0)
- puts(ttyn);
- else
- puts(&slash[1]);
- break;
-
- case 'h':
- puts(editedhost);
- break;
-
- case 'd': {
- static char fmt[] = "%l:% %P on %A, %d %B %Y";
-
- fmt[4] = 'M'; /* I *hate* SCCS... */
- (void)time(&t);
- (void)strftime(db, sizeof(db), fmt, localtime(&t));
- puts(db);
- break;
- }
-
- case '%':
- putchr('%');
- break;
- }
- cp++;
- }
-}
diff --git a/libexec/getty/pathnames.h b/libexec/getty/pathnames.h
deleted file mode 100644
index 714a9ccc35bf3..0000000000000
--- a/libexec/getty/pathnames.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1989, 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 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)pathnames.h 8.1 (Berkeley) 6/4/93
- */
-
-#include <paths.h>
-
-#define _PATH_GETTYTAB "/etc/gettytab"
-#define _PATH_LOGIN "/usr/bin/login"
diff --git a/libexec/getty/subr.c b/libexec/getty/subr.c
deleted file mode 100644
index 4a2abb3ded41b..0000000000000
--- a/libexec/getty/subr.c
+++ /dev/null
@@ -1,531 +0,0 @@
-/*
- * Copyright (c) 1983, 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 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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 sccsid[] = "@(#)subr.c 8.1 (Berkeley) 6/4/93";
-#endif /* not lint */
-
-/*
- * Melbourne getty.
- */
-#define USE_OLD_TTY
-#include <stdlib.h>
-#include <sgtty.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "gettytab.h"
-#include "extern.h"
-#include "pathnames.h"
-
-extern struct sgttyb tmode;
-extern struct tchars tc;
-extern struct ltchars ltc;
-
-/*
- * Get a table entry.
- */
-void
-gettable(name, buf)
- char *name, *buf;
-{
- register struct gettystrs *sp;
- register struct gettynums *np;
- register struct gettyflags *fp;
- long n;
- char *dba[2];
- dba[0] = _PATH_GETTYTAB;
- dba[1] = 0;
-
- if (cgetent(&buf, dba, name) != 0)
- return;
-
- for (sp = gettystrs; sp->field; sp++)
- cgetstr(buf, sp->field, &sp->value);
- for (np = gettynums; np->field; np++) {
- if (cgetnum(buf, np->field, &n) == -1)
- np->set = 0;
- else {
- np->set = 1;
- np->value = n;
- }
- }
- for (fp = gettyflags; fp->field; fp++) {
- if (cgetcap(buf, fp->field, ':') == NULL)
- fp->set = 0;
- else {
- fp->set = 1;
- fp->value = 1 ^ fp->invrt;
- }
- }
-#ifdef DEBUG
- printf("name=\"%s\", buf=\"%s\"\n", name, buf);
- for (sp = gettystrs; sp->field; sp++)
- printf("cgetstr: %s=%s\n", sp->field, sp->value);
- for (np = gettynums; np->field; np++)
- printf("cgetnum: %s=%d\n", np->field, np->value);
- for (fp = gettyflags; fp->field; fp++)
- printf("cgetflags: %s='%c' set='%c'\n", fp->field,
- fp->value + '0', fp->set + '0');
- exit(1);
-#endif /* DEBUG */
-}
-
-void
-gendefaults()
-{
- register struct gettystrs *sp;
- register struct gettynums *np;
- register struct gettyflags *fp;
-
- for (sp = gettystrs; sp->field; sp++)
- if (sp->value)
- sp->defalt = sp->value;
- for (np = gettynums; np->field; np++)
- if (np->set)
- np->defalt = np->value;
- for (fp = gettyflags; fp->field; fp++)
- if (fp->set)
- fp->defalt = fp->value;
- else
- fp->defalt = fp->invrt;
-}
-
-void
-setdefaults()
-{
- register struct gettystrs *sp;
- register struct gettynums *np;
- register struct gettyflags *fp;
-
- for (sp = gettystrs; sp->field; sp++)
- if (!sp->value)
- sp->value = sp->defalt;
- for (np = gettynums; np->field; np++)
- if (!np->set)
- np->value = np->defalt;
- for (fp = gettyflags; fp->field; fp++)
- if (!fp->set)
- fp->value = fp->defalt;
-}
-
-static char **
-charnames[] = {
- &ER, &KL, &IN, &QU, &XN, &XF, &ET, &BK,
- &SU, &DS, &RP, &FL, &WE, &LN, 0
-};
-
-static char *
-charvars[] = {
- &tmode.sg_erase, &tmode.sg_kill, &tc.t_intrc,
- &tc.t_quitc, &tc.t_startc, &tc.t_stopc,
- &tc.t_eofc, &tc.t_brkc, &ltc.t_suspc,
- &ltc.t_dsuspc, &ltc.t_rprntc, &ltc.t_flushc,
- &ltc.t_werasc, &ltc.t_lnextc, 0
-};
-
-void
-setchars()
-{
- register int i;
- register char *p;
-
- for (i = 0; charnames[i]; i++) {
- p = *charnames[i];
- if (p && *p)
- *charvars[i] = *p;
- else
- *charvars[i] = '\377';
- }
-}
-
-long
-setflags(n)
- int n;
-{
- register long f;
-
- switch (n) {
- case 0:
- if (F0set)
- return(F0);
- break;
- case 1:
- if (F1set)
- return(F1);
- break;
- default:
- if (F2set)
- return(F2);
- break;
- }
-
- f = 0;
-
- if (AP)
- f |= ANYP;
- else if (OP)
- f |= ODDP;
- else if (EP)
- f |= EVENP;
-
- if (UC)
- f |= LCASE;
-
- if (NL)
- f |= CRMOD;
-
- f |= delaybits();
-
- if (n == 1) { /* read mode flags */
- if (RW)
- f |= RAW;
- else
- f |= CBREAK;
- return (f);
- }
-
- if (!HT)
- f |= XTABS;
-
- if (n == 0)
- return (f);
-
- if (CB)
- f |= CRTBS;
-
- if (CE)
- f |= CRTERA;
-
- if (CK)
- f |= CRTKIL;
-
- if (PE)
- f |= PRTERA;
-
- if (EC)
- f |= ECHO;
-
- if (XC)
- f |= CTLECH;
-
- if (DX)
- f |= DECCTQ;
-
- return (f);
-}
-
-struct delayval {
- unsigned delay; /* delay in ms */
- int bits;
-};
-
-/*
- * below are random guesses, I can't be bothered checking
- */
-
-struct delayval crdelay[] = {
- { 1, CR1 },
- { 2, CR2 },
- { 3, CR3 },
- { 83, CR1 },
- { 166, CR2 },
- { 0, CR3 },
-};
-
-struct delayval nldelay[] = {
- { 1, NL1 }, /* special, calculated */
- { 2, NL2 },
- { 3, NL3 },
- { 100, NL2 },
- { 0, NL3 },
-};
-
-struct delayval bsdelay[] = {
- { 1, BS1 },
- { 0, 0 },
-};
-
-struct delayval ffdelay[] = {
- { 1, FF1 },
- { 1750, FF1 },
- { 0, FF1 },
-};
-
-struct delayval tbdelay[] = {
- { 1, TAB1 },
- { 2, TAB2 },
- { 3, XTABS }, /* this is expand tabs */
- { 100, TAB1 },
- { 0, TAB2 },
-};
-
-int
-delaybits()
-{
- register int f;
-
- f = adelay(CD, crdelay);
- f |= adelay(ND, nldelay);
- f |= adelay(FD, ffdelay);
- f |= adelay(TD, tbdelay);
- f |= adelay(BD, bsdelay);
- return (f);
-}
-
-int
-adelay(ms, dp)
- register ms;
- register struct delayval *dp;
-{
- if (ms == 0)
- return (0);
- while (dp->delay && ms > dp->delay)
- dp++;
- return (dp->bits);
-}
-
-char editedhost[32];
-
-void
-edithost(pat)
- register char *pat;
-{
- register char *host = HN;
- register char *res = editedhost;
-
- if (!pat)
- pat = "";
- while (*pat) {
- switch (*pat) {
-
- case '#':
- if (*host)
- host++;
- break;
-
- case '@':
- if (*host)
- *res++ = *host++;
- break;
-
- default:
- *res++ = *pat;
- break;
-
- }
- if (res == &editedhost[sizeof editedhost - 1]) {
- *res = '\0';
- return;
- }
- pat++;
- }
- if (*host)
- strncpy(res, host, sizeof editedhost - (res - editedhost) - 1);
- else
- *res = '\0';
- editedhost[sizeof editedhost - 1] = '\0';
-}
-
-struct speedtab {
- int speed;
- int uxname;
-} speedtab[] = {
- { 50, B50 },
- { 75, B75 },
- { 110, B110 },
- { 134, B134 },
- { 150, B150 },
- { 200, B200 },
- { 300, B300 },
- { 600, B600 },
- { 1200, B1200 },
- { 1800, B1800 },
- { 2400, B2400 },
- { 4800, B4800 },
- { 9600, B9600 },
- { 19200, EXTA },
- { 19, EXTA }, /* for people who say 19.2K */
- { 38400, EXTB },
- { 38, EXTB },
- { 7200, EXTB }, /* alternative */
- { 0 }
-};
-
-int
-speed(val)
- int val;
-{
- register struct speedtab *sp;
-
- if (val <= 15)
- return (val);
-
- for (sp = speedtab; sp->speed; sp++)
- if (sp->speed == val)
- return (sp->uxname);
-
- return (B300); /* default in impossible cases */
-}
-
-void
-makeenv(env)
- char *env[];
-{
- static char termbuf[128] = "TERM=";
- register char *p, *q;
- register char **ep;
-
- ep = env;
- if (TT && *TT) {
- strcat(termbuf, TT);
- *ep++ = termbuf;
- }
- if (p = EV) {
- q = p;
- while (q = strchr(q, ',')) {
- *q++ = '\0';
- *ep++ = p;
- p = q;
- }
- if (*p)
- *ep++ = p;
- }
- *ep = (char *)0;
-}
-
-/*
- * This speed select mechanism is written for the Develcon DATASWITCH.
- * The Develcon sends a string of the form "B{speed}\n" at a predefined
- * baud rate. This string indicates the user's actual speed.
- * The routine below returns the terminal type mapped from derived speed.
- */
-struct portselect {
- char *ps_baud;
- char *ps_type;
-} portspeeds[] = {
- { "B110", "std.110" },
- { "B134", "std.134" },
- { "B150", "std.150" },
- { "B300", "std.300" },
- { "B600", "std.600" },
- { "B1200", "std.1200" },
- { "B2400", "std.2400" },
- { "B4800", "std.4800" },
- { "B9600", "std.9600" },
- { "B19200", "std.19200" },
- { 0 }
-};
-
-char *
-portselector()
-{
- char c, baud[20], *type = "default";
- register struct portselect *ps;
- int len;
-
- alarm(5*60);
- for (len = 0; len < sizeof (baud) - 1; len++) {
- if (read(STDIN_FILENO, &c, 1) <= 0)
- break;
- c &= 0177;
- if (c == '\n' || c == '\r')
- break;
- if (c == 'B')
- len = 0; /* in case of leading garbage */
- baud[len] = c;
- }
- baud[len] = '\0';
- for (ps = portspeeds; ps->ps_baud; ps++)
- if (strcmp(ps->ps_baud, baud) == 0) {
- type = ps->ps_type;
- break;
- }
- sleep(2); /* wait for connection to complete */
- return (type);
-}
-
-/*
- * This auto-baud speed select mechanism is written for the Micom 600
- * portselector. Selection is done by looking at how the character '\r'
- * is garbled at the different speeds.
- */
-#include <sys/time.h>
-
-char *
-autobaud()
-{
- int rfds;
- struct timeval timeout;
- char c, *type = "9600-baud";
- int null = 0;
-
- ioctl(0, TIOCFLUSH, &null);
- rfds = 1 << 0;
- timeout.tv_sec = 5;
- timeout.tv_usec = 0;
- if (select(32, (fd_set *)&rfds, (fd_set *)NULL,
- (fd_set *)NULL, &timeout) <= 0)
- return (type);
- if (read(STDIN_FILENO, &c, sizeof(char)) != sizeof(char))
- return (type);
- timeout.tv_sec = 0;
- timeout.tv_usec = 20;
- (void) select(32, (fd_set *)NULL, (fd_set *)NULL,
- (fd_set *)NULL, &timeout);
- ioctl(0, TIOCFLUSH, &null);
- switch (c & 0377) {
-
- case 0200: /* 300-baud */
- type = "300-baud";
- break;
-
- case 0346: /* 1200-baud */
- type = "1200-baud";
- break;
-
- case 015: /* 2400-baud */
- case 0215:
- type = "2400-baud";
- break;
-
- default: /* 4800-baud */
- type = "4800-baud";
- break;
-
- case 0377: /* 9600-baud */
- type = "9600-baud";
- break;
- }
- return (type);
-}
diff --git a/libexec/getty/ttys.5 b/libexec/getty/ttys.5
deleted file mode 100644
index cbbdbb67253c4..0000000000000
--- a/libexec/getty/ttys.5
+++ /dev/null
@@ -1,139 +0,0 @@
-.\" Copyright (c) 1985, 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 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 the University of
-.\" California, Berkeley and its contributors.
-.\" 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
-.\"
-.\" @(#)ttys.5 8.1 (Berkeley) 6/4/93
-.\"
-.Dd June 4, 1993
-.Dt TTYS 5
-.Os
-.Sh NAME
-.Nm ttys
-.Nd terminal initialization information
-.Sh DESCRIPTION
-The file
-.Nm ttys
-contains information that is used by various routines to initialize
-and control the use of terminal special files.
-This information is read with the
-.Xr getttyent 3
-library routines.
-There is one line in the
-.Nm ttys
-file per special device file.
-Fields are separated by tabs and/or spaces.
-Fields comprised of more than one word should be enclosed in double
-quotes (``"'').
-Blank lines and comments may appear anywhere in the file; comments
-are delimited by hash marks (``#'') and new lines.
-Any unspecified fields will default to null.
-.Pp
-The first field is the
-name of the terminal special file as it is found in
-.Pa /dev .
-.Pp
-The second field of the file is the command to execute for the line,
-usually
-.Xr getty 8 ,
-which initializes and opens the line, setting the speed, waiting for
-a user name and executing the
-.Xr login 1
-program.
-It can be, however, any desired command, for example
-the start up for a window system terminal emulator or some other
-daemon process, and can contain multiple words if quoted.
-.Pp
-The third field is the type of terminal usually connected to that
-tty line, normally the one found in the
-.Xr termcap 5
-data base file.
-The environment variable
-.Dv TERM
-is initialized with the value by
-either
-.Xr getty 8
-or
-.Xr login 1 .
-.Pp
-The remaining fields set flags in the
-.Fa ty_status
-entry (see
-.Xr getttyent 3 )
-or specify a window system process that
-.Xr init 8
-will maintain for the terminal line.
-.Pp
-As flag values, the strings ``on'' and ``off'' specify that
-.Xr init
-should (should not) execute the command given in the second field,
-while ``secure'' (if ``on'' is also specified) allows users with a
-uid of 0 to login on
-this line.
-These flag fields should not be quoted.
-.Pp
-The string ``window='' may be followed by a quoted command
-string which
-.Xr init
-will execute
-.Em before
-starting the command specified by the second field.
-.Sh EXAMPLES
-.Bd -literal
-# root login on console at 1200 baud
-console "/usr/libexec/getty std.1200" vt100 on secure
-# dialup at 1200 baud, no root logins
-ttyd0 "/usr/libexec/getty d1200" dialup on # 555-1234
-# Mike's terminal: hp2621
-ttyh0 "/usr/libexec/getty std.9600" hp2621-nl on # 457 Evans
-# John's terminal: vt100
-ttyh1 "/usr/libexec/getty std.9600" vt100 on # 459 Evans
-# terminal emulate/window system
-ttyv0 "/usr/new/xterm -L :0" vs100 on window="/usr/new/Xvs100 0"
-# Network pseudo ttys -- don't enable getty
-ttyp0 none network
-ttyp1 none network off
-.Ed
-.Sh FILES
-.Bl -tag -width /etc/ttys -compact
-.It Pa /etc/ttys
-.El
-.Sh SEE ALSO
-.Xr login 1 ,
-.Xr getttyent 3 ,
-.Xr ttyslot 3 ,
-.Xr gettytab 5 ,
-.Xr termcap 5 ,
-.Xr getty 8 ,
-.Xr init 8
-.Sh HISTORY
-A
-.Nm
-file appeared in
-.At v6 .
diff --git a/libexec/rbootd/Makefile b/libexec/rbootd/Makefile
deleted file mode 100644
index 6e377fc51d8aa..0000000000000
--- a/libexec/rbootd/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-# @(#)Makefile 8.1 (Berkeley) 6/4/93
-
-PROG= rbootd
-SRCS= bpf.c conf.c parseconf.c rbootd.c rmpproto.c utils.c
-MAN8= rbootd.0
-
-afterinstall:
- (cd ${.CURDIR}/bootdir && install -c -o ${BINOWN} -g ${BINGRP} \
- -m 444 * ${DESTDIR}/usr/mdec/)
-
-.include <bsd.prog.mk>
diff --git a/libexec/rbootd/bpf.c b/libexec/rbootd/bpf.c
deleted file mode 100644
index 7ecd41957a324..0000000000000
--- a/libexec/rbootd/bpf.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)bpf.c 8.1 (Berkeley) 6/4/93
- *
- * Utah $Hdr: bpf.c 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-#ifndef lint
-static char sccsid[] = "@(#)bpf.c 8.1 (Berkeley) 6/4/93";
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-
-#include <net/if.h>
-#include <net/bpf.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-#include "defs.h"
-#include "pathnames.h"
-
-static int BpfFd = -1;
-static unsigned BpfLen = 0;
-static u_char *BpfPkt = NULL;
-
-/*
-** BpfOpen -- Open and initialize a BPF device.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** File descriptor of opened BPF device (for select() etc).
-**
-** Side Effects:
-** If an error is encountered, the program terminates here.
-*/
-int
-BpfOpen()
-{
- struct ifreq ifr;
- char bpfdev[32];
- int n = 0;
-
- /*
- * Open the first available BPF device.
- */
- do {
- (void) sprintf(bpfdev, _PATH_BPF, n++);
- BpfFd = open(bpfdev, O_RDWR);
- } while (BpfFd < 0 && (errno == EBUSY || errno == EPERM));
-
- if (BpfFd < 0) {
- syslog(LOG_ERR, "bpf: no available devices: %m");
- Exit(0);
- }
-
- /*
- * Set interface name for bpf device, get data link layer
- * type and make sure it's type Ethernet.
- */
- (void) strncpy(ifr.ifr_name, IntfName, sizeof(ifr.ifr_name));
- if (ioctl(BpfFd, BIOCSETIF, (caddr_t)&ifr) < 0) {
- syslog(LOG_ERR, "bpf: ioctl(BIOCSETIF,%s): %m", IntfName);
- Exit(0);
- }
-
- /*
- * Make sure we are dealing with an Ethernet device.
- */
- if (ioctl(BpfFd, BIOCGDLT, (caddr_t)&n) < 0) {
- syslog(LOG_ERR, "bpf: ioctl(BIOCGDLT): %m");
- Exit(0);
- }
- if (n != DLT_EN10MB) {
- syslog(LOG_ERR,"bpf: %s: data-link type %d unsupported",
- IntfName, n);
- Exit(0);
- }
-
- /*
- * On read(), return packets immediately (do not buffer them).
- */
- n = 1;
- if (ioctl(BpfFd, BIOCIMMEDIATE, (caddr_t)&n) < 0) {
- syslog(LOG_ERR, "bpf: ioctl(BIOCIMMEDIATE): %m");
- Exit(0);
- }
-
- /*
- * Try to enable the chip/driver's multicast address filter to
- * grab our RMP address. If this fails, try promiscuous mode.
- * If this fails, there's no way we are going to get any RMP
- * packets so just exit here.
- */
-#ifdef MSG_EOR
- ifr.ifr_addr.sa_len = RMP_ADDRLEN + 2;
-#endif
- ifr.ifr_addr.sa_family = AF_UNSPEC;
- bcopy(&RmpMcastAddr[0], (char *)&ifr.ifr_addr.sa_data[0], RMP_ADDRLEN);
- if (ioctl(BpfFd, SIOCADDMULTI, (caddr_t)&ifr) < 0) {
- syslog(LOG_WARNING,
- "bpf: can't add mcast addr (%m), setting promiscuous mode");
-
- if (ioctl(BpfFd, BIOCPROMISC, (caddr_t)0) < 0) {
- syslog(LOG_ERR, "bpf: can't set promiscuous mode: %m");
- Exit(0);
- }
- }
-
- /*
- * Ask BPF how much buffer space it requires and allocate one.
- */
- if (ioctl(BpfFd, BIOCGBLEN, (caddr_t)&BpfLen) < 0) {
- syslog(LOG_ERR, "bpf: ioctl(BIOCGBLEN): %m");
- Exit(0);
- }
- if (BpfPkt == NULL)
- BpfPkt = (u_char *)malloc(BpfLen);
-
- if (BpfPkt == NULL) {
- syslog(LOG_ERR, "bpf: out of memory (%u bytes for bpfpkt)",
- BpfLen);
- Exit(0);
- }
-
- /*
- * Write a little program to snarf RMP Boot packets and stuff
- * it down BPF's throat (i.e. set up the packet filter).
- */
- {
-#define RMP ((struct rmp_packet *)0)
- static struct bpf_insn bpf_insn[] = {
- { BPF_LD|BPF_B|BPF_ABS, 0, 0, (long)&RMP->hp_llc.dsap },
- { BPF_JMP|BPF_JEQ|BPF_K, 0, 5, IEEE_DSAP_HP },
- { BPF_LD|BPF_H|BPF_ABS, 0, 0, (long)&RMP->hp_llc.cntrl },
- { BPF_JMP|BPF_JEQ|BPF_K, 0, 3, IEEE_CNTL_HP },
- { BPF_LD|BPF_H|BPF_ABS, 0, 0, (long)&RMP->hp_llc.dxsap },
- { BPF_JMP|BPF_JEQ|BPF_K, 0, 1, HPEXT_DXSAP },
- { BPF_RET|BPF_K, 0, 0, RMP_MAX_PACKET },
- { BPF_RET|BPF_K, 0, 0, 0x0 }
- };
-#undef RMP
- static struct bpf_program bpf_pgm = {
- sizeof(bpf_insn)/sizeof(bpf_insn[0]), bpf_insn
- };
-
- if (ioctl(BpfFd, BIOCSETF, (caddr_t)&bpf_pgm) < 0) {
- syslog(LOG_ERR, "bpf: ioctl(BIOCSETF): %m");
- Exit(0);
- }
- }
-
- return(BpfFd);
-}
-
-/*
-** BPF GetIntfName -- Return the name of a network interface attached to
-** the system, or 0 if none can be found. The interface
-** must be configured up; the lowest unit number is
-** preferred; loopback is ignored.
-**
-** Parameters:
-** errmsg - if no network interface found, *errmsg explains why.
-**
-** Returns:
-** A (static) pointer to interface name, or NULL on error.
-**
-** Side Effects:
-** None.
-*/
-char *
-BpfGetIntfName(errmsg)
- char **errmsg;
-{
- struct ifreq ibuf[8], *ifrp, *ifend, *mp;
- struct ifconf ifc;
- int fd;
- int minunit, n;
- char *cp;
- static char device[sizeof(ifrp->ifr_name)];
- static char errbuf[128] = "No Error!";
-
- if (errmsg != NULL)
- *errmsg = errbuf;
-
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- (void) strcpy(errbuf, "bpf: socket: %m");
- return(NULL);
- }
- ifc.ifc_len = sizeof ibuf;
- ifc.ifc_buf = (caddr_t)ibuf;
-
-#ifdef OSIOCGIFCONF
- if (ioctl(fd, OSIOCGIFCONF, (char *)&ifc) < 0 ||
- ifc.ifc_len < sizeof(struct ifreq)) {
- (void) strcpy(errbuf, "bpf: ioctl(OSIOCGIFCONF): %m");
- return(NULL);
- }
-#else
- if (ioctl(fd, SIOCGIFCONF, (char *)&ifc) < 0 ||
- ifc.ifc_len < sizeof(struct ifreq)) {
- (void) strcpy(errbuf, "bpf: ioctl(SIOCGIFCONF): %m");
- return(NULL);
- }
-#endif
- ifrp = ibuf;
- ifend = (struct ifreq *)((char *)ibuf + ifc.ifc_len);
-
- mp = 0;
- minunit = 666;
- for (; ifrp < ifend; ++ifrp) {
- if (ioctl(fd, SIOCGIFFLAGS, (char *)ifrp) < 0) {
- (void) strcpy(errbuf, "bpf: ioctl(SIOCGIFFLAGS): %m");
- return(NULL);
- }
-
- /*
- * If interface is down or this is the loopback interface,
- * ignore it.
- */
- if ((ifrp->ifr_flags & IFF_UP) == 0 ||
-#ifdef IFF_LOOPBACK
- (ifrp->ifr_flags & IFF_LOOPBACK))
-#else
- (strcmp(ifrp->ifr_name, "lo0") == 0))
-#endif
- continue;
-
- for (cp = ifrp->ifr_name; !isdigit(*cp); ++cp)
- ;
- n = atoi(cp);
- if (n < minunit) {
- minunit = n;
- mp = ifrp;
- }
- }
-
- (void) close(fd);
- if (mp == 0) {
- (void) strcpy(errbuf, "bpf: no interfaces found");
- return(NULL);
- }
-
- (void) strcpy(device, mp->ifr_name);
- return(device);
-}
-
-/*
-** BpfRead -- Read packets from a BPF device and fill in `rconn'.
-**
-** Parameters:
-** rconn - filled in with next packet.
-** doread - is True if we can issue a read() syscall.
-**
-** Returns:
-** True if `rconn' contains a new packet, False otherwise.
-**
-** Side Effects:
-** None.
-*/
-int
-BpfRead(rconn, doread)
- RMPCONN *rconn;
- int doread;
-{
- register int datlen, caplen, hdrlen;
- static u_char *bp = NULL, *ep = NULL;
- int cc;
-
- /*
- * The read() may block, or it may return one or more packets.
- * We let the caller decide whether or not we can issue a read().
- */
- if (doread) {
- if ((cc = read(BpfFd, (char *)BpfPkt, (int)BpfLen)) < 0) {
- syslog(LOG_ERR, "bpf: read: %m");
- return(0);
- } else {
- bp = BpfPkt;
- ep = BpfPkt + cc;
- }
- }
-
-#define bhp ((struct bpf_hdr *)bp)
- /*
- * If there is a new packet in the buffer, stuff it into `rconn'
- * and return a success indication.
- */
- if (bp < ep) {
- datlen = bhp->bh_datalen;
- caplen = bhp->bh_caplen;
- hdrlen = bhp->bh_hdrlen;
-
- if (caplen != datlen)
- syslog(LOG_ERR,
- "bpf: short packet dropped (%d of %d bytes)",
- caplen, datlen);
- else if (caplen > sizeof(struct rmp_packet))
- syslog(LOG_ERR, "bpf: large packet dropped (%d bytes)",
- caplen);
- else {
- rconn->rmplen = caplen;
- bcopy((char *)&bhp->bh_tstamp, (char *)&rconn->tstamp,
- sizeof(struct timeval));
- bcopy((char *)bp + hdrlen, (char *)&rconn->rmp, caplen);
- }
- bp += BPF_WORDALIGN(caplen + hdrlen);
- return(1);
- }
-#undef bhp
-
- return(0);
-}
-
-/*
-** BpfWrite -- Write packet to BPF device.
-**
-** Parameters:
-** rconn - packet to send.
-**
-** Returns:
-** True if write succeeded, False otherwise.
-**
-** Side Effects:
-** None.
-*/
-int
-BpfWrite(rconn)
- RMPCONN *rconn;
-{
- if (write(BpfFd, (char *)&rconn->rmp, rconn->rmplen) < 0) {
- syslog(LOG_ERR, "write: %s: %m", EnetStr(rconn));
- return(0);
- }
-
- return(1);
-}
-
-/*
-** BpfClose -- Close a BPF device.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** None.
-*/
-void
-BpfClose()
-{
- struct ifreq ifr;
-
- if (BpfPkt != NULL) {
- free((char *)BpfPkt);
- BpfPkt = NULL;
- }
-
- if (BpfFd == -1)
- return;
-
-#ifdef MSG_EOR
- ifr.ifr_addr.sa_len = RMP_ADDRLEN + 2;
-#endif
- ifr.ifr_addr.sa_family = AF_UNSPEC;
- bcopy(&RmpMcastAddr[0], (char *)&ifr.ifr_addr.sa_data[0], RMP_ADDRLEN);
- if (ioctl(BpfFd, SIOCDELMULTI, (caddr_t)&ifr) < 0)
- (void) ioctl(BpfFd, BIOCPROMISC, (caddr_t)0);
-
- (void) close(BpfFd);
- BpfFd = -1;
-}
diff --git a/libexec/rbootd/conf.c b/libexec/rbootd/conf.c
deleted file mode 100644
index b890eeadae7c6..0000000000000
--- a/libexec/rbootd/conf.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)conf.c 8.1 (Berkeley) 6/4/93
- *
- * Utah $Hdr: conf.c 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-#ifndef lint
-static char sccsid[] = "@(#)conf.c 8.1 (Berkeley) 6/4/93";
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/time.h>
-
-#include <stdio.h>
-#include "defs.h"
-#include "pathnames.h"
-
-/*
-** Define (and possibly initialize) global variables here.
-**
-** Caveat:
-** The maximum number of bootable files (`char *BootFiles[]') is
-** limited to C_MAXFILE (i.e. the maximum number of files that
-** can be spec'd in the configuration file). This was done to
-** simplify the boot file search code.
-*/
-
-char *ProgName; /* path-stripped argv[0] */
-char MyHost[MAXHOSTNAMELEN+1]; /* host name */
-int MyPid; /* process id */
-int DebugFlg = 0; /* set true if debugging */
-int BootAny = 0; /* set true if we boot anyone */
-
-char *ConfigFile = NULL; /* configuration file */
-char *DfltConfig = _PATH_RBOOTDCONF; /* default configuration file */
-char *PidFile = _PATH_RBOOTDPID; /* file w/pid of server */
-char *BootDir = _PATH_RBOOTDLIB; /* directory w/boot files */
-char *DbgFile = _PATH_RBOOTDDBG; /* debug output file */
-
-FILE *DbgFp = NULL; /* debug file pointer */
-char *IntfName = NULL; /* intf we are attached to */
-
-u_short SessionID = 0; /* generated session ID */
-
-char *BootFiles[C_MAXFILE]; /* list of boot files */
-
-CLIENT *Clients = NULL; /* list of addrs we'll accept */
-RMPCONN *RmpConns = NULL; /* list of active connections */
-
-char RmpMcastAddr[RMP_ADDRLEN] = RMP_ADDR; /* RMP multicast address */
diff --git a/libexec/rbootd/defs.h b/libexec/rbootd/defs.h
deleted file mode 100644
index a2e0cd0616c71..0000000000000
--- a/libexec/rbootd/defs.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)defs.h 8.1 (Berkeley) 6/4/93
- *
- * Utah $Hdr: defs.h 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-#include "rmp.h"
-#include "rmp_var.h"
-
-/*
-** Common #define's and external variables. All other files should
-** include this.
-*/
-
-/*
- * This may be defined in <sys/param.h>, if not, it's defined here.
- */
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 64
-#endif
-
-/*
- * SIGUSR1 and SIGUSR2 are defined in <signal.h> for 4.3BSD systems.
- */
-#ifndef SIGUSR1
-#define SIGUSR1 SIGEMT
-#endif
-#ifndef SIGUSR2
-#define SIGUSR2 SIGFPE
-#endif
-
-/*
- * These can be faster & more efficient than strcmp()/strncmp()...
- */
-#define STREQN(s1,s2) ((*s1 == *s2) && (strcmp(s1,s2) == 0))
-#define STRNEQN(s1,s2,n) ((*s1 == *s2) && (strncmp(s1,s2,n) == 0))
-
-/*
- * Configuration file limitations.
- */
-#define C_MAXFILE 10 /* max number of boot-able files */
-#define C_LINELEN 1024 /* max length of line */
-
-/*
- * Direction of packet (used as argument to DispPkt).
- */
-#define DIR_RCVD 0
-#define DIR_SENT 1
-#define DIR_NONE 2
-
-/*
- * These need not be functions, so...
- */
-#define FreeStr(str) free(str)
-#define FreeClient(cli) free(cli)
-#define GenSessID() (++SessionID ? SessionID: ++SessionID)
-
-/*
- * Converting an Ethernet address to a string is done in many routines.
- * Using `rmp.hp_hdr.saddr' works because this field is *never* changed;
- * it will *always* contain the source address of the packet.
- */
-#define EnetStr(rptr) GetEtherAddr(&(rptr)->rmp.hp_hdr.saddr[0])
-
-/*
- * Every machine we can boot will have one of these allocated for it
- * (unless there are no restrictions on who we can boot).
- */
-typedef struct client_s {
- u_char addr[RMP_ADDRLEN]; /* addr of machine */
- char *files[C_MAXFILE]; /* boot-able files */
- struct client_s *next; /* ptr to next */
-} CLIENT;
-
-/*
- * Every active connection has one of these allocated for it.
- */
-typedef struct rmpconn_s {
- struct rmp_packet rmp; /* RMP packet */
- int rmplen; /* length of packet */
- struct timeval tstamp; /* last time active */
- int bootfd; /* open boot file */
- struct rmpconn_s *next; /* ptr to next */
-} RMPCONN;
-
-/*
- * All these variables are defined in "conf.c".
- */
-extern char *ProgName; /* path-stripped argv[0] */
-extern char MyHost[]; /* this hosts' name */
-extern int MyPid; /* this processes' ID */
-extern int DebugFlg; /* set true if debugging */
-extern int BootAny; /* set true if we can boot anyone */
-
-extern char *ConfigFile; /* configuration file */
-extern char *DfltConfig; /* default configuration file */
-extern char *DbgFile; /* debug output file */
-extern char *PidFile; /* file containing pid of server */
-extern char *BootDir; /* directory w/boot files */
-
-extern FILE *DbgFp; /* debug file pointer */
-extern char *IntfName; /* interface we are attached to */
-
-extern u_short SessionID; /* generated session ID */
-
-extern char *BootFiles[]; /* list of boot files */
-
-extern CLIENT *Clients; /* list of addrs we'll accept */
-extern RMPCONN *RmpConns; /* list of active connections */
-
-extern char RmpMcastAddr[]; /* RMP multicast address */
-
-void AddConn __P((RMPCONN *));
-int BootDone __P((RMPCONN *));
-void BpfClose __P((void));
-char *BpfGetIntfName __P((char **));
-int BpfOpen __P((void));
-int BpfRead __P((RMPCONN *, int));
-int BpfWrite __P((RMPCONN *));
-void DebugOff __P((int));
-void DebugOn __P((int));
-void DispPkt __P((RMPCONN *, int));
-void DoTimeout __P((void));
-void DspFlnm __P((u_int, char *));
-void Exit __P((int));
-CLIENT *FindClient __P((RMPCONN *));
-RMPCONN *FindConn __P((RMPCONN *));
-void FreeClients __P((void));
-void FreeConn __P((RMPCONN *));
-void FreeConns __P((void));
-int GetBootFiles __P((void));
-char *GetEtherAddr __P((u_char *));
-CLIENT *NewClient __P((u_char *));
-RMPCONN *NewConn __P((RMPCONN *));
-char *NewStr __P((char *));
-u_char *ParseAddr __P((char *));
-int ParseConfig __P((void));
-void ProcessPacket __P((RMPCONN *, CLIENT *));
-void ReConfig __P((int));
-void RemoveConn __P((RMPCONN *));
-int SendBootRepl __P((struct rmp_packet *, RMPCONN *, char *[]));
-int SendFileNo __P((struct rmp_packet *, RMPCONN *, char *[]));
-int SendPacket __P((RMPCONN *));
-int SendReadRepl __P((RMPCONN *));
-int SendServerID __P((RMPCONN *));
diff --git a/libexec/rbootd/parseconf.c b/libexec/rbootd/parseconf.c
deleted file mode 100644
index d00436f071c87..0000000000000
--- a/libexec/rbootd/parseconf.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)parseconf.c 8.1 (Berkeley) 6/4/93
- *
- * Utah $Hdr: parseconf.c 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-#ifndef lint
-static char sccsid[] = "@(#)parseconf.c 8.1 (Berkeley) 6/4/93";
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <ctype.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include "defs.h"
-
-/*
-** ParseConfig -- parse the config file into linked list of clients.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** 1 on success, 0 otherwise.
-**
-** Side Effects:
-** - Linked list of clients will be (re)allocated.
-**
-** Warnings:
-** - GetBootFiles() must be called before this routine
-** to create a linked list of default boot files.
-*/
-int
-ParseConfig()
-{
- FILE *fp;
- CLIENT *client;
- u_char *addr;
- char line[C_LINELEN];
- register char *cp, *bcp;
- register int i, j;
- int omask, linecnt = 0;
-
- if (BootAny) /* ignore config file */
- return(1);
-
- FreeClients(); /* delete old list of clients */
-
- if ((fp = fopen(ConfigFile, "r")) == NULL) {
- syslog(LOG_ERR, "ParseConfig: can't open config file (%s)",
- ConfigFile);
- return(0);
- }
-
- /*
- * We've got to block SIGHUP to prevent reconfiguration while
- * dealing with the linked list of Clients. This can be done
- * when actually linking the new client into the list, but
- * this could have unexpected results if the server was HUP'd
- * whilst reconfiguring. Hence, it is done here.
- */
- omask = sigblock(sigmask(SIGHUP));
-
- /*
- * GETSTR positions `bcp' at the start of the current token,
- * and null terminates it. `cp' is positioned at the start
- * of the next token. spaces & commas are separators.
- */
-#define GETSTR while (isspace(*cp) || *cp == ',') cp++; \
- bcp = cp; \
- while (*cp && *cp!=',' && !isspace(*cp)) cp++; \
- if (*cp) *cp++ = '\0'
-
- /*
- * For each line, parse it into a new CLIENT struct.
- */
- while (fgets(line, C_LINELEN, fp) != NULL) {
- linecnt++; /* line counter */
-
- if (*line == '\0' || *line == '#') /* ignore comment */
- continue;
-
- if ((cp = index(line,'#')) != NULL) /* trash comments */
- *cp = '\0';
-
- cp = line; /* init `cp' */
- GETSTR; /* get RMP addr */
- if (bcp == cp) /* all delimiters */
- continue;
-
- /*
- * Get an RMP address from a string. Abort on failure.
- */
- if ((addr = ParseAddr(bcp)) == NULL) {
- syslog(LOG_ERR,
- "ParseConfig: line %d: cant parse <%s>",
- linecnt, bcp);
- continue;
- }
-
- if ((client = NewClient(addr)) == NULL) /* alloc new client */
- continue;
-
- GETSTR; /* get first file */
-
- /*
- * If no boot files are spec'd, use the default list.
- * Otherwise, validate each file (`bcp') against the
- * list of boot-able files.
- */
- i = 0;
- if (bcp == cp) /* no files spec'd */
- for (; i < C_MAXFILE && BootFiles[i] != NULL; i++)
- client->files[i] = BootFiles[i];
- else {
- do {
- /*
- * For each boot file spec'd, make sure it's
- * in our list. If so, include a pointer to
- * it in the CLIENT's list of boot files.
- */
- for (j = 0; ; j++) {
- if (j==C_MAXFILE||BootFiles[j]==NULL) {
- syslog(LOG_ERR, "ParseConfig: line %d: no boot file (%s)",
- linecnt, bcp);
- break;
- }
- if (STREQN(BootFiles[j], bcp)) {
- if (i < C_MAXFILE)
- client->files[i++] =
- BootFiles[j];
- else
- syslog(LOG_ERR, "ParseConfig: line %d: too many boot files (%s)",
- linecnt, bcp);
- break;
- }
- }
- GETSTR; /* get next file */
- } while (bcp != cp);
-
- /*
- * Restricted list of boot files were spec'd,
- * however, none of them were found. Since we
- * apparently cant let them boot "just anything",
- * the entire record is invalidated.
- */
- if (i == 0) {
- FreeClient(client);
- continue;
- }
- }
-
- /*
- * Link this client into the linked list of clients.
- * SIGHUP has already been blocked.
- */
- if (Clients)
- client->next = Clients;
- Clients = client;
- }
-
- (void) fclose(fp); /* close config file */
-
- (void) sigsetmask(omask); /* reset signal mask */
-
- return(1); /* return success */
-}
-
-/*
-** ParseAddr -- Parse a string containing an RMP address.
-**
-** This routine is fairly liberal at parsing an RMP address. The
-** address must contain 6 octets consisting of between 0 and 2 hex
-** chars (upper/lower case) separated by colons. If two colons are
-** together (e.g. "::", the octet between them is recorded as being
-** zero. Hence, the following addrs are all valid and parse to the
-** same thing:
-**
-** 08:00:09:00:66:ad 8::9:0:66:AD 8::9::66:aD
-**
-** For clarity, an RMP address is really an Ethernet address, but
-** since the HP boot code uses IEEE 802.3, it's really an IEEE
-** 802.3 address. Of course, all of these are identical.
-**
-** Parameters:
-** str - string representation of an RMP address.
-**
-** Returns:
-** pointer to a static array of RMP_ADDRLEN bytes.
-**
-** Side Effects:
-** None.
-**
-** Warnings:
-** - The return value points to a static buffer; it must
-** be copied if it's to be saved.
-** - For speed, we assume a u_char consists of 8 bits.
-*/
-u_char *
-ParseAddr(str)
- char *str;
-{
- static u_char addr[RMP_ADDRLEN];
- register char *cp;
- register unsigned i;
- register int part, subpart;
-
- bzero((char *)&addr[0], RMP_ADDRLEN); /* zero static buffer */
-
- part = subpart = 0;
- for (cp = str; *cp; cp++) {
- /*
- * A colon (`:') must be used to delimit each octet.
- */
- if (*cp == ':') {
- if (++part == RMP_ADDRLEN) /* too many parts */
- return(NULL);
- subpart = 0;
- continue;
- }
-
- /*
- * Convert hex character to an integer.
- */
- if (isdigit(*cp))
- i = *cp - '0';
- else {
- i = (isupper(*cp)? tolower(*cp): *cp) - 'a' + 10;
- if (i < 10 || i > 15) /* not a hex char */
- return(NULL);
- }
-
- if (subpart++) {
- if (subpart > 2) /* too many hex chars */
- return(NULL);
- addr[part] <<= 4;
- }
- addr[part] |= i;
- }
-
- if (part != (RMP_ADDRLEN-1)) /* too few parts */
- return(NULL);
-
- return(&addr[0]);
-}
-
-/*
-** GetBootFiles -- record list of files in current (boot) directory.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** Number of boot files on success, 0 on failure.
-**
-** Side Effects:
-** Strings in `BootFiles' are freed/allocated.
-**
-** Warnings:
-** - After this routine is called, ParseConfig() must be
-** called to re-order it's list of boot file pointers.
-*/
-int
-GetBootFiles()
-{
- DIR *dfd;
- struct stat statb;
- register struct dirent *dp;
- register int i;
-
- /*
- * Free the current list of boot files.
- */
- for (i = 0; i < C_MAXFILE && BootFiles[i] != NULL; i++) {
- FreeStr(BootFiles[i]);
- BootFiles[i] = NULL;
- }
-
- /*
- * Open current directory to read boot file names.
- */
- if ((dfd = opendir(".")) == NULL) { /* open BootDir */
- syslog(LOG_ERR, "GetBootFiles: can't open directory (%s)\n",
- BootDir);
- return(0);
- }
-
- /*
- * Read each boot file name and allocate space for it in the
- * list of boot files (BootFiles). All boot files read after
- * C_MAXFILE will be ignored.
- */
- i = 0;
- for (dp = readdir(dfd); dp != NULL; dp = readdir(dfd)) {
- if (stat(dp->d_name, &statb) < 0 ||
- (statb.st_mode & S_IFMT) != S_IFREG)
- continue;
- if (i == C_MAXFILE)
- syslog(LOG_ERR,
- "GetBootFiles: too many boot files (%s ignored)",
- dp->d_name);
- else if ((BootFiles[i] = NewStr(dp->d_name)) != NULL)
- i++;
- }
-
- (void) closedir(dfd); /* close BootDir */
-
- if (i == 0) /* cant find any boot files */
- syslog(LOG_ERR, "GetBootFiles: no boot files (%s)\n", BootDir);
-
- return(i);
-}
diff --git a/libexec/rbootd/pathnames.h b/libexec/rbootd/pathnames.h
deleted file mode 100644
index d960dcee96ac4..0000000000000
--- a/libexec/rbootd/pathnames.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)pathnames.h 8.1 (Berkeley) 6/4/93
- *
- * Utah $Hdr: pathnames.h 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-#define _PATH_BPF "/dev/bpf%d"
-#define _PATH_RBOOTDCONF "/etc/rbootd.conf"
-#define _PATH_RBOOTDDBG "/tmp/rbootd.dbg"
-#define _PATH_RBOOTDLIB "/usr/mdec/rbootd"
-#define _PATH_RBOOTDPID "/var/run/rbootd.pid"
diff --git a/libexec/rbootd/rbootd.8 b/libexec/rbootd/rbootd.8
deleted file mode 100644
index f4eb36477def8..0000000000000
--- a/libexec/rbootd/rbootd.8
+++ /dev/null
@@ -1,156 +0,0 @@
-.\" Copyright (c) 1988, 1992 The University of Utah and the Center
-.\" for Software Science (CSS).
-.\" Copyright (c) 1992, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" the Center for Software Science of the University of Utah Computer
-.\" Science Department. CSS requests users of this software to return
-.\" to css-dist@cs.utah.edu any improvements that they make and grant
-.\" CSS redistribution rights.
-.\"
-.\" 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 the University of
-.\" California, Berkeley and its contributors.
-.\" 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
-.\"
-.\" @(#)rbootd.8 8.2 (Berkeley) 12/11/93
-.\"
-.\" Utah $Hdr: rbootd.man 3.1 92/07/06$
-.\" Author: Jeff Forys, University of Utah CSS
-.\"
-.Dd "December 11, 1993"
-.Dt RBOOTD 8
-.Os
-.Sh NAME
-.Nm rbootd
-.Nd HP remote boot server
-.Sh SYNOPSIS
-.Nm rbootd
-.Op Fl ad
-.Op Fl i Ar interface
-.Op config_file
-.Sh DESCRIPTION
-The
-.Nm rbootd
-utility services boot requests from Hewlett-Packard workstations over a
-local area network.
-All boot files must reside in the boot file directory; further, if a
-client supplies path information in its boot request, it will be silently
-stripped away before processing.
-By default,
-.Nm rbootd
-only responds to requests from machines listed in its configuration file.
-.Pp
-The options are as follows:
-.Bl -tag -width Fl
-.It Fl a
-Respond to boot requests from any machine.
-The configuration file is ignored if this option is specified.
-.It Fl d
-Run
-.Nm rbootd
-in debug mode.
-Packets sent and received are displayed to the terminal.
-.It Fl i Ar interface
-Service boot requests on specified interface.
-If unspecified,
-.Nm rbootd
-searches the system interface list for the lowest numbered, configured
-``up'' interface (excluding loopback).
-Ties are broken by choosing the earliest match.
-.El
-.Pp
-Specifying
-.Ar config_file
-on the command line causes
-.Nm rbootd
-to use a different configuration file from the default.
-.Pp
-The configuration file is a text file where each line describes a particular
-machine.
-A line must start with a machine's Ethernet address followed by an optional
-list of boot file names.
-An Ethernet address is specified in hexadecimal with each of its six octets
-separated by a colon.
-The boot file names come from the boot file directory.
-The ethernet address and boot file(s) must be separated by white-space
-and/or comma characters.
-A pound sign causes the remainder of a line to be ignored.
-.Pp
-Here is a sample configuration file:
-.Bl -column 08:00:09:0:66:ad SYSHPBSD,SYSHPUX "# vandy (anything)"
-.It #
-.It # ethernet addr boot file(s) comments
-.It #
-.It 08:00:09:0:66:ad SYSHPBSD # snake (4.3BSD)
-.It 08:00:09:0:59:5b # vandy (anything)
-.It 8::9:1:C6:75 SYSHPBSD,SYSHPUX # jaguar (either)
-.El
-.Pp
-.Nm Rbootd
-logs status and error messages via
-.Xr syslog 3 .
-A startup message is always logged, and in the case of fatal errors (or
-deadly signals) a message is logged announcing the server's termination.
-In general, a non-fatal error is handled by ignoring the event that caused
-it (e.g. an invalid Ethernet address in the config file causes that line
-to be invalidated).
-.Pp
-The following signals have the specified effect when sent to the server
-process using the
-.Xr kill 1
-command:
-.Bl -tag -width SIGUSR1 -offset -compact
-.It SIGHUP
-Drop all active connections and reconfigure.
-.It SIGUSR1
-Turn on debugging, do nothing if already on.
-.It SIGUSR2
-Turn off debugging, do nothing if already off.
-.El
-.Sh "FILES"
-.Bl -tag -width /usr/libexec/rbootd -compact
-.It /dev/bpf#
-packet-filter device
-.It /etc/rbootd.conf
-configuration file
-.It /tmp/rbootd.dbg
-debug output
-.It /usr/mdec/rbootd
-directory containing boot files
-.It /var/run/rbootd.pid
-process id
-.El
-.Sh SEE ALSO
-.Xr kill 1 ,
-.Xr socket 2 ,
-.Xr signal 3 ,
-.Xr syslog 3 ,
-.Xr rmp 4
-.Sh BUGS
-If multiple servers are started on the same interface, each will receive
-and respond to the same boot packets.
diff --git a/libexec/rbootd/rbootd.c b/libexec/rbootd/rbootd.c
deleted file mode 100644
index aa01583496f2a..0000000000000
--- a/libexec/rbootd/rbootd.c
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)rbootd.c 8.2 (Berkeley) 2/22/94
- *
- * Utah $Hdr: rbootd.c 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-#ifndef lint
-static char copyright[] =
-"@(#) Copyright (c) 1992, 1993\n\
- The Regents of the University of California. All rights reserved.\n";
-#endif /* not lint */
-
-#ifndef lint
-static char sccsid[] = "@(#)rbootd.c 8.2 (Berkeley) 2/22/94";
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/ioctl.h>
-#include <sys/time.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-#include "defs.h"
-
-
-/* fd mask macros (backward compatibility with 4.2BSD) */
-#ifndef FD_SET
-#ifdef notdef
-typedef struct fd_set { /* this should already be in 4.2 */
- int fds_bits[1];
-} fd_set;
-#endif
-#define FD_ZERO(p) ((p)->fds_bits[0] = 0)
-#define FD_SET(n, p) ((p)->fds_bits[0] |= (1 << (n)))
-#define FD_CLR(n, p) ((p)->fds_bits[0] &= ~(1 << (n)))
-#define FD_ISSET(n, p) ((p)->fds_bits[0] & (1 << (n)))
-#endif
-
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- int c, fd, omask, maxfds;
- fd_set rset;
-
- /*
- * Find what name we are running under.
- */
- ProgName = (ProgName = rindex(argv[0],'/')) ? ++ProgName : *argv;
-
- /*
- * Close any open file descriptors.
- * Temporarily leave stdin & stdout open for `-d',
- * and stderr open for any pre-syslog error messages.
- */
- {
- int i, nfds = getdtablesize();
-
- for (i = 0; i < nfds; i++)
- if (i != fileno(stdin) && i != fileno(stdout) &&
- i != fileno(stderr))
- (void) close(i);
- }
-
- /*
- * Parse any arguments.
- */
- while ((c = getopt(argc, argv, "adi:")) != EOF)
- switch(c) {
- case 'a':
- BootAny++;
- break;
- case 'd':
- DebugFlg++;
- break;
- case 'i':
- IntfName = optarg;
- break;
- }
- for (; optind < argc; optind++) {
- if (ConfigFile == NULL)
- ConfigFile = argv[optind];
- else {
- fprintf(stderr,
- "%s: too many config files (`%s' ignored)\n",
- ProgName, argv[optind]);
- }
- }
-
- if (ConfigFile == NULL) /* use default config file */
- ConfigFile = DfltConfig;
-
- if (DebugFlg) {
- DbgFp = stdout; /* output to stdout */
-
- (void) signal(SIGUSR1, SIG_IGN); /* dont muck w/DbgFp */
- (void) signal(SIGUSR2, SIG_IGN);
- } else {
- (void) fclose(stdin); /* dont need these */
- (void) fclose(stdout);
-
- /*
- * Fork off a child to do the work & exit.
- */
- switch(fork()) {
- case -1: /* fork failed */
- fprintf(stderr, "%s: ", ProgName);
- perror("fork");
- Exit(0);
- case 0: /* this is the CHILD */
- break;
- default: /* this is the PARENT */
- _exit(0);
- }
-
- /*
- * Try to disassociate from the current tty.
- */
- {
- char *devtty = "/dev/tty";
- int i;
-
- if ((i = open(devtty, O_RDWR)) < 0) {
- /* probably already disassociated */
- if (setpgrp(0, 0) < 0) {
- fprintf(stderr, "%s: ", ProgName);
- perror("setpgrp");
- }
- } else {
- if (ioctl(i, (u_long)TIOCNOTTY, (char *)0) < 0){
- fprintf(stderr, "%s: ", ProgName);
- perror("ioctl");
- }
- (void) close(i);
- }
- }
-
- (void) signal(SIGUSR1, DebugOn);
- (void) signal(SIGUSR2, DebugOff);
- }
-
- (void) fclose(stderr); /* finished with it */
-
-#ifdef SYSLOG4_2
- openlog(ProgName, LOG_PID);
-#else
- openlog(ProgName, LOG_PID, LOG_DAEMON);
-#endif
-
- /*
- * If no interface was specified, get one now.
- *
- * This is convoluted because we want to get the default interface
- * name for the syslog("restarted") message. If BpfGetIntfName()
- * runs into an error, it will return a syslog-able error message
- * (in `errmsg') which will be displayed here.
- */
- if (IntfName == NULL) {
- char *errmsg;
-
- if ((IntfName = BpfGetIntfName(&errmsg)) == NULL) {
- syslog(LOG_NOTICE, "restarted (??)");
- syslog(LOG_ERR, errmsg);
- Exit(0);
- }
- }
-
- syslog(LOG_NOTICE, "restarted (%s)", IntfName);
-
- (void) signal(SIGHUP, ReConfig);
- (void) signal(SIGINT, Exit);
- (void) signal(SIGTERM, Exit);
-
- /*
- * Grab our host name and pid.
- */
- if (gethostname(MyHost, MAXHOSTNAMELEN) < 0) {
- syslog(LOG_ERR, "gethostname: %m");
- Exit(0);
- }
- MyHost[MAXHOSTNAMELEN] = '\0';
-
- MyPid = getpid();
-
- /*
- * Write proc's pid to a file.
- */
- {
- FILE *fp;
-
- if ((fp = fopen(PidFile, "w")) != NULL) {
- (void) fprintf(fp, "%d\n", MyPid);
- (void) fclose(fp);
- } else {
- syslog(LOG_WARNING, "fopen: failed (%s)", PidFile);
- }
- }
-
- /*
- * All boot files are relative to the boot directory, we might
- * as well chdir() there to make life easier.
- */
- if (chdir(BootDir) < 0) {
- syslog(LOG_ERR, "chdir: %m (%s)", BootDir);
- Exit(0);
- }
-
- /*
- * Initial configuration.
- */
- omask = sigblock(sigmask(SIGHUP)); /* prevent reconfig's */
- if (GetBootFiles() == 0) /* get list of boot files */
- Exit(0);
- if (ParseConfig() == 0) /* parse config file */
- Exit(0);
-
- /*
- * Open and initialize a BPF device for the appropriate interface.
- * If an error is encountered, a message is displayed and Exit()
- * is called.
- */
- fd = BpfOpen();
-
- (void) sigsetmask(omask); /* allow reconfig's */
-
- /*
- * Main loop: receive a packet, determine where it came from,
- * and if we service this host, call routine to handle request.
- */
- maxfds = fd + 1;
- FD_ZERO(&rset);
- FD_SET(fd, &rset);
- for (;;) {
- struct timeval timeout;
- fd_set r;
- int nsel;
-
- r = rset;
-
- if (RmpConns == NULL) { /* timeout isnt necessary */
- nsel = select(maxfds, &r, (fd_set *)0, (fd_set *)0,
- (struct timeval *)0);
- } else {
- timeout.tv_sec = RMP_TIMEOUT;
- timeout.tv_usec = 0;
- nsel = select(maxfds, &r, (fd_set *)0, (fd_set *)0,
- &timeout);
- }
-
- if (nsel < 0) {
- if (errno == EINTR)
- continue;
- syslog(LOG_ERR, "select: %m");
- Exit(0);
- } else if (nsel == 0) { /* timeout */
- DoTimeout(); /* clear stale conns */
- continue;
- }
-
- if (FD_ISSET(fd, &r)) {
- RMPCONN rconn;
- CLIENT *client, *FindClient();
- int doread = 1;
-
- while (BpfRead(&rconn, doread)) {
- doread = 0;
-
- if (DbgFp != NULL) /* display packet */
- DispPkt(&rconn,DIR_RCVD);
-
- omask = sigblock(sigmask(SIGHUP));
-
- /*
- * If we do not restrict service, set the
- * client to NULL (ProcessPacket() handles
- * this). Otherwise, check that we can
- * service this host; if not, log a message
- * and ignore the packet.
- */
- if (BootAny) {
- client = NULL;
- } else if ((client=FindClient(&rconn))==NULL) {
- syslog(LOG_INFO,
- "%s: boot packet ignored",
- EnetStr(&rconn));
- (void) sigsetmask(omask);
- continue;
- }
-
- ProcessPacket(&rconn,client);
-
- (void) sigsetmask(omask);
- }
- }
- }
-}
-
-/*
-** DoTimeout -- Free any connections that have timed out.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - Timed out connections in `RmpConns' will be freed.
-*/
-void
-DoTimeout()
-{
- register RMPCONN *rtmp;
- struct timeval now;
-
- (void) gettimeofday(&now, (struct timezone *)0);
-
- /*
- * For each active connection, if RMP_TIMEOUT seconds have passed
- * since the last packet was sent, delete the connection.
- */
- for (rtmp = RmpConns; rtmp != NULL; rtmp = rtmp->next)
- if ((rtmp->tstamp.tv_sec + RMP_TIMEOUT) < now.tv_sec) {
- syslog(LOG_WARNING, "%s: connection timed out (%u)",
- EnetStr(rtmp), rtmp->rmp.r_type);
- RemoveConn(rtmp);
- }
-}
-
-/*
-** FindClient -- Find client associated with a packet.
-**
-** Parameters:
-** rconn - the new packet.
-**
-** Returns:
-** Pointer to client info if found, NULL otherwise.
-**
-** Side Effects:
-** None.
-**
-** Warnings:
-** - This routine must be called with SIGHUP blocked since
-** a reconfigure can invalidate the information returned.
-*/
-
-CLIENT *
-FindClient(rconn)
- register RMPCONN *rconn;
-{
- register CLIENT *ctmp;
-
- for (ctmp = Clients; ctmp != NULL; ctmp = ctmp->next)
- if (bcmp((char *)&rconn->rmp.hp_hdr.saddr[0],
- (char *)&ctmp->addr[0], RMP_ADDRLEN) == 0)
- break;
-
- return(ctmp);
-}
-
-/*
-** Exit -- Log an error message and exit.
-**
-** Parameters:
-** sig - caught signal (or zero if not dying on a signal).
-**
-** Returns:
-** Does not return.
-**
-** Side Effects:
-** - This process ceases to exist.
-*/
-void
-Exit(sig)
- int sig;
-{
- if (sig > 0)
- syslog(LOG_ERR, "going down on signal %d", sig);
- else
- syslog(LOG_ERR, "going down with fatal error");
- BpfClose();
- exit(1);
-}
-
-/*
-** ReConfig -- Get new list of boot files and reread config files.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - All active connections are dropped.
-** - List of boot-able files is changed.
-** - List of clients is changed.
-**
-** Warnings:
-** - This routine must be called with SIGHUP blocked.
-*/
-void
-ReConfig(signo)
- int signo;
-{
- syslog(LOG_NOTICE, "reconfiguring boot server");
-
- FreeConns();
-
- if (GetBootFiles() == 0)
- Exit(0);
-
- if (ParseConfig() == 0)
- Exit(0);
-}
-
-/*
-** DebugOff -- Turn off debugging.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - Debug file is closed.
-*/
-void
-DebugOff(signo)
- int signo;
-{
- if (DbgFp != NULL)
- (void) fclose(DbgFp);
-
- DbgFp = NULL;
-}
-
-/*
-** DebugOn -- Turn on debugging.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - Debug file is opened/truncated if not already opened,
-** otherwise do nothing.
-*/
-void
-DebugOn(signo)
- int signo;
-{
- if (DbgFp == NULL) {
- if ((DbgFp = fopen(DbgFile, "w")) == NULL)
- syslog(LOG_ERR, "can't open debug file (%s)", DbgFile);
- }
-}
diff --git a/libexec/rbootd/rmp.h b/libexec/rbootd/rmp.h
deleted file mode 100644
index d3b016760d355..0000000000000
--- a/libexec/rbootd/rmp.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)rmp.h 8.1 (Berkeley) 6/4/93
- *
- * Utah $Hdr: rmp.h 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-/*
- * Define MIN/MAX sizes of RMP (ethernet) packet.
- * For ease of computation, the 4 octet CRC field is not included.
- *
- * MCLBYTES is for bpfwrite(); it is adamant about using a cluster.
- */
-
-#define RMP_MAX_PACKET MIN(1514,MCLBYTES)
-#define RMP_MIN_PACKET 60
-
-/*
- * Define RMP/Ethernet Multicast address (9:0:9:0:0:4) and its length.
- */
-#define RMP_ADDR { 0x9, 0x0, 0x9, 0x0, 0x0, 0x4 }
-#define RMP_ADDRLEN 6
-
-/*
- * Define IEEE802.2 (Logical Link Control) information.
- */
-#define IEEE_DSAP_HP 0xF8 /* Destination Service Access Point */
-#define IEEE_SSAP_HP 0xF8 /* Source Service Access Point */
-#define IEEE_CNTL_HP 0x0300 /* Type 1 / I format control information */
-
-#define HPEXT_DXSAP 0x608 /* HP Destination Service Access Point */
-#define HPEXT_SXSAP 0x609 /* HP Source Service Access Point */
-
-/*
- * 802.3-style "Ethernet" header.
- */
-
-struct hp_hdr {
- u_char daddr[RMP_ADDRLEN];
- u_char saddr[RMP_ADDRLEN];
- u_short len;
-};
-
-/*
- * HP uses 802.2 LLC with their own local extensions. This struct makes
- * sence out of this data (encapsulated in the above 802.3 packet).
- */
-
-struct hp_llc {
- u_char dsap; /* 802.2 DSAP */
- u_char ssap; /* 802.2 SSAP */
- u_short cntrl; /* 802.2 control field */
- u_short filler; /* HP filler (must be zero) */
- u_short dxsap; /* HP extended DSAP */
- u_short sxsap; /* HP extended SSAP */
-};
diff --git a/libexec/rbootd/rmp_var.h b/libexec/rbootd/rmp_var.h
deleted file mode 100644
index 7df1e87465fce..0000000000000
--- a/libexec/rbootd/rmp_var.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)rmp_var.h 8.1 (Berkeley) 6/4/93
- *
- * Utah $Hdr: rmp_var.h 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-/*
- * Possible values for "rmp_type" fields.
- */
-
-#define RMP_BOOT_REQ 1 /* boot request packet */
-#define RMP_BOOT_REPL 129 /* boot reply packet */
-#define RMP_READ_REQ 2 /* read request packet */
-#define RMP_READ_REPL 130 /* read reply packet */
-#define RMP_BOOT_DONE 3 /* boot complete packet */
-
-/*
- * Useful constants.
- */
-
-#define RMP_VERSION 2 /* protocol version */
-#define RMP_TIMEOUT 600 /* timeout connection after ten minutes */
-#define RMP_PROBESID 0xffff /* session ID for probes */
-#define RMP_HOSTLEN 13 /* max length of server's name */
-#define RMP_MACHLEN 20 /* length of machine type field */
-
-/*
- * RMP error codes
- */
-
-#define RMP_E_OKAY 0
-#define RMP_E_EOF 2 /* read reply: returned end of file */
-#define RMP_E_ABORT 3 /* abort operation */
-#define RMP_E_BUSY 4 /* boot reply: server busy */
-#define RMP_E_TIMEOUT 5 /* lengthen time out (not implemented) */
-#define RMP_E_NOFILE 16 /* boot reply: file does not exist */
-#define RMP_E_OPENFILE 17 /* boot reply: file open failed */
-#define RMP_E_NODFLT 18 /* boot reply: default file does not exist */
-#define RMP_E_OPENDFLT 19 /* boot reply: default file open failed */
-#define RMP_E_BADSID 25 /* read reply: bad session ID */
-#define RMP_E_BADPACKET 27 /* Bad packet detected */
-
-/*
- * RMPDATALEN is the maximum number of data octets that can be stuffed
- * into an RMP packet. This excludes the 802.2 LLC w/HP extensions.
- */
-#define RMPDATALEN (RMP_MAX_PACKET - (sizeof(struct hp_hdr) + \
- sizeof(struct hp_llc)))
-
-/*
- * Define sizes of packets we send. Boot and Read replies are variable
- * in length depending on the length of `s'.
- *
- * Also, define how much space `restofpkt' can take up for outgoing
- * Boot and Read replies. Boot Request packets are effectively
- * limited to 255 bytes due to the preceding 1-byte length field.
- */
-
-#define RMPBOOTSIZE(s) (sizeof(struct hp_hdr) + sizeof(struct hp_llc) + \
- sizeof(struct rmp_boot_repl) + s - sizeof(restofpkt))
-#define RMPREADSIZE(s) (sizeof(struct hp_hdr) + sizeof(struct hp_llc) + \
- sizeof(struct rmp_read_repl) + s - sizeof(restofpkt) \
- - sizeof(u_char))
-#define RMPDONESIZE (sizeof(struct hp_hdr) + sizeof(struct hp_llc) + \
- sizeof(struct rmp_boot_done))
-#define RMPBOOTDATA 255
-#define RMPREADDATA (RMPDATALEN - \
- (2*sizeof(u_char)+sizeof(u_short)+sizeof(u_word)))
-
-/*
- * This protocol defines some field sizes as "rest of ethernet packet".
- * There is no easy way to specify this in C, so we use a one character
- * field to denote it, and index past it to the end of the packet.
- */
-
-typedef char restofpkt;
-
-/*
- * Due to the RMP packet layout, we'll run into alignment problems
- * on machines that cant access words on half-word boundaries. If
- * you know that your machine does not suffer from this problem,
- * add it to the hp300 #define below.
- *
- * The following macros are used to deal with this problem:
- * WORDZE(w) Return True if u_word `w' is zero, False otherwise.
- * ZEROWORD(w) Set u_word `w' to zero.
- * COPYWORD(w1,w2) Copy u_word `w1' to `w2'.
- * GETWORD(w,i) Copy u_word `w' into int `i'.
- * PUTWORD(i,w) Copy int `i' into u_word `w'.
- *
- * N.B. We do not support little endian alignment-challenged machines.
- */
-#if defined(vax) || defined(tahoe) || defined(hp300)
-
-typedef u_int u_word;
-
-#define WORDZE(w) ((w) == 0)
-#define ZEROWORD(w) (w) = 0
-#define COPYWORD(w1,w2) (w2) = (w1)
-#define GETWORD(w, i) (i) = (w)
-#define PUTWORD(i, w) (w) = (i)
-
-#else
-
-#define _WORD_HIGHPART 0 /* XXX: assume Big Endian for now */
-#define _WORD_LOWPART 1
-
-typedef struct _uword { u_short val[2]; } u_word;
-
-#define WORDZE(w) \
- ((w.val[_WORD_HIGHPART] == 0) && (w.val[_WORD_LOWPART] == 0))
-#define ZEROWORD(w) \
- (w).val[_WORD_HIGHPART] = (w).val[_WORD_LOWPART] = 0
-#define COPYWORD(w1, w2) \
- { (w2).val[_WORD_HIGHPART] = (w1).val[_WORD_HIGHPART]; \
- (w2).val[_WORD_LOWPART] = (w1).val[_WORD_LOWPART]; \
- }
-#define GETWORD(w, i) \
- (i) = (((u_int)(w).val[_WORD_HIGHPART]) << 16) | (w).val[_WORD_LOWPART]
-#define PUTWORD(i, w) \
- { (w).val[_WORD_HIGHPART] = (u_short) (((i) >> 16) & 0xffff); \
- (w).val[_WORD_LOWPART] = (u_short) (i & 0xffff); \
- }
-
-#endif
-
-/*
- * Packet structures.
- */
-
-struct rmp_raw { /* generic RMP packet */
- u_char rmp_type; /* packet type */
- u_char rmp_rawdata[RMPDATALEN-1];
-};
-
-struct rmp_boot_req { /* boot request */
- u_char rmp_type; /* packet type (RMP_BOOT_REQ) */
- u_char rmp_retcode; /* return code (0) */
- u_word rmp_seqno; /* sequence number (real time clock) */
- u_short rmp_session; /* session id (normally 0) */
- u_short rmp_version; /* protocol version (RMP_VERSION) */
- char rmp_machtype[RMP_MACHLEN]; /* machine type */
- u_char rmp_flnmsize; /* length of rmp_flnm */
- restofpkt rmp_flnm; /* name of file to be read */
-};
-
-struct rmp_boot_repl { /* boot reply */
- u_char rmp_type; /* packet type (RMP_BOOT_REPL) */
- u_char rmp_retcode; /* return code (normally 0) */
- u_word rmp_seqno; /* sequence number (from boot req) */
- u_short rmp_session; /* session id (generated) */
- u_short rmp_version; /* protocol version (RMP_VERSION) */
- u_char rmp_flnmsize; /* length of rmp_flnm */
- restofpkt rmp_flnm; /* name of file (from boot req) */
-};
-
-struct rmp_read_req { /* read request */
- u_char rmp_type; /* packet type (RMP_READ_REQ) */
- u_char rmp_retcode; /* return code (0) */
- u_word rmp_offset; /* file relative byte offset */
- u_short rmp_session; /* session id (from boot repl) */
- u_short rmp_size; /* max no of bytes to send */
-};
-
-struct rmp_read_repl { /* read reply */
- u_char rmp_type; /* packet type (RMP_READ_REPL) */
- u_char rmp_retcode; /* return code (normally 0) */
- u_word rmp_offset; /* byte offset (from read req) */
- u_short rmp_session; /* session id (from read req) */
- restofpkt rmp_data; /* data (max size from read req) */
- u_char rmp_unused; /* padding to 16-bit boundary */
-};
-
-struct rmp_boot_done { /* boot complete */
- u_char rmp_type; /* packet type (RMP_BOOT_DONE) */
- u_char rmp_retcode; /* return code (0) */
- u_word rmp_unused; /* not used (0) */
- u_short rmp_session; /* session id (from read repl) */
-};
-
-struct rmp_packet {
- struct hp_hdr hp_hdr;
- struct hp_llc hp_llc;
- union {
- struct rmp_boot_req rmp_brq; /* boot request */
- struct rmp_boot_repl rmp_brpl; /* boot reply */
- struct rmp_read_req rmp_rrq; /* read request */
- struct rmp_read_repl rmp_rrpl; /* read reply */
- struct rmp_boot_done rmp_done; /* boot complete */
- struct rmp_raw rmp_raw; /* raw data */
- } rmp_proto;
-};
-
-/*
- * Make life easier...
- */
-
-#define r_type rmp_proto.rmp_raw.rmp_type
-#define r_data rmp_proto.rmp_raw.rmp_data
-#define r_brq rmp_proto.rmp_brq
-#define r_brpl rmp_proto.rmp_brpl
-#define r_rrq rmp_proto.rmp_rrq
-#define r_rrpl rmp_proto.rmp_rrpl
-#define r_done rmp_proto.rmp_done
diff --git a/libexec/rbootd/rmpproto.c b/libexec/rbootd/rmpproto.c
deleted file mode 100644
index d0a8d4a8086f2..0000000000000
--- a/libexec/rbootd/rmpproto.c
+++ /dev/null
@@ -1,593 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)rmpproto.c 8.1 (Berkeley) 6/4/93
- *
- * Utah $Hdr: rmpproto.c 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-#ifndef lint
-static char sccsid[] = "@(#)rmpproto.c 8.1 (Berkeley) 6/4/93";
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/time.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-#include "defs.h"
-
-/*
-** ProcessPacket -- determine packet type and do what's required.
-**
-** An RMP BOOT packet has been received. Look at the type field
-** and process Boot Requests, Read Requests, and Boot Complete
-** packets. Any other type will be dropped with a warning msg.
-**
-** Parameters:
-** rconn - the new connection
-** client - list of files available to this host
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - If this is a valid boot request, it will be added to
-** the linked list of outstanding requests (RmpConns).
-** - If this is a valid boot complete, its associated
-** entry in RmpConns will be deleted.
-** - Also, unless we run out of memory, a reply will be
-** sent to the host that sent the packet.
-*/
-void
-ProcessPacket(rconn, client)
- RMPCONN *rconn;
- CLIENT *client;
-{
- struct rmp_packet *rmp;
- RMPCONN *rconnout;
-
- rmp = &rconn->rmp; /* cache pointer to RMP packet */
-
- switch(rmp->r_type) { /* do what we came here to do */
- case RMP_BOOT_REQ: /* boot request */
- if ((rconnout = NewConn(rconn)) == NULL)
- return;
-
- /*
- * If the Session ID is 0xffff, this is a "probe"
- * packet and we do not want to add the connection
- * to the linked list of active connections. There
- * are two types of probe packets, if the Sequence
- * Number is 0 they want to know our host name, o/w
- * they want the name of the file associated with
- * the number spec'd by the Sequence Number.
- *
- * If this is an actual boot request, open the file
- * and send a reply. If SendBootRepl() does not
- * return 0, add the connection to the linked list
- * of active connections, otherwise delete it since
- * an error was encountered.
- */
- if (rmp->r_brq.rmp_session == RMP_PROBESID) {
- if (WORDZE(rmp->r_brq.rmp_seqno))
- (void) SendServerID(rconnout);
- else
- (void) SendFileNo(rmp, rconnout,
- client? client->files:
- BootFiles);
- FreeConn(rconnout);
- } else {
- if (SendBootRepl(rmp, rconnout,
- client? client->files: BootFiles))
- AddConn(rconnout);
- else
- FreeConn(rconnout);
- }
- break;
-
- case RMP_BOOT_REPL: /* boot reply (not valid) */
- syslog(LOG_WARNING, "%s: sent a boot reply",
- EnetStr(rconn));
- break;
-
- case RMP_READ_REQ: /* read request */
- /*
- * Send a portion of the boot file.
- */
- (void) SendReadRepl(rconn);
- break;
-
- case RMP_READ_REPL: /* read reply (not valid) */
- syslog(LOG_WARNING, "%s: sent a read reply",
- EnetStr(rconn));
- break;
-
- case RMP_BOOT_DONE: /* boot complete */
- /*
- * Remove the entry from the linked list of active
- * connections.
- */
- (void) BootDone(rconn);
- break;
-
- default: /* unknown RMP packet type */
- syslog(LOG_WARNING, "%s: unknown packet type (%u)",
- EnetStr(rconn), rmp->r_type);
- }
-}
-
-/*
-** SendServerID -- send our host name to who ever requested it.
-**
-** Parameters:
-** rconn - the reply packet to be formatted.
-**
-** Returns:
-** 1 on success, 0 on failure.
-**
-** Side Effects:
-** none.
-*/
-int
-SendServerID(rconn)
- RMPCONN *rconn;
-{
- register struct rmp_packet *rpl;
- register char *src, *dst;
- register u_char *size;
-
- rpl = &rconn->rmp; /* cache ptr to RMP packet */
-
- /*
- * Set up assorted fields in reply packet.
- */
- rpl->r_brpl.rmp_type = RMP_BOOT_REPL;
- rpl->r_brpl.rmp_retcode = RMP_E_OKAY;
- ZEROWORD(rpl->r_brpl.rmp_seqno);
- rpl->r_brpl.rmp_session = 0;
- rpl->r_brpl.rmp_version = RMP_VERSION;
-
- size = &rpl->r_brpl.rmp_flnmsize; /* ptr to length of host name */
-
- /*
- * Copy our host name into the reply packet incrementing the
- * length as we go. Stop at RMP_HOSTLEN or the first dot.
- */
- src = MyHost;
- dst = (char *) &rpl->r_brpl.rmp_flnm;
- for (*size = 0; *size < RMP_HOSTLEN; (*size)++) {
- if (*src == '.' || *src == '\0')
- break;
- *dst++ = *src++;
- }
-
- rconn->rmplen = RMPBOOTSIZE(*size); /* set packet length */
-
- return(SendPacket(rconn)); /* send packet */
-}
-
-/*
-** SendFileNo -- send the name of a bootable file to the requester.
-**
-** Parameters:
-** req - RMP BOOT packet containing the request.
-** rconn - the reply packet to be formatted.
-** filelist - list of files available to the requester.
-**
-** Returns:
-** 1 on success, 0 on failure.
-**
-** Side Effects:
-** none.
-*/
-int
-SendFileNo(req, rconn, filelist)
- struct rmp_packet *req;
- RMPCONN *rconn;
- char *filelist[];
-{
- register struct rmp_packet *rpl;
- register char *src, *dst;
- register u_char *size, i;
-
- GETWORD(req->r_brpl.rmp_seqno, i); /* SeqNo is really FileNo */
- rpl = &rconn->rmp; /* cache ptr to RMP packet */
-
- /*
- * Set up assorted fields in reply packet.
- */
- rpl->r_brpl.rmp_type = RMP_BOOT_REPL;
- PUTWORD(i, rpl->r_brpl.rmp_seqno);
- i--;
- rpl->r_brpl.rmp_session = 0;
- rpl->r_brpl.rmp_version = RMP_VERSION;
-
- size = &rpl->r_brpl.rmp_flnmsize; /* ptr to length of filename */
- *size = 0; /* init length to zero */
-
- /*
- * Copy the file name into the reply packet incrementing the
- * length as we go. Stop at end of string or when RMPBOOTDATA
- * characters have been copied. Also, set return code to
- * indicate success or "no more files".
- */
- if (i < C_MAXFILE && filelist[i] != NULL) {
- src = filelist[i];
- dst = (char *)&rpl->r_brpl.rmp_flnm;
- for (; *src && *size < RMPBOOTDATA; (*size)++) {
- if (*src == '\0')
- break;
- *dst++ = *src++;
- }
- rpl->r_brpl.rmp_retcode = RMP_E_OKAY;
- } else
- rpl->r_brpl.rmp_retcode = RMP_E_NODFLT;
-
- rconn->rmplen = RMPBOOTSIZE(*size); /* set packet length */
-
- return(SendPacket(rconn)); /* send packet */
-}
-
-/*
-** SendBootRepl -- open boot file and respond to boot request.
-**
-** Parameters:
-** req - RMP BOOT packet containing the request.
-** rconn - the reply packet to be formatted.
-** filelist - list of files available to the requester.
-**
-** Returns:
-** 1 on success, 0 on failure.
-**
-** Side Effects:
-** none.
-*/
-int
-SendBootRepl(req, rconn, filelist)
- struct rmp_packet *req;
- RMPCONN *rconn;
- char *filelist[];
-{
- int retval;
- char *filename, filepath[RMPBOOTDATA+1];
- RMPCONN *oldconn;
- register struct rmp_packet *rpl;
- register char *src, *dst1, *dst2;
- register u_char i;
-
- /*
- * If another connection already exists, delete it since we
- * are obviously starting again.
- */
- if ((oldconn = FindConn(rconn)) != NULL) {
- syslog(LOG_WARNING, "%s: dropping existing connection",
- EnetStr(oldconn));
- RemoveConn(oldconn);
- }
-
- rpl = &rconn->rmp; /* cache ptr to RMP packet */
-
- /*
- * Set up assorted fields in reply packet.
- */
- rpl->r_brpl.rmp_type = RMP_BOOT_REPL;
- COPYWORD(req->r_brq.rmp_seqno, rpl->r_brpl.rmp_seqno);
- rpl->r_brpl.rmp_session = GenSessID();
- rpl->r_brpl.rmp_version = RMP_VERSION;
- rpl->r_brpl.rmp_flnmsize = req->r_brq.rmp_flnmsize;
-
- /*
- * Copy file name to `filepath' string, and into reply packet.
- */
- src = &req->r_brq.rmp_flnm;
- dst1 = filepath;
- dst2 = &rpl->r_brpl.rmp_flnm;
- for (i = 0; i < req->r_brq.rmp_flnmsize; i++)
- *dst1++ = *dst2++ = *src++;
- *dst1 = '\0';
-
- /*
- * If we are booting HP-UX machines, their secondary loader will
- * ask for files like "/hp-ux". As a security measure, we do not
- * allow boot files to lay outside the boot directory (unless they
- * are purposely link'd out. So, make `filename' become the path-
- * stripped file name and spoof the client into thinking that it
- * really got what it wanted.
- */
- filename = (filename = rindex(filepath,'/'))? ++filename: filepath;
-
- /*
- * Check that this is a valid boot file name.
- */
- for (i = 0; i < C_MAXFILE && filelist[i] != NULL; i++)
- if (STREQN(filename, filelist[i]))
- goto match;
-
- /*
- * Invalid boot file name, set error and send reply packet.
- */
- rpl->r_brpl.rmp_retcode = RMP_E_NOFILE;
- retval = 0;
- goto sendpkt;
-
-match:
- /*
- * This is a valid boot file. Open the file and save the file
- * descriptor associated with this connection and set success
- * indication. If the file couldnt be opened, set error:
- * "no such file or dir" - RMP_E_NOFILE
- * "file table overflow" - RMP_E_BUSY
- * "too many open files" - RMP_E_BUSY
- * anything else - RMP_E_OPENFILE
- */
- if ((rconn->bootfd = open(filename, O_RDONLY, 0600)) < 0) {
- rpl->r_brpl.rmp_retcode = (errno == ENOENT)? RMP_E_NOFILE:
- (errno == EMFILE || errno == ENFILE)? RMP_E_BUSY:
- RMP_E_OPENFILE;
- retval = 0;
- } else {
- rpl->r_brpl.rmp_retcode = RMP_E_OKAY;
- retval = 1;
- }
-
-sendpkt:
- syslog(LOG_INFO, "%s: request to boot %s (%s)",
- EnetStr(rconn), filename, retval? "granted": "denied");
-
- rconn->rmplen = RMPBOOTSIZE(rpl->r_brpl.rmp_flnmsize);
-
- return (retval & SendPacket(rconn));
-}
-
-/*
-** SendReadRepl -- send a portion of the boot file to the requester.
-**
-** Parameters:
-** rconn - the reply packet to be formatted.
-**
-** Returns:
-** 1 on success, 0 on failure.
-**
-** Side Effects:
-** none.
-*/
-int
-SendReadRepl(rconn)
- RMPCONN *rconn;
-{
- int retval;
- RMPCONN *oldconn;
- register struct rmp_packet *rpl, *req;
- register int size = 0;
- int madeconn = 0;
-
- /*
- * Find the old connection. If one doesnt exist, create one only
- * to return the error code.
- */
- if ((oldconn = FindConn(rconn)) == NULL) {
- if ((oldconn = NewConn(rconn)) == NULL)
- return(0);
- syslog(LOG_ERR, "SendReadRepl: no active connection (%s)",
- EnetStr(rconn));
- madeconn++;
- }
-
- req = &rconn->rmp; /* cache ptr to request packet */
- rpl = &oldconn->rmp; /* cache ptr to reply packet */
-
- if (madeconn) { /* no active connection above; abort */
- rpl->r_rrpl.rmp_retcode = RMP_E_ABORT;
- retval = 1;
- goto sendpkt;
- }
-
- /*
- * Make sure Session ID's match.
- */
- if (req->r_rrq.rmp_session !=
- ((rpl->r_type == RMP_BOOT_REPL)? rpl->r_brpl.rmp_session:
- rpl->r_rrpl.rmp_session)) {
- syslog(LOG_ERR, "SendReadRepl: bad session id (%s)",
- EnetStr(rconn));
- rpl->r_rrpl.rmp_retcode = RMP_E_BADSID;
- retval = 1;
- goto sendpkt;
- }
-
- /*
- * If the requester asks for more data than we can fit,
- * silently clamp the request size down to RMPREADDATA.
- *
- * N.B. I do not know if this is "legal", however it seems
- * to work. This is necessary for bpfwrite() on machines
- * with MCLBYTES less than 1514.
- */
- if (req->r_rrq.rmp_size > RMPREADDATA)
- req->r_rrq.rmp_size = RMPREADDATA;
-
- /*
- * Position read head on file according to info in request packet.
- */
- GETWORD(req->r_rrq.rmp_offset, size);
- if (lseek(oldconn->bootfd, (off_t)size, L_SET) < 0) {
- syslog(LOG_ERR, "SendReadRepl: lseek: %m (%s)",
- EnetStr(rconn));
- rpl->r_rrpl.rmp_retcode = RMP_E_ABORT;
- retval = 1;
- goto sendpkt;
- }
-
- /*
- * Read data directly into reply packet.
- */
- if ((size = read(oldconn->bootfd, &rpl->r_rrpl.rmp_data,
- (int) req->r_rrq.rmp_size)) <= 0) {
- if (size < 0) {
- syslog(LOG_ERR, "SendReadRepl: read: %m (%s)",
- EnetStr(rconn));
- rpl->r_rrpl.rmp_retcode = RMP_E_ABORT;
- } else {
- rpl->r_rrpl.rmp_retcode = RMP_E_EOF;
- }
- retval = 1;
- goto sendpkt;
- }
-
- /*
- * Set success indication.
- */
- rpl->r_rrpl.rmp_retcode = RMP_E_OKAY;
-
-sendpkt:
- /*
- * Set up assorted fields in reply packet.
- */
- rpl->r_rrpl.rmp_type = RMP_READ_REPL;
- COPYWORD(req->r_rrq.rmp_offset, rpl->r_rrpl.rmp_offset);
- rpl->r_rrpl.rmp_session = req->r_rrq.rmp_session;
-
- oldconn->rmplen = RMPREADSIZE(size); /* set size of packet */
-
- retval &= SendPacket(oldconn); /* send packet */
-
- if (madeconn) /* clean up after ourself */
- FreeConn(oldconn);
-
- return (retval);
-}
-
-/*
-** BootDone -- free up memory allocated for a connection.
-**
-** Parameters:
-** rconn - incoming boot complete packet.
-**
-** Returns:
-** 1 on success, 0 on failure.
-**
-** Side Effects:
-** none.
-*/
-int
-BootDone(rconn)
- RMPCONN *rconn;
-{
- RMPCONN *oldconn;
- struct rmp_packet *rpl;
-
- /*
- * If we cant find the connection, ignore the request.
- */
- if ((oldconn = FindConn(rconn)) == NULL) {
- syslog(LOG_ERR, "BootDone: no existing connection (%s)",
- EnetStr(rconn));
- return(0);
- }
-
- rpl = &oldconn->rmp; /* cache ptr to RMP packet */
-
- /*
- * Make sure Session ID's match.
- */
- if (rconn->rmp.r_rrq.rmp_session !=
- ((rpl->r_type == RMP_BOOT_REPL)? rpl->r_brpl.rmp_session:
- rpl->r_rrpl.rmp_session)) {
- syslog(LOG_ERR, "BootDone: bad session id (%s)",
- EnetStr(rconn));
- return(0);
- }
-
- RemoveConn(oldconn); /* remove connection */
-
- syslog(LOG_INFO, "%s: boot complete", EnetStr(rconn));
-
- return(1);
-}
-
-/*
-** SendPacket -- send an RMP packet to a remote host.
-**
-** Parameters:
-** rconn - packet to be sent.
-**
-** Returns:
-** 1 on success, 0 on failure.
-**
-** Side Effects:
-** none.
-*/
-int
-SendPacket(rconn)
- register RMPCONN *rconn;
-{
- /*
- * Set Ethernet Destination address to Source (BPF and the enet
- * driver will take care of getting our source address set).
- */
- bcopy((char *)&rconn->rmp.hp_hdr.saddr[0],
- (char *)&rconn->rmp.hp_hdr.daddr[0], RMP_ADDRLEN);
- rconn->rmp.hp_hdr.len = rconn->rmplen - sizeof(struct hp_hdr);
-
- /*
- * Reverse 802.2/HP Extended Source & Destination Access Pts.
- */
- rconn->rmp.hp_llc.dxsap = HPEXT_SXSAP;
- rconn->rmp.hp_llc.sxsap = HPEXT_DXSAP;
-
- /*
- * Last time this connection was active.
- */
- (void) gettimeofday(&rconn->tstamp, (struct timezone *)0);
-
- if (DbgFp != NULL) /* display packet */
- DispPkt(rconn,DIR_SENT);
-
- /*
- * Send RMP packet to remote host.
- */
- return(BpfWrite(rconn));
-}
diff --git a/libexec/rbootd/utils.c b/libexec/rbootd/utils.c
deleted file mode 100644
index 58ead7c7144b3..0000000000000
--- a/libexec/rbootd/utils.c
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * Copyright (c) 1988, 1992 The University of Utah and the Center
- * for Software Science (CSS).
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Center for Software Science of the University of Utah Computer
- * Science Department. CSS requests users of this software to return
- * to css-dist@cs.utah.edu any improvements that they make and grant
- * CSS redistribution rights.
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)utils.c 8.2 (Berkeley) 2/22/94
- *
- * Utah $Hdr: utils.c 3.1 92/07/06$
- * Author: Jeff Forys, University of Utah CSS
- */
-
-#ifndef lint
-static char sccsid[] = "@(#)utils.c 8.2 (Berkeley) 2/22/94";
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/time.h>
-
-#include <fcntl.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <time.h>
-#include <unistd.h>
-#include "defs.h"
-
-/*
-** DispPkt -- Display the contents of an RMPCONN packet.
-**
-** Parameters:
-** rconn - packet to be displayed.
-** direct - direction packet is going (DIR_*).
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** None.
-*/
-void
-DispPkt(rconn, direct)
- RMPCONN *rconn;
- int direct;
-{
- static char BootFmt[] = "\t\tRetCode:%u SeqNo:%lx SessID:%x Vers:%u";
- static char ReadFmt[] = "\t\tRetCode:%u Offset:%lx SessID:%x\n";
-
- struct tm *tmp;
- register struct rmp_packet *rmp;
- int i, omask;
- u_int t;
-
- /*
- * Since we will be working with RmpConns as well as DbgFp, we
- * must block signals that can affect either.
- */
- omask = sigblock(sigmask(SIGHUP)|sigmask(SIGUSR1)|sigmask(SIGUSR2));
-
- if (DbgFp == NULL) { /* sanity */
- (void) sigsetmask(omask);
- return;
- }
-
- /* display direction packet is going using '>>>' or '<<<' */
- fputs((direct==DIR_RCVD)?"<<< ":(direct==DIR_SENT)?">>> ":"", DbgFp);
-
- /* display packet timestamp */
- tmp = localtime((time_t *)&rconn->tstamp.tv_sec);
- fprintf(DbgFp, "%02d:%02d:%02d.%06ld ", tmp->tm_hour, tmp->tm_min,
- tmp->tm_sec, rconn->tstamp.tv_usec);
-
- /* display src or dst addr and information about network interface */
- fprintf(DbgFp, "Addr: %s Intf: %s\n", EnetStr(rconn), IntfName);
-
- rmp = &rconn->rmp;
-
- /* display IEEE 802.2 Logical Link Control header */
- (void) fprintf(DbgFp, "\t802.2 LLC: DSAP:%x SSAP:%x CTRL:%x\n",
- rmp->hp_llc.dsap, rmp->hp_llc.ssap, rmp->hp_llc.cntrl);
-
- /* display HP extensions to 802.2 Logical Link Control header */
- (void) fprintf(DbgFp, "\tHP Ext: DXSAP:%x SXSAP:%x\n",
- rmp->hp_llc.dxsap, rmp->hp_llc.sxsap);
-
- /*
- * Display information about RMP packet using type field to
- * determine what kind of packet this is.
- */
- switch(rmp->r_type) {
- case RMP_BOOT_REQ: /* boot request */
- (void) fprintf(DbgFp, "\tBoot Request:");
- GETWORD(rmp->r_brq.rmp_seqno, t);
- if (rmp->r_brq.rmp_session == RMP_PROBESID) {
- if (WORDZE(rmp->r_brq.rmp_seqno))
- fputs(" (Send Server ID)", DbgFp);
- else
- fprintf(DbgFp," (Send Filename #%u)",t);
- }
- (void) fputc('\n', DbgFp);
- (void) fprintf(DbgFp, BootFmt, rmp->r_brq.rmp_retcode,
- t, rmp->r_brq.rmp_session,
- rmp->r_brq.rmp_version);
- (void) fprintf(DbgFp, "\n\t\tMachine Type: ");
- for (i = 0; i < RMP_MACHLEN; i++)
- (void) fputc(rmp->r_brq.rmp_machtype[i], DbgFp);
- DspFlnm(rmp->r_brq.rmp_flnmsize, &rmp->r_brq.rmp_flnm);
- break;
- case RMP_BOOT_REPL: /* boot reply */
- fprintf(DbgFp, "\tBoot Reply:\n");
- GETWORD(rmp->r_brpl.rmp_seqno, t);
- (void) fprintf(DbgFp, BootFmt, rmp->r_brpl.rmp_retcode,
- t, rmp->r_brpl.rmp_session,
- rmp->r_brpl.rmp_version);
- DspFlnm(rmp->r_brpl.rmp_flnmsize,&rmp->r_brpl.rmp_flnm);
- break;
- case RMP_READ_REQ: /* read request */
- (void) fprintf(DbgFp, "\tRead Request:\n");
- GETWORD(rmp->r_rrq.rmp_offset, t);
- (void) fprintf(DbgFp, ReadFmt, rmp->r_rrq.rmp_retcode,
- t, rmp->r_rrq.rmp_session);
- (void) fprintf(DbgFp, "\t\tNoOfBytes: %u\n",
- rmp->r_rrq.rmp_size);
- break;
- case RMP_READ_REPL: /* read reply */
- (void) fprintf(DbgFp, "\tRead Reply:\n");
- GETWORD(rmp->r_rrpl.rmp_offset, t);
- (void) fprintf(DbgFp, ReadFmt, rmp->r_rrpl.rmp_retcode,
- t, rmp->r_rrpl.rmp_session);
- (void) fprintf(DbgFp, "\t\tNoOfBytesSent: %d\n",
- rconn->rmplen - RMPREADSIZE(0));
- break;
- case RMP_BOOT_DONE: /* boot complete */
- (void) fprintf(DbgFp, "\tBoot Complete:\n");
- (void) fprintf(DbgFp, "\t\tRetCode:%u SessID:%x\n",
- rmp->r_done.rmp_retcode,
- rmp->r_done.rmp_session);
- break;
- default: /* ??? */
- (void) fprintf(DbgFp, "\tUnknown Type:(%d)\n",
- rmp->r_type);
- }
- (void) fputc('\n', DbgFp);
- (void) fflush(DbgFp);
-
- (void) sigsetmask(omask); /* reset old signal mask */
-}
-
-
-/*
-** GetEtherAddr -- convert an RMP (Ethernet) address into a string.
-**
-** An RMP BOOT packet has been received. Look at the type field
-** and process Boot Requests, Read Requests, and Boot Complete
-** packets. Any other type will be dropped with a warning msg.
-**
-** Parameters:
-** addr - array of RMP_ADDRLEN bytes.
-**
-** Returns:
-** Pointer to static string representation of `addr'.
-**
-** Side Effects:
-** None.
-**
-** Warnings:
-** - The return value points to a static buffer; it must
-** be copied if it's to be saved.
-** - For speed, we assume a u_char consists of 8 bits.
-*/
-char *
-GetEtherAddr(addr)
- u_char *addr;
-{
- static char Hex[] = "0123456789abcdef";
- static char etherstr[RMP_ADDRLEN*3];
- register int i;
- register char *cp1, *cp2;
-
- /*
- * For each byte in `addr', convert it to "<hexchar><hexchar>:".
- * The last byte does not get a trailing `:' appended.
- */
- i = 0;
- cp1 = (char *)addr;
- cp2 = etherstr;
- for(;;) {
- *cp2++ = Hex[*cp1 >> 4 & 0xf];
- *cp2++ = Hex[*cp1++ & 0xf];
- if (++i == RMP_ADDRLEN)
- break;
- *cp2++ = ':';
- }
- *cp2 = '\0';
-
- return(etherstr);
-}
-
-
-/*
-** DispFlnm -- Print a string of bytes to DbgFp (often, a file name).
-**
-** Parameters:
-** size - number of bytes to print.
-** flnm - address of first byte.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - Characters are sent to `DbgFp'.
-*/
-void
-DspFlnm(size, flnm)
- register u_int size;
- register char *flnm;
-{
- register int i;
-
- (void) fprintf(DbgFp, "\n\t\tFile Name (%d): <", size);
- for (i = 0; i < size; i++)
- (void) fputc(*flnm++, DbgFp);
- (void) fputs(">\n", DbgFp);
-}
-
-
-/*
-** NewClient -- allocate memory for a new CLIENT.
-**
-** Parameters:
-** addr - RMP (Ethernet) address of new client.
-**
-** Returns:
-** Ptr to new CLIENT or NULL if we ran out of memory.
-**
-** Side Effects:
-** - Memory will be malloc'd for the new CLIENT.
-** - If malloc() fails, a log message will be generated.
-*/
-CLIENT *
-NewClient(addr)
- u_char *addr;
-{
- CLIENT *ctmp;
-
- if ((ctmp = (CLIENT *) malloc(sizeof(CLIENT))) == NULL) {
- syslog(LOG_ERR, "NewClient: out of memory (%s)",
- GetEtherAddr(addr));
- return(NULL);
- }
-
- bzero(ctmp, sizeof(CLIENT));
- bcopy(addr, &ctmp->addr[0], RMP_ADDRLEN);
- return(ctmp);
-}
-
-/*
-** FreeClient -- free linked list of Clients.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - All malloc'd memory associated with the linked list of
-** CLIENTS will be free'd; `Clients' will be set to NULL.
-**
-** Warnings:
-** - This routine must be called with SIGHUP blocked.
-*/
-void
-FreeClients()
-{
- register CLIENT *ctmp;
-
- while (Clients != NULL) {
- ctmp = Clients;
- Clients = Clients->next;
- FreeClient(ctmp);
- }
-}
-
-/*
-** NewStr -- allocate memory for a character array.
-**
-** Parameters:
-** str - null terminated character array.
-**
-** Returns:
-** Ptr to new character array or NULL if we ran out of memory.
-**
-** Side Effects:
-** - Memory will be malloc'd for the new character array.
-** - If malloc() fails, a log message will be generated.
-*/
-char *
-NewStr(str)
- char *str;
-{
- char *stmp;
-
- if ((stmp = (char *)malloc((unsigned) (strlen(str)+1))) == NULL) {
- syslog(LOG_ERR, "NewStr: out of memory (%s)", str);
- return(NULL);
- }
-
- (void) strcpy(stmp, str);
- return(stmp);
-}
-
-/*
-** To save time, NewConn and FreeConn maintain a cache of one RMPCONN
-** in `LastFree' (defined below).
-*/
-
-static RMPCONN *LastFree = NULL;
-
-/*
-** NewConn -- allocate memory for a new RMPCONN connection.
-**
-** Parameters:
-** rconn - initialization template for new connection.
-**
-** Returns:
-** Ptr to new RMPCONN or NULL if we ran out of memory.
-**
-** Side Effects:
-** - Memory may be malloc'd for the new RMPCONN (if not cached).
-** - If malloc() fails, a log message will be generated.
-*/
-RMPCONN *
-NewConn(rconn)
- RMPCONN *rconn;
-{
- RMPCONN *rtmp;
-
- if (LastFree == NULL) { /* nothing cached; make a new one */
- if ((rtmp = (RMPCONN *) malloc(sizeof(RMPCONN))) == NULL) {
- syslog(LOG_ERR, "NewConn: out of memory (%s)",
- EnetStr(rconn));
- return(NULL);
- }
- } else { /* use the cached RMPCONN */
- rtmp = LastFree;
- LastFree = NULL;
- }
-
- /*
- * Copy template into `rtmp', init file descriptor to `-1' and
- * set ptr to next elem NULL.
- */
- bcopy((char *)rconn, (char *)rtmp, sizeof(RMPCONN));
- rtmp->bootfd = -1;
- rtmp->next = NULL;
-
- return(rtmp);
-}
-
-/*
-** FreeConn -- Free memory associated with an RMPCONN connection.
-**
-** Parameters:
-** rtmp - ptr to RMPCONN to be free'd.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - Memory associated with `rtmp' may be free'd (or cached).
-** - File desc associated with `rtmp->bootfd' will be closed.
-*/
-void
-FreeConn(rtmp)
- register RMPCONN *rtmp;
-{
- /*
- * If the file descriptor is in use, close the file.
- */
- if (rtmp->bootfd >= 0) {
- (void) close(rtmp->bootfd);
- rtmp->bootfd = -1;
- }
-
- if (LastFree == NULL) /* cache for next time */
- rtmp = LastFree;
- else /* already one cached; free this one */
- free((char *)rtmp);
-}
-
-/*
-** FreeConns -- free linked list of RMPCONN connections.
-**
-** Parameters:
-** None.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - All malloc'd memory associated with the linked list of
-** connections will be free'd; `RmpConns' will be set to NULL.
-** - If LastFree is != NULL, it too will be free'd & NULL'd.
-**
-** Warnings:
-** - This routine must be called with SIGHUP blocked.
-*/
-void
-FreeConns()
-{
- register RMPCONN *rtmp;
-
- while (RmpConns != NULL) {
- rtmp = RmpConns;
- RmpConns = RmpConns->next;
- FreeConn(rtmp);
- }
-
- if (LastFree != NULL) {
- free((char *)LastFree);
- LastFree = NULL;
- }
-}
-
-/*
-** AddConn -- Add a connection to the linked list of connections.
-**
-** Parameters:
-** rconn - connection to be added.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - RmpConn will point to new connection.
-**
-** Warnings:
-** - This routine must be called with SIGHUP blocked.
-*/
-void
-AddConn(rconn)
- register RMPCONN *rconn;
-{
- if (RmpConns != NULL)
- rconn->next = RmpConns;
- RmpConns = rconn;
-}
-
-/*
-** FindConn -- Find a connection in the linked list of connections.
-**
-** We use the RMP (Ethernet) address as the basis for determining
-** if this is the same connection. According to the Remote Maint
-** Protocol, we can only have one connection with any machine.
-**
-** Parameters:
-** rconn - connection to be found.
-**
-** Returns:
-** Matching connection from linked list or NULL if not found.
-**
-** Side Effects:
-** None.
-**
-** Warnings:
-** - This routine must be called with SIGHUP blocked.
-*/
-RMPCONN *
-FindConn(rconn)
- register RMPCONN *rconn;
-{
- register RMPCONN *rtmp;
-
- for (rtmp = RmpConns; rtmp != NULL; rtmp = rtmp->next)
- if (bcmp((char *)&rconn->rmp.hp_hdr.saddr[0],
- (char *)&rtmp->rmp.hp_hdr.saddr[0], RMP_ADDRLEN) == 0)
- break;
-
- return(rtmp);
-}
-
-/*
-** RemoveConn -- Remove a connection from the linked list of connections.
-**
-** Parameters:
-** rconn - connection to be removed.
-**
-** Returns:
-** Nothing.
-**
-** Side Effects:
-** - If found, an RMPCONN will cease to exist and it will
-** be removed from the linked list.
-**
-** Warnings:
-** - This routine must be called with SIGHUP blocked.
-*/
-void
-RemoveConn(rconn)
- register RMPCONN *rconn;
-{
- register RMPCONN *thisrconn, *lastrconn;
-
- if (RmpConns == rconn) { /* easy case */
- RmpConns = RmpConns->next;
- FreeConn(rconn);
- } else { /* must traverse linked list */
- lastrconn = RmpConns; /* set back ptr */
- thisrconn = lastrconn->next; /* set current ptr */
- while (thisrconn != NULL) {
- if (rconn == thisrconn) { /* found it */
- lastrconn->next = thisrconn->next;
- FreeConn(thisrconn);
- break;
- }
- lastrconn = thisrconn;
- thisrconn = thisrconn->next;
- }
- }
-}
diff --git a/libexec/rpc.rquotad/Makefile b/libexec/rpc.rquotad/Makefile
deleted file mode 100644
index 7618d98f4a485..0000000000000
--- a/libexec/rpc.rquotad/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-# $Id: Makefile,v 1.3 1995/04/12 00:47:27 jtc Exp $
-
-PROG = rpc.rquotad
-SRCS = rquotad.c
-MAN8 = rpc.rquotad.8
-
-DPADD= ${LIBRPCSVC}
-LDADD= -lrpcsvc
-
-.include <bsd.prog.mk>
diff --git a/libexec/rpc.rquotad/rpc.rquotad.8 b/libexec/rpc.rquotad/rpc.rquotad.8
deleted file mode 100644
index b378cc33f47da..0000000000000
--- a/libexec/rpc.rquotad/rpc.rquotad.8
+++ /dev/null
@@ -1,58 +0,0 @@
-.\"
-.\" Copyright (c) 1994 Theo de Raadt
-.\" 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 Theo de Raadt.
-.\" 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: rpc.rquotad.8,v 1.2 1995/04/12 00:47:32 jtc Exp $
-.\"
-.Dd June 22, 1994
-.Dt RPC.RQUOTAD 8
-.Os BSD 4.3
-.Sh NAME
-.Nm rpc.rquotad
-.Nd remote quota server
-.Sh SYNOPSIS
-.Nm /usr/libexec/rpc.rquotad
-.Sh DESCRIPTION
-.Nm rpc.rquotad
-is a
-.Xr rpc 3
-server which returns quotas for a user of a local filesystem
-which is NFS-mounted onto a remote machine.
-.Xr quota 1
-uses the results to display user quotas for remote filesystems.
-.Nm rpc.rquotad
-is normally invoked by
-.Xr inetd 8 .
-.Pp
-.Nm rpc.rquotad
-uses an RPC protocol defined in
-.Pa /usr/include/rpcsvc/rquota.x .
-.Sh BUGS
-BSD 4.4 and NetBSD support group quotas but the rquota protocol does not.
-.Sh SEE ALSO
-.Xr quota 1
diff --git a/libexec/rpc.rquotad/rquotad.c b/libexec/rpc.rquotad/rquotad.c
deleted file mode 100644
index 33fa420b17f4e..0000000000000
--- a/libexec/rpc.rquotad/rquotad.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * by Manuel Bouyer (bouyer@ensta.fr)
- *
- * There is no copyright, you can use it as you want.
- */
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/mount.h>
-#include <sys/file.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <signal.h>
-
-#include <stdio.h>
-#include <fstab.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <pwd.h>
-#include <grp.h>
-#include <errno.h>
-
-#include <syslog.h>
-#include <varargs.h>
-
-#include <ufs/ufs/quota.h>
-#include <rpc/rpc.h>
-#include <rpc/pmap_clnt.h>
-#include <rpcsvc/rquota.h>
-#include <arpa/inet.h>
-
-void rquota_service __P((struct svc_req *request, SVCXPRT *transp));
-void sendquota __P((struct svc_req *request, SVCXPRT *transp));
-void printerr_reply __P((SVCXPRT *transp));
-void initfs __P((void));
-int getfsquota __P((long id, char *path, struct dqblk *dqblk));
-int hasquota __P((struct fstab *fs, char **qfnamep));
-
-/*
- * structure containing informations about ufs filesystems
- * initialised by initfs()
- */
-struct fs_stat {
- struct fs_stat *fs_next; /* next element */
- char *fs_file; /* mount point of the filesystem */
- char *qfpathname; /* pathname of the quota file */
- dev_t st_dev; /* device of the filesystem */
-} fs_stat;
-struct fs_stat *fs_begin = NULL;
-
-int from_inetd = 1;
-
-void
-cleanup()
-{
- (void) pmap_unset(RQUOTAPROG, RQUOTAVERS);
- exit(0);
-}
-
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- SVCXPRT *transp;
- int sock = 0;
- int proto = 0;
- struct sockaddr_in from;
- int fromlen;
-
- fromlen = sizeof(from);
- if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) {
- from_inetd = 0;
- sock = RPC_ANYSOCK;
- proto = IPPROTO_UDP;
- }
-
- if (!from_inetd) {
- daemon(0, 0);
-
- (void) pmap_unset(RQUOTAPROG, RQUOTAVERS);
-
- (void) signal(SIGINT, cleanup);
- (void) signal(SIGTERM, cleanup);
- (void) signal(SIGHUP, cleanup);
- }
-
- openlog("rpc.rquotad", LOG_CONS|LOG_PID, LOG_DAEMON);
-
- /* create and register the service */
- transp = svcudp_create(sock);
- if (transp == NULL) {
- syslog(LOG_ERR, "couldn't create udp service.");
- exit(1);
- }
- if (!svc_register(transp, RQUOTAPROG, RQUOTAVERS, rquota_service, proto)) {
- syslog(LOG_ERR, "unable to register (RQUOTAPROG, RQUOTAVERS, %s).", proto?"udp":"(inetd)");
- exit(1);
- }
-
- initfs(); /* init the fs_stat list */
- svc_run();
- syslog(LOG_ERR, "svc_run returned");
- exit(1);
-}
-
-void
-rquota_service(request, transp)
- struct svc_req *request;
- SVCXPRT *transp;
-{
- switch (request->rq_proc) {
- case NULLPROC:
- (void)svc_sendreply(transp, xdr_void, (char *)NULL);
- break;
-
- case RQUOTAPROC_GETQUOTA:
- case RQUOTAPROC_GETACTIVEQUOTA:
- sendquota(request, transp);
- break;
-
- default:
- svcerr_noproc(transp);
- break;
- }
- if (from_inetd)
- exit(0);
-}
-
-/* read quota for the specified id, and send it */
-void
-sendquota(request, transp)
- struct svc_req *request;
- SVCXPRT *transp;
-{
- struct getquota_args getq_args;
- struct getquota_rslt getq_rslt;
- struct dqblk dqblk;
- struct timeval timev;
-
- bzero((char *)&getq_args, sizeof(getq_args));
- if (!svc_getargs(transp, xdr_getquota_args, (caddr_t)&getq_args)) {
- svcerr_decode(transp);
- return;
- }
- if (request->rq_cred.oa_flavor != AUTH_UNIX) {
- /* bad auth */
- getq_rslt.status = Q_EPERM;
- } else if (!getfsquota(getq_args.gqa_uid, getq_args.gqa_pathp, &dqblk)) {
- /* failed, return noquota */
- getq_rslt.status = Q_NOQUOTA;
- } else {
- gettimeofday(&timev, NULL);
- getq_rslt.status = Q_OK;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_active = TRUE;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_bsize = DEV_BSIZE;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_bhardlimit =
- dqblk.dqb_bhardlimit;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_bsoftlimit =
- dqblk.dqb_bsoftlimit;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_curblocks =
- dqblk.dqb_curblocks;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_fhardlimit =
- dqblk.dqb_ihardlimit;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_fsoftlimit =
- dqblk.dqb_isoftlimit;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_curfiles =
- dqblk.dqb_curinodes;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_btimeleft =
- dqblk.dqb_btime - timev.tv_sec;
- getq_rslt.getquota_rslt_u.gqr_rquota.rq_ftimeleft =
- dqblk.dqb_itime - timev.tv_sec;
- }
- if (!svc_sendreply(transp, xdr_getquota_rslt, (char *)&getq_rslt)) {
- svcerr_systemerr(transp);
- }
- if (!svc_freeargs(transp, xdr_getquota_args, (caddr_t)&getq_args)) {
- syslog(LOG_ERR, "unable to free arguments");
- exit(1);
- }
-}
-
-void
-printerr_reply(transp) /* when a reply to a request failed */
- SVCXPRT *transp;
-{
- char *name;
- struct sockaddr_in *caller;
- int save_errno;
-
- save_errno = errno;
-
- caller = svc_getcaller(transp);
- name = (char *)inet_ntoa(caller->sin_addr);
- errno = save_errno;
- if (errno == 0)
- syslog(LOG_ERR, "couldn't send reply to %s", name);
- else
- syslog(LOG_ERR, "couldn't send reply to %s: %m", name);
-}
-
-/* initialise the fs_tab list from entries in /etc/fstab */
-void
-initfs()
-{
- struct fs_stat *fs_current = NULL;
- struct fs_stat *fs_next = NULL;
- char *qfpathname;
- struct fstab *fs;
- struct stat st;
-
- setfsent();
- while ((fs = getfsent())) {
- if (strcmp(fs->fs_vfstype, "ufs"))
- continue;
- if (!hasquota(fs, &qfpathname))
- continue;
-
- fs_current = (struct fs_stat *) malloc(sizeof(struct fs_stat));
- fs_current->fs_next = fs_next; /* next element */
-
- fs_current->fs_file = malloc(sizeof(char) * (strlen(fs->fs_file) + 1));
- strcpy(fs_current->fs_file, fs->fs_file);
-
- fs_current->qfpathname = malloc(sizeof(char) * (strlen(qfpathname) + 1));
- strcpy(fs_current->qfpathname, qfpathname);
-
- stat(qfpathname, &st);
- fs_current->st_dev = st.st_dev;
-
- fs_next = fs_current;
- }
- endfsent();
- fs_begin = fs_current;
-}
-
-/*
- * gets the quotas for id, filesystem path.
- * Return 0 if fail, 1 otherwise
- */
-int
-getfsquota(id, path, dqblk)
- long id;
- char *path;
- struct dqblk *dqblk;
-{
- struct stat st_path;
- struct fs_stat *fs;
- int qcmd, fd, ret = 0;
-
- if (stat(path, &st_path) < 0)
- return (0);
-
- qcmd = QCMD(Q_GETQUOTA, USRQUOTA);
-
- for (fs = fs_begin; fs != NULL; fs = fs->fs_next) {
- /* where the devise is the same as path */
- if (fs->st_dev != st_path.st_dev)
- continue;
-
- /* find the specified filesystem. get and return quota */
- if (quotactl(fs->fs_file, qcmd, id, dqblk) == 0)
- return (1);
-
- if ((fd = open(fs->qfpathname, O_RDONLY)) < 0) {
- syslog(LOG_ERR, "open error: %s: %m", fs->qfpathname);
- return (0);
- }
- if (lseek(fd, (off_t)(id * sizeof(struct dqblk)), L_SET) == (off_t)-1) {
- close(fd);
- return (1);
- }
- switch (read(fd, dqblk, sizeof(struct dqblk))) {
- case 0:
- /*
- * Convert implicit 0 quota (EOF)
- * into an explicit one (zero'ed dqblk)
- */
- bzero((caddr_t) dqblk, sizeof(struct dqblk));
- ret = 1;
- break;
- case sizeof(struct dqblk): /* OK */
- ret = 1;
- break;
- default: /* ERROR */
- syslog(LOG_ERR, "read error: %s: %m", fs->qfpathname);
- close(fd);
- return (0);
- }
- close(fd);
- }
- return (ret);
-}
-
-/*
- * Check to see if a particular quota is to be enabled.
- * Comes from quota.c, NetBSD 0.9
- */
-int
-hasquota(fs, qfnamep)
- struct fstab *fs;
- char **qfnamep;
-{
- static char initname, usrname[100];
- static char buf[BUFSIZ];
- char *opt, *cp;
- char *qfextension[] = INITQFNAMES;
-
- if (!initname) {
- sprintf(usrname, "%s%s", qfextension[USRQUOTA], QUOTAFILENAME);
- initname = 1;
- }
- strcpy(buf, fs->fs_mntops);
- for (opt = strtok(buf, ","); opt; opt = strtok(NULL, ",")) {
- if ((cp = index(opt, '=')))
- *cp++ = '\0';
- if (strcmp(opt, usrname) == 0)
- break;
- }
- if (!opt)
- return (0);
- if (cp) {
- *qfnamep = cp;
- return (1);
- }
- sprintf(buf, "%s/%s.%s", fs->fs_file, QUOTAFILENAME, qfextension[USRQUOTA]);
- *qfnamep = buf;
- return (1);
-}
diff --git a/libexec/rpc.sprayd/Makefile b/libexec/rpc.sprayd/Makefile
deleted file mode 100644
index e497599a8451b..0000000000000
--- a/libexec/rpc.sprayd/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id: Makefile,v 1.3 1995/04/12 00:48:01 jtc Exp $
-
-PROG = rpc.sprayd
-SRCS = sprayd.c
-MAN8 = rpc.sprayd.8
-
-DPADD= ${LIBRPCSVC}
-LDADD= -lrpcsvc
-
-.include <bsd.prog.mk>
-
diff --git a/libexec/rpc.sprayd/rpc.sprayd.8 b/libexec/rpc.sprayd/rpc.sprayd.8
deleted file mode 100644
index cff47264ca973..0000000000000
--- a/libexec/rpc.sprayd/rpc.sprayd.8
+++ /dev/null
@@ -1,54 +0,0 @@
-.\"
-.\" Copyright (c) 1994 Christos Zoulas
-.\" 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 Christos Zoulas.
-.\" 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: rpc.sprayd.8,v 1.2 1995/04/12 00:48:03 jtc Exp $
-.\"
-.Dd June 22, 1994
-.Dt RPC.SPRAYD 8
-.Os BSD 4.3
-.Sh NAME
-.Nm rpc.sprayd
-.Nd spray server
-.Sh SYNOPSIS
-.Nm /usr/libexec/rpc.sprayd
-.Sh DESCRIPTION
-.Nm rpc.sprayd
-is a server which records packets sent by the
-.Xr spray 1
-command and sends a traffic report to the originator of the packets.
-The
-.Nm rpc.sprayd
-daemon is normally invoked by
-.Xr inetd 8 .
-.Pp
-.Nm rpc.sprayd
-uses an RPC protocol defined in
-.Pa /usr/include/rpcsvc/spray.x .
-.Sh SEE ALSO
-.Xr spray 8
diff --git a/libexec/rpc.sprayd/sprayd.c b/libexec/rpc.sprayd/sprayd.c
deleted file mode 100644
index 28ae295fad059..0000000000000
--- a/libexec/rpc.sprayd/sprayd.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 1994 Christos Zoulas
- * 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 Christos Zoulas.
- * 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: sprayd.c,v 1.7 1995/03/26 23:36:44 mycroft Exp $
- */
-
-#ifndef lint
-static char rcsid[] = "$Id: sprayd.c,v 1.7 1995/03/26 23:36:44 mycroft Exp $";
-#endif /* not lint */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <unistd.h>
-#include <rpc/rpc.h>
-#include <rpc/pmap_clnt.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-#include <syslog.h>
-#include <rpcsvc/spray.h>
-
-static void spray_service __P((struct svc_req *, SVCXPRT *));
-
-static int from_inetd = 1;
-
-#define timersub(tvp, uvp, vvp) \
- do { \
- (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
- (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
- if ((vvp)->tv_usec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_usec += 1000000; \
- } \
- } while (0)
-
-#define TIMEOUT 120
-
-void
-cleanup()
-{
- (void) pmap_unset(SPRAYPROG, SPRAYVERS);
- exit(0);
-}
-
-void
-die()
-{
- exit(0);
-}
-
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- SVCXPRT *transp;
- int sock = 0;
- int proto = 0;
- struct sockaddr_in from;
- int fromlen;
-
- /*
- * See if inetd started us
- */
- fromlen = sizeof(from);
- if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) {
- from_inetd = 0;
- sock = RPC_ANYSOCK;
- proto = IPPROTO_UDP;
- }
-
- if (!from_inetd) {
- daemon(0, 0);
-
- (void) pmap_unset(SPRAYPROG, SPRAYVERS);
-
- (void) signal(SIGINT, cleanup);
- (void) signal(SIGTERM, cleanup);
- (void) signal(SIGHUP, cleanup);
- } else {
- (void) signal(SIGALRM, die);
- alarm(TIMEOUT);
- }
-
- openlog("rpc.sprayd", LOG_CONS|LOG_PID, LOG_DAEMON);
-
- transp = svcudp_create(sock);
- if (transp == NULL) {
- syslog(LOG_ERR, "cannot create udp service.");
- return 1;
- }
- if (!svc_register(transp, SPRAYPROG, SPRAYVERS, spray_service, proto)) {
- syslog(LOG_ERR,
- "unable to register (SPRAYPROG, SPRAYVERS, %s).",
- proto ? "udp" : "(inetd)");
- return 1;
- }
-
- svc_run();
- syslog(LOG_ERR, "svc_run returned");
- return 1;
-}
-
-
-static void
-spray_service(rqstp, transp)
- struct svc_req *rqstp;
- SVCXPRT *transp;
-{
- static spraycumul scum;
- static struct timeval clear, get;
-
- switch (rqstp->rq_proc) {
- case SPRAYPROC_CLEAR:
- scum.counter = 0;
- (void) gettimeofday(&clear, 0);
- /*FALLTHROUGH*/
-
- case NULLPROC:
- (void)svc_sendreply(transp, xdr_void, (char *)NULL);
- return;
-
- case SPRAYPROC_SPRAY:
- scum.counter++;
- return;
-
- case SPRAYPROC_GET:
- (void) gettimeofday(&get, 0);
- timersub(&get, &clear, &get);
- scum.clock.sec = get.tv_sec;
- scum.clock.usec = get.tv_usec;
- break;
-
- default:
- svcerr_noproc(transp);
- return;
- }
-
- if (!svc_sendreply(transp, xdr_spraycumul, (caddr_t)&scum)) {
- svcerr_systemerr(transp);
- syslog(LOG_ERR, "bad svc_sendreply");
- }
-}