/* @(#)stdns.h 1.1 94/10/31 SMI */ /* Copyright (c) 1984 AT&T */ /* All Rights Reserved */ /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */ /* The copyright notice above does not evidence any */ /* actual or intended publication of such source code. */ #ident "@(#)libns:stdns.h 1.4.1.1" /* * * stdns.h contains formats, etc for domain name server queries, * replies and resource records. The terminology is reminiscent * of some of ARPA's name server work (e.g., RFC 883), however, * since this name server's functions are not at all the same * as ARPA's, there is no resemblance beyond terminology. * */ #ifndef RFS_SUCCESS #define RFS_FAILURE 0 #define RFS_SUCCESS 1 #endif #define SEPARATOR '.' #define WILDCARD '*' /* wildcard char for string compares */ /* * each record in the name server has one of the types defined below */ #define MASKNS ~0x7F /* mask out ns order bits */ #define NSTYPE 0x80 /* bit set for all ns records */ #define PNS (NSTYPE|0x01) /* primary name server */ #define SNS (NSTYPE|0x02) /* secondary name server */ #define SOA PNS #define NS SNS /* all types, except NS types, must have the lowest 8 bits clear */ #define A 0x100 /* host address */ #define NULLREC 0x200 /* empty record */ #define RN 0x300 /* shared resource record */ #define DOM 0x400 /* "internal" type for domain */ #define ANYTYPE 0xFFFF /* request for any record type */ /* RCODE values, response codes */ extern int ns_errno; #define R_NOERR 0 /* no error */ #define R_FORMAT 1 /* format error */ #define R_NSFAIL 2 /* name server failure */ #define R_NONAME 3 /* name does not exist */ #define R_IMP 4 /* request type not implemented (or bad type) */ #define R_PERM 5 /* no permission for this operation */ #define R_DUP 6 /* name not unique (for advertise) */ #define R_SYS 7 /* a system call failed in name server */ #define R_EPASS 8 /* error in accessing passwd file on primary */ #define R_INVPW 9 /* invalid password */ #define R_NOPW 10 /* no password entry in primary passwd file */ #define R_SETUP 11 /* error in ns_setup() */ #define R_SEND 12 /* error in ns_send() */ #define R_RCV 13 /* error in ns_rcv() */ #define R_INREC 14 /* in recovery, try again */ #define R_FAIL 15 /* unknown failure */ /* miscellaneous defines */ /* values for h_qr field */ #define QUERY 1 /* this request is a query */ #define RESPONSE 0 /* this request is a response */ /* values for h_aa field (or-able with h_qr) */ #define AUTHORITY 2 #define NOT_AUTHORITY 0 #define DBLKSIZ 512 /* default block size (start small) */ #define MAX_RETRY 5 /* maximum # of name servers to try on query */ /* * The place structure keeps track of progress reading or * writing a block in canonical format. */ typedef struct place { char *p_start; /* beginning of block */ char *p_ptr; /* current place in block */ char *p_end; /* end of block */ int p_extra; /* location in bits from p_ptr */ } place_t, *place_p; #define ALIGN 4 /* canonical form alignment in bytes */ #define L_SIZE 4 /* size of a canonical long */ #if ALIGN == 4 #define align(p) (((unsigned int)(p)+3) & ~3) #else #define align(x) (((unsigned int)(x) % ALIGN)?\ (unsigned int)(x) + (ALIGN - ((unsigned int)(x) % ALIGN)): (x)) #endif #define c_sizeof(s) align(L_SIZE + ((s)?strlen(s)+1:1)) /* miscellaneous defines */ /* WARNING: overbyte references the parameter p twice. Don't use expressions with side effects (e.g. ++s) */ #define overbyte(p,b) (p->p_ptr+b > p->p_end) /* functions in ind_data.c */ char *compress(); char *expand(); char *reqtob(); struct request *btoreq(); place_p setplace(); char *getstr(); long getlong(); int putlong();