Annotation of 43BSDTahoe/etc/named/tools/nstest.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)nstest.c   4.6 (Berkeley) 12/7/86";
        !             3: #endif
        !             4: 
        !             5: /*
        !             6:  * Copyright (c) 1986 Regents of the University of California
        !             7:  *     All Rights Reserved
        !             8:  */
        !             9: 
        !            10: #include <sys/types.h>
        !            11: #include <sys/socket.h>
        !            12: #include <netinet/in.h>
        !            13: #include <stdio.h>
        !            14: #include <arpa/nameser.h>
        !            15: #include <resolv.h>
        !            16: 
        !            17: extern char *inet_ntoa();
        !            18: char *progname;
        !            19: FILE *log;
        !            20: #define MAXDATA                256   /* really should get definition from named/db.h */
        !            21: main(argc, argv)
        !            22:        char **argv;
        !            23: {
        !            24:        register char *cp;
        !            25:        struct hostent *hp;
        !            26:        short port = htons(NAMESERVER_PORT);
        !            27:        char buf[BUFSIZ];
        !            28:        char packet[PACKETSZ];
        !            29:        char answer[PACKETSZ];
        !            30:        struct rrec NewRR;
        !            31:        char OldRRData[MAXDATA];
        !            32:        int n, dump_packet;
        !            33: 
        !            34:        NewRR.r_data = (char *) malloc(MAXDATA);
        !            35:        NewRR.r_data = (char *) malloc(MAXDATA);
        !            36:        progname = argv[0];
        !            37:        dump_packet = 0;
        !            38:        _res.options |= RES_INIT|RES_DEBUG|RES_RECURSE;
        !            39:        while (argc > 1 && argv[1][0] == '-') {
        !            40:                argc--;
        !            41:                cp = *++argv;
        !            42:                while (*++cp)
        !            43:                        switch (*cp) {
        !            44:                        case 'p':
        !            45:                                if (--argc <= 0)
        !            46:                                        usage();
        !            47:                                port = htons(atoi(*++argv));
        !            48:                                break;
        !            49: 
        !            50:                        case 'i':
        !            51:                                _res.options |= RES_IGNTC;
        !            52:                                break;
        !            53: 
        !            54:                        case 'v':
        !            55:                                _res.options |= RES_USEVC|RES_STAYOPEN;
        !            56:                                break;
        !            57: 
        !            58:                        case 'r':
        !            59:                                _res.options &= ~RES_RECURSE;
        !            60:                                break;
        !            61: 
        !            62:                        case 'd':
        !            63:                                dump_packet++;
        !            64:                                break;
        !            65: 
        !            66:                        default:
        !            67:                                usage();
        !            68:                        }
        !            69:        }
        !            70:        _res.nsaddr.sin_family = AF_INET;
        !            71:        _res.nsaddr.sin_addr.s_addr = INADDR_ANY;
        !            72:        _res.nsaddr.sin_port = port;
        !            73:        if (argc > 1)
        !            74:                _res.nsaddr.sin_addr.s_addr = inet_addr(argv[1]);
        !            75:        if (argc > 2) {
        !            76:                log = fopen(argv[2],"w");
        !            77:                if (log == NULL) perror(argv[2]);
        !            78:        }
        !            79:        for (;;) {
        !            80:                printf("> ");
        !            81:                fflush(stdout);
        !            82:                if ((cp = (char *)gets(buf)) == NULL)
        !            83:                        break;
        !            84:                switch (*cp++) {
        !            85:                case 'a':
        !            86:                        n = res_mkquery(QUERY, cp, C_ANY, T_A, (char *)0, 0,
        !            87:                                NULL, packet, sizeof(packet));
        !            88:                        break;
        !            89: 
        !            90:                case 'A':
        !            91:                        n = ntohl(inet_addr(cp));
        !            92:                        putlong(n, cp);
        !            93:                        n = res_mkquery(IQUERY, "", C_IN, T_A, cp, sizeof(long),
        !            94:                                NULL, packet, sizeof(packet));
        !            95:                        break;
        !            96: 
        !            97:                case 'f':
        !            98:                        n = res_mkquery(QUERY, cp, C_ANY, T_UINFO, (char *)0, 0,
        !            99:                                NULL, packet, sizeof(packet));
        !           100:                        break;
        !           101: 
        !           102:                case 'g':
        !           103:                        n = res_mkquery(QUERY, cp, C_ANY, T_GID, (char *)0, 0,
        !           104:                                NULL, packet, sizeof(packet));
        !           105:                        break;
        !           106: 
        !           107:                case 'G':
        !           108:                        *(int *)cp = htonl(atoi(cp));
        !           109:                        n = res_mkquery(IQUERY, "", C_ANY, T_GID, cp,
        !           110:                                sizeof(int), NULL, packet, sizeof(packet));
        !           111:                        break;
        !           112: 
        !           113:                case 'c':
        !           114:                        n = res_mkquery(QUERY, cp, C_IN, T_CNAME, (char *)0, 0,
        !           115:                                NULL, packet, sizeof(packet));
        !           116:                        break;
        !           117: 
        !           118:                case 'h':
        !           119:                        n = res_mkquery(QUERY, cp, C_IN, T_HINFO, (char *)0, 0,
        !           120:                                NULL, packet, sizeof(packet));
        !           121:                        break;
        !           122: 
        !           123:                case 'm':
        !           124:                        n = res_mkquery(QUERY, cp, C_IN, T_MX, (char *)0, 0,
        !           125:                                NULL, packet, sizeof(packet));
        !           126:                        break;
        !           127: 
        !           128:                case 'M':
        !           129:                        n = res_mkquery(QUERY, cp, C_IN, T_MAILB, (char *)0, 0,
        !           130:                                NULL, packet, sizeof(packet));
        !           131:                        break;
        !           132: 
        !           133:                case 'n':
        !           134:                        n = res_mkquery(QUERY, cp, C_IN, T_NS, (char *)0, 0,
        !           135:                                NULL, packet, sizeof(packet));
        !           136:                        break;
        !           137: 
        !           138:                case 'p':
        !           139:                        n = res_mkquery(QUERY, cp, C_IN, T_PTR, (char *)0, 0,
        !           140:                                NULL, packet, sizeof(packet));
        !           141:                        break;
        !           142: 
        !           143:                case 's':
        !           144:                        n = res_mkquery(QUERY, cp, C_IN, T_SOA, (char *)0, 0,
        !           145:                                NULL, packet, sizeof(packet));
        !           146:                        break;
        !           147: 
        !           148:                case 'u':
        !           149:                        n = res_mkquery(QUERY, cp, C_ANY, T_UID, (char *)0, 0,
        !           150:                                NULL, packet, sizeof(packet));
        !           151:                        break;
        !           152: 
        !           153:                case 'U':
        !           154:                        *(int *)cp = htonl(atoi(cp));
        !           155:                        n = res_mkquery(IQUERY, "", C_ANY, T_UID, cp,
        !           156:                                sizeof(int), NULL, packet, sizeof(packet));
        !           157:                        break;
        !           158: 
        !           159:                case 'x':
        !           160:                        n = res_mkquery(QUERY, cp, C_IN, T_AXFR, (char *)0, 0,
        !           161:                                NULL, packet, sizeof(packet));
        !           162:                        break;
        !           163: 
        !           164:                case 'w':
        !           165:                        n = res_mkquery(QUERY, cp, C_IN, T_WKS, (char *)0, 0,
        !           166:                                NULL, packet, sizeof(packet));
        !           167:                        break;
        !           168: 
        !           169:                case 'b':
        !           170:                        n = res_mkquery(QUERY, cp, C_IN, T_MB, (char *)0, 0,
        !           171:                                NULL, packet, sizeof(packet));
        !           172:                        break;
        !           173: 
        !           174:                case 'B':
        !           175:                        n = res_mkquery(QUERY, cp, C_IN, T_MG, (char *)0, 0,
        !           176:                                NULL, packet, sizeof(packet));
        !           177:                        break;
        !           178: 
        !           179:                case 'i':
        !           180:                        n = res_mkquery(QUERY, cp, C_IN, T_MINFO, (char *)0, 0,
        !           181:                                NULL, packet, sizeof(packet));
        !           182:                        break;
        !           183: 
        !           184:                case 'r':
        !           185:                        n = res_mkquery(QUERY, cp, C_IN, T_MR, (char *)0, 0,
        !           186:                                NULL, packet, sizeof(packet));
        !           187:                        break;
        !           188: 
        !           189:                case '*':
        !           190:                        n = res_mkquery(QUERY, cp, C_IN, T_ANY, (char *)0, 0,
        !           191:                                NULL, packet, sizeof(packet));
        !           192:                        break;
        !           193: 
        !           194: #ifdef ALLOW_UPDATES
        !           195:                case '^':
        !           196:                        {
        !           197:                            char IType[10], TempStr[50];
        !           198:                            int Type, oldnbytes, nbytes, i;
        !           199: #ifdef ALLOW_T_UNSPEC
        !           200:                            printf("Data type (a = T_A, u = T_UNSPEC): ");
        !           201:                            gets(IType);
        !           202:                            if (IType[0] == 'u') {
        !           203:                                Type = T_UNSPEC;
        !           204:                                printf("How many data bytes? ");
        !           205:                                gets(TempStr); /* Throw away CR */
        !           206:                                sscanf(TempStr, "%d", &nbytes);
        !           207:                                for (i = 0; i < nbytes; i++) {
        !           208:                                        (NewRR.r_data)[i] = (char) i;
        !           209:                                }
        !           210:                            } else {
        !           211: #endif ALLOW_T_UNSPEC
        !           212:                                Type = T_A;
        !           213:                                nbytes = sizeof(u_long);
        !           214:                                printf("Inet addr for new dname (e.g., 192.4.3.2): ");
        !           215:                                gets(TempStr);
        !           216:                                putlong(ntohl(inet_addr(TempStr)), NewRR.r_data);
        !           217: #ifdef ALLOW_T_UNSPEC
        !           218:                            }
        !           219: #endif ALLOW_T_UNSPEC
        !           220:                            NewRR.r_class = C_IN;
        !           221:                            NewRR.r_type = Type;
        !           222:                            NewRR.r_size = nbytes;
        !           223:                            NewRR.r_ttl = 99999999;
        !           224:                            printf("Add, modify, or modify all (a/m/M)? ");
        !           225:                            gets(TempStr);
        !           226:                            if (TempStr[0] == 'a') {
        !           227:                                n = res_mkquery(UPDATEA, cp, C_IN, Type,
        !           228:                                                OldRRData, nbytes,
        !           229:                                                &NewRR, packet,
        !           230:                                                sizeof(packet));
        !           231:                            } else {
        !           232:                                if (TempStr[0] == 'm') {
        !           233:                                    printf("How many data bytes in old RR? ");
        !           234:                                    gets(TempStr); /* Throw away CR */
        !           235:                                    sscanf(TempStr, "%d", &oldnbytes);
        !           236:                                    for (i = 0; i < oldnbytes; i++) {
        !           237:                                            OldRRData[i] = (char) i;
        !           238:                                    }
        !           239:                                        n = res_mkquery(UPDATEM, cp, C_IN, Type,
        !           240:                                                        OldRRData, oldnbytes,
        !           241:                                                        &NewRR, packet,
        !           242:                                                        sizeof(packet));
        !           243:                                } else { /* Modify all */
        !           244:                                        n = res_mkquery(UPDATEMA, cp,
        !           245:                                                        C_IN, Type, NULL, 0,
        !           246:                                                        &NewRR, packet,
        !           247:                                                        sizeof(packet));
        !           248: 
        !           249:                                }
        !           250:                            }
        !           251:                        }
        !           252:                        break;
        !           253: 
        !           254: #ifdef ALLOW_T_UNSPEC
        !           255:                case 'D':
        !           256:                        n = res_mkquery(UPDATEDA, cp, C_IN, T_UNSPEC, (char *)0,
        !           257:                                        0, NULL, packet, sizeof(packet));
        !           258:                        break;
        !           259: 
        !           260:                case 'd':
        !           261:                        {
        !           262:                                char TempStr[100];
        !           263:                                int nbytes, i;
        !           264:                                printf("How many data bytes in oldrr data? ");
        !           265:                                gets(TempStr); /* Throw away CR */
        !           266:                                sscanf(TempStr, "%d", &nbytes);
        !           267:                                for (i = 0; i < nbytes; i++) {
        !           268:                                        OldRRData[i] = (char) i;
        !           269:                                }
        !           270:                                n = res_mkquery(UPDATED, cp, C_IN, T_UNSPEC,
        !           271:                                                OldRRData, nbytes, NULL, packet,
        !           272:                                                sizeof(packet));
        !           273:                        }
        !           274:                        break;
        !           275: #endif ALLOW_T_UNSPEC
        !           276: #endif ALLOW_UPDATES
        !           277: 
        !           278:                default:
        !           279:                        printf("a{host} - query  T_A\n");
        !           280:                        printf("A{addr} - iquery T_A\n");
        !           281:                        printf("b{user} - query  T_MB\n");
        !           282:                        printf("B{user} - query  T_MG\n");
        !           283:                        printf("f{host} - query  T_UINFO\n");
        !           284:                        printf("g{host} - query  T_GID\n");
        !           285:                        printf("G{gid}  - iquery T_GID\n");
        !           286:                        printf("h{host} - query  T_HINFO\n");
        !           287:                        printf("i{host} - query  T_MINFO\n");
        !           288:                        printf("p{host} - query  T_PTR\n");
        !           289:                        printf("m{host} - query  T_MX\n");
        !           290:                        printf("M{host} - query  T_MAILB\n");
        !           291:                        printf("n{host} - query  T_NS\n");
        !           292:                        printf("r{host} - query  T_MR\n");
        !           293:                        printf("s{host} - query  T_SOA\n");
        !           294:                        printf("u{host} - query  T_UID\n");
        !           295:                        printf("U{uid}  - iquery T_UID\n");
        !           296:                        printf("x{host} - query  T_AXFR\n");
        !           297:                        printf("w{host} - query  T_WKS\n");
        !           298:                        printf("c{host} - query  T_CNAME\n");
        !           299:                        printf("*{host} - query  T_ANY\n");
        !           300: #ifdef ALLOW_UPDATES
        !           301:                        printf("^{host} - add/mod/moda    (T_A/T_UNSPEC)\n");
        !           302: #ifdef ALLOW_T_UNSPEC
        !           303:                        printf("D{host} - deletea T_UNSPEC\n");
        !           304:                        printf("d{host} - delete T_UNSPEC\n");
        !           305: #endif ALLOW_T_UNSPEC
        !           306: #endif ALLOW_UPDATES
        !           307:                        continue;
        !           308:                }
        !           309:                if (n < 0) {
        !           310:                        printf("res_mkquery: buffer too small\n");
        !           311:                        continue;
        !           312:                }
        !           313:                if (log) {
        !           314:                        fprintf(log,"SEND QUERY\n");
        !           315:                        fp_query(packet, log);
        !           316:                }
        !           317:                n = res_send(packet, n, answer, sizeof(answer));
        !           318:                if (n < 0) {
        !           319:                        printf("res_send: send error\n");
        !           320:                        if (log) fprintf(log, "res_send: send error\n");
        !           321:                }
        !           322:                else {
        !           323:                        if (dump_packet) {
        !           324:                                int f;
        !           325:                                f = creat("ns_packet.dump", 0644);
        !           326:                                write(f, answer, n);
        !           327:                                (void) close(f);
        !           328:                        }
        !           329:                        if (log) {
        !           330:                                fprintf(log, "GOT ANSWER\n");
        !           331:                                fp_query(answer, log);
        !           332:                        }
        !           333:                }
        !           334:        }
        !           335: }
        !           336: 
        !           337: usage()
        !           338: {
        !           339:        fprintf(stderr, "Usage: %s [-v] [-i] [-r] [-d] [-p port] hostaddr\n",
        !           340:                progname);
        !           341:        exit(1);
        !           342: }

unix.superglobalmegacorp.com

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