# 2.11BSD#431 - /usr/src/usr.sbin/gettable/gettable.c

##### Functions

    main              X

##### Variables

    buf               X
    outfile           X
    sin               X

##### Macros

    OUTFILE           X
    QUERY             X
    VERFILE           X
    VERSION           X
    equaln            X

       1: /*
       2:  * Copyright (c) 1983 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #ifndef lint
       8: static char sccsid[] = "@(#)gettable.c	5.2 (Berkeley) 4/30/86";
       9: #endif not lint
      10:
      11: #include <sys/types.h>
      12: #include <sys/socket.h>
      13:
      14: #include <netinet/in.h>
      15:
      16: #include <stdio.h>
      17: #include <netdb.h>
      18:
      19: #define OUTFILE     "hosts.txt" /* default output file */
      20: #define VERFILE     "hosts.ver" /* default version file */
      21: #define QUERY       "ALL\r\n"   /* query to hostname server */
      22: #define VERSION     "VERSION\r\n"   /* get version number */
      23:
      24: #define equaln(s1, s2, n)   (!strncmp(s1, s2, n))
      25:
      26: struct  sockaddr_in sin;
      27: char    buf[BUFSIZ];
      28: char    *outfile = OUTFILE;
      29:
      30: main(argc, argv)
      31:     int argc;
      32:     char *argv[];
      33: {
      34:     int s;
      35:     register len;
      36:     register FILE *sfi, *sfo, *hf;
      37:     char *host;
      38:     register struct hostent *hp;
      39:     struct servent *sp;
      40:     int version = 0;
      41:     int beginseen = 0;
      42:     int endseen = 0;
      43:
      44:     argv++, argc--;
      45:     if (**argv == '-') {
      46:         if (argv[0][1] != 'v')
      47:             fprintf(stderr, "unknown option %s ignored\n", *argv);
      48:         else
      49:             version++, outfile = VERFILE;
      50:         argv++, argc--;
      51:     }
      52:     if (argc < 1 || argc > 2) {
      53:         fprintf(stderr, "usage: gettable [-v] host [ file ]\n");
      54:         exit(1);
      55:     }
      56:     sp = getservbyname("hostnames", "tcp");
      57:     if (sp == NULL) {
      58:         fprintf(stderr, "gettable: hostnames/tcp: unknown service\n");
      59:         exit(3);
      60:     }
      61:     host = *argv;
      62:     argv++, argc--;
      63:     hp = gethostbyname(host);
      64:     if (hp == NULL) {
      65:         fprintf(stderr, "gettable: %s: host unknown\n", host);
      66:         exit(2);
      67:     }
      68:     host = hp->h_name;
      69:     if (argc > 0)
      70:         outfile = *argv;
      71:     sin.sin_family = hp->h_addrtype;
      72:     s = socket(hp->h_addrtype, SOCK_STREAM, 0);
      73:     if (s < 0) {
      74:         perror("gettable: socket");
      75:         exit(4);
      76:     }
      77:     if (bind(s, &sin, sizeof (sin)) < 0) {
      78:         perror("gettable: bind");
      79:         exit(5);
      80:     }
      81:     bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length);
      82:     sin.sin_port = sp->s_port;
      83:     if (connect(s, &sin, sizeof (sin)) < 0) {
      84:         perror("gettable: connect");
      85:         exit(6);
      86:     }
      87:     fprintf(stderr, "Connection to %s opened.\n", host);
      88:     sfi = fdopen(s, "r");
      89:     sfo = fdopen(s, "w");
      90:     if (sfi == NULL || sfo == NULL) {
      91:         perror("gettable: fdopen");
      92:         close(s);
      93:         exit(1);
      94:     }
      95:     hf = fopen(outfile, "w");
      96:     if (hf == NULL) {
      97:         fprintf(stderr, "gettable: "); perror(outfile);
      98:         close(s);
      99:         exit(1);
     100:     }
     101:     fprintf(sfo, version ? VERSION : QUERY);
     102:     fflush(sfo);
     103:     while (fgets(buf, sizeof(buf), sfi) != NULL) {
     104:         len = strlen(buf);
     105:         buf[len-2] = '\0';
     106:         if (!version && equaln(buf, "BEGIN", 5)) {
     107:             if (beginseen || endseen) {
     108:                 fprintf(stderr,
     109:                     "gettable: BEGIN sequence error\n");
     110:                 exit(90);
     111:             }
     112:             beginseen++;
     113:             continue;
     114:         }
     115:         if (!version && equaln(buf, "END", 3)) {
     116:             if (!beginseen || endseen) {
     117:                 fprintf(stderr,
     118:                     "gettable: END sequence error\n");
     119:                 exit(91);
     120:             }
     121:             endseen++;
     122:             continue;
     123:         }
     124:         if (equaln(buf, "ERR", 3)) {
     125:             fprintf(stderr,
     126:                 "gettable: hostname service error: %s", buf);
     127:             exit(92);
     128:         }
     129:         fprintf(hf, "%s\n", buf);
     130:     }
     131:     fclose(hf);
     132:     if (!version) {
     133:         if (!beginseen) {
     134:             fprintf(stderr, "gettable: no BEGIN seen\n");
     135:             exit(93);
     136:         }
     137:         if (!endseen) {
     138:             fprintf(stderr, "gettable: no END seen\n");
     139:             exit(94);
     140:         }
     141:         fprintf(stderr, "Host table received.\n");
     142:     } else
     143:         fprintf(stderr, "Version number received.\n");
     144:     close(s);
     145:     fprintf(stderr, "Connection to %s closed\n", host);
     146:     exit(0);
     147: }

#### Defined functions

main defined in line 30; never used

#### Defined variables

buf defined in line 27; used 9 times

- in line 103-106(5), 115, 124-129(3)

outfile defined in line 28; used 4 times

- in line 49, 70, 95-97(2)

sccsid defined in line 8; never used
sin defined in line 26; used 7 times

- in line 71, 77-83(6)

#### Defined macros

OUTFILE defined in line 19; used 1 times

- in line 28

QUERY defined in line 21; used 1 times

- in line 101

VERFILE defined in line 20; used 1 times

- in line 49

VERSION defined in line 22; used 1 times

- in line 101

equaln defined in line 24; used 3 times

- in line 106, 115, 124

Last modified: 1987-02-16 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1470 |