NetBSD/usr.sbin/named/host/rrec.h
1997-04-13 10:50:07 +00:00

307 lines
8.2 KiB
C

/* $NetBSD: rrec.h,v 1.2 1997/04/13 10:50:36 mrg Exp $ */
/*
** Resource record structures.
**
** These define the various resource record fields after decoding
** from the internal representation in the nameserver answer buffer.
**
** @(#)rrec.h e07@nikhef.nl (Eric Wassenaar) 961010
*/
#define MAXSTRING 255 /* maximum size of single encoded string */
#define MAXSTRLEN MAXDLEN /* maximum size of multiple substrings */
typedef struct rr_data {
u_char databuf[MAXDLEN]; /* generic data buffer */
} rr_data_t;
/*
** Record-specific data fields, traditional records.
*/
typedef struct a_data {
ipaddr_t address; /* internet address of host */
} a_data_t;
typedef struct ns_data {
char nameserver[MAXDNAME+1]; /* name of domain nameserver */
} ns_data_t;
typedef struct md_data {
char destination[MAXDNAME+1]; /* name of mail destination */
} md_data_t;
typedef struct mf_data {
char forwarder[MAXDNAME+1]; /* name of mail forwarder */
} mf_data_t;
typedef struct cname_data {
char canonical[MAXDNAME+1]; /* canonical domain name */
} cname_data_t;
typedef struct soa_data {
char primary[MAXDNAME+1]; /* name of primary nameserver */
char hostmaster[MAXDNAME+1]; /* name of hostmaster mailbox */
int serial; /* serial (version) number */
int refresh; /* refresh time in seconds */
int retry; /* refresh retry time in seconds */
int expire; /* expiration time in seconds */
int defttl; /* default time_to_live */
} soa_data_t;
typedef struct mb_data {
char mailhost[MAXDNAME+1]; /* name of mailbox host */
} mb_data_t;
typedef struct mg_data {
char memberbox[MAXDNAME+1]; /* mailbox of mail group member */
} mg_data_t;
typedef struct mr_data {
char aliasbox[MAXDNAME+1]; /* mailbox of mail alias */
} mr_data_t;
typedef struct null_data {
u_char nullbuf[MAXDLEN]; /* generic data buffer */
} null_data_t;
typedef struct wks_data {
ipaddr_t servaddress; /* internet address of host */
int protocol; /* protocol number */
u_char services[32]; /* ports 0-255 */
} wks_data_t;
typedef struct ptr_data {
char domain[MAXDNAME+1]; /* domain name of pointer */
} ptr_data_t;
typedef struct hinfo_data {
char cputype[MAXSTRING+1]; /* machine description */
char ostype[MAXSTRING+1]; /* operating system type */
} hinfo_data_t;
typedef struct minfo_data {
char ownerbox[MAXDNAME+1]; /* name of owner mailbox */
char errorbox[MAXDNAME+1]; /* name of error mailbox */
} minfo_data_t;
typedef struct mx_data {
int preference; /* preference value */
char mxhost[MAXDNAME+1]; /* name of mx host */
} mx_data_t;
typedef struct txt_data {
char text[MAXSTRLEN+1]; /* multiple substrings */
} txt_data_t;
/*
** Record-specific data fields, later additions.
*/
typedef struct rp_data {
char mailbox[MAXDNAME+1]; /* name of person mailbox */
char txtinfo[MAXDNAME+1]; /* name of description txt record */
} rp_data_t;
typedef struct afsdb_data {
int afstype; /* type of afs server */
char afshost[MAXDNAME+1]; /* name of afs server */
} afsdb_data_t;
typedef struct x25_data {
char psdnaddress[MAXSTRING+1]; /* x25 psdn address */
} x25_data_t;
typedef struct isdn_data {
char isdnaddress[MAXSTRING+1]; /* isdn address */
char isdnsubaddr[MAXSTRING+1]; /* isdn subaddress */
} isdn_data_t;
typedef struct rt_data {
int routepref; /* preference value */
char routehost[MAXDNAME+1]; /* name of route-through host */
} rt_data_t;
typedef struct nsap_data {
u_char nsapaddr[MAXNSAP]; /* binary nsap address */
} nsap_data_t;
typedef struct nsapptr_data {
char nsapdomain[MAXDNAME+1]; /* domain name of nsap pointer */
} nsapptr_data_t;
typedef struct sig_data {
int sigtype; /* resource record type covered */
int algorithm; /* signature encoding algorithm */
int nlabels; /* number of labels in SIG name */
int sigttl; /* original ttl of SIG record */
time_t expiretime; /* signature expiration time */
time_t sigtime; /* time signature was signed */
int footprint; /* key identification */
char signer[MAXDNAME+1]; /* signer's domain name */
u_char sig[MAXMD5SIZE]; /* encoded signature */
} sig_data_t;
typedef struct key_data {
int keyflags; /* key description flags */
int protocol; /* protocol suite */
int algorithm; /* key encoding algorithm */
u_char key[MAXMD5SIZE]; /* encoded key */
} key_data_t;
typedef struct px_data {
int mappref; /* preference value */
char map822[MAXDNAME+1]; /* rfc822 domain name */
char mapx400[MAXDNAME+1]; /* x400 domain name */
} px_data_t;
typedef struct gpos_data {
char longpos[MAXSTRING+1]; /* geographical longitude */
char latpos[MAXSTRING+1]; /* geographical latitude */
char altpos[MAXSTRING+1]; /* geographical altitude */
} gpos_data_t;
typedef struct aaaa_data {
u_char ipngaddr[IPNGSIZE]; /* binary ip v6 address */
} aaaa_data_t;
typedef struct loc_data {
int locversion; /* version number */
int objectsize; /* size of object */
int hprecision; /* horizontal precision */
int vprecision; /* vertical precision */
int longitude; /* geographical longitude */
int latitude; /* geographical latitude */
int altitude; /* geographical altitude */
} loc_data_t;
typedef struct nxt_data {
char nxtdomain[MAXDNAME+1]; /* name of next domain in order */
u_char typemap[32]; /* types 0-255 */
} nxt_data_t;
typedef struct srv_data {
int srvpref; /* preference value */
int srvweight; /* load balancing weight */
int srvport; /* port of service */
char srvhost[MAXDNAME+1]; /* name of service host */
} srv_data_t;
typedef struct naptr_data {
int naorder;
int napref; /* preference value */
char naflags[MAXSTRING+1]; /* flags */
char naservice[MAXSTRING+1];
char naregexp[MAXSTRING+1];
char nahost[MAXDNAME+1]; /* name of naming authority host */
} naptr_data_t;
/*
** Record-specific data fields, nonstandard types.
*/
typedef struct uinfo_data {
char userinfo[MAXSTRLEN+1]; /* user description */
} uinfo_data_t;
typedef struct uid_data {
int userid; /* user uid */
} uid_data_t;
typedef struct gid_data {
int groupid; /* user gid */
} gid_data_t;
typedef struct unspec_data {
u_char unspecbuf[MAXDLEN]; /* generic data buffer */
} unspec_data_t;
/*
** Generic resource record description.
*/
typedef struct rrecord {
char name[MAXDNAME+1]; /* resource record name */
int type; /* resource record type */
int class; /* resource record class */
int ttl; /* time_to_live value */
union {
rr_data_t data_rr;
a_data_t data_a;
ns_data_t data_ns;
md_data_t data_md;
mf_data_t data_mf;
cname_data_t data_cname;
soa_data_t data_soa;
mb_data_t data_mb;
mg_data_t data_mg;
mr_data_t data_mr;
null_data_t data_null;
wks_data_t data_wks;
ptr_data_t data_ptr;
hinfo_data_t data_hinfo;
minfo_data_t data_minfo;
mx_data_t data_mx;
txt_data_t data_txt;
rp_data_t data_rp;
afsdb_data_t data_afsdb;
x25_data_t data_x25;
isdn_data_t data_isdn;
rt_data_t data_rt;
nsap_data_t data_nsap;
nsapptr_data_t data_nsapptr;
sig_data_t data_sig;
key_data_t data_key;
px_data_t data_px;
gpos_data_t data_gpos;
aaaa_data_t data_aaaa;
loc_data_t data_loc;
nxt_data_t data_nxt;
srv_data_t data_srv;
naptr_data_t data_naptr;
uinfo_data_t data_uinfo;
uid_data_t data_uid;
gid_data_t data_gid;
unspec_data_t data_unspec;
} data;
} rrecord_t;
#define t_rr data.data_rr
#define t_a data.data_a
#define t_ns data.data_ns
#define t_md data.data_md
#define t_mf data.data_mf
#define t_cname data.data_cname
#define t_soa data.data_soa
#define t_mb data.data_mb
#define t_mg data.data_mg
#define t_mr data.data_mr
#define t_null data.data_null
#define t_wks data.data_wks
#define t_ptr data.data_ptr
#define t_hinfo data.data_hinfo
#define t_minfo data.data_minfo
#define t_mx data.data_mx
#define t_txt data.data_txt
#define t_rp data.data_rp
#define t_afsdb data.data_afsdb
#define t_x25 data.data_x25
#define t_isdn data.data_isdn
#define t_rt data.data_rt
#define t_nsap data.data_nsap
#define t_nsapptr data.data_nsapptr
#define t_sig data.data_sig
#define t_key data.data_key
#define t_px data.data_px
#define t_gpos data.data_gpos
#define t_aaaa data.data_aaaa
#define t_loc data.data_loc
#define t_nxt data.data_nxt
#define t_srv data.data_srv
#define t_naptr data.data_naptr
#define t_uinfo data.data_uinfo
#define t_uid data.data_uid
#define t_gid data.data_gid
#define t_unspec data.data_unspec