115666Sralph #ifndef lint 2*16509Sralph static char *sccsid = "@(#)mkhosts.c 4.3 (Berkeley) 84/05/17"; 315666Sralph #endif 415666Sralph 515666Sralph #include <sys/file.h> 615666Sralph #include <stdio.h> 715666Sralph #include <netdb.h> 815666Sralph #include <ndbm.h> 915666Sralph 1015666Sralph char buf[BUFSIZ]; 1115666Sralph 1215666Sralph main(argc, argv) 1315666Sralph char *argv[]; 1415666Sralph { 1515666Sralph DBM *dp; 1615666Sralph register struct hostent *hp; 1715666Sralph datum key, content; 1815666Sralph register char *cp, *tp, **sp; 1915666Sralph register int naliases, *nap; 2015666Sralph int verbose = 0, entries = 0, maxlen = 0; 2115666Sralph 2215666Sralph if (argc > 1 && strcmp(argv[1], "-v") == 0) { 2315666Sralph verbose++; 2415666Sralph argv++, argc--; 2515666Sralph } 2615666Sralph if (argc != 2) { 2715666Sralph fprintf(stderr, "usage: mkhosts [ -v ] file\n"); 2815666Sralph exit(1); 2915666Sralph } 30*16509Sralph if (access(argv[1], R_OK) < 0) { 31*16509Sralph perror(argv[1]); 32*16509Sralph exit(1); 33*16509Sralph } 3415666Sralph umask(0); 3515666Sralph dp = ndbmopen(argv[1], O_WRONLY|O_CREAT|O_EXCL, 0644); 3615666Sralph if (dp == NULL) { 3715666Sralph fprintf(stderr, "dbminit failed: "); 3815666Sralph perror(argv[1]); 3915666Sralph exit(1); 4015666Sralph } 4115666Sralph dp->db_maxbno = 0; 42*16509Sralph sethostfile(argv[1]); 4315666Sralph sethostent(1); 4415666Sralph while (hp = gethostent()) { 4515666Sralph cp = buf; 4615666Sralph tp = hp->h_name; 4715666Sralph while (*cp++ = *tp++) 4815666Sralph ; 4915666Sralph nap = (int *)cp; 5015666Sralph cp += sizeof (int); 5115666Sralph naliases = 0; 5215666Sralph for (sp = hp->h_aliases; *sp; sp++) { 5315666Sralph tp = *sp; 5415666Sralph while (*cp++ = *tp++) 5515666Sralph ; 5615666Sralph naliases++; 5715666Sralph } 5815666Sralph *nap = naliases; 5915666Sralph bcopy((char *)&hp->h_addrtype, cp, sizeof (int)); 6015666Sralph cp += sizeof (int); 6115666Sralph bcopy((char *)&hp->h_length, cp, sizeof (int)); 6215666Sralph cp += sizeof (int); 6315666Sralph bcopy(hp->h_addr, cp, hp->h_length); 6415666Sralph cp += hp->h_length; 6515666Sralph content.dptr = buf; 6615666Sralph content.dsize = cp - buf; 6715666Sralph if (verbose) 6815666Sralph printf("store %s, %d aliases\n", hp->h_name, naliases); 6915666Sralph key.dptr = hp->h_name; 7015666Sralph key.dsize = strlen(hp->h_name); 7115921Sralph dbmstore(dp, key, content, DB_INSERT); 7215666Sralph for (sp = hp->h_aliases; *sp; sp++) { 7315666Sralph key.dptr = *sp; 7415666Sralph key.dsize = strlen(*sp); 7515921Sralph dbmstore(dp, key, content, DB_INSERT); 7615666Sralph } 7715666Sralph key.dptr = hp->h_addr; 7815666Sralph key.dsize = hp->h_length; 7915921Sralph dbmstore(dp, key, content, DB_INSERT); 8015666Sralph entries++; 8115666Sralph if (cp - buf > maxlen) 8215666Sralph maxlen = cp - buf; 8315666Sralph } 8415666Sralph endhostent(); 8515666Sralph printf("%d host entries, maximum length %d\n", entries, maxlen); 8615666Sralph exit(0); 8715666Sralph } 88