diff options
Diffstat (limited to 'usr.sbin/ypset')
| -rw-r--r-- | usr.sbin/ypset/Makefile | 7 | ||||
| -rw-r--r-- | usr.sbin/ypset/Makefile.depend | 18 | ||||
| -rw-r--r-- | usr.sbin/ypset/ypset.8 | 86 | ||||
| -rw-r--r-- | usr.sbin/ypset/ypset.c | 148 | 
4 files changed, 259 insertions, 0 deletions
| diff --git a/usr.sbin/ypset/Makefile b/usr.sbin/ypset/Makefile new file mode 100644 index 000000000000..d945f278426d --- /dev/null +++ b/usr.sbin/ypset/Makefile @@ -0,0 +1,7 @@ +PACKAGE=	yp +PROG=	ypset +MAN=	ypset.8 + +WARNS?=	2 + +.include <bsd.prog.mk> diff --git a/usr.sbin/ypset/Makefile.depend b/usr.sbin/ypset/Makefile.depend new file mode 100644 index 000000000000..732a025c9552 --- /dev/null +++ b/usr.sbin/ypset/Makefile.depend @@ -0,0 +1,18 @@ +# Autogenerated - do NOT edit! + +DIRDEPS = \ +	include \ +	include/arpa \ +	include/rpc \ +	include/rpcsvc \ +	include/xlocale \ +	lib/${CSU_DIR} \ +	lib/libc \ +	lib/libcompiler_rt \ + + +.include <dirdeps.mk> + +.if ${DEP_RELDIR} == ${_DEP_RELDIR} +# local dependencies - needed for -jN in clean tree +.endif diff --git a/usr.sbin/ypset/ypset.8 b/usr.sbin/ypset/ypset.8 new file mode 100644 index 000000000000..8b4b7b7397f2 --- /dev/null +++ b/usr.sbin/ypset/ypset.8 @@ -0,0 +1,86 @@ +.\" +.\" Copyright (c) 1994 Jason R. Thorpe +.\" 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 Jason Thorpe. +.\" 4. Neither the name of the author 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 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. +.\" +.Dd September 3, 2015 +.Dt YPSET 8 +.Os +.Sh NAME +.Nm ypset +.Nd tell +.Xr ypbind 8 +which NIS server process to use +.Sh SYNOPSIS +.Nm +.Op Fl h Ar host +.Op Fl d Ar domain +.Ar server +.Sh DESCRIPTION +The +.Nm +utility tells the +.Xr ypbind 8 +process on the current machine which NIS server process to communicate with. +If +.Ar server +is down or is not running a NIS server process, it is not discovered until +a NIS client process attempts to access a NIS map, at which time +.Xr ypbind 8 +tests the binding and takes appropriate action. +.Pp +The +.Nm +utility +is most useful for binding a NIS client that is not on the same broadcast +network as the closest NIS server, but can also be used for debugging +a local network's NIS configuration, testing specific NIS client +programs, or binding to a specific server when there are many servers on +the local network supplying NIS maps. +.Pp +The options are as follows: +.Bl -tag -width indent +.It Fl d Ar domain +Use the NIS domain +.Ar domain +instead of the default domain as returned by +.Xr domainname 1 . +.It Fl h Ar host +Set the NIS binding on +.Ar host +instead of the local machine. +.El +.Sh SEE ALSO +.Xr domainname 1 , +.Xr ypcat 1 , +.Xr ypmatch 1 , +.Xr yp 8 , +.Xr ypbind 8 +.Sh AUTHORS +.An Theo De Raadt diff --git a/usr.sbin/ypset/ypset.c b/usr.sbin/ypset/ypset.c new file mode 100644 index 000000000000..2a22b54b9350 --- /dev/null +++ b/usr.sbin/ypset/ypset.c @@ -0,0 +1,148 @@ +/*	$OpenBSD: ypset.c,v 1.20 2015/01/16 06:40:23 deraadt Exp $ */ +/*	$NetBSD: ypset.c,v 1.8 1996/05/13 02:46:33 thorpej Exp $	*/ + +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 1992, 1993 Theo de Raadt <deraadt@theos.com> + * 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. + * + * 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. + */ + +#include <sys/param.h> +#include <sys/types.h> +#include <sys/socket.h> + +#include <err.h> +#include <netdb.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <rpc/rpc.h> +#include <rpc/xdr.h> +#include <rpcsvc/yp.h> +#include <rpcsvc/ypclnt.h> +#include <arpa/inet.h> + +static void +usage(void) +{ +	fprintf(stderr, "usage: ypset [-d domain] [-h host] server\n"); +	exit(1); +} + +static int +bind_tohost(struct sockaddr_in *sin, char *dom, char *server) +{ +	struct ypbind_setdom ypsd; +	struct in_addr iaddr; +	struct hostent *hp; +	struct timeval tv; +	CLIENT *client; +	int sock, port, r; + +	port = getrpcport(server, YPPROG, YPPROC_NULL, IPPROTO_UDP); +	if (port == 0) +		errx(1, "%s not running ypserv", server); +	port = htons(port); + +	memset(&ypsd, 0, sizeof ypsd); + +	if (inet_aton(server, &iaddr) == 0) { +		hp = gethostbyname(server); +		if (hp == NULL) +			errx(1, "can't find address for %s", server); +		memmove(&iaddr.s_addr, hp->h_addr, sizeof(iaddr.s_addr)); +	} +	ypsd.ypsetdom_domain = dom; +	bcopy(&iaddr.s_addr, &ypsd.ypsetdom_binding.ypbind_binding_addr, +	    sizeof(ypsd.ypsetdom_binding.ypbind_binding_addr)); +	bcopy(&port, &ypsd.ypsetdom_binding.ypbind_binding_port, +	    sizeof(ypsd.ypsetdom_binding.ypbind_binding_port)); +	ypsd.ypsetdom_vers = YPVERS; + +	tv.tv_sec = 15; +	tv.tv_usec = 0; +	sock = RPC_ANYSOCK; +	client = clntudp_create(sin, YPBINDPROG, YPBINDVERS, tv, &sock); +	if (client == NULL) { +		warnx("can't yp_bind, reason: %s", yperr_string(YPERR_YPBIND)); +		return (YPERR_YPBIND); +	} +	client->cl_auth = authunix_create_default(); + +	r = clnt_call(client, YPBINDPROC_SETDOM, +		(xdrproc_t)xdr_ypbind_setdom, &ypsd, +		(xdrproc_t)xdr_void, NULL, tv); +	if (r) { +		warnx("cannot ypset for domain %s on host %s: %s" +                " - make sure ypbind was started with -ypset or -ypsetme", dom, +		    server, clnt_sperrno(r)); +		clnt_destroy(client); +		return (YPERR_YPBIND); +	} +	clnt_destroy(client); +	return (0); +} + +int +main(int argc, char *argv[]) +{ +	struct sockaddr_in sin; +	struct hostent *hent; +	char *domainname; +	int c; + +	yp_get_default_domain(&domainname); + +	bzero(&sin, sizeof sin); +	sin.sin_family = AF_INET; +	sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + +	while ((c = getopt(argc, argv, "h:d:")) != -1) +		switch (c) { +		case 'd': +			domainname = optarg; +			break; +		case 'h': +			if (inet_aton(optarg, &sin.sin_addr) == 0) { +				hent = gethostbyname(optarg); +				if (hent == NULL) +					errx(1, "host %s unknown\n", optarg); +				bcopy(hent->h_addr, &sin.sin_addr, +				    sizeof(sin.sin_addr)); +			} +			break; +		default: +			usage(); +		} + +	if (optind + 1 != argc) +		usage(); + +	if (bind_tohost(&sin, domainname, argv[optind])) +		exit(1); +	exit(0); +} | 
