Home | History | Annotate | Line # | Download | only in ypcat
ypcat.c revision 1.1
      1  1.1  deraadt #include <sys/param.h>
      2  1.1  deraadt #include <sys/types.h>
      3  1.1  deraadt #include <sys/socket.h>
      4  1.1  deraadt #include <stdio.h>
      5  1.1  deraadt #include <ctype.h>
      6  1.1  deraadt 
      7  1.1  deraadt #include <rpc/rpc.h>
      8  1.1  deraadt #include <rpc/xdr.h>
      9  1.1  deraadt #include <rpcsvc/yp_prot.h>
     10  1.1  deraadt #include <rpcsvc/ypclnt.h>
     11  1.1  deraadt 
     12  1.1  deraadt struct ypalias {
     13  1.1  deraadt 	char *alias, *name;
     14  1.1  deraadt } ypaliases[] = {
     15  1.1  deraadt 	{ "passwd", "passwd.byname" },
     16  1.1  deraadt 	{ "group", "group.byname" },
     17  1.1  deraadt 	{ "networks", "networks.byaddr" },
     18  1.1  deraadt 	{ "hosts", "hosts.byaddr" },
     19  1.1  deraadt 	{ "protocols", "protocols.bynumber" },
     20  1.1  deraadt 	{ "services", "services.byname" },
     21  1.1  deraadt 	{ "aliases", "mail.aliases" },
     22  1.1  deraadt 	{ "ethers", "ethers.byname" },
     23  1.1  deraadt };
     24  1.1  deraadt 
     25  1.1  deraadt int key;
     26  1.1  deraadt 
     27  1.1  deraadt usage()
     28  1.1  deraadt {
     29  1.1  deraadt 	fprintf(stderr, "Usage:\n");
     30  1.1  deraadt 	fprintf(stderr, "\typcat [-k] [-d domainname] [-t] mapname\n");
     31  1.1  deraadt 	fprintf(stderr, "\typcat -x\n");
     32  1.1  deraadt 	exit(1);
     33  1.1  deraadt }
     34  1.1  deraadt 
     35  1.1  deraadt printit(instatus, inkey, inkeylen, inval, invallen, indata)
     36  1.1  deraadt int instatus;
     37  1.1  deraadt char *inkey;
     38  1.1  deraadt int inkeylen;
     39  1.1  deraadt char *inval;
     40  1.1  deraadt int invallen;
     41  1.1  deraadt char *indata;
     42  1.1  deraadt {
     43  1.1  deraadt 	if(instatus != YP_TRUE)
     44  1.1  deraadt 		return instatus;
     45  1.1  deraadt 	if(key)
     46  1.1  deraadt 		printf("%*.*s ", inkeylen, inkeylen, inkey);
     47  1.1  deraadt 	printf("%*.*s\n", invallen, invallen, inval);
     48  1.1  deraadt 	return 0;
     49  1.1  deraadt }
     50  1.1  deraadt 
     51  1.1  deraadt int
     52  1.1  deraadt main(argc, argv)
     53  1.1  deraadt char **argv;
     54  1.1  deraadt {
     55  1.1  deraadt 	char *domainname;
     56  1.1  deraadt 	struct ypall_callback ypcb;
     57  1.1  deraadt 	char *inmap;
     58  1.1  deraadt 	extern char *optarg;
     59  1.1  deraadt 	extern int optind;
     60  1.1  deraadt 	int notrans;
     61  1.1  deraadt 	int c, r, i;
     62  1.1  deraadt 
     63  1.1  deraadt 	notrans = key = 0;
     64  1.1  deraadt 	yp_get_default_domain(&domainname);
     65  1.1  deraadt 
     66  1.1  deraadt 	while( (c=getopt(argc, argv, "xd:kt")) != -1)
     67  1.1  deraadt 		switch(c) {
     68  1.1  deraadt 		case 'x':
     69  1.1  deraadt 			for(i=0; i<sizeof ypaliases/sizeof ypaliases[0]; i++)
     70  1.1  deraadt 				printf("Use \"%s\" for \"%s\"\n",
     71  1.1  deraadt 					ypaliases[i].alias,
     72  1.1  deraadt 					ypaliases[i].name);
     73  1.1  deraadt 			exit(0);
     74  1.1  deraadt 		case 'd':
     75  1.1  deraadt 			domainname = optarg;
     76  1.1  deraadt 			break;
     77  1.1  deraadt 		case 't':
     78  1.1  deraadt 			notrans++;
     79  1.1  deraadt 			break;
     80  1.1  deraadt 		case 'k':
     81  1.1  deraadt 			key++;
     82  1.1  deraadt 			break;
     83  1.1  deraadt 		default:
     84  1.1  deraadt 			usage();
     85  1.1  deraadt 		}
     86  1.1  deraadt 
     87  1.1  deraadt 	if(optind + 1 != argc )
     88  1.1  deraadt 		usage();
     89  1.1  deraadt 
     90  1.1  deraadt 	inmap = argv[optind];
     91  1.1  deraadt 	for(i=0; (!notrans) && i<sizeof ypaliases/sizeof ypaliases[0]; i++)
     92  1.1  deraadt 		if( strcmp(inmap, ypaliases[i].alias) == 0)
     93  1.1  deraadt 			inmap = ypaliases[i].name;
     94  1.1  deraadt 	ypcb.foreach = printit;
     95  1.1  deraadt 	ypcb.data = NULL;
     96  1.1  deraadt 
     97  1.1  deraadt 	r = yp_all(domainname, inmap, &ypcb);
     98  1.1  deraadt 	switch(r) {
     99  1.1  deraadt 	case 0:
    100  1.1  deraadt 		break;
    101  1.1  deraadt 	case YPERR_YPBIND:
    102  1.1  deraadt 		fprintf(stderr, "ypcat: not running ypbind\n");
    103  1.1  deraadt 		exit(1);
    104  1.1  deraadt 	default:
    105  1.1  deraadt 		fprintf(stderr, "No such map %s. Reason: %s\n",
    106  1.1  deraadt 			inmap, yperr_string(r));
    107  1.1  deraadt 		exit(1);
    108  1.1  deraadt 	}
    109  1.1  deraadt 	exit(0);
    110  1.1  deraadt }
    111