/*-------------------------------------------------------
** **	ypls	- List
Automounter-Mointpoints V1.0 **
**	usage: amls [-I] path **
**	Oliver Grau, 1992 ** **	Email:
grau@tnt.uni-hannover.dbp.de **
-------------------------------------------------------*/

#include	<stdio.h>
#include	<stdlib.h>
#include	<rpcsvc/ypclnt.h>


char	*domain;	/* yp-Domain */
int	showimport = 0;	/* wenn !=0, dann
zeige Import-Quelle an */



int	catchentry( instatus, inkey,
inkeylen, inval, invallen, indata )
	int instatus;
	char *inkey;
	int inkeylen;
	char *inval;
	int invallen;
	char *indata; 
	{
	char	w[BUFSIZ];

	if(instatus==2) 
	  return 0;

	if(instatus!=1) 
	{
	  fprintf(stderr,"stat:%dNIS-Map is unknown\n",
			instatus);
	  return instatus;
	}
	
	memcpy(w,inkey,inkeylen);
	w[inkeylen] = '\0';
	printf("%s/%s",indata,w);
	
	if(showimport ) 
	{
	  memcpy(w,inval,invallen);
	  w[invallen] = '\0';
	  printf("\t(===> %s )\n",w);
	} 
	else
          putchar('\n');
	  return 0; 
        }


check_path( mountpoint, inpath, ammap )
	char	*mountpoint;
	char	*inpath;
	char	*ammap; 
	{
	struct ypall_callback	ypcallstru;
	int	stat;

	/*
	** ueberpruefe ob Pfadname und
	mountpoint ungleich sind */

	if( strcmp(mountpoint, inpath ))
	  return 0;

	ypcallstru.foreach = catchentry;
	ypcallstru.data = inpath;
	stat=yp_all(domain, ammap,&ypcallstru );

	if(stat) 
	{
	  fprintf(stderr,"stat:%dNIS-Map:%s is unknown\n",
			stat, ammap);
	  exit(-1);
	}
	exit(1); 
        }

main(argc,argv) int	argc;
char	**argv; 
  {
  	char	*inmap="auto.master";
	char	*inpath;
	char	*outkey,*outval,*lastkey;
	int	outkeylen,outvallen,lastkeylen;
	int	stat;
	char	mountpoint[BUFSIZ];
	char	*wp,ammap[BUFSIZ];

	stat=yp_get_default_domain (&domain);

	if(argc<2) 
	  goto exiterror;
	
	++argv;
	
	if(!strcmp( *argv,"-I")) 
	{
	  showimport = 1;
	  --argc;
	  ++argv;
	}
	
	if(argc!=2) 
	  goto exiterror;
	
	inpath = *argv;
	
	if(*inpath=='/' && *(inpath+1)=='/')
	  ++inpath;

	stat=yp_first(domain, inmap, &outkey,&outkeylen, &outval, &outvallen);

	if(stat) 
	{
	  fprintf(stderr,"stat:%dNIS-Map:%s is unknown\n",
			stat, inmap);
	  exit(-1);
	}

	lastkey=outkey;
	lastkeylen=outkeylen;

	for(;stat==0; ) 
	{
	  memcpy(mountpoint,outkey,outkeylen);
	  mountpoint[outkeylen] = '\0';
	  memcpy(ammap,outval,outvallen);
	  ammap[outvallen] = '\0';
	  for(wp=ammap; *wp && *wp!=' '&& *wp!='\t'; ++wp);
	  if(*wp) 
	    *wp='\0';

	  check_path( mountpoint,inpath, ammap );

	  stat=yp_next(domain, inmap,lastkey, lastkeylen,
		&outkey, &outkeylen,&outval, &outvallen);
	  lastkey=outkey;
	  lastkeylen=outkeylen;
	}
	exit(0);

	exiterror:
	fprintf(stderr,"ypls [-I] path\n");
	exit(-1); 
  }


