Home | History | Annotate | Line # | Download | only in ypmatch
ypmatch.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 usage()
     26  1.1  deraadt {
     27  1.1  deraadt 	fprintf(stderr, "Usage:\n");
     28  1.1  deraadt 	fprintf(stderr, "\typmatch [-d domain] [-t] [-k] key [key ...] mname\n");
     29  1.1  deraadt 	fprintf(stderr, "\typmatch -x\n");
     30  1.1  deraadt 	fprintf(stderr, "where\n");
     31  1.1  deraadt 	fprintf(stderr, "\tmname may be either a mapname or a nickname for a map\n");
     32  1.1  deraadt 	fprintf(stderr, "\t-t inhibits map nickname translation\n");
     33  1.1  deraadt 	fprintf(stderr, "\t-k prints keys as well as values.\n");
     34  1.1  deraadt 	fprintf(stderr, "\t-x dumps the map nickname translation table.\n");
     35  1.1  deraadt 	exit(1);
     36  1.1  deraadt }
     37  1.1  deraadt 
     38  1.1  deraadt int
     39  1.1  deraadt main(argc, argv)
     40  1.1  deraadt char **argv;
     41  1.1  deraadt {
     42  1.1  deraadt 	char *domainname;
     43  1.1  deraadt 	char *inkey, *inmap, *outbuf;
     44  1.1  deraadt 	extern char *optarg;
     45  1.1  deraadt 	extern int optind;
     46  1.1  deraadt 	int outbuflen, key, notrans;
     47  1.1  deraadt 	int c, r, i;
     48  1.1  deraadt 
     49  1.1  deraadt 	notrans = key = 0;
     50  1.1  deraadt 	yp_get_default_domain(&domainname);
     51  1.1  deraadt 
     52  1.1  deraadt 	while( (c=getopt(argc, argv, "xd:kt")) != -1)
     53  1.1  deraadt 		switch(c) {
     54  1.1  deraadt 		case 'x':
     55  1.1  deraadt 			for(i=0; i<sizeof ypaliases/sizeof ypaliases[0]; i++)
     56  1.1  deraadt 				printf("Use \"%s\" for \"%s\"\n",
     57  1.1  deraadt 					ypaliases[i].alias,
     58  1.1  deraadt 					ypaliases[i].name);
     59  1.1  deraadt 			exit(0);
     60  1.1  deraadt 		case 'd':
     61  1.1  deraadt 			domainname = optarg;
     62  1.1  deraadt 			break;
     63  1.1  deraadt 		case 't':
     64  1.1  deraadt 			notrans++;
     65  1.1  deraadt 			break;
     66  1.1  deraadt 		case 'k':
     67  1.1  deraadt 			key++;
     68  1.1  deraadt 			break;
     69  1.1  deraadt 		default:
     70  1.1  deraadt 			usage();
     71  1.1  deraadt 		}
     72  1.1  deraadt 
     73  1.1  deraadt 	if( (argc-optind) < 2 )
     74  1.1  deraadt 		usage();
     75  1.1  deraadt 
     76  1.1  deraadt 	inmap = argv[argc-1];
     77  1.1  deraadt 	for(i=0; (!notrans) && i<sizeof ypaliases/sizeof ypaliases[0]; i++)
     78  1.1  deraadt 		if( strcmp(inmap, ypaliases[i].alias) == 0)
     79  1.1  deraadt 			inmap = ypaliases[i].name;
     80  1.1  deraadt 	for(; optind < argc-1; optind++) {
     81  1.1  deraadt 		inkey = argv[optind];
     82  1.1  deraadt 
     83  1.1  deraadt 		r = yp_match(domainname, inmap, inkey,
     84  1.1  deraadt 			strlen(inkey), &outbuf, &outbuflen);
     85  1.1  deraadt 		switch(r) {
     86  1.1  deraadt 		case 0:
     87  1.1  deraadt 			if(key)
     88  1.1  deraadt 				printf("%s ", inkey);
     89  1.1  deraadt 			printf("%*.*s\n", outbuflen, outbuflen, outbuf);
     90  1.1  deraadt 			break;
     91  1.1  deraadt 		case YPERR_YPBIND:
     92  1.1  deraadt 			fprintf(stderr, "yp_match: not running ypbind\n");
     93  1.1  deraadt 			exit(1);
     94  1.1  deraadt 		default:
     95  1.1  deraadt 			fprintf(stderr, "Can't match key %s in map %s. Reason: %s\n",
     96  1.1  deraadt 				inkey, inmap, yperr_string(r));
     97  1.1  deraadt 			break;
     98  1.1  deraadt 		}
     99  1.1  deraadt 	}
    100  1.1  deraadt 	exit(0);
    101  1.1  deraadt }
    102