Index: head/usr.sbin/ypset/ypset.8 =================================================================== --- head/usr.sbin/ypset/ypset.8 (revision 286609) +++ head/usr.sbin/ypset/ypset.8 (revision 286610) @@ -1,88 +1,88 @@ .\" .\" 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. .\" .\" $FreeBSD$ .\" -.Dd October 25, 1994 +.Dd August 04, 2015 .Dt YPSET 8 .Os .Sh NAME .Nm ypset .Nd tell .Xr ypbind 8 which YP 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 YP server process to communicate with. If .Ar server is down or is not running a YP server process, it is not discovered until a YP client process attempts to access a YP map, at which time .Xr ypbind 8 tests the binding and takes appropriate action. .Pp The .Nm utility is most useful for binding a YP client that is not on the same broadcast network as the closest YP server, but can also be used for debugging a local network's YP configuration, testing specific YP client programs, or binding to a specific server when there are many servers on the local network supplying YP maps. .Pp The options are as follows: .Bl -tag -width indent -.It Fl h Ar host -Set the YP binding on -.Ar host -instead of the local machine. .It Fl d Ar domain Use the YP domain .Ar domain instead of the default domain as returned by .Xr domainname 1 . +.It Fl h Ar host +Set the YP 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 Index: head/usr.sbin/ypset/ypset.c =================================================================== --- head/usr.sbin/ypset/ypset.c (revision 286609) +++ head/usr.sbin/ypset/ypset.c (revision 286610) @@ -1,151 +1,149 @@ +/* $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 $ */ + /* - * Copyright (c) 1992/3 Theo de Raadt + * Copyright (c) 1992, 1993 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. 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. */ #include __FBSDID("$FreeBSD$"); +#include +#include +#include + #include #include #include #include #include #include -#include -#include -#include + #include #include #include #include #include -extern bool_t xdr_domainname(); - static void usage(void) { - fprintf(stderr, "usage: ypset [-h host] [-d domain] server\n"); + fprintf(stderr, "usage: ypset [-d domain] [-h host] server\n"); exit(1); } -int +static int bind_tohost(struct sockaddr_in *sin, char *dom, char *server) { struct ypbind_setdom ypsd; - struct timeval tv; + struct in_addr iaddr; struct hostent *hp; + struct timeval tv; CLIENT *client; - int sock, port; - int r; - unsigned long server_addr; + int sock, port, r; - if ((port = htons(getrpcport(server, YPPROG, YPPROC_NULL, IPPROTO_UDP))) == 0) + port = getrpcport(server, YPPROG, YPPROC_NULL, IPPROTO_UDP); + if (port == 0) errx(1, "%s not running ypserv", server); + port = htons(port); - bzero(&ypsd, sizeof ypsd); + memset(&ypsd, 0, sizeof ypsd); - if ((hp = gethostbyname (server)) != NULL) { - /* is this the most compatible way?? */ - bcopy (hp->h_addr_list[0], - (u_long *)&ypsd.ypsetdom_binding.ypbind_binding_addr, - sizeof (unsigned long)); - } else if ((server_addr = inet_addr(server)) == INADDR_NONE) { - errx(1, "can't find address for %s", server); - } else - bcopy (&server_addr, - (u_long *)&ypsd.ypsetdom_binding.ypbind_binding_addr, - sizeof (server_addr)); - -/* strncpy(ypsd.ypsetdom_domain, dom, sizeof ypsd.ypsetdom_domain); */ + 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; - *(u_long *)&ypsd.ypsetdom_binding.ypbind_binding_port = port; + 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("sorry, cannot ypset for domain %s on host - make sure ypbind was started with -ypset or -ypsetme", dom); + 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) { + switch(c) { case 'd': domainname = optarg; break; case 'h': - if ((sin.sin_addr.s_addr = inet_addr(optarg)) == - INADDR_NONE) { + if (inet_aton(optarg, &sin.sin_addr) == 0) { hent = gethostbyname(optarg); if (hent == NULL) - errx(1, "host %s unknown", optarg); - bcopy(hent->h_addr_list[0], &sin.sin_addr, - sizeof sin.sin_addr); + 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); }