/* $OpenBSD: rrec.h,v 1.2 1997/03/12 10:41:56 downsj 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