115666Sralph #ifndef lint 2*15921Sralph static char *sccsid = "@(#)mkhosts.c 4.2 (Berkeley) 84/02/02"; 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 } 3015666Sralph umask(0); 3115666Sralph dp = ndbmopen(argv[1], O_WRONLY|O_CREAT|O_EXCL, 0644); 3215666Sralph if (dp == NULL) { 3315666Sralph fprintf(stderr, "dbminit failed: "); 3415666Sralph perror(argv[1]); 3515666Sralph exit(1); 3615666Sralph } 3715666Sralph dp->db_maxbno = 0; 3815666Sralph sethostent(1); 3915666Sralph while (hp = gethostent()) { 4015666Sralph cp = buf; 4115666Sralph tp = hp->h_name; 4215666Sralph while (*cp++ = *tp++) 4315666Sralph ; 4415666Sralph nap = (int *)cp; 4515666Sralph cp += sizeof (int); 4615666Sralph naliases = 0; 4715666Sralph for (sp = hp->h_aliases; *sp; sp++) { 4815666Sralph tp = *sp; 4915666Sralph while (*cp++ = *tp++) 5015666Sralph ; 5115666Sralph naliases++; 5215666Sralph } 5315666Sralph *nap = naliases; 5415666Sralph bcopy((char *)&hp->h_addrtype, cp, sizeof (int)); 5515666Sralph cp += sizeof (int); 5615666Sralph bcopy((char *)&hp->h_length, cp, sizeof (int)); 5715666Sralph cp += sizeof (int); 5815666Sralph bcopy(hp->h_addr, cp, hp->h_length); 5915666Sralph cp += hp->h_length; 6015666Sralph content.dptr = buf; 6115666Sralph content.dsize = cp - buf; 6215666Sralph if (verbose) 6315666Sralph printf("store %s, %d aliases\n", hp->h_name, naliases); 6415666Sralph key.dptr = hp->h_name; 6515666Sralph key.dsize = strlen(hp->h_name); 66*15921Sralph dbmstore(dp, key, content, DB_INSERT); 6715666Sralph for (sp = hp->h_aliases; *sp; sp++) { 6815666Sralph key.dptr = *sp; 6915666Sralph key.dsize = strlen(*sp); 70*15921Sralph dbmstore(dp, key, content, DB_INSERT); 7115666Sralph } 7215666Sralph key.dptr = hp->h_addr; 7315666Sralph key.dsize = hp->h_length; 74*15921Sralph dbmstore(dp, key, content, DB_INSERT); 7515666Sralph entries++; 7615666Sralph if (cp - buf > maxlen) 7715666Sralph maxlen = cp - buf; 7815666Sralph } 7915666Sralph endhostent(); 8015666Sralph printf("%d host entries, maximum length %d\n", entries, maxlen); 8115666Sralph exit(0); 8215666Sralph } 83