Annotation of cci/usr/src/etc/gettable.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)gettable.c 4.3 (Berkeley) 10/5/83";
                      3: #endif
                      4: 
                      5: #include <sys/types.h>
                      6: #include <sys/socket.h>
                      7: 
                      8: #include <netinet/in.h>
                      9: 
                     10: #include <stdio.h>
                     11: #include <netdb.h>
                     12: 
                     13: #define        OUTFILE         "hosts.txt"     /* default output file */
                     14: #define        QUERY           "ALL\r\n"       /* query to hostname server */
                     15: 
                     16: #define        equaln(s1, s2, n)       (!strncmp(s1, s2, n))
                     17: 
                     18: struct sockaddr_in sin;
                     19: char   buf[BUFSIZ];
                     20: char   *outfile = OUTFILE;
                     21: 
                     22: main(argc, argv)
                     23:        int argc;
                     24:        char *argv[];
                     25: {
                     26:        int s;
                     27:        register len;
                     28:        register FILE *sfi, *sfo, *hf;
                     29:        register char *p;
                     30:        char *host;
                     31:        register struct hostent *hp;
                     32:        struct servent *sp;
                     33: 
                     34:        argv++, argc--;
                     35:        if (argc < 1 || argc > 2) {
                     36:                fprintf(stderr, "usage: gettable host [ file ]\n");
                     37:                exit(1);
                     38:        }
                     39:        sp = getservbyname("hostnames", "tcp");
                     40:        if (sp == NULL) {
                     41:                fprintf(stderr, "gettable: hostnames/tcp: unknown service\n");
                     42:                exit(3);
                     43:        }
                     44:        host = *argv;
                     45:        argv++, argc--;
                     46:        hp = gethostbyname(host);
                     47:        if (hp == NULL) {
                     48:                fprintf(stderr, "gettable: %s: host unknown\n", host);
                     49:                exit(2);
                     50:        }
                     51:        host = hp->h_name;
                     52:        if (argc > 0)
                     53:                outfile = *argv;
                     54:        sin.sin_family = hp->h_addrtype;
                     55:        s = socket(hp->h_addrtype, SOCK_STREAM, 0, 0);
                     56:        if (s < 0) {
                     57:                perror("gettable: socket");
                     58:                exit(4);
                     59:        }
                     60:        if (bind(s, &sin, sizeof (sin), 0) < 0) {
                     61:                perror("gettable: bind");
                     62:                exit(5);
                     63:        }
                     64:        bcopy(hp->h_addr, &sin.sin_addr, hp->h_length);
                     65:        sin.sin_port = sp->s_port;
                     66:        if (connect(s, &sin, sizeof (sin), 0) < 0) {
                     67:                perror("gettable: connect");
                     68:                exit(6);
                     69:        }
                     70:        fprintf(stderr, "Connection to %s opened.\n", host);
                     71:        sfi = fdopen(s, "r");
                     72:        sfo = fdopen(s, "w");
                     73:        if (sfi == NULL || sfo == NULL) {
                     74:                perror("gettable: fdopen");
                     75:                close(s);
                     76:                exit(1);
                     77:        }
                     78:        hf = fopen(outfile, "w");
                     79:        if (hf == NULL) {
                     80:                fprintf(stderr, "gettable: "); perror(outfile);
                     81:                close(s);
                     82:                exit(1);
                     83:        }
                     84:        fprintf(sfo, QUERY);
                     85:        fflush(sfo);
                     86:        while (fgets(buf, sizeof(buf), sfi) != NULL) {
                     87:                len = strlen(buf);
                     88:                buf[len-2] = '\0';
                     89:                if (equaln(buf, "BEGIN", 5) || equaln(buf, "END", 3)) {
                     90:                        continue;
                     91:                }
                     92:                if (equaln(buf, "ERR", 3)) {
                     93:                        fprintf(stderr, "gettable: hostnames error: %s", buf);
                     94:                        continue;
                     95:                }
                     96:                fprintf(hf, "%s\n", buf);
                     97:        }
                     98:        fclose(hf);
                     99:        fprintf(stderr, "Host table received.\n");
                    100:        close(s);
                    101:        fprintf(stderr, "Connection to %s closed\n", host);
                    102: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.