Subject: bin/428: yppoll -h isn't implemented, no man page exists
To: None <gnats-admin>
From: Mats O Jansson <maja@celsiustech.se>
List: netbsd-bugs
Date: 08/21/1994 04:20:05
>Number:         428
>Category:       bin
>Synopsis:       yppoll -h isn't implemented, no man page exists
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    gnats-admin (Utility Bug People)
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Sun Aug 21 04:20:03 1994
>Originator:     Mats O Jansson
>Organization:
CelsiusTech System AB, Jaerfaella, Sweden
>Release:        NetBSD 1.0_BETA (Aug 15)
>Environment:
	NetBSD/i386 and NetBSD/sparc at least...



>Description:
	usage in yppoll described an option that was not implemented (-h).
        Man-page was also missing.
>How-To-Repeat:
	Not neccessay, read the code.
>Fix:
	Apply the two following patches and add a new man page.

===== Start of Makefile.diff =====

*** Makefile.original	Fri Feb 18 18:06:07 1994
--- Makefile	Sat Aug 20 16:12:53 1994
***************
*** 2,7 ****
  #	$Id: Makefile,v 1.5 1994/02/18 03:01:34 cgd Exp $
  
  PROG=	yppoll
! NOMAN=
  
  .include <bsd.prog.mk>
--- 2,7 ----
  #	$Id: Makefile,v 1.5 1994/02/18 03:01:34 cgd Exp $
  
  PROG=	yppoll
! MAN8=	yppoll.0
  
  .include <bsd.prog.mk>

===== End of Makefile.diff =====

===== Start of yppoll.c.diff =====

*** yppoll.c.original	Wed May 25 14:57:59 1994
--- yppoll.c	Sat Aug 20 15:59:16 1994
***************
*** 1,6 ****
--- 1,7 ----
  /*
   * Copyright (c) 1992, 1993 Theo de Raadt <deraadt@fsa.ca>
   * Copyright (c) 1992, 1993 John Brezak
+  * Copyright (c) 1994       Mats O Jansson <moj@stacken.kth.se>
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
***************
*** 13,20 ****
   *    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 and
!  *	John Brezak.
   * 4. The name of the author may not be used to endorse or promote
   *    products derived from this software without specific prior written
   *    permission.
--- 14,21 ----
   *    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,
!  *	John Brezak and Mats O Jansson.
   * 4. The name of the author may not be used to endorse or promote
   *    products derived from this software without specific prior written
   *    permission.
***************
*** 41,52 ****
--- 42,59 ----
  #include <sys/socket.h>
  #include <stdio.h>
  #include <time.h>
+ #include <netdb.h>
+ #include <unistd.h>
+ #include <string.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
  
  #include <rpc/rpc.h>
  #include <rpc/xdr.h>
  #include <rpcsvc/yp_prot.h>
  #include <rpcsvc/ypclnt.h>
  
+ void
  usage()
  {
  	fprintf(stderr, "Usage:\n");
***************
*** 54,65 ****
  	exit(1);
  }
  
  int
  main(argc, argv)
  char **argv;
  {
  	char *domainname;
!         char *hostname = "localhost";
          char *inmap, *master;
          int order;
  	extern char *optarg;
--- 61,155 ----
  	exit(1);
  }
  
+ int get_remote_info(indomain, inmap, server, outorder, outname)
+ char *indomain;
+ char *inmap;
+ char *server;
+ int *outorder;
+ char **outname;
+ {
+ 	struct ypresp_order ypro;
+ 	struct ypresp_master yprm;
+ 	struct ypreq_nokey yprnk;
+ 	struct timeval tv;
+ 	int r;
+ 	struct sockaddr_in rsrv_sin;
+ 	int rsrv_sock;
+ 	CLIENT *client;
+ 	struct hostent *h;
+ 
+ 	bzero((char *)&rsrv_sin, sizeof rsrv_sin);
+ 	rsrv_sin.sin_len = sizeof rsrv_sin;
+ 	rsrv_sin.sin_family = AF_INET;
+ 	rsrv_sock = RPC_ANYSOCK;
+ 
+ 	if ((*server >= '0') && (*server <= '9')) {
+ 		if(inet_aton(server,&rsrv_sin.sin_addr) == 0) {
+ 			fprintf(stderr, "inet_aton: invalid address %s.\n",
+ 				server);
+ 	                exit(1);
+ 		}
+ 	} else {
+ 		h = gethostbyname(server);
+ 		if(h == NULL) {
+ 			fprintf(stderr, "gethostbyname: unknown host %s.\n",
+ 				server);
+ 	                exit(1);
+ 		}
+ 		rsrv_sin.sin_addr.s_addr = *(u_long*)h->h_addr;
+ 	}
+ 
+ 	tv.tv_sec = 10;
+ 	tv.tv_usec = 0;
+ 
+ 	client = clntudp_create(&rsrv_sin, YPPROG, YPVERS, tv, &rsrv_sock);
+ 	if (client == NULL) {
+ 		fprintf(stderr, "clntudp_create: no contact with host %s.\n",
+ 			server);
+ 	        exit(1);
+ 	}
+ 	
+ 	yprnk.domain = indomain;
+ 	yprnk.map = inmap;
+ 
+ 	bzero((char *)(char *)&ypro, sizeof ypro);
+ 
+ 	r = clnt_call(client, YPPROC_ORDER,
+ 		xdr_ypreq_nokey, &yprnk, xdr_ypresp_order, &ypro, tv);
+ 	if(r != RPC_SUCCESS) {
+ 		clnt_perror(client, "yp_order: clnt_call");
+ 	}
+ 
+ 	*outorder = ypro.ordernum;
+ 	xdr_free(xdr_ypresp_order, (char *)&ypro);
+ 
+ 	r = ypprot_err(ypro.status);
+ 	if(r == RPC_SUCCESS) {
+ 		
+ 		bzero((char *)&yprm, sizeof yprm);
+ 	
+ 		r = clnt_call(client, YPPROC_MASTER,
+ 			xdr_ypreq_nokey, &yprnk, xdr_ypresp_master, &yprm, tv);
+ 		if(r != RPC_SUCCESS) {
+ 			clnt_perror(client, "yp_master: clnt_call");
+ 		}
+ 		if( !(r=ypprot_err(yprm.status)) ) {
+ 			*outname = (char *)strdup(yprm.master);
+ 		}
+ 		xdr_free(xdr_ypresp_master, (char *)&yprm);
+ 		
+ 	}
+ 	clnt_destroy(client);
+ 	return r;
+ }
+ 
  int
  main(argc, argv)
+ int  argc;
  char **argv;
  {
  	char *domainname;
!         char *hostname = NULL;
          char *inmap, *master;
          int order;
  	extern char *optarg;
***************
*** 86,104 ****
  
  	inmap = argv[optind];
  
  	r = yp_order(domainname, inmap, &order);
!         if (r != 0) {
! 		fprintf(stderr, "No such map %s. Reason: %s\n",
! 			inmap, yperr_string(r));
!                 exit(1);
! 	}
!         printf("Map %s has order number %d. %s", inmap, order, ctime((time_t *)&order));
  	r = yp_master(domainname, inmap, &master);
          if (r != 0) {
  		fprintf(stderr, "No such map %s. Reason: %s\n",
  			inmap, yperr_string(r));
                  exit(1);
  	}
          printf("The master server is %s.\n", master);
          
          exit(0);
--- 176,199 ----
  
  	inmap = argv[optind];
  
+ 	if(hostname != NULL) {
+ 		r = get_remote_info(domainname, inmap, hostname,
+ 				    &order, &master);
+ 	} else {
  		r = yp_order(domainname, inmap, &order);
! 
! 	        if (r == 0) {
  			r = yp_master(domainname, inmap, &master);
+ 		}
+ 	}
+ 
  	if (r != 0) {
  		fprintf(stderr, "No such map %s. Reason: %s\n",
  			inmap, yperr_string(r));
                  exit(1);
  	}
+ 
+         printf("Map %s has order number %d. %s", inmap, order, ctime((time_t *)&order));
          printf("The master server is %s.\n", master);
          
          exit(0);

===== End of yppoll.c.diff =====

===== Start of yppoll.8 =====
.\" Copyright (c) 1994 Mats O Jansson <moj@stacken.kth.se>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. 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: yppoll.8,v 1.0 1994/08/18 21:58:41 moj Exp $
.\"
.Dd August 18, 1994
.Dt YPPOLL 8
.Os NetBSD 1.0
.Sh NAME
.Nm yppoll
.Nd get version of a NIS map from NIS server
.Sh SYNOPSIS
.Nm /usr/sbin/yppoll
.Op Fl h Ar host
.Op Fl d Ar domainname
.Ar mapname
.Sh DESCRIPTION
.Nm yppoll 
is used to get information of a maps order number and master server.
This utilitie is useful when determin if different servers has the
same version of a map.
.Nm yppoll
normally talks with the default
.Xr ypserv 8
process, but by using the 
.Fl h
option its possible to talk with a specific server.
.Pp
The options are as follows:
.Bl -tag -width indent
.It Fl d Ar domain
Don't use default domain, use the specified domain.
.It Fl h Ar host
Get map information from host insteed of the default NIS server.
.El
.Sh SEE ALSO
.Xr ypserv 8 
.Sh AUTHOR
Theo de Raadt, John Brezak and Mats O Jansson

===== End of yppoll.8 =====
>Audit-Trail:
>Unformatted:


------------------------------------------------------------------------------