1*15666Sralph #ifndef lint 2*15666Sralph static char *sccsid = "@(#)mkhosts.c 4.1 (Berkeley) 83/12/05"; 3*15666Sralph #endif 4*15666Sralph 5*15666Sralph #include <sys/file.h> 6*15666Sralph #include <stdio.h> 7*15666Sralph #include <netdb.h> 8*15666Sralph #include <ndbm.h> 9*15666Sralph 10*15666Sralph char buf[BUFSIZ]; 11*15666Sralph 12*15666Sralph main(argc, argv) 13*15666Sralph char *argv[]; 14*15666Sralph { 15*15666Sralph DBM *dp; 16*15666Sralph register struct hostent *hp; 17*15666Sralph datum key, content; 18*15666Sralph register char *cp, *tp, **sp; 19*15666Sralph register int naliases, *nap; 20*15666Sralph int verbose = 0, entries = 0, maxlen = 0; 21*15666Sralph 22*15666Sralph if (argc > 1 && strcmp(argv[1], "-v") == 0) { 23*15666Sralph verbose++; 24*15666Sralph argv++, argc--; 25*15666Sralph } 26*15666Sralph if (argc != 2) { 27*15666Sralph fprintf(stderr, "usage: mkhosts [ -v ] file\n"); 28*15666Sralph exit(1); 29*15666Sralph } 30*15666Sralph umask(0); 31*15666Sralph dp = ndbmopen(argv[1], O_WRONLY|O_CREAT|O_EXCL, 0644); 32*15666Sralph if (dp == NULL) { 33*15666Sralph fprintf(stderr, "dbminit failed: "); 34*15666Sralph perror(argv[1]); 35*15666Sralph exit(1); 36*15666Sralph } 37*15666Sralph dp->db_maxbno = 0; 38*15666Sralph sethostent(1); 39*15666Sralph while (hp = gethostent()) { 40*15666Sralph cp = buf; 41*15666Sralph tp = hp->h_name; 42*15666Sralph while (*cp++ = *tp++) 43*15666Sralph ; 44*15666Sralph nap = (int *)cp; 45*15666Sralph cp += sizeof (int); 46*15666Sralph naliases = 0; 47*15666Sralph for (sp = hp->h_aliases; *sp; sp++) { 48*15666Sralph tp = *sp; 49*15666Sralph while (*cp++ = *tp++) 50*15666Sralph ; 51*15666Sralph naliases++; 52*15666Sralph } 53*15666Sralph *nap = naliases; 54*15666Sralph bcopy((char *)&hp->h_addrtype, cp, sizeof (int)); 55*15666Sralph cp += sizeof (int); 56*15666Sralph bcopy((char *)&hp->h_length, cp, sizeof (int)); 57*15666Sralph cp += sizeof (int); 58*15666Sralph bcopy(hp->h_addr, cp, hp->h_length); 59*15666Sralph cp += hp->h_length; 60*15666Sralph content.dptr = buf; 61*15666Sralph content.dsize = cp - buf; 62*15666Sralph if (verbose) 63*15666Sralph printf("store %s, %d aliases\n", hp->h_name, naliases); 64*15666Sralph key.dptr = hp->h_name; 65*15666Sralph key.dsize = strlen(hp->h_name); 66*15666Sralph dbmstore(dp, key, content); 67*15666Sralph for (sp = hp->h_aliases; *sp; sp++) { 68*15666Sralph key.dptr = *sp; 69*15666Sralph key.dsize = strlen(*sp); 70*15666Sralph dbmstore(dp, key, content); 71*15666Sralph } 72*15666Sralph key.dptr = hp->h_addr; 73*15666Sralph key.dsize = hp->h_length; 74*15666Sralph dbmstore(dp, key, content); 75*15666Sralph entries++; 76*15666Sralph if (cp - buf > maxlen) 77*15666Sralph maxlen = cp - buf; 78*15666Sralph } 79*15666Sralph endhostent(); 80*15666Sralph printf("%d host entries, maximum length %d\n", entries, maxlen); 81*15666Sralph exit(0); 82*15666Sralph } 83