Article View: comp.sys.masscomp
Article #150name server resolver library for MASSCOMP (part 1 of 7)
From: Stan Barber
Date: Tue, 05 Jul 1988 00:56
Date: Tue, 05 Jul 1988 00:56
909 lines
23773 bytes
23773 bytes
If you are on the internet and want your Masscomp to understand the Domain
Name Service, here is the first step. This is the resolver library.
This code is based on BIND 4.8 with all patches to date.
Enjoy.
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
# tools/Makefile.libc
# tools/Makefile.resol
# tools/installit
# tools/makefile
# tools/manroff
# tools/mkdep
# tools/nsquery.c
# tools/nstest.c
# This archive created: Mon Jul 4 20:24:39 1988
export PATH; PATH=/bin:/usr/bin:$PATH
if test ! -d 'tools'
then
echo shar: "creating directory 'tools'"
mkdir 'tools'
fi
echo shar: "entering directory 'tools'"
cd 'tools'
echo shar: "extracting 'Makefile.libc'" '(1536 characters)'
if test -f 'Makefile.libc'
then
echo shar: "will not over-write existing file 'Makefile.libc'"
else
sed 's/^ X//' << \SHAR_EOF > 'Makefile.libc'
X#
X# Copyright (c) 1987 Regents of the University of California.
X# All rights reserved.
X#
X# Redistribution and use in source and binary forms are permitted
X# provided that this notice is preserved and that due credit is given
X# to the University of California at Berkeley. The name of the University
X# may not be used to endorse or promote products derived from this
X# software without specific prior written permission. This software
X# is provided ``as is'' without express or implied warranty.
X#
X# @(#)Makefile 4.7 (Berkeley) 4/6/88
X#
XSHELL=/bin/sh
XCFLAGS= -O -I../include
XRES=
XLIBC= /lib/libc.a
XSRCS= nsquery.c nstest.c
XOBJS= nsquery.o nstest.o
X
Xall: nsquery nstest nslookup
X
Xnsquery: ${LIBC}
X ${CC} ${CFLAGS} -o $@ nsquery.c ${RES}
X
X# test programs and utilities
Xnstest: ${LIBC}
X @echo "The resolver routines in libc must be compiled with the -DDEBUG"
X @echo "option or nstest will not have any output."
X ${CC} ${CFLAGS} -o $@ nstest.c ${RES}
X
Xnslookup: FRC
X cd nslookup; make ${MFLAGS} RES=${RES}
X
Xclean: FRC
X cd nslookup; make ${MFLAGS} clean
X rm -f ${OBJS} core nsquery nstest
X
Xdepend: FRC
X cd nslookup; make ${MFLAGS} depend
X ./mkdep -p ${CFLAGS} ${SRCS}
X
Xinstall: FRC
X cd nslookup; make ${MFLAGS} DESTDIR=${DESTDIR} install
X
Xlint: FRC
X cd nslookup; make ${MFLAGS} lint
X lint ${CFLAGS} ${SRCS}
X
Xtags: FRC
X cd nslookup; make ${MFLAGS} tags
X ctags ${SRCS}
X
XFRC:
X
X# DO NOT DELETE THIS LINE -- mkdep uses it.
X# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
X
Xnsquery.c:
Xnstest.c:
X
X# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
SHAR_EOF
if test 1536 -ne "`wc -c < 'Makefile.libc'`"
then
echo shar: "error transmitting 'Makefile.libc'" '(should have been 1536 characters)'
fi
fi
echo shar: "extracting 'Makefile.resol'" '(1617 characters)'
if test -f 'Makefile.resol'
then
echo shar: "will not over-write existing file 'Makefile.resol'"
else
sed 's/^ X//' << \SHAR_EOF > 'Makefile.resol'
X#
X# Copyright (c) 1987 Regents of the University of California.
X# All rights reserved.
X#
X# Redistribution and use in source and binary forms are permitted
X# provided that this notice is preserved and that due credit is given
X# to the University of California at Berkeley. The name of the University
X# may not be used to endorse or promote products derived from this
X# software without specific prior written permission. This software
X# is provided ``as is'' without express or implied warranty.
X#
X# @(#)Makefile 4.7 (Berkeley) 4/6/88
X#
XSHELL=/bin/sh
XCFLAGS= -O -DEXOS -DSYS5 -I../include -I/usr/include/NET-5000
XRES= ../res/libresolv.a
XLIBS= -lsocket
XLIBC= /lib/libc.a
XSRCS= nsquery.c nstest.c
XOBJS= nsquery.o nstest.o
X
Xall: nsquery nstest nslookup
X
Xnsquery: ${LIBC}
X ${CC} ${CFLAGS} -o $@ nsquery.c ${RES}
X
X# test programs and utilities
Xnstest: ${LIBC}
X @echo "The resolver routines in libresolv.a must be compiled with the -DDEBUG"
X @echo "option or nstest will not have any output."
X ${CC} ${CFLAGS} -o $@ nstest.c ${RES}
X
Xnslookup: FRC
X cd nslookup; make ${MFLAGS} RES=../${RES}
X
Xclean: FRC
X cd nslookup; make ${MFLAGS} clean
X rm -f ${OBJS} core nsquery nstest
X
Xdepend: FRC
X cd nslookup; make ${MFLAGS} depend
X ./mkdep -p ${CFLAGS} ${SRCS}
X
Xinstall: FRC
X cd nslookup; make ${MFLAGS} DESTDIR=${DESTDIR} install
X
Xlint: FRC
X cd nslookup; make ${MFLAGS} lint
X lint ${CFLAGS} ${SRCS}
X
Xtags: FRC
X cd nslookup; make ${MFLAGS} tags
X ctags ${SRCS}
X
XFRC:
X
X# DO NOT DELETE THIS LINE -- mkdep uses it.
X# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
X
Xnsquery.c:
Xnstest.c:
X
X# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
SHAR_EOF
if test 1617 -ne "`wc -c < 'Makefile.resol'`"
then
echo shar: "error transmitting 'Makefile.resol'" '(should have been 1617 characters)'
fi
fi
echo shar: "extracting 'installit'" '(1284 characters)'
if test -f 'installit'
then
echo shar: "will not over-write existing file 'installit'"
else
sed 's/^ X//' << \SHAR_EOF > 'installit'
X#! /bin/sh
X#
X# '@(#)installit 2.4 10/15/87'
X# From install.sh 4.8 (Berkeley) 3/6/86
X# on the 4.3 BSD distribution (with permission)
X#
XPATH=/bin:/etc:/usr/bin:/usr/ucb
Xexport PATH
Xcmd=""
Xstripbefore=""
Xstripafter=""
Xchmod="chmod 755"
Xchown="#"
Xchgrp="#"
Xwhile true ; do
X case $1 in
X -s ) if test $cmd
X then stripafter="strip"
X else stripbefore="strip"
X fi
X shift
X ;;
X -c ) if test $cmd
X then echo "install: multiple specifications of -c"
X exit 1
X fi
X cmd="cp"
X stripafter=$stripbefore
X stripbefore=""
X shift
X ;;
X -m ) chmod="chmod $2"
X shift
X shift
X ;;
X -o ) chown="chown $2"
X shift
X shift
X ;;
X -g ) chgrp="chgrp $2"
X shift
X shift
X ;;
X * ) break
X ;;
X esac
Xdone
Xif test $cmd
Xthen true
Xelse cmd="mv"
Xfi
X
Xif test ! ${2-""}
Xthen echo "install: no destination specified"
X exit 1
Xfi
Xif test ${3-""}
Xthen echo "install: too many files specified -> $*"
X exit 1
Xfi
Xif test $1 = $2 -o $2 = .
Xthen echo "install: can't move $1 onto itself"
X exit 1
Xfi
Xif test '!' -f $1
Xthen echo "install: can't open $1"
X exit 1
Xfi
Xif test -d $2
Xthen file=$2/`basename $1`
Xelse file=$2
Xfi
X/bin/rm -f $file
Xif test $stripbefore
Xthen $stripbefore $1
Xfi
X$cmd $1 $file
Xif test $stripafter
Xthen $stripafter $file
Xfi
X$chown $file
X$chgrp $file
X$chmod $file
SHAR_EOF
if test 1284 -ne "`wc -c < 'installit'`"
then
echo shar: "error transmitting 'installit'" '(should have been 1284 characters)'
fi
chmod +x 'installit'
fi
echo shar: "extracting 'makefile'" '(1589 characters)'
if test -f 'makefile'
then
echo shar: "will not over-write existing file 'makefile'"
else
sed 's/^ X//' << \SHAR_EOF > 'makefile'
X#
X# Copyright (c) 1987 Regents of the University of California.
X# All rights reserved.
X#
X# Redistribution and use in source and binary forms are permitted
X# provided that this notice is preserved and that due credit is given
X# to the University of California at Berkeley. The name of the University
X# may not be used to endorse or promote products derived from this
X# software without specific prior written permission. This software
X# is provided ``as is'' without express or implied warranty.
X#
X# @(#)Makefile 4.7 (Berkeley) 4/6/88
X#
XSHELL=/bin/sh
XCFLAGS= -O -DSYS5 -DMASSCOMP -I../include
XRES= ../res/libresolv.a
XLIBS=
XLIBC= /lib/libc.a
XSRCS= nsquery.c nstest.c
XOBJS= nsquery.o nstest.o
X
Xall: nsquery nstest nslookup
X
Xnsquery: ${LIBC}
X ${CC} ${CFLAGS} -o $@ nsquery.c ${RES}
X
X# test programs and utilities
Xnstest: ${LIBC}
X @echo "The resolver routines in libresolv.a must be compiled with the -DDEBUG"
X @echo "option or nstest will not have any output."
X ${CC} ${CFLAGS} -o $@ nstest.c ${RES}
X
Xnslookup: FRC
X cd nslookup; make ${MFLAGS} RES=../${RES}
X
Xclean: FRC
X cd nslookup; make ${MFLAGS} clean
X rm -f ${OBJS} core nsquery nstest
X
Xdepend: FRC
X cd nslookup; make ${MFLAGS} depend
X ./mkdep -p ${CFLAGS} ${SRCS}
X
Xinstall: FRC
X cd nslookup; make ${MFLAGS} DESTDIR=${DESTDIR} install
X
Xlint: FRC
X cd nslookup; make ${MFLAGS} lint
X lint ${CFLAGS} ${SRCS}
X
Xtags: FRC
X cd nslookup; make ${MFLAGS} tags
X ctags ${SRCS}
X
XFRC:
X
X# DO NOT DELETE THIS LINE -- mkdep uses it.
X# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
X
Xnsquery.c:
Xnstest.c:
X
X# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
SHAR_EOF
if test 1589 -ne "`wc -c < 'makefile'`"
then
echo shar: "error transmitting 'makefile'" '(should have been 1589 characters)'
fi
fi
echo shar: "extracting 'manroff'" '(29 characters)'
if test -f 'manroff'
then
echo shar: "will not over-write existing file 'manroff'"
else
sed 's/^ X//' << \SHAR_EOF > 'manroff'
X#! /bin/sh
X
Xnroff -man -h $*
SHAR_EOF
if test 29 -ne "`wc -c < 'manroff'`"
then
echo shar: "error transmitting 'manroff'" '(should have been 29 characters)'
fi
chmod +x 'manroff'
fi
echo shar: "extracting 'mkdep'" '(1788 characters)'
if test -f 'mkdep'
then
echo shar: "will not over-write existing file 'mkdep'"
else
sed 's/^ X//' << \SHAR_EOF > 'mkdep'
X#!/bin/sh -
X#
X# Copyright (c) 1987 Regents of the University of California.
X# All rights reserved.
X#
X# Redistribution and use in source and binary forms are permitted
X# provided that this notice is preserved and that due credit is given
X# to the University of California at Berkeley. The name of the University
X# may not be used to endorse or promote products derived from this
X# software without specific prior written permission. This software
X# is provided ``as is'' without express or implied warranty.
X#
X# @(#)mkdep.sh 5.9 (Berkeley) 1/1/88
X#
X
XPATH=/bin:/usr/bin:/usr/ucb
Xexport PATH
X
XMAKE=Makefile # default makefile name is "Makefile"
X
Xwhile :
X do case "$1" in
X # -f allows you to select a makefile name
X -f)
X MAKE=$2
X shift; shift ;;
X
X # the -p flag produces "program: program.c" style dependencies
X # so .o's don't get produced
X -p)
X SED='-e s;\.o;;'
X shift ;;
X *)
X break ;;
X esac
Xdone
X
Xif [ $# = 0 ] ; then
X echo 'usage: mkdep [-p] [-f makefile] [flags] file ...'
X exit 1
Xfi
X
Xif [ ! -w $MAKE ]; then
X echo "mkdep: no writeable file \"$MAKE\""
X exit 1
Xfi
X
XTMP=/tmp/mkdep$$
X
Xtrap 'rm -f $TMP ; exit 1' 1 2 3 13 15
X
Xcp $MAKE ${MAKE}.bak
X
Xsed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
X
Xcat << _EOF_ >> $TMP
X# DO NOT DELETE THIS LINE -- mkdep uses it.
X# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
X
X_EOF_
X
Xcc -M $* | /bin/sed -e "s; \./; ;g" $SED | \
X awk ' { \
X if ($1 != prev) { \
X if (rec != "") \
X print rec; rec = $0; prev = $1; \
X } \
X else { \
X if (length(rec $2) > 78) { \
X print rec; rec = $0; \
X } else \
X rec = rec " " $2 \
X } \
X } \
X END { \
X print rec \
X } ' >> $TMP
X
Xcat << _EOF_ >> $TMP
X
X# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
X_EOF_
X
X# copy to preserve permissions
Xcp $TMP $MAKE
Xrm -f ${MAKE}.bak $TMP
Xexit 0
SHAR_EOF
if test 1788 -ne "`wc -c < 'mkdep'`"
then
echo shar: "error transmitting 'mkdep'" '(should have been 1788 characters)'
fi
chmod +x 'mkdep'
fi
echo shar: "extracting 'nsquery.c'" '(1270 characters)'
if test -f 'nsquery.c'
then
echo shar: "will not over-write existing file 'nsquery.c'"
else
sed 's/^ X//' << \SHAR_EOF > 'nsquery.c'
X#ifndef lint
Xstatic char sccsid[] = "@(#)nsquery.c 4.2 (Berkeley) 11/21/87";
X#endif
X
X/*
X * Copyright (c) 1986 Regents of the University of California
X * All Rights Reserved
X */
X
X#include <stdio.h>
X#include <sys/types.h>
X#ifdef EXOS
X#include <exos/misc.h>
X#endif
X#include <arpa/nameser.h>
X#include <netdb.h>
X
X#include <sys/socket.h>
X#include <netinet/in.h>
X#include <resolv.h>
X
Xstruct state orig;
Xextern struct state _res;
Xextern int h_errno;
X
Xmain(c, v)
X char **v;
X{
X char h[32];
X register struct hostent *hp;
X register char *s;
X
X gethostname(h, 32);
X s = h;
X if (c < 2) {
X fprintf(stderr, "Usage: lookup host [server]\n");
X exit(1);
X }
X if (c > 2)
X s = v[2];
X
X hp = gethostbyname(s);
X if (hp == NULL) {
X herror(h_errno);
X exit(1);
X }
X printanswer(hp);
X
X _res.nsaddr.sin_addr = *(struct in_addr *)hp->h_addr;
X _res.options &= ~RES_DEFNAMES;
X
X hp = gethostbyname(v[1]);
X if (hp == NULL) {
X herror(h_errno);
X exit(1);
X }
X printanswer(hp);
X exit(0);
X}
X
Xprintanswer(hp)
X register struct hostent *hp;
X{
X register char **cp;
X extern char *inet_ntoa();
X
X printf("Name: %s\n", hp->h_name);
X printf("Address: %s\n", inet_ntoa(*(struct in_addr *)hp->h_addr));
X printf("Aliases:");
X for (cp = hp->h_aliases; cp && *cp && **cp; cp++)
X printf(" %s", *cp);
X printf("\n\n");
X}
SHAR_EOF
if test 1270 -ne "`wc -c < 'nsquery.c'`"
then
echo shar: "error transmitting 'nsquery.c'" '(should have been 1270 characters)'
fi
fi
echo shar: "extracting 'nstest.c'" '(8264 characters)'
if test -f 'nstest.c'
then
echo shar: "will not over-write existing file 'nstest.c'"
else
sed 's/^ X//' << \SHAR_EOF > 'nstest.c'
X#ifndef lint
Xstatic char sccsid[] = "@(#)nstest.c 4.6 (Berkeley) 12/7/86";
X#endif
X
X/*
X * Copyright (c) 1986 Regents of the University of California
X * All Rights Reserved
X */
X
X#include <sys/types.h>
X#ifdef EXOS
X#include <exos/misc.h>
X#endif
X#include <sys/socket.h>
X#include <netinet/in.h>
X#include <stdio.h>
X#include <arpa/nameser.h>
X#include <resolv.h>
X
Xextern char *inet_ntoa();
Xchar *progname;
XFILE *log;
X#define MAXDATA 256 /* really should get definition from named/db.h */
Xmain(argc, argv)
X char **argv;
X{
X register char *cp;
X struct hostent *hp;
X short port = htons(NAMESERVER_PORT);
X char buf[BUFSIZ];
X char packet[PACKETSZ];
X char answer[PACKETSZ];
X struct rrec NewRR;
X char OldRRData[MAXDATA];
X int n, dump_packet;
X
X NewRR.r_data = (char *) malloc(MAXDATA);
X NewRR.r_data = (char *) malloc(MAXDATA);
X progname = argv[0];
X dump_packet = 0;
X _res.options |= RES_DEBUG|RES_RECURSE;
X while (argc > 1 && argv[1][0] == '-') {
X argc--;
X cp = *++argv;
X while (*++cp)
X switch (*cp) {
X case 'p':
X if (--argc <= 0)
X usage();
X port = htons(atoi(*++argv));
X break;
X
X case 'i':
X _res.options |= RES_IGNTC;
X break;
X
X case 'v':
X _res.options |= RES_USEVC|RES_STAYOPEN;
X break;
X
X case 'r':
X _res.options &= ~RES_RECURSE;
X break;
X
X case 'd':
X dump_packet++;
X break;
X
X default:
X usage();
X }
X }
X _res.nsaddr.sin_family = AF_INET;
X _res.nsaddr.sin_addr.s_addr = INADDR_ANY;
X _res.nsaddr.sin_port = port;
X if (argc > 1)
X _res.nsaddr.sin_addr.s_addr = inet_addr(argv[1]);
X if (argc > 2) {
X log = fopen(argv[2],"w");
X if (log == NULL) perror(argv[2]);
X }
X for (;;) {
X printf("> ");
X fflush(stdout);
X if ((cp = (char *)gets(buf)) == NULL)
X break;
X switch (*cp++) {
X case 'a':
X n = res_mkquery(QUERY, cp, C_ANY, T_A, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'A':
X n = ntohl(inet_addr(cp));
X putlong(n, cp);
X n = res_mkquery(IQUERY, "", C_IN, T_A, cp, sizeof(long),
X NULL, packet, sizeof(packet));
X break;
X
X case 'f':
X n = res_mkquery(QUERY, cp, C_ANY, T_UINFO, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'g':
X n = res_mkquery(QUERY, cp, C_ANY, T_GID, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'G':
X *(int *)cp = htonl(atoi(cp));
X n = res_mkquery(IQUERY, "", C_ANY, T_GID, cp,
X sizeof(int), NULL, packet, sizeof(packet));
X break;
X
X case 'c':
X n = res_mkquery(QUERY, cp, C_IN, T_CNAME, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'h':
X n = res_mkquery(QUERY, cp, C_IN, T_HINFO, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'm':
X n = res_mkquery(QUERY, cp, C_IN, T_MX, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'M':
X n = res_mkquery(QUERY, cp, C_IN, T_MAILB, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'n':
X n = res_mkquery(QUERY, cp, C_IN, T_NS, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'p':
X n = res_mkquery(QUERY, cp, C_IN, T_PTR, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 's':
X n = res_mkquery(QUERY, cp, C_IN, T_SOA, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'u':
X n = res_mkquery(QUERY, cp, C_ANY, T_UID, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'U':
X *(int *)cp = htonl(atoi(cp));
X n = res_mkquery(IQUERY, "", C_ANY, T_UID, cp,
X sizeof(int), NULL, packet, sizeof(packet));
X break;
X
X case 'x':
X n = res_mkquery(QUERY, cp, C_IN, T_AXFR, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'w':
X n = res_mkquery(QUERY, cp, C_IN, T_WKS, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'b':
X n = res_mkquery(QUERY, cp, C_IN, T_MB, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'B':
X n = res_mkquery(QUERY, cp, C_IN, T_MG, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'i':
X n = res_mkquery(QUERY, cp, C_IN, T_MINFO, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case 'r':
X n = res_mkquery(QUERY, cp, C_IN, T_MR, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X case '*':
X n = res_mkquery(QUERY, cp, C_IN, T_ANY, (char *)0, 0,
X NULL, packet, sizeof(packet));
X break;
X
X#ifdef ALLOW_UPDATES
X case '^':
X {
X char IType[10], TempStr[50];
X int Type, oldnbytes, nbytes, i;
X#ifdef ALLOW_T_UNSPEC
X printf("Data type (a = T_A, u = T_UNSPEC): ");
X gets(IType);
X if (IType[0] == 'u') {
X Type = T_UNSPEC;
X printf("How many data bytes? ");
X gets(TempStr); /* Throw away CR */
X sscanf(TempStr, "%d", &nbytes);
X for (i = 0; i < nbytes; i++) {
X (NewRR.r_data)[i] = (char) i;
X }
X } else {
X#endif ALLOW_T_UNSPEC
X Type = T_A;
X nbytes = sizeof(u_long);
X printf("Inet addr for new dname (e.g., 192.4.3.2): ");
X gets(TempStr);
X putlong(ntohl(inet_addr(TempStr)), NewRR.r_data);
X#ifdef ALLOW_T_UNSPEC
X }
X#endif ALLOW_T_UNSPEC
X NewRR.r_class = C_IN;
X NewRR.r_type = Type;
X NewRR.r_size = nbytes;
X NewRR.r_ttl = 99999999;
X printf("Add, modify, or modify all (a/m/M)? ");
X gets(TempStr);
X if (TempStr[0] == 'a') {
X n = res_mkquery(UPDATEA, cp, C_IN, Type,
X OldRRData, nbytes,
X &NewRR, packet,
X sizeof(packet));
X } else {
X if (TempStr[0] == 'm') {
X printf("How many data bytes in old RR? ");
X gets(TempStr); /* Throw away CR */
X sscanf(TempStr, "%d", &oldnbytes);
X for (i = 0; i < oldnbytes; i++) {
X OldRRData[i] = (char) i;
X }
X n = res_mkquery(UPDATEM, cp, C_IN, Type,
X OldRRData, oldnbytes,
X &NewRR, packet,
X sizeof(packet));
X } else { /* Modify all */
X n = res_mkquery(UPDATEMA, cp,
X C_IN, Type, NULL, 0,
X &NewRR, packet,
X sizeof(packet));
X
X }
X }
X }
X break;
X
X#ifdef ALLOW_T_UNSPEC
X case 'D':
X n = res_mkquery(UPDATEDA, cp, C_IN, T_UNSPEC, (char *)0,
X 0, NULL, packet, sizeof(packet));
X break;
X
X case 'd':
X {
X char TempStr[100];
X int nbytes, i;
X printf("How many data bytes in oldrr data? ");
X gets(TempStr); /* Throw away CR */
X sscanf(TempStr, "%d", &nbytes);
X for (i = 0; i < nbytes; i++) {
X OldRRData[i] = (char) i;
X }
X n = res_mkquery(UPDATED, cp, C_IN, T_UNSPEC,
X OldRRData, nbytes, NULL, packet,
X sizeof(packet));
X }
X break;
X#endif ALLOW_T_UNSPEC
X#endif ALLOW_UPDATES
X
X default:
X printf("a{host} - query T_A\n");
X printf("A{addr} - iquery T_A\n");
X printf("b{user} - query T_MB\n");
X printf("B{user} - query T_MG\n");
X printf("f{host} - query T_UINFO\n");
X printf("g{host} - query T_GID\n");
X printf("G{gid} - iquery T_GID\n");
X printf("h{host} - query T_HINFO\n");
X printf("i{host} - query T_MINFO\n");
X printf("p{host} - query T_PTR\n");
X printf("m{host} - query T_MX\n");
X printf("M{host} - query T_MAILB\n");
X printf("n{host} - query T_NS\n");
X printf("r{host} - query T_MR\n");
X printf("s{host} - query T_SOA\n");
X printf("u{host} - query T_UID\n");
X printf("U{uid} - iquery T_UID\n");
X printf("x{host} - query T_AXFR\n");
X printf("w{host} - query T_WKS\n");
X printf("c{host} - query T_CNAME\n");
X printf("*{host} - query T_ANY\n");
X#ifdef ALLOW_UPDATES
X printf("^{host} - add/mod/moda (T_A/T_UNSPEC)\n");
X#ifdef ALLOW_T_UNSPEC
X printf("D{host} - deletea T_UNSPEC\n");
X printf("d{host} - delete T_UNSPEC\n");
X#endif ALLOW_T_UNSPEC
X#endif ALLOW_UPDATES
X continue;
X }
X if (n < 0) {
X printf("res_mkquery: buffer too small\n");
X continue;
X }
X if (log) {
X fprintf(log,"SEND QUERY\n");
X fp_query(packet, log);
X }
X n = res_send(packet, n, answer, sizeof(answer));
X if (n < 0) {
X printf("res_send: send error\n");
X if (log) fprintf(log, "res_send: send error\n");
X }
X else {
X if (dump_packet) {
X int f;
X f = creat("ns_packet.dump", 0644);
X write(f, answer, n);
X (void) close(f);
X }
X if (log) {
X fprintf(log, "GOT ANSWER\n");
X fp_query(answer, log);
X }
X }
X }
X}
X
Xusage()
X{
X fprintf(stderr, "Usage: %s [-v] [-i] [-r] [-d] [-p port] hostaddr\n",
X progname);
X exit(1);
X}
SHAR_EOF
if test 8264 -ne "`wc -c < 'nstest.c'`"
then
echo shar: "error transmitting 'nstest.c'" '(should have been 8264 characters)'
fi
fi
exit 0
# End of shell archive
Technical Details
Message-ID:
<3469@soma.bcm.tmc.edu>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!bcm!soma!masscomp-requestShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!bcm!soma!masscomp-request From: sob@cortex.neuro.bcm.tmc.edu (Stan Barber) Newsgroups: comp.sys.masscomp Subject: name server resolver library for MASSCOMP (part 1 of 7) Message-ID: <3469@soma.bcm.tmc.edu> Date: 5 Jul 88 00:56:24 GMT Sender: masscomp@soma.bcm.tmc.edu Lines: 909 Approved: masscomp@soma.bcm.tmc.edu