307 lines
8.2 KiB
C
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
|