mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-02 23:55:27 +00:00
dns_rdata_tostruct() conversion
This commit is contained in:
@@ -38,8 +38,14 @@ OBJS = callbacks.o compress.o db.o dbiterator.o dbtable.o \
|
||||
rdata.o rdatalist.o rdataset.o rdatasetiter.o rdataslab.o \
|
||||
result.o version.o
|
||||
|
||||
OSRC = callbacks.c compress.c db.c dbiterator.c dbtable.c \
|
||||
master.c name.c rbt.c rbtdb.c rbtdb64.c \
|
||||
rdata.c rdatalist.c rdataset.c rdatasetiter.c rdataslab.c \
|
||||
result.c version.c
|
||||
|
||||
SUBDIRS = include
|
||||
TARGETS = include/dns/enumtype.h include/dns/enumclass.h timestamp
|
||||
TARGETS = include/dns/enumtype.h include/dns/enumclass.h \
|
||||
include/dns/rdatastruct.h timestamp
|
||||
|
||||
@BIND9_MAKE_RULES@
|
||||
|
||||
@@ -64,6 +70,7 @@ install:: timestamp installdirs
|
||||
clean distclean::
|
||||
rm -f libdns.a timestamp
|
||||
rm -f gen code.h include/dns/enumtype.h include/dns/enumclass.h
|
||||
rm -f include/dns/rdatastruct.h
|
||||
|
||||
rdata.o: code.h
|
||||
|
||||
@@ -73,6 +80,9 @@ include/dns/enumtype.h: gen
|
||||
include/dns/enumclass.h: gen
|
||||
./gen -s ${srcdir} -c > $@
|
||||
|
||||
include/dns/rdatastruct.h: gen
|
||||
./gen -s ${srcdir} -i > $@
|
||||
|
||||
code.h: gen
|
||||
./gen -s ${srcdir} > code.h
|
||||
|
||||
|
@@ -15,7 +15,7 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: gen.c,v 1.17 1999/04/29 06:10:27 explorer Exp $ */
|
||||
/* $Id: gen.c,v 1.18 1999/05/05 01:55:07 marka Exp $ */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -112,7 +112,7 @@ char * funname(char *, char *);
|
||||
void doswitch(char *, char *, char *, char *, char *, char *);
|
||||
void dodecl(char *, char *, char *);
|
||||
void add(int, char *, int, char *, char *);
|
||||
void sd(int, char *, char *);
|
||||
void sd(int, char *, char *, char);
|
||||
|
||||
char *
|
||||
upper(char *s) {
|
||||
@@ -284,8 +284,9 @@ add(int class, char *classname, int type, char *typename, char *dirname) {
|
||||
}
|
||||
|
||||
void
|
||||
sd(int class, char *classname, char *dir) {
|
||||
sd(int class, char *classname, char *dir, char filetype) {
|
||||
char buf[sizeof "0123456789_65535.h"];
|
||||
char fmt[sizeof "%10[-0-9a-z]_%d.h"];
|
||||
DIR *d;
|
||||
int type;
|
||||
char typename[11];
|
||||
@@ -294,14 +295,14 @@ sd(int class, char *classname, char *dir) {
|
||||
if ((d = opendir(dir)) == NULL)
|
||||
return;
|
||||
|
||||
sprintf(fmt,"%s%c", "%10[-0-9a-z]_%d.", filetype);
|
||||
while ((dp = readdir(d)) != NULL) {
|
||||
if (sscanf(dp->d_name, "%10[-0-9a-z]_%d.h",
|
||||
typename, &type) != 2)
|
||||
if (sscanf(dp->d_name, fmt, typename, &type) != 2)
|
||||
continue;
|
||||
if ((type > 65535) || (type < 0))
|
||||
continue;
|
||||
|
||||
sprintf(buf, "%s_%d.h", typename, type);
|
||||
sprintf(buf, "%s_%d.%c", typename, type, filetype);
|
||||
if (strcmp(buf, dp->d_name) != 0)
|
||||
continue;
|
||||
add(class, classname, type, typename, dir);
|
||||
@@ -326,21 +327,35 @@ main(int argc, char **argv) {
|
||||
int code = 1;
|
||||
int class_enum = 0;
|
||||
int type_enum = 0;
|
||||
int structs = 0;
|
||||
int c;
|
||||
char buf1[11];
|
||||
char filetype = 'c';
|
||||
FILE *fd;
|
||||
|
||||
strcpy(srcdir, "");
|
||||
while ((c = getopt(argc, argv, "cts:")) != -1)
|
||||
while ((c = getopt(argc, argv, "ctis:")) != -1)
|
||||
switch (c) {
|
||||
case 'c':
|
||||
code = 0;
|
||||
type_enum = 0;
|
||||
class_enum = 1;
|
||||
filetype = 'c';
|
||||
structs = 0;
|
||||
break;
|
||||
case 't':
|
||||
code = 0;
|
||||
class_enum = 0;
|
||||
type_enum = 1;
|
||||
filetype = 'c';
|
||||
structs = 0;
|
||||
break;
|
||||
case 'i':
|
||||
code = 0;
|
||||
class_enum = 0;
|
||||
type_enum = 0;
|
||||
structs = 1;
|
||||
filetype = 'h';
|
||||
break;
|
||||
case 's':
|
||||
sprintf(srcdir, "%s/", optarg);
|
||||
@@ -363,11 +378,11 @@ main(int argc, char **argv) {
|
||||
sprintf(buf, "%srdata/%s_%d", srcdir, classname, class);
|
||||
if (strcmp(buf + 6 + strlen(srcdir), dp->d_name) != 0)
|
||||
continue;
|
||||
sd(class, classname, buf);
|
||||
sd(class, classname, buf, filetype);
|
||||
}
|
||||
sprintf(buf, "%srdata/generic", srcdir);
|
||||
sd(0, "", buf);
|
||||
closedir(d);
|
||||
sprintf(buf, "%srdata/generic", srcdir);
|
||||
sd(0, "", buf, filetype);
|
||||
|
||||
if (time(&now) != -1) {
|
||||
if ((tm = localtime(&now)) != NULL && tm->tm_year > 98)
|
||||
@@ -426,7 +441,7 @@ main(int argc, char **argv) {
|
||||
|
||||
fputs("\n", stdout);
|
||||
for (tt = types; tt != NULL ; tt = tt->next)
|
||||
fprintf(stdout, "#include \"%s/%s_%d.h\"\n",
|
||||
fprintf(stdout, "#include \"%s/%s_%d.c\"\n",
|
||||
tt->dirname, tt->typename, tt->type);
|
||||
} else if (type_enum) {
|
||||
fprintf(stdout, "#ifndef TYPEENUM\n");
|
||||
@@ -452,8 +467,16 @@ main(int argc, char **argv) {
|
||||
cc->class,
|
||||
cc->next != NULL ? " \\" : "");
|
||||
fprintf(stdout, "#endif /* CLASSENUM */\n");
|
||||
|
||||
|
||||
} else if (structs) {
|
||||
for (tt = types; tt != NULL ; tt = tt->next) {
|
||||
sprintf(buf, "%s/%s_%d.h",
|
||||
tt->dirname, tt->typename, tt->type);
|
||||
if ((fd = fopen(buf,"r")) != NULL) {
|
||||
while (fgets(buf, sizeof buf, fd) != NULL)
|
||||
fputs(buf, stdout);
|
||||
fclose(fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ferror(stdout) != 0)
|
||||
|
@@ -1,3 +1,4 @@
|
||||
Makefile
|
||||
enumtype.h
|
||||
enumclass.h
|
||||
rdatastruct.h
|
||||
|
@@ -70,6 +70,7 @@ typedef unsigned int dns_result_t;
|
||||
#define DNS_R_BADDB 43
|
||||
#define DNS_R_ZONECUT 44
|
||||
#define DNS_R_FORMERR 45
|
||||
#define DNS_R_BADZONE 46 /* XXX MPA*/
|
||||
|
||||
#define DNS_R_LASTENTRY 45 /* Last entry on list. */
|
||||
|
||||
|
@@ -15,7 +15,7 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rdata.c,v 1.40 1999/05/03 19:56:53 halley Exp $ */
|
||||
/* $Id: rdata.c,v 1.41 1999/05/05 01:55:08 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <dns/cert.h>
|
||||
#include <dns/secalg.h>
|
||||
#include <dns/fixedname.h>
|
||||
#include <dns/rdatastruct.h>
|
||||
|
||||
#define RETERR(x) do { \
|
||||
dns_result_t __r = (x); \
|
||||
|
@@ -15,292 +15,11 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: tsig_250.h,v 1.7 1999/02/24 06:31:32 marka Exp $ */
|
||||
/* $Id: tsig_250.h,v 1.8 1999/05/05 01:55:08 marka Exp $ */
|
||||
|
||||
/* draft-ietf-dnsind-tsig-07.txt */
|
||||
|
||||
#ifndef RDATA_ANY_255_TSIG_250_H
|
||||
#define RDATA_ANY_255_TSIG_250_H
|
||||
#include <isc/str.h>
|
||||
|
||||
static dns_result_t
|
||||
fromtext_any_tsig(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_uint64_t sigtime;
|
||||
isc_buffer_t buffer;
|
||||
char *e;
|
||||
|
||||
REQUIRE(type == 250);
|
||||
REQUIRE(class == 255);
|
||||
|
||||
/* Algorithm Name */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
RETERR(dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
|
||||
/* Time Signed: 48 bits */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
sigtime = isc_strtouq(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
if ((sigtime >> 48) != 0)
|
||||
return(DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(sigtime >> 32, target));
|
||||
RETERR(uint32_tobuffer(sigtime & 0xffffffff, target));
|
||||
|
||||
/* Fudge */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Signature Size */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Signature */
|
||||
RETERR(base64_tobuffer(lexer, target, token.value.as_ulong));
|
||||
|
||||
/* Original ID */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Error */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Other Len */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Other Data */
|
||||
return (base64_tobuffer(lexer, target, token.value.as_ulong));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_any_tsig(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
isc_region_t sigr;
|
||||
char buf[sizeof "281474976710655 "];
|
||||
char *bufp;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
isc_uint64_t sigtime;
|
||||
unsigned short n;
|
||||
|
||||
REQUIRE(rdata->type == 250);
|
||||
REQUIRE(rdata->class == 255);
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
/* Algorithm Name */
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
RETERR(dns_name_totext(&prefix, sub, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
isc_region_consume(&sr, name_length(&name));
|
||||
|
||||
/* Time Signed */
|
||||
sigtime = ((isc_uint64_t)sr.base[0] << 40) |
|
||||
((isc_uint64_t)sr.base[1] << 32) |
|
||||
(sr.base[2] << 24) | (sr.base[3] << 16) |
|
||||
(sr.base[4] << 8) | sr.base[5];
|
||||
isc_region_consume(&sr, 6);
|
||||
bufp = &buf[sizeof buf - 1];
|
||||
*bufp-- = 0;
|
||||
*bufp-- = ' ';
|
||||
do {
|
||||
*bufp-- = decdigits[sigtime % 10];
|
||||
sigtime /= 10;
|
||||
} while (sigtime != 0);
|
||||
bufp++;
|
||||
RETERR(str_totext(bufp, target));
|
||||
|
||||
/* Fudge */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%u ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Signature Size */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%u ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Signature */
|
||||
REQUIRE(n <= sr.length);
|
||||
sigr = sr;
|
||||
sigr.length = n;
|
||||
RETERR(base64_totext(&sigr, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
isc_region_consume(&sr, n);
|
||||
|
||||
/* Original ID */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%u ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Error */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%u ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Other Size */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%u ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Other */
|
||||
return (base64_totext(&sr, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_any_tsig(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
dns_name_t name;
|
||||
unsigned long n;
|
||||
|
||||
REQUIRE(type == 250);
|
||||
REQUIRE(class == 255);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
/* Algorithm Name */
|
||||
dns_name_init(&name, NULL);
|
||||
RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
/* Time Signed + Fudge */
|
||||
if (sr.length < 8)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
RETERR(mem_tobuffer(target, sr.base, 8));
|
||||
isc_region_consume(&sr, 8);
|
||||
isc_buffer_forward(source, 8);
|
||||
|
||||
/* Signature Length + Signature */
|
||||
if (sr.length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
n = uint16_fromregion(&sr);
|
||||
if (sr.length < n + 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
RETERR(mem_tobuffer(target, sr.base, n + 2));
|
||||
isc_region_consume(&sr, n + 2);
|
||||
isc_buffer_forward(source, n + 2);
|
||||
|
||||
/* Original ID + Error */
|
||||
if (sr.length < 4)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
RETERR(mem_tobuffer(target, sr.base, 4));
|
||||
isc_region_consume(&sr, 4);
|
||||
isc_buffer_forward(source, 4);
|
||||
|
||||
/* Other Length + Other */
|
||||
if (sr.length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
n = uint16_fromregion(&sr);
|
||||
if (sr.length < n + 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
isc_buffer_forward(source, n + 2);
|
||||
return (mem_tobuffer(target, sr.base, n + 2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_any_tsig(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(rdata->type == 250);
|
||||
REQUIRE(rdata->class == 255);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
RETERR(dns_name_towire(&name, cctx, target));
|
||||
isc_region_consume(&sr, name_length(&name));
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_any_tsig(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 250);
|
||||
REQUIRE(rdata1->class == 255);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
dns_name_fromregion(&name1, &r1);
|
||||
dns_name_fromregion(&name2, &r2);
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
if (result != 0)
|
||||
return (result);
|
||||
isc_region_consume(&r1, name_length(&name1));
|
||||
isc_region_consume(&r2, name_length(&name2));
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_any_tsig(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
void *source, isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 250);
|
||||
REQUIRE(class == 255);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_any_tsig(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 250);
|
||||
REQUIRE(rdata->class == 255);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_ANY_255_TSIG_250_H */
|
||||
|
@@ -15,176 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: afsdb_18.h,v 1.5 1999/02/24 06:31:32 marka Exp $ */
|
||||
/* $Id: afsdb_18.h,v 1.6 1999/05/05 01:55:08 marka Exp $ */
|
||||
|
||||
/* RFC 1183 */
|
||||
|
||||
#ifndef RDATA_GENERIC_AFSDB_18_H
|
||||
#define RDATA_GENERIC_AFSDB_18_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_afsdb(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
isc_buffer_t buffer;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 18);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
/* subtype */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* hostname */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_afsdb(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_region_t region;
|
||||
char buf[sizeof "64000 "];
|
||||
isc_boolean_t sub;
|
||||
unsigned int num;
|
||||
|
||||
|
||||
REQUIRE(rdata->type == 18);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u ", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
return(dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_afsdb(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
isc_region_t sr;
|
||||
isc_region_t tr;
|
||||
|
||||
REQUIRE(type == 18);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
isc_buffer_available(target, &tr);
|
||||
if (tr.length < 2)
|
||||
return (DNS_R_NOSPACE);
|
||||
if (sr.length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
memcpy(tr.base, sr.base, 2);
|
||||
isc_buffer_forward(source, 2);
|
||||
isc_buffer_add(target, 2);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_afsdb(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t tr;
|
||||
isc_region_t sr;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(rdata->type == 18);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
isc_buffer_available(target, &tr);
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
if (tr.length < 2)
|
||||
return (DNS_R_NOSPACE);
|
||||
memcpy(tr.base, sr.base, 2);
|
||||
isc_region_consume(&sr, 2);
|
||||
isc_buffer_add(target, 2);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_afsdb(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
int result;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 18);
|
||||
|
||||
result = memcmp(rdata1->data, rdata2->data, 2);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
isc_region_consume(®ion1, 2);
|
||||
isc_region_consume(®ion2, 2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_afsdb(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 18);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_afsdb(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 18);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_AFSDB_18_H */
|
||||
|
@@ -15,166 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: cert_37.h,v 1.5 1999/02/16 22:42:24 marka Exp $ */
|
||||
/* $Id: cert_37.h,v 1.6 1999/05/05 01:55:08 marka Exp $ */
|
||||
|
||||
/* draft-ietf-dnssec-certs-04.txt */
|
||||
|
||||
#ifndef RDATA_GENERIC_CERT_37_H
|
||||
#define RDATA_GENERIC_CERT_37_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_cert(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
long n;
|
||||
dns_secalg_t secalg;
|
||||
char *e;
|
||||
dns_cert_t cert;
|
||||
|
||||
REQUIRE(type == 37);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
/* cert type */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
n = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0) {
|
||||
RETERR(dns_cert_fromtext(&cert, &token.value.as_textregion));
|
||||
} else {
|
||||
if (n < 0 || n > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
cert = n;
|
||||
}
|
||||
RETERR(uint16_tobuffer(cert, target));
|
||||
|
||||
/* key tag */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* algorithm */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
n = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0) {
|
||||
RETERR(dns_secalg_fromtext(&secalg,
|
||||
&token.value.as_textregion));
|
||||
} else {
|
||||
if (n < 0 || n > 0xff)
|
||||
return (DNS_R_RANGE);
|
||||
secalg = n;
|
||||
}
|
||||
RETERR(mem_tobuffer(target, &secalg, 1));
|
||||
|
||||
return (base64_tobuffer(lexer, target, -1));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_cert(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
char buf[sizeof "64000 "];
|
||||
unsigned int n;
|
||||
|
||||
REQUIRE(rdata->type == 37);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
|
||||
/* type */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
RETERR(dns_cert_totext(n, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* key tag */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%u ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* algorithm */
|
||||
RETERR(dns_secalg_totext(sr.base[0], target));
|
||||
RETERR(str_totext(" ", target));
|
||||
isc_region_consume(&sr, 1);
|
||||
|
||||
/* cert */
|
||||
return (base64_totext(&sr, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_cert(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(type == 37);
|
||||
|
||||
class = class; /*unused*/
|
||||
dctx = dctx; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
if (sr.length < 5)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
|
||||
isc_buffer_forward(source, sr.length);
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_cert(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(rdata->type == 37);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_cert(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 37);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_cert(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 37);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_cert(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 37);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_CERT_37_H */
|
||||
|
@@ -15,137 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: cname_5.h,v 1.11 1999/02/24 06:31:32 marka Exp $ */
|
||||
/* $Id: cname_5.h,v 1.12 1999/05/05 01:55:08 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_CNAME_5_H
|
||||
#define RDATA_GENERIC_CNAME_5_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_cname(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 5);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_cname(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 5);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_cname(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 5);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return(dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_cname(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 5);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_cname(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 5);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_cname(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 5);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_cname(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 5);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_CNAME_5_H */
|
||||
|
@@ -15,137 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dname_39.h,v 1.4 1999/02/24 06:31:32 marka Exp $ */
|
||||
/* $Id: dname_39.h,v 1.5 1999/05/05 01:55:09 marka Exp $ */
|
||||
|
||||
/* draft-ietf-dnsind-dname-02.txt */
|
||||
|
||||
#ifndef RDATA_GENERIC_DNAME_39_H
|
||||
#define RDATA_GENERIC_DNAME_39_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_dname(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 39);
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_dname(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 39);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_dname(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 39);
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_LOCAL);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return(dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_dname(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 39);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_LOCAL);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_dname(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 39);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_dname(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 39);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_dname(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 39);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_DNAME_39_H */
|
||||
|
@@ -15,119 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: gpos_27.h,v 1.2 1999/02/16 22:42:24 marka Exp $ */
|
||||
/* $Id: gpos_27.h,v 1.3 1999/05/05 01:55:09 marka Exp $ */
|
||||
|
||||
/* RFC 1712 */
|
||||
|
||||
#ifndef RDATA_GENERIC_GPOS_27_H
|
||||
#define RDATA_GENERIC_GPOS_27_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_gpos(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
int i;
|
||||
|
||||
REQUIRE(type == 27);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
for (i = 0; i < 3 ; i++) {
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_qstring,
|
||||
ISC_FALSE));
|
||||
RETERR(txt_fromtext(&token.value.as_textregion, target));
|
||||
}
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_gpos(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
int i;
|
||||
|
||||
REQUIRE(rdata->type == 27);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
|
||||
for (i = 0; i < 3 ; i++) {
|
||||
RETERR(txt_totext(®ion, target));
|
||||
if (i != 2)
|
||||
RETERR(str_totext(" ", target));
|
||||
}
|
||||
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_gpos(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
int i;
|
||||
|
||||
REQUIRE(type == 27);
|
||||
|
||||
dctx = dctx; /*unused*/
|
||||
class = class; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
for (i = 0 ; i < 3; i++)
|
||||
RETERR(txt_fromwire(source, target));
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_gpos(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == 27);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
return (mem_tobuffer(target, rdata->data, rdata->length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_gpos(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 27);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_gpos(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 27);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_gpos(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 27);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_GPOS_27_H */
|
||||
|
@@ -15,109 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: hinfo_13.h,v 1.10 1999/02/16 22:51:18 marka Exp $ */
|
||||
/* $Id: hinfo_13.h,v 1.11 1999/05/05 01:55:09 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_HINFO_13_H
|
||||
#define RDATA_GENERIC_HINFO_13_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_hinfo(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
int i;
|
||||
|
||||
REQUIRE(type == 13);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
for (i = 0; i < 2 ; i++) {
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_qstring,
|
||||
ISC_FALSE));
|
||||
RETERR(txt_fromtext(&token.value.as_textregion, target));
|
||||
}
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_hinfo(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 13);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
RETERR(txt_totext(®ion, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
return (txt_totext(®ion, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_hinfo(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 13);
|
||||
|
||||
dctx = dctx; /* unused */
|
||||
class = class; /* unused */
|
||||
downcase = downcase; /* unused */
|
||||
|
||||
RETERR(txt_fromwire(source, target));
|
||||
return (txt_fromwire(source, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_hinfo(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == 13);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
return (mem_tobuffer(target, rdata->data, rdata->length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_hinfo(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 13);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_hinfo(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 13);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_hinfo(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 13);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_HINFO_13_H */
|
||||
|
@@ -21,113 +21,4 @@
|
||||
|
||||
#ifndef RDATA_GENERIC_ISDN_20_H
|
||||
#define RDATA_GENERIC_ISDN_20_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_isdn(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
|
||||
REQUIRE(type == 20);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
/* ISDN-address */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
RETERR(txt_fromtext(&token.value.as_textregion, target));
|
||||
|
||||
/* sa: optional */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_qstring, ISC_TRUE));
|
||||
if (token.type != isc_tokentype_string) {
|
||||
isc_lex_ungettoken(lexer, &token);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
return (txt_fromtext(&token.value.as_textregion, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_isdn(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 20);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
RETERR(txt_totext(®ion, target));
|
||||
if (region.length == 0)
|
||||
return (DNS_R_SUCCESS);
|
||||
RETERR(str_totext(" ", target));
|
||||
return (txt_totext(®ion, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_isdn(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 20);
|
||||
|
||||
dctx = dctx; /* unused */
|
||||
class = class; /* unused */
|
||||
downcase = downcase; /* unused */
|
||||
|
||||
RETERR(txt_fromwire(source, target));
|
||||
if (buffer_empty(source))
|
||||
return (DNS_R_SUCCESS);
|
||||
return (txt_fromwire(source, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_isdn(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == 20);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
return (mem_tobuffer(target, rdata->data, rdata->length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_isdn(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 20);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_isdn(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 20);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_isdn(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 20);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_ISDN_20_H */
|
||||
|
@@ -15,161 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: key_25.h,v 1.3 1999/02/16 22:42:25 marka Exp $ */
|
||||
/* $Id: key_25.h,v 1.4 1999/05/05 01:55:09 marka Exp $ */
|
||||
|
||||
/* RFC 2065 */
|
||||
|
||||
#ifndef RDATA_GENERIC_KEY_25_H
|
||||
#define RDATA_GENERIC_KEY_25_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_key(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
unsigned char c;
|
||||
unsigned int flags;
|
||||
|
||||
REQUIRE(type == 25);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
flags = token.value.as_ulong;
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xff)
|
||||
return (DNS_R_RANGE);
|
||||
c = token.value.as_ulong;
|
||||
RETERR(mem_tobuffer(target, &c, 1));
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xff)
|
||||
return (DNS_R_RANGE);
|
||||
c = token.value.as_ulong;
|
||||
RETERR(mem_tobuffer(target, &c, 1));
|
||||
|
||||
/* No Key? */
|
||||
if ((flags & 0xc000) == 0xc000)
|
||||
return (DNS_R_SUCCESS);
|
||||
|
||||
return (base64_tobuffer(lexer, target, -1));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_key(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
char buf[sizeof "64000"];
|
||||
unsigned int flags;
|
||||
|
||||
REQUIRE(rdata->type == 25);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
|
||||
/* flags */
|
||||
flags = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%u", flags);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* protocol */
|
||||
sprintf(buf, "%u", sr.base[0]);
|
||||
isc_region_consume(&sr, 1);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* algorithm */
|
||||
sprintf(buf, "%u", sr.base[0]);
|
||||
isc_region_consume(&sr, 1);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* No Key? */
|
||||
if ((flags & 0xc000) == 0xc00)
|
||||
return (DNS_R_SUCCESS);
|
||||
|
||||
/* key */
|
||||
RETERR(str_totext(" ", target));
|
||||
return (base64_totext(&sr, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_key(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(type == 25);
|
||||
|
||||
class = class; /*unused*/
|
||||
dctx = dctx; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
if (sr.length < 4)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
|
||||
isc_buffer_forward(source, sr.length);
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_key(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(rdata->type == 25);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_key(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 25);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_key(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 25);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_key(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 25);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_KEY_25_H */
|
||||
|
@@ -15,573 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: loc_29.h,v 1.2 1999/02/11 14:00:29 marka Exp $ */
|
||||
/* $Id: loc_29.h,v 1.3 1999/05/05 01:55:09 marka Exp $ */
|
||||
|
||||
/* RFC 1876 */
|
||||
|
||||
#ifndef RDATA_GENERIC_LOC_29_H
|
||||
#define RDATA_GENERIC_LOC_29_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_loc(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
int d1, m1, s1;
|
||||
int d2, m2, s2;
|
||||
unsigned char size;
|
||||
unsigned char hp;
|
||||
unsigned char vp;
|
||||
unsigned char version;
|
||||
isc_boolean_t east = ISC_FALSE;
|
||||
isc_boolean_t north = ISC_FALSE;
|
||||
long tmp;
|
||||
long m;
|
||||
long cm;
|
||||
long poweroften[8] = { 1, 10, 100, 1000,
|
||||
10000, 100000, 1000000, 10000000 };
|
||||
int man;
|
||||
int exp;
|
||||
char *e;
|
||||
int i;
|
||||
unsigned long latitude;
|
||||
unsigned long longitude;
|
||||
unsigned long altitude;
|
||||
|
||||
REQUIRE(type == 29);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
/* defaults */
|
||||
m1 = s1 = 0;
|
||||
m2 = s2 = 0;
|
||||
size = 0x12; /* 1.00m */
|
||||
hp = 0x16; /* 10000.00 m */
|
||||
vp = 0x13; /* 10.00 m */
|
||||
version = 0;
|
||||
|
||||
/* degree */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 90)
|
||||
return (DNS_R_RANGE);
|
||||
d1 = token.value.as_ulong;
|
||||
/* minute */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
if (strcasecmp(token.value.as_pointer, "N") == 0)
|
||||
north = ISC_TRUE;
|
||||
if (north || strcasecmp(token.value.as_pointer, "S") == 0)
|
||||
goto getlong;
|
||||
m1 = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
if (m1 < 0 || m1 > 59)
|
||||
return (DNS_R_RANGE);
|
||||
if (d1 == 90 && m1 != 0)
|
||||
return (DNS_R_RANGE);
|
||||
|
||||
/* second */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
if (strcasecmp(token.value.as_pointer, "N") == 0)
|
||||
north = ISC_TRUE;
|
||||
if (north || strcasecmp(token.value.as_pointer, "S") == 0)
|
||||
goto getlong;
|
||||
s1 = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0 && *e != '.')
|
||||
return (DNS_R_SYNTAX);
|
||||
if (s1 < 0 || s1 > 59)
|
||||
return (DNS_R_RANGE);
|
||||
if (*e == '.') {
|
||||
e++;
|
||||
for (i = 0; i < 3 ; i++) {
|
||||
if (*e == 0)
|
||||
break;
|
||||
if ((tmp = decvalue(*e++)) < 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
s1 *= 10;
|
||||
s1 += tmp;
|
||||
}
|
||||
for ( ; i < 3 ; i++)
|
||||
s1 *= 10;
|
||||
if (*e != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
} else
|
||||
s1 *= 1000;
|
||||
if (d1 == 90 && s1 != 0)
|
||||
return (DNS_R_RANGE);
|
||||
|
||||
/* direction */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
if (strcasecmp(token.value.as_pointer, "N") == 0)
|
||||
north = ISC_TRUE;
|
||||
if (!north && strcasecmp(token.value.as_pointer, "S") != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
|
||||
getlong:
|
||||
/* degree */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 180)
|
||||
return (DNS_R_RANGE);
|
||||
d2 = token.value.as_ulong;
|
||||
|
||||
/* minute */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
if (strcasecmp(token.value.as_pointer, "E") == 0)
|
||||
east = ISC_TRUE;
|
||||
if (east || strcasecmp(token.value.as_pointer, "W") == 0)
|
||||
goto getalt;
|
||||
m2 = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
if (m2 < 0 || m2 > 59)
|
||||
return (DNS_R_RANGE);
|
||||
if (d2 == 180 && m2 != 0)
|
||||
return (DNS_R_RANGE);
|
||||
|
||||
/* second */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
if (strcasecmp(token.value.as_pointer, "E") == 0)
|
||||
east = ISC_TRUE;
|
||||
if (east || strcasecmp(token.value.as_pointer, "W") == 0)
|
||||
goto getalt;
|
||||
s2 = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0 && *e != '.')
|
||||
return (DNS_R_SYNTAX);
|
||||
if (s2 < 0 || s2 > 59)
|
||||
return (DNS_R_RANGE);
|
||||
if (*e == '.') {
|
||||
e++;
|
||||
for (i = 0; i < 3 ; i++) {
|
||||
if (*e == 0)
|
||||
break;
|
||||
if ((tmp = decvalue(*e++)) < 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
s2 *= 10;
|
||||
s2 += tmp;
|
||||
}
|
||||
for ( ; i < 3 ; i++)
|
||||
s2 *= 10;
|
||||
if (*e != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
} else
|
||||
s2 *= 1000;
|
||||
if (d2 == 180 && s2 != 0)
|
||||
return (DNS_R_RANGE);
|
||||
|
||||
/* direction */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
if (strcasecmp(token.value.as_pointer, "E") == 0)
|
||||
east = ISC_TRUE;
|
||||
if (!east && strcasecmp(token.value.as_pointer, "W") != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
|
||||
getalt:
|
||||
/* alt */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
m = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0 && *e != '.' && *e != 'm')
|
||||
return (DNS_R_SYNTAX);
|
||||
if (m < -100000 || m > 42849672)
|
||||
return (DNS_R_RANGE);
|
||||
cm = 0;
|
||||
if (*e == '.') {
|
||||
e++;
|
||||
for (i = 0; i < 2 ; i++) {
|
||||
if (*e == 0 || *e == 'm')
|
||||
break;
|
||||
if ((tmp = decvalue(*e++)) < 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
cm *= 10;
|
||||
if (m < 0)
|
||||
cm -= tmp;
|
||||
else
|
||||
cm += tmp;
|
||||
}
|
||||
for ( ; i < 2 ; i++)
|
||||
cm *= 10;
|
||||
}
|
||||
if (*e == 'm')
|
||||
e++;
|
||||
if (*e != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
if (m == -100000 && cm != 0)
|
||||
return (DNS_R_RANGE);
|
||||
if (m == 42849672 && cm > 95)
|
||||
return (DNS_R_RANGE);
|
||||
/* adjust base */
|
||||
altitude = m + 100000;
|
||||
altitude *= 100;
|
||||
altitude += cm;
|
||||
|
||||
/* size: optional */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_TRUE));
|
||||
if (token.type == isc_tokentype_eol ||
|
||||
token.type == isc_tokentype_eof) {
|
||||
isc_lex_ungettoken(lexer, &token);
|
||||
goto encode;
|
||||
}
|
||||
m = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0 && *e != '.' && *e != 'm')
|
||||
return (DNS_R_SYNTAX);
|
||||
if (m < 0 || m > 90000000)
|
||||
return (DNS_R_RANGE);
|
||||
cm = 0;
|
||||
if (*e == '.') {
|
||||
e++;
|
||||
for (i = 0; i < 2 ; i++) {
|
||||
if (*e == 0 || *e == 'm')
|
||||
break;
|
||||
if ((tmp = decvalue(*e++)) < 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
cm *= 10;
|
||||
cm += tmp;
|
||||
}
|
||||
for ( ; i < 2 ; i++)
|
||||
cm *= 10;
|
||||
}
|
||||
if (*e == 'm')
|
||||
e++;
|
||||
if (*e != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
/* we don't just multiply out as we will overflow */
|
||||
if (m > 0) {
|
||||
for (exp = 0 ; exp < 7 ; exp++)
|
||||
if (m < poweroften[exp+1])
|
||||
break;
|
||||
man = m / poweroften[exp];
|
||||
exp += 2;
|
||||
} else {
|
||||
if (cm > 10) {
|
||||
man = cm / 10;
|
||||
exp = 1;
|
||||
} else {
|
||||
man = cm;
|
||||
exp = 0;
|
||||
}
|
||||
}
|
||||
size = (man << 4) + exp;
|
||||
|
||||
/* hp: optional */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_TRUE));
|
||||
if (token.type == isc_tokentype_eol ||
|
||||
token.type == isc_tokentype_eof) {
|
||||
isc_lex_ungettoken(lexer, &token);
|
||||
goto encode;
|
||||
}
|
||||
m = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0 && *e != '.' && *e != 'm')
|
||||
return (DNS_R_SYNTAX);
|
||||
if (m < 0 || m > 90000000)
|
||||
return (DNS_R_RANGE);
|
||||
cm = 0;
|
||||
if (*e == '.') {
|
||||
e++;
|
||||
for (i = 0; i < 2 ; i++) {
|
||||
if (*e == 0 || *e == 'm')
|
||||
break;
|
||||
if ((tmp = decvalue(*e++)) < 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
cm *= 10;
|
||||
cm += tmp;
|
||||
}
|
||||
for ( ; i < 2 ; i++)
|
||||
cm *= 10;
|
||||
}
|
||||
if (*e == 'm')
|
||||
e++;
|
||||
if (*e != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
/* we don't just multiply out as we will overflow */
|
||||
if (m > 0) {
|
||||
for (exp = 0 ; exp < 7 ; exp++)
|
||||
if (m < poweroften[exp+1])
|
||||
break;
|
||||
man = m / poweroften[exp];
|
||||
exp += 2;
|
||||
} else if (cm > 10) {
|
||||
man = cm / 10;
|
||||
exp = 1;
|
||||
} else {
|
||||
man = cm;
|
||||
exp = 0;
|
||||
}
|
||||
hp = (man << 4) + exp;
|
||||
|
||||
/* vp: optional */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_TRUE));
|
||||
if (token.type == isc_tokentype_eol ||
|
||||
token.type == isc_tokentype_eof) {
|
||||
isc_lex_ungettoken(lexer, &token);
|
||||
goto encode;
|
||||
}
|
||||
m = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0 && *e != '.' && *e != 'm')
|
||||
return (DNS_R_SYNTAX);
|
||||
if (m < 0 || m > 90000000)
|
||||
return (DNS_R_RANGE);
|
||||
cm = 0;
|
||||
if (*e == '.') {
|
||||
e++;
|
||||
for (i = 0; i < 2 ; i++) {
|
||||
if (*e == 0 || *e == 'm')
|
||||
break;
|
||||
if ((tmp = decvalue(*e++)) < 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
cm *= 10;
|
||||
cm += tmp;
|
||||
}
|
||||
for ( ; i < 2 ; i++)
|
||||
cm *= 10;
|
||||
}
|
||||
if (*e == 'm')
|
||||
e++;
|
||||
if (*e != 0)
|
||||
return (DNS_R_SYNTAX);
|
||||
/* we don't just multiply out as we will overflow */
|
||||
if (m > 0) {
|
||||
for (exp = 0 ; exp < 7 ; exp++)
|
||||
if (m < poweroften[exp+1])
|
||||
break;
|
||||
man = m / poweroften[exp];
|
||||
exp += 2;
|
||||
} else if (cm > 10) {
|
||||
man = cm / 10;
|
||||
exp = 1;
|
||||
} else {
|
||||
man = cm;
|
||||
exp = 0;
|
||||
}
|
||||
vp = (man << 4) + exp;
|
||||
|
||||
encode:
|
||||
RETERR(mem_tobuffer(target, &version, 1));
|
||||
RETERR(mem_tobuffer(target, &size, 1));
|
||||
RETERR(mem_tobuffer(target, &hp, 1));
|
||||
RETERR(mem_tobuffer(target, &vp, 1));
|
||||
if (north)
|
||||
latitude = 0x80000000 + ( d1 * 3600 + m1 * 60 ) * 1000 + s1;
|
||||
else
|
||||
latitude = 0x80000000 - ( d1 * 3600 + m1 * 60 ) * 1000 - s1;
|
||||
RETERR(uint32_tobuffer(latitude, target));
|
||||
|
||||
if (east)
|
||||
longitude = 0x80000000 + ( d2 * 3600 + m2 * 60 ) * 1000 + s2;
|
||||
else
|
||||
longitude = 0x80000000 - ( d2 * 3600 + m2 * 60 ) * 1000 - s2;
|
||||
RETERR(uint32_tobuffer(longitude, target));
|
||||
|
||||
return (uint32_tobuffer(altitude, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_loc(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
int d1, m1, s1, fs1;
|
||||
int d2, m2, s2, fs2;
|
||||
unsigned long latitude;
|
||||
unsigned long longitude;
|
||||
unsigned long altitude;
|
||||
isc_boolean_t north;
|
||||
isc_boolean_t east;
|
||||
isc_boolean_t below;
|
||||
isc_region_t sr;
|
||||
char buf[sizeof
|
||||
"89 59 59.999 N 179 59 59.999 E 42849672.95m 90000000m 90000000m 90000000m"];
|
||||
char sbuf[sizeof "90000000m"];
|
||||
char hbuf[sizeof "90000000m"];
|
||||
char vbuf[sizeof "90000000m"];
|
||||
unsigned char size, hp, vp;
|
||||
unsigned long poweroften[8] = { 1, 10, 100, 1000,
|
||||
10000, 100000, 1000000, 10000000 };
|
||||
|
||||
REQUIRE(rdata->type == 29);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
|
||||
/* version = sr.base[0]; */
|
||||
size = sr.base[1];
|
||||
if ((size&0x0f)> 1)
|
||||
sprintf(sbuf, "%lum", (size>>4) * poweroften[(size&0x0f)-2]);
|
||||
else
|
||||
sprintf(sbuf, "0.%02lum", (size>>4) * poweroften[(size&0x0f)]);
|
||||
hp = sr.base[2];
|
||||
if ((hp&0x0f)> 1)
|
||||
sprintf(hbuf, "%lum", (hp>>4) * poweroften[(hp&0x0f)-2]);
|
||||
else
|
||||
sprintf(hbuf, "0.%02lum", (hp>>4) * poweroften[(hp&0x0f)]);
|
||||
vp = sr.base[3];
|
||||
if ((vp&0x0f)> 1)
|
||||
sprintf(vbuf, "%lum", (vp>>4) * poweroften[(vp&0x0f)-2]);
|
||||
else
|
||||
sprintf(vbuf, "0.%02lum", (vp>>4) * poweroften[(vp&0x0f)]);
|
||||
isc_region_consume(&sr, 4);
|
||||
|
||||
latitude = uint32_fromregion(&sr);
|
||||
isc_region_consume(&sr, 4);
|
||||
if (latitude >= 0x80000000) {
|
||||
north = ISC_TRUE;
|
||||
latitude -= 0x80000000;
|
||||
} else {
|
||||
north = ISC_FALSE;
|
||||
latitude = 0x80000000 - latitude;
|
||||
}
|
||||
fs1 = latitude % 1000;
|
||||
latitude /= 1000;
|
||||
s1 = latitude % 60;
|
||||
latitude /= 60;
|
||||
m1 = latitude % 60;
|
||||
latitude /= 60;
|
||||
d1 = latitude;
|
||||
|
||||
longitude = uint32_fromregion(&sr);
|
||||
isc_region_consume(&sr, 4);
|
||||
if (longitude >= 0x80000000) {
|
||||
east = ISC_TRUE;
|
||||
longitude -= 0x80000000;
|
||||
} else {
|
||||
east = ISC_FALSE;
|
||||
longitude = 0x80000000 - longitude;
|
||||
}
|
||||
fs2 = longitude % 1000;
|
||||
longitude /= 1000;
|
||||
s2 = longitude % 60;
|
||||
longitude /= 60;
|
||||
m2 = longitude % 60;
|
||||
longitude /= 60;
|
||||
d2 = longitude;
|
||||
|
||||
altitude = uint32_fromregion(&sr);
|
||||
isc_region_consume(&sr, 4);
|
||||
if (altitude < 10000000) {
|
||||
below = ISC_TRUE;
|
||||
altitude = 10000000 - altitude;
|
||||
} else {
|
||||
below =ISC_FALSE;
|
||||
altitude -= 10000000;
|
||||
}
|
||||
|
||||
sprintf(buf, "%d %d %d.%03d %s %d %d %d.%03d %s %s%ld.%02ldm %s %s %s",
|
||||
d1, m1, s1, fs1, north ? "N" : "S",
|
||||
d2, m2, s2, fs2, east ? "E" : "W",
|
||||
below ? "-" : "", altitude/100, altitude % 100,
|
||||
sbuf, hbuf, vbuf);
|
||||
|
||||
return (str_totext(buf, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_loc(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
unsigned char c;
|
||||
unsigned long latitude;
|
||||
unsigned long longitude;
|
||||
|
||||
REQUIRE(type == 29);
|
||||
|
||||
class = class; /*unused*/
|
||||
dctx = dctx; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
if (sr.length < 1)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
if (sr.base[0] != 0)
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
if (sr.length < 16)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
|
||||
/* size */
|
||||
c = sr.base[1];
|
||||
if (c != 0)
|
||||
if ((c&0xf) > 9 || ((c>>4)&0xf) > 9 || ((c>>4)&0xf) == 0)
|
||||
return (DNS_R_RANGE);
|
||||
|
||||
/* horiz pre */
|
||||
c = sr.base[2];
|
||||
if (c != 0)
|
||||
if ((c&0xf) > 9 || ((c>>4)&0xf) > 9 || ((c>>4)&0xf) == 0)
|
||||
return (DNS_R_RANGE);
|
||||
|
||||
/* vert pre */
|
||||
c = sr.base[3];
|
||||
if (c != 0)
|
||||
if ((c&0xf) > 9 || ((c>>4)&0xf) > 9 || ((c>>4)&0xf) == 0)
|
||||
return (DNS_R_RANGE);
|
||||
isc_region_consume(&sr, 4);
|
||||
|
||||
/* latitude */
|
||||
latitude = uint32_fromregion(&sr);
|
||||
if (latitude < (0x80000000UL - 90 * 3600000) ||
|
||||
latitude > (0x80000000UL + 90 * 3600000))
|
||||
return (DNS_R_RANGE);
|
||||
isc_region_consume(&sr, 4);
|
||||
|
||||
/* longitude */
|
||||
longitude = uint32_fromregion(&sr);
|
||||
if (longitude < (0x80000000UL - 180 * 3600000) ||
|
||||
longitude > (0x80000000UL + 180 * 3600000))
|
||||
return (DNS_R_RANGE);
|
||||
|
||||
/* altitiude */
|
||||
/* all values possible */
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
isc_buffer_forward(source, 16);
|
||||
return (mem_tobuffer(target, sr.base, 16));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_loc(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == 29);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
return(mem_tobuffer(target, rdata->data, rdata->length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_loc(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 29);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_loc(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 29);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_loc(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 29);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_LOC_29_H */
|
||||
|
@@ -15,137 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mb_7.h,v 1.11 1999/02/24 06:31:32 marka Exp $ */
|
||||
/* $Id: mb_7.h,v 1.12 1999/05/05 01:55:09 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_MB_7_H
|
||||
#define RDATA_GENERIC_MB_7_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_mb(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 7);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_mb(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 7);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_mb(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 7);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_mb(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 7);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_mb(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 7);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_mb(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 7);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_mb(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 7);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_MB_7_H */
|
||||
|
@@ -15,135 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: md_3.h,v 1.11 1999/02/24 06:31:32 marka Exp $ */
|
||||
/* $Id: md_3.h,v 1.12 1999/05/05 01:55:09 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_MD_3_H
|
||||
#define RDATA_GENERIC_MD_3_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_md(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 3);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_md(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 3);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return(dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_md(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 3);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_md(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 3);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_md(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 3);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_md(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 3);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_md(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 3);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_MD_3_H */
|
||||
|
@@ -15,135 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mf_4.h,v 1.10 1999/02/24 06:31:33 marka Exp $ */
|
||||
/* $Id: mf_4.h,v 1.11 1999/05/05 01:55:10 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_MF_4_H
|
||||
#define RDATA_GENERIC_MF_4_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_mf(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 4);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_mf(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 4);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_mf(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 4);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_mf(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 4);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_mf(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 4);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_mf(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 4);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_mf(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 4);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_MF_4_H */
|
||||
|
@@ -15,137 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mg_8.h,v 1.10 1999/02/24 06:31:33 marka Exp $ */
|
||||
/* $Id: mg_8.h,v 1.11 1999/05/05 01:55:10 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_MG_8_H
|
||||
#define RDATA_GENERIC_MG_8_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_mg(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 8);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_mg(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 8);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_mg(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 8);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_mg(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 8);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_mg(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 8);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_mg(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 8);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_mg(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 8);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_MG_8_H */
|
||||
|
@@ -15,183 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: minfo_14.h,v 1.11 1999/02/24 06:31:33 marka Exp $ */
|
||||
/* $Id: minfo_14.h,v 1.12 1999/05/05 01:55:10 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_MINFO_14_H
|
||||
#define RDATA_GENERIC_MINFO_14_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_minfo(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
int i;
|
||||
|
||||
REQUIRE(type == 14);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
for (i = 0; i < 2 ; i++) {
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string,
|
||||
ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
RETERR(dns_name_fromtext(&name, &buffer, origin,
|
||||
downcase, target));
|
||||
}
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_minfo(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t rmail;
|
||||
dns_name_t email;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 14);
|
||||
|
||||
dns_name_init(&rmail, NULL);
|
||||
dns_name_init(&email, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
|
||||
dns_name_fromregion(&rmail, ®ion);
|
||||
isc_region_consume(®ion, rmail.length);
|
||||
|
||||
dns_name_fromregion(&email, ®ion);
|
||||
isc_region_consume(®ion, email.length);
|
||||
|
||||
sub = name_prefix(&rmail, origin, &prefix);
|
||||
|
||||
RETERR(dns_name_totext(&prefix, sub, target));
|
||||
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
sub = name_prefix(&email, origin, &prefix);
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_minfo(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t rmail;
|
||||
dns_name_t email;
|
||||
|
||||
REQUIRE(type == 14);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
dns_name_init(&rmail, NULL);
|
||||
dns_name_init(&email, NULL);
|
||||
|
||||
RETERR(dns_name_fromwire(&rmail, source, dctx, downcase, target));
|
||||
return (dns_name_fromwire(&email, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_minfo(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t rmail;
|
||||
dns_name_t email;
|
||||
|
||||
REQUIRE(rdata->type == 14);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&rmail, NULL);
|
||||
dns_name_init(&email, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
|
||||
dns_name_fromregion(&rmail, ®ion);
|
||||
isc_region_consume(®ion, name_length(&rmail));
|
||||
|
||||
RETERR(dns_name_towire(&rmail, cctx, target));
|
||||
|
||||
dns_name_fromregion(&rmail, ®ion);
|
||||
isc_region_consume(®ion, rmail.length);
|
||||
|
||||
return (dns_name_towire(&rmail, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_minfo(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 14);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
if (result != 0)
|
||||
return (result);
|
||||
|
||||
isc_region_consume(®ion1, name_length(&name1));
|
||||
isc_region_consume(®ion2, name_length(&name2));
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
return (result);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_minfo(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 14);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_minfo(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 14);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_MINFO_14_H */
|
||||
|
@@ -15,137 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mr_9.h,v 1.10 1999/02/24 06:31:33 marka Exp $ */
|
||||
/* $Id: mr_9.h,v 1.11 1999/05/05 01:55:10 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_MR_9_H
|
||||
#define RDATA_GENERIC_MR_9_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_mr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 9);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_mr(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 9);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_mr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 9);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_mr(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 9);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_mr(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 9);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_mr(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 9);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_mr(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 9);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_MR_9_H */
|
||||
|
@@ -15,174 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mx_15.h,v 1.13 1999/02/24 06:31:33 marka Exp $ */
|
||||
/* $Id: mx_15.h,v 1.14 1999/05/05 01:55:10 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_MX_15_H
|
||||
#define RDATA_GENERIC_MX_15_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_mx(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 15);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_mx(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
char buf[sizeof "64000"];
|
||||
unsigned short num;
|
||||
|
||||
REQUIRE(rdata->type == 15);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
return(dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_mx(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
isc_region_t sregion;
|
||||
isc_region_t tregion;
|
||||
|
||||
REQUIRE(type == 15);
|
||||
|
||||
class = class; /* unused */
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
|
||||
isc_buffer_active(source, &sregion);
|
||||
isc_buffer_available(target, &tregion);
|
||||
if (tregion.length < 2)
|
||||
return (DNS_R_NOSPACE);
|
||||
if (sregion.length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
memcpy(tregion.base, sregion.base, 2);
|
||||
isc_buffer_forward(source, 2);
|
||||
isc_buffer_add(target, 2);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_mx(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
isc_region_t tr;
|
||||
|
||||
REQUIRE(rdata->type == 15);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
isc_buffer_available(target, &tr);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
if (tr.length < 2)
|
||||
return (DNS_R_NOSPACE);
|
||||
memcpy(tr.base, region.base, 2);
|
||||
isc_region_consume(®ion, 2);
|
||||
isc_buffer_add(target, 2);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_mx(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 15);
|
||||
|
||||
result = memcmp(rdata1->data, rdata2->data, 2);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
isc_region_consume(®ion1, 2);
|
||||
isc_region_consume(®ion2, 2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_mx(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 15);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_mx(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 15);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_MX_15_H */
|
||||
|
@@ -15,137 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: ns_2.h,v 1.10 1999/02/24 06:31:33 marka Exp $ */
|
||||
/* $Id: ns_2.h,v 1.11 1999/05/05 01:55:10 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_NS_2_H
|
||||
#define RDATA_GENERIC_NS_2_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_ns(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 2);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token,isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_ns(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 2);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_ns(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 2);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_ns(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 2);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_ns(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 2);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_ns(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 2);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_ns(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 2);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_NS_2_H */
|
||||
|
@@ -15,102 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: null_10.h,v 1.7 1999/02/16 22:51:18 marka Exp $ */
|
||||
/* $Id: null_10.h,v 1.8 1999/05/05 01:55:10 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_NULL_10_H
|
||||
#define RDATA_GENERIC_NULL_10_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_null(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 10);
|
||||
|
||||
class = class; /*unused*/
|
||||
type = type; /*unused*/
|
||||
lexer = lexer; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
target = target; /*unused*/
|
||||
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_null(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
|
||||
|
||||
REQUIRE(rdata->type == 10);
|
||||
REQUIRE(rdata->length == 0);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
target = target; /*unused*/
|
||||
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_null(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 10);
|
||||
|
||||
class = class; /*unused*/
|
||||
dctx = dctx; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
target = target; /*unused*/
|
||||
source = source; /*unused*/
|
||||
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_null(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == 10);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
target = target; /*unused*/
|
||||
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static int
|
||||
compare_null(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
|
||||
REQUIRE(rdata1->type == rdata1->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 10);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_null(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 10);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_null(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 10);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_NULL_10_H */
|
||||
|
@@ -15,203 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nxt_30.h,v 1.7 1999/02/24 06:31:33 marka Exp $ */
|
||||
/* $Id: nxt_30.h,v 1.8 1999/05/05 01:55:10 marka Exp $ */
|
||||
|
||||
/* RFC 2065 */
|
||||
|
||||
#ifndef RDATA_GENERIC_NXT_30_H
|
||||
#define RDATA_GENERIC_NXT_30_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_nxt(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
char *e;
|
||||
unsigned char bm[8*1024]; /* 64k bits */
|
||||
dns_rdatatype_t covered;
|
||||
dns_rdatatype_t maxcovered = dns_rdatatype_none;
|
||||
isc_boolean_t first = ISC_TRUE;
|
||||
unsigned int n;
|
||||
|
||||
REQUIRE(type == 30);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
/* next domain */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
RETERR(dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
|
||||
memset(bm, 0, sizeof bm);
|
||||
while (1) {
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string,
|
||||
ISC_TRUE));
|
||||
if (token.type != isc_tokentype_string)
|
||||
break;
|
||||
covered = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e == 0)
|
||||
(void) NULL;
|
||||
else if (dns_rdatatype_fromtext(&covered,
|
||||
&token.value.as_textregion) == DNS_R_UNKNOWN)
|
||||
return (DNS_R_UNKNOWN);
|
||||
if (first || covered > maxcovered)
|
||||
maxcovered = covered;
|
||||
first = ISC_FALSE;
|
||||
bm[covered/8] |= (0x80>>(covered%8));
|
||||
}
|
||||
isc_lex_ungettoken(lexer, &token);
|
||||
if (first)
|
||||
return (DNS_R_SUCCESS);
|
||||
n = (maxcovered + 8) / 8;
|
||||
return (mem_tobuffer(target, bm, n));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_nxt(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
char buf[sizeof "65535"];
|
||||
unsigned int i, j;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
dns_result_t result;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 30);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
isc_region_consume(&sr, name_length(&name));
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
RETERR(dns_name_totext(&prefix, sub, target));
|
||||
|
||||
RETERR(str_totext(" ( ", target));
|
||||
|
||||
for (i = 0 ; i < sr.length ; i++) {
|
||||
if (sr.base[i] != 0)
|
||||
for (j = 0; j < 8; j++)
|
||||
if ((sr.base[i] & (0x80>>j)) != 0) {
|
||||
result = dns_rdatatype_totext(
|
||||
i * 8 + j, target);
|
||||
if (result == DNS_R_SUCCESS) {
|
||||
RETERR(str_totext(" ",
|
||||
target));
|
||||
continue;
|
||||
}
|
||||
if (result != DNS_R_UNKNOWN)
|
||||
return (result);
|
||||
sprintf(buf, "%u", i * 8 + j);
|
||||
RETERR(str_totext(" ", target));
|
||||
RETERR(str_totext(buf, target));
|
||||
}
|
||||
}
|
||||
return (str_totext(")", target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_nxt(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 30);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
if (sr.length > 8 * 1024)
|
||||
return (DNS_R_EXTRADATA);
|
||||
RETERR(mem_tobuffer(target, sr.base, sr.length));
|
||||
isc_buffer_forward(source, sr.length);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_nxt(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(rdata->type == 30);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
isc_region_consume(&sr, name_length(&name));
|
||||
RETERR(dns_name_towire(&name, cctx, target));
|
||||
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_nxt(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 30);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
dns_name_fromregion(&name1, &r1);
|
||||
dns_name_fromregion(&name2, &r2);
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
if (result != 0)
|
||||
return (result);
|
||||
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_nxt(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 30);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_nxt(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 30);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_NXT_30_H */
|
||||
|
@@ -15,95 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: proforma.h,v 1.8 1999/02/24 06:31:33 marka Exp $ */
|
||||
/* $Id: proforma.h,v 1.9 1999/05/05 01:55:11 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_#_#_H
|
||||
#define RDATA_GENERIC_#_#_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_#(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target) {
|
||||
isc_token_t token;
|
||||
|
||||
REQUIRE(type == #);
|
||||
REQUIRE(class == #);
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_#(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == #);
|
||||
REQUIRE(rdata->class == #);
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_#(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(type == #);
|
||||
REQUIRE(class == #);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_LOCAL);
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_#(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == #);
|
||||
REQUIRE(rdata->class == #);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL):
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_LOCAL);
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static int
|
||||
compare_#(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == #);
|
||||
REQUIRE(rdata1->class == #);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_#(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(type == #);
|
||||
REQUIRE(class == #);
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_#(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == #);
|
||||
REQUIRE(rdata->class == #);
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_#_#_H */
|
||||
|
@@ -15,137 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: ptr_12.h,v 1.11 1999/02/24 06:31:34 marka Exp $ */
|
||||
/* $Id: ptr_12.h,v 1.12 1999/05/05 01:55:11 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_PTR_12_H
|
||||
#define RDATA_GENERIC_PTR_12_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_ptr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 12);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_ptr(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 12);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_ptr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 12);
|
||||
|
||||
class = class; /* unused */
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_ptr(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 12);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_ptr(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 12);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_ptr(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 12);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_ptr(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 12);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_PTR_12_H */
|
||||
|
@@ -15,185 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rp_17.h,v 1.5 1999/02/24 06:31:34 marka Exp $ */
|
||||
/* $Id: rp_17.h,v 1.6 1999/05/05 01:55:11 marka Exp $ */
|
||||
|
||||
/* RFC 1183 */
|
||||
|
||||
#ifndef RDATA_GENERIC_RP_17_H
|
||||
#define RDATA_GENERIC_RP_17_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_rp(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
int i;
|
||||
|
||||
REQUIRE(type == 17);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
for (i = 0; i < 2 ; i++) {
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string,
|
||||
ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
RETERR(dns_name_fromtext(&name, &buffer, origin,
|
||||
downcase, target));
|
||||
}
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_rp(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t rmail;
|
||||
dns_name_t email;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 17);
|
||||
|
||||
dns_name_init(&rmail, NULL);
|
||||
dns_name_init(&email, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
|
||||
dns_name_fromregion(&rmail, ®ion);
|
||||
isc_region_consume(®ion, rmail.length);
|
||||
|
||||
dns_name_fromregion(&email, ®ion);
|
||||
isc_region_consume(®ion, email.length);
|
||||
|
||||
sub = name_prefix(&rmail, origin, &prefix);
|
||||
|
||||
RETERR(dns_name_totext(&prefix, sub, target));
|
||||
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
sub = name_prefix(&email, origin, &prefix);
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_rp(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t rmail;
|
||||
dns_name_t email;
|
||||
|
||||
REQUIRE(type == 17);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&rmail, NULL);
|
||||
dns_name_init(&email, NULL);
|
||||
|
||||
RETERR(dns_name_fromwire(&rmail, source, dctx, downcase, target));
|
||||
return (dns_name_fromwire(&email, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_rp(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t rmail;
|
||||
dns_name_t email;
|
||||
|
||||
REQUIRE(rdata->type == 17);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&rmail, NULL);
|
||||
dns_name_init(&email, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
|
||||
dns_name_fromregion(&rmail, ®ion);
|
||||
isc_region_consume(®ion, rmail.length);
|
||||
|
||||
RETERR(dns_name_towire(&rmail, cctx, target));
|
||||
|
||||
dns_name_fromregion(&rmail, ®ion);
|
||||
isc_region_consume(®ion, rmail.length);
|
||||
|
||||
return (dns_name_towire(&rmail, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_rp(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 17);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
if (result != 0)
|
||||
return (result);
|
||||
|
||||
isc_region_consume(®ion1, name_length(&name1));
|
||||
isc_region_consume(®ion2, name_length(&name2));
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
return (result);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_rp(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 17);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_rp(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 17);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_RP_17_H */
|
||||
|
@@ -15,175 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rt_21.h,v 1.5 1999/02/24 06:31:34 marka Exp $ */
|
||||
/* $Id: rt_21.h,v 1.6 1999/05/05 01:55:11 marka Exp $ */
|
||||
|
||||
/* RFC 1183 */
|
||||
|
||||
#ifndef RDATA_GENERIC_RT_21_H
|
||||
#define RDATA_GENERIC_RT_21_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_rt(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 21);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_rt(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
char buf[sizeof "64000"];
|
||||
unsigned short num;
|
||||
|
||||
REQUIRE(rdata->type == 21);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
return(dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_rt(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
isc_region_t sregion;
|
||||
isc_region_t tregion;
|
||||
|
||||
REQUIRE(type == 21);
|
||||
class = class; /* unused */
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
|
||||
isc_buffer_active(source, &sregion);
|
||||
isc_buffer_available(target, &tregion);
|
||||
if (tregion.length < 2)
|
||||
return (DNS_R_NOSPACE);
|
||||
if (sregion.length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
memcpy(tregion.base, sregion.base, 2);
|
||||
isc_buffer_forward(source, 2);
|
||||
isc_buffer_add(target, 2);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_rt(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
isc_region_t tr;
|
||||
|
||||
REQUIRE(rdata->type == 21);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
isc_buffer_available(target, &tr);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
if (tr.length < 2)
|
||||
return (DNS_R_NOSPACE);
|
||||
memcpy(tr.base, region.base, 2);
|
||||
isc_region_consume(®ion, 2);
|
||||
isc_buffer_add(target, 2);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_rt(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 21);
|
||||
|
||||
result = memcmp(rdata1->data, rdata2->data, 2);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
isc_region_consume(®ion1, 2);
|
||||
isc_region_consume(®ion2, 2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_rt(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 21);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_rt(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 21);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_RT_21_H */
|
||||
|
@@ -15,302 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: sig_24.h,v 1.9 1999/02/24 06:31:34 marka Exp $ */
|
||||
/* $Id: sig_24.h,v 1.10 1999/05/05 01:55:11 marka Exp $ */
|
||||
|
||||
/* RFC 2065 */
|
||||
|
||||
#ifndef RDATA_GENERIC_SIG_24_H
|
||||
#define RDATA_GENERIC_SIG_24_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_sig(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
unsigned char c;
|
||||
dns_rdatatype_t covered;
|
||||
isc_textregion_t *tsr;
|
||||
char *e;
|
||||
dns_result_t result;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 24);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
/* type covered */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
tsr = &token.value.as_textregion;
|
||||
result = dns_rdatatype_fromtext(&covered, tsr);
|
||||
if (result != DNS_R_SUCCESS && result != DNS_R_NOTIMPLEMENTED) {
|
||||
covered = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0)
|
||||
return (result);
|
||||
}
|
||||
RETERR(uint16_tobuffer(covered, target));
|
||||
|
||||
/* algorithm */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xff)
|
||||
return (DNS_R_RANGE);
|
||||
c = token.value.as_ulong;
|
||||
RETERR(mem_tobuffer(target, &c, 1));
|
||||
|
||||
/* labels */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xff)
|
||||
return (DNS_R_RANGE);
|
||||
c = token.value.as_ulong;
|
||||
RETERR(mem_tobuffer(target, &c, 1));
|
||||
|
||||
/* original ttl */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint32_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* signature expiration */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
RETERR(time_tobuffer(token.value.as_pointer, target));
|
||||
|
||||
/* time signed */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
RETERR(time_tobuffer(token.value.as_pointer, target));
|
||||
|
||||
/* key footprint */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* signer */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
RETERR(dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
|
||||
/* sig */
|
||||
return (base64_tobuffer(lexer, target, -1));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_sig(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
char buf[sizeof "4294967295"];
|
||||
dns_rdatatype_t covered;
|
||||
unsigned long ttl;
|
||||
unsigned long when;
|
||||
unsigned long exp;
|
||||
unsigned long foot;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 24);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
|
||||
/* type covered */
|
||||
covered = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
RETERR(dns_rdatatype_totext(covered, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* algorithm */
|
||||
sprintf(buf, "%u", sr.base[0]);
|
||||
isc_region_consume(&sr, 1);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* labels */
|
||||
sprintf(buf, "%u", sr.base[0]);
|
||||
isc_region_consume(&sr, 1);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* ttl */
|
||||
ttl = uint32_fromregion(&sr);
|
||||
isc_region_consume(&sr, 4);
|
||||
sprintf(buf, "%lu", ttl);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* sig exp */
|
||||
exp = uint32_fromregion(&sr);
|
||||
isc_region_consume(&sr, 4);
|
||||
RETERR(time_totext(exp, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* time signed */
|
||||
when = uint32_fromregion(&sr);
|
||||
isc_region_consume(&sr, 4);
|
||||
RETERR(time_totext(when, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* footprint */
|
||||
foot = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%lu", ttl);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* signer */
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
isc_region_consume(&sr, name_length(&name));
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
RETERR(dns_name_totext(&prefix, sub, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* sig */
|
||||
return (base64_totext(&sr, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_sig(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 24);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
/*
|
||||
* type covered: 2
|
||||
* algorithm: 1
|
||||
* labels: 1
|
||||
* original ttl: 4
|
||||
* signature expiration: 4
|
||||
* time signed: 4
|
||||
* key footprint: 2
|
||||
*/
|
||||
if (sr.length < 18)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
|
||||
isc_buffer_forward(source, 18);
|
||||
RETERR(mem_tobuffer(target, sr.base, 18));
|
||||
|
||||
/* signer */
|
||||
dns_name_init(&name, NULL);
|
||||
RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
|
||||
/* sig */
|
||||
isc_buffer_active(source, &sr);
|
||||
isc_buffer_forward(source, sr.length);
|
||||
return(mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_sig(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(rdata->type == 24);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
/*
|
||||
* type covered: 2
|
||||
* algorithm: 1
|
||||
* labels: 1
|
||||
* original ttl: 4
|
||||
* signature expiration: 4
|
||||
* time signed: 4
|
||||
* key footprint: 2
|
||||
*/
|
||||
RETERR(mem_tobuffer(target, sr.base, 18));
|
||||
isc_region_consume(&sr, 18);
|
||||
|
||||
/* signer */
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
isc_region_consume(&sr, name_length(&name));
|
||||
RETERR(dns_name_towire(&name, cctx, target));
|
||||
|
||||
/* signature */
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_sig(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 24);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
|
||||
INSIST(r1.length > 18);
|
||||
INSIST(r2.length > 18);
|
||||
r1.length = 18;
|
||||
r2.length = 18;
|
||||
result = compare_region(&r1, &r2);
|
||||
if (result != 0)
|
||||
return (result);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
isc_region_consume(&r1, 18);
|
||||
isc_region_consume(&r2, 18);
|
||||
dns_name_fromregion(&name1, &r1);
|
||||
dns_name_fromregion(&name2, &r2);
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
if (result != 0)
|
||||
return (result);
|
||||
isc_region_consume(&r1, name_length(&name1));
|
||||
isc_region_consume(&r2, name_length(&name2));
|
||||
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_sig(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 24);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_sig(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 24);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_SIG_24_H */
|
||||
|
@@ -15,230 +15,23 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: soa_6.h,v 1.14 1999/02/24 06:31:34 marka Exp $ */
|
||||
/* $Id: soa_6.h,v 1.15 1999/05/05 01:55:11 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_SOA_6_H
|
||||
#define RDATA_GENERIC_SOA_6_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_soa(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
int i;
|
||||
typedef struct dns_rdata_soa {
|
||||
dns_rdataclass_t rdclass;
|
||||
dns_rdatatype_t rdtype;
|
||||
ISC_LINK(void) link;
|
||||
isc_mem_t *mctx;
|
||||
dns_fixedname_t origin;
|
||||
dns_fixedname_t mname;
|
||||
isc_uint32_t serial;
|
||||
isc_uint32_t refresh;
|
||||
isc_uint32_t retry;
|
||||
isc_uint32_t expire;
|
||||
isc_uint32_t minimum;
|
||||
} dns_rdata_soa_t;
|
||||
|
||||
REQUIRE(type == 6);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
for (i = 0 ; i < 2 ; i++) {
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string,
|
||||
ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
RETERR(dns_name_fromtext(&name, &buffer, origin,
|
||||
downcase, target));
|
||||
}
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number,
|
||||
ISC_FALSE));
|
||||
RETERR(uint32_tobuffer(token.value.as_ulong, target));
|
||||
}
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_soa(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t dregion;
|
||||
dns_name_t mname;
|
||||
dns_name_t rname;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
int i;
|
||||
|
||||
REQUIRE(rdata->type == 6);
|
||||
|
||||
dns_name_init(&mname, NULL);
|
||||
dns_name_init(&rname, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, &dregion);
|
||||
|
||||
dns_name_fromregion(&mname, &dregion);
|
||||
isc_region_consume(&dregion, name_length(&mname));
|
||||
|
||||
dns_name_fromregion(&rname, &dregion);
|
||||
isc_region_consume(&dregion, name_length(&rname));
|
||||
|
||||
sub = name_prefix(&mname, origin, &prefix);
|
||||
RETERR(dns_name_totext(&prefix, sub, target));
|
||||
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
sub = name_prefix(&rname, origin, &prefix);
|
||||
RETERR(dns_name_totext(&prefix, sub, target));
|
||||
|
||||
for (i = 0; i < 5 ; i++) {
|
||||
char buf[sizeof "2147483647"];
|
||||
unsigned long num;
|
||||
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
num = uint32_fromregion(&dregion);
|
||||
isc_region_consume(&dregion, 4);
|
||||
sprintf(buf, "%lu", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
}
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_soa(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t mname;
|
||||
dns_name_t rname;
|
||||
isc_region_t sregion;
|
||||
isc_region_t tregion;
|
||||
|
||||
REQUIRE(type == 6);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&mname, NULL);
|
||||
dns_name_init(&rname, NULL);
|
||||
|
||||
RETERR(dns_name_fromwire(&mname, source, dctx, downcase, target));
|
||||
RETERR(dns_name_fromwire(&rname, source, dctx, downcase, target));
|
||||
|
||||
isc_buffer_active(source, &sregion);
|
||||
isc_buffer_available(target, &tregion);
|
||||
|
||||
if (sregion.length < 20)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
if (tregion.length < 20)
|
||||
return (DNS_R_NOSPACE);
|
||||
|
||||
memcpy(tregion.base, sregion.base, 20);
|
||||
isc_buffer_forward(source, 20);
|
||||
isc_buffer_add(target, 20);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_soa(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t sregion;
|
||||
isc_region_t tregion;
|
||||
dns_name_t mname;
|
||||
dns_name_t rname;
|
||||
|
||||
REQUIRE(rdata->type == 6);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
|
||||
|
||||
dns_name_init(&mname, NULL);
|
||||
dns_name_init(&rname, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, &sregion);
|
||||
dns_name_fromregion(&mname, &sregion);
|
||||
isc_region_consume(&sregion, name_length(&mname));
|
||||
RETERR(dns_name_towire(&mname, cctx, target));
|
||||
|
||||
dns_name_fromregion(&rname, &sregion);
|
||||
isc_region_consume(&sregion, name_length(&rname));
|
||||
RETERR(dns_name_towire(&rname, cctx, target));
|
||||
|
||||
isc_buffer_available(target, &tregion);
|
||||
if (tregion.length < 20)
|
||||
return (DNS_R_NOSPACE);
|
||||
|
||||
memcpy(tregion.base, sregion.base, 20);
|
||||
isc_buffer_add(target, 20);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static int
|
||||
compare_soa(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 6);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
if (result != 0)
|
||||
return (result);
|
||||
|
||||
isc_region_consume(®ion1, name_length(&name1));
|
||||
isc_region_consume(®ion2, name_length(&name2));
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
if (result != 0)
|
||||
return (result);
|
||||
|
||||
isc_region_consume(®ion1, name_length(&name1));
|
||||
isc_region_consume(®ion2, name_length(&name2));
|
||||
|
||||
return (compare_region(®ion1, ®ion2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_soa(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 6);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_soa(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 6);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_SOA_6_H */
|
||||
|
@@ -15,282 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: tkey_249.h,v 1.7 1999/02/24 06:31:34 marka Exp $ */
|
||||
/* $Id: tkey_249.h,v 1.8 1999/05/05 01:55:11 marka Exp $ */
|
||||
|
||||
/* draft-ietf-dnssec-tkey-01.txt */
|
||||
|
||||
#ifndef RDATA_GENERIC_TKEY_249_H
|
||||
#define RDATA_GENERIC_TKEY_249_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_tkey(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_rcode_t rcode;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
char *e;
|
||||
|
||||
REQUIRE(type == 249);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
|
||||
/* Algorithm */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
RETERR(dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
|
||||
|
||||
/* Inception */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint32_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Expiration */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint32_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Mode */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Error */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
if (dns_rcode_fromtext(&rcode, &token.value.as_textregion)
|
||||
!= DNS_R_SUCCESS) {
|
||||
rcode = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e != 0)
|
||||
return (DNS_R_UNKNOWN);
|
||||
if (rcode > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
}
|
||||
RETERR(uint16_tobuffer(rcode, target));
|
||||
|
||||
/* Signature Size */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Signature */
|
||||
RETERR(base64_tobuffer(lexer, target, token.value.as_ulong));
|
||||
|
||||
/* Other Len */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* Other Data */
|
||||
return (base64_tobuffer(lexer, target, token.value.as_ulong));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_tkey(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
isc_region_t sigr;
|
||||
char buf[sizeof "4294967295 "];
|
||||
unsigned long n;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 249);
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
|
||||
/* Algorithm */
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
RETERR(dns_name_totext(&prefix, sub, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
isc_region_consume(&sr, name_length(&name));
|
||||
|
||||
/* Inception */
|
||||
n = uint32_fromregion(&sr);
|
||||
isc_region_consume(&sr, 4);
|
||||
sprintf(buf, "%lu ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Expiration */
|
||||
n = uint32_fromregion(&sr);
|
||||
isc_region_consume(&sr, 4);
|
||||
sprintf(buf, "%lu ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Mode */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%lu ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Error */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
if (dns_rcode_totext(n, target) == DNS_R_SUCCESS)
|
||||
RETERR(str_totext(" ", target));
|
||||
else {
|
||||
sprintf(buf, "%lu ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
}
|
||||
|
||||
/* Signature Size */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%lu ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Signature */
|
||||
REQUIRE(n <= sr.length);
|
||||
sigr = sr;
|
||||
sigr.length = n;
|
||||
RETERR(base64_totext(&sigr, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
isc_region_consume(&sr, n);
|
||||
|
||||
/* Other Size */
|
||||
n = uint16_fromregion(&sr);
|
||||
isc_region_consume(&sr, 2);
|
||||
sprintf(buf, "%lu ", n);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/* Other */
|
||||
return (base64_totext(&sr, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_tkey(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
unsigned long n;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 249);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
/* Algorithm */
|
||||
dns_name_init(&name, NULL);
|
||||
RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
|
||||
/*
|
||||
* Inception: 4
|
||||
* Expiration: 4
|
||||
* Mode: 2
|
||||
* Error: 2
|
||||
*/
|
||||
isc_buffer_active(source, &sr);
|
||||
if (sr.length < 12)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
RETERR(mem_tobuffer(target, sr.base, 12));
|
||||
isc_region_consume(&sr, 12);
|
||||
isc_buffer_forward(source, 12);
|
||||
|
||||
/* Signature Length + Signature */
|
||||
if (sr.length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
n = uint16_fromregion(&sr);
|
||||
if (sr.length < n + 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
RETERR(mem_tobuffer(target, sr.base, n + 2));
|
||||
isc_region_consume(&sr, n + 2);
|
||||
isc_buffer_forward(source, n + 2);
|
||||
|
||||
/* Other Length + Other */
|
||||
if (sr.length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
n = uint16_fromregion(&sr);
|
||||
if (sr.length < n + 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
isc_buffer_forward(source, n + 2);
|
||||
return (mem_tobuffer(target, sr.base, n + 2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_tkey(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(rdata->type == 249);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
/* Algorithm */
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
RETERR(dns_name_towire(&name, cctx, target));
|
||||
isc_region_consume(&sr, name_length(&name));
|
||||
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_tkey(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 249);
|
||||
|
||||
/* Algorithm */
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
dns_name_fromregion(&name1, &r1);
|
||||
dns_name_fromregion(&name2, &r2);
|
||||
if ((result = dns_name_rdatacompare(&name1, &name2)) != 0)
|
||||
return (result);
|
||||
isc_region_consume(&r1, name_length(&name1));
|
||||
isc_region_consume(&r2, name_length(&name2));
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_tkey(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
void *source, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(type == 249);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_tkey(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 249);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_TKEY_249_H */
|
||||
|
@@ -15,130 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: txt_16.h,v 1.9 1999/02/16 22:42:30 marka Exp $ */
|
||||
/* $Id: txt_16.h,v 1.10 1999/05/05 01:55:11 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_TXT_16_H
|
||||
#define RDATA_GENERIC_TXT_16_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_txt(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
|
||||
REQUIRE(type == 16);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
while (1) {
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_qstring,
|
||||
ISC_TRUE));
|
||||
if (token.type != isc_tokentype_qstring &&
|
||||
token.type != isc_tokentype_string)
|
||||
break;
|
||||
RETERR(txt_fromtext(&token.value.as_textregion, target));
|
||||
}
|
||||
/* Let upper layer handle eol/eof. */
|
||||
isc_lex_ungettoken(lexer, &token);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_txt(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 16);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
|
||||
while (region.length) {
|
||||
RETERR(txt_totext(®ion, target));
|
||||
if (region.length)
|
||||
RETERR(str_totext(" ", target));
|
||||
}
|
||||
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_txt(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_result_t result;
|
||||
|
||||
REQUIRE(type == 16);
|
||||
|
||||
dctx = dctx; /*unused*/
|
||||
class = class; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
while (!buffer_empty(source)) {
|
||||
result = txt_fromwire(source, target);
|
||||
if (result != DNS_R_SUCCESS)
|
||||
return (result);
|
||||
}
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_txt(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 16);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
isc_buffer_available(target, ®ion);
|
||||
if (region.length < rdata->length)
|
||||
return (DNS_R_NOSPACE);
|
||||
|
||||
memcpy(region.base, rdata->data, rdata->length);
|
||||
isc_buffer_add(target, rdata->length);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static int
|
||||
compare_txt(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 16);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_txt(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 16);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_txt(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 16);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_TXT_16_H */
|
||||
|
@@ -15,100 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: unspec_103.h,v 1.2 1999/02/16 22:42:30 marka Exp $ */
|
||||
/* $Id: unspec_103.h,v 1.3 1999/05/05 01:55:11 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_UNSPEC_103_H
|
||||
#define RDATA_GENERIC_UNSPEC_103_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_unspec(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 103);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
return (atob_tobuffer(lexer, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_unspec(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
|
||||
|
||||
REQUIRE(rdata->type == 103);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
return (btoa_totext(rdata->data, rdata->length, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_unspec(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(type == 103);
|
||||
|
||||
class = class; /*unused*/
|
||||
dctx = dctx; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
isc_buffer_active(source, &sr);
|
||||
isc_buffer_forward(source, sr.length);
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_unspec(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == 103);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
return (mem_tobuffer(target, rdata->data, rdata->length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_unspec(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata1->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 103);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_unspec(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 103);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_unspec(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 103);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_UNSPEC_103_H */
|
||||
|
@@ -15,116 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: x25_19.h,v 1.2 1999/02/16 22:42:31 marka Exp $ */
|
||||
/* $Id: x25_19.h,v 1.3 1999/05/05 01:55:12 marka Exp $ */
|
||||
|
||||
/* RFC 1183 */
|
||||
|
||||
#ifndef RDATA_GENERIC_X25_19_H
|
||||
#define RDATA_GENERIC_X25_19_H
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
static dns_result_t
|
||||
fromtext_x25(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
unsigned int i;
|
||||
|
||||
REQUIRE(type == 19);
|
||||
|
||||
class = class; /*unused*/
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
for (i = 0; i < token.value.as_textregion.length; i++)
|
||||
if (!isascii(token.value.as_textregion.base[i]&0xff) ||
|
||||
!isdigit(token.value.as_textregion.base[i]&0xff))
|
||||
return (DNS_R_RANGE);
|
||||
return (txt_fromtext(&token.value.as_textregion, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_x25(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 19);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
return (txt_totext(®ion, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_x25(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 19);
|
||||
|
||||
dctx = dctx; /* unused */
|
||||
class = class; /* unused */
|
||||
downcase = downcase; /* unused */
|
||||
|
||||
return (txt_fromwire(source, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_x25(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == 19);
|
||||
|
||||
cctx = cctx;
|
||||
|
||||
return (mem_tobuffer(target, rdata->data, rdata->length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_x25(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
int l;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 19);
|
||||
|
||||
l = (rdata1->length < rdata2->length) ? rdata1->length : rdata2->length;
|
||||
result = memcmp(rdata1->data, rdata2->data, l);
|
||||
|
||||
if (result != 0)
|
||||
result = (result < 0) ? -1 : 1;
|
||||
else if (rdata1->length != rdata2->length)
|
||||
result = (rdata1->length < rdata2->length) ? -1 : 1;
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_x25(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 19);
|
||||
|
||||
class = class; /*unused*/
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_x25(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 19);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_X25_19_H */
|
||||
|
@@ -15,261 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: a6_38.h,v 1.7 1999/02/24 06:31:34 marka Exp $ */
|
||||
/* $Id: a6_38.h,v 1.8 1999/05/05 01:55:12 marka Exp $ */
|
||||
|
||||
/* draft-ietf-ipngwg-dns-lookups-03.txt */
|
||||
|
||||
#ifndef RDATA_IN_1_A6_28_H
|
||||
#define RDATA_IN_1_A6_28_H
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <isc/inet.h>
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(A, B) ((A > B) ? (A) : (B))
|
||||
#endif
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_a6(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
unsigned char addr[16];
|
||||
unsigned char prefixlen;
|
||||
unsigned char octets;
|
||||
unsigned char mask;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 38);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
/* prefix length */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
if (token.value.as_ulong > 128)
|
||||
return (DNS_R_RANGE);
|
||||
|
||||
prefixlen = token.value.as_ulong;
|
||||
RETERR(mem_tobuffer(target, &prefixlen, 1));
|
||||
|
||||
/* suffix */
|
||||
if (prefixlen != 128) {
|
||||
/* prefix 0..127 */
|
||||
octets = prefixlen/8;
|
||||
/* octets 0..15 */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string,
|
||||
ISC_FALSE));
|
||||
if (isc_inet_pton(AF_INET6, token.value.as_pointer, addr) != 1)
|
||||
return (DNS_R_BADAAAA);
|
||||
mask = 0xff >> (prefixlen % 8);
|
||||
addr[octets] &= mask;
|
||||
RETERR(mem_tobuffer(target, &addr[octets], 16 - octets));
|
||||
}
|
||||
|
||||
if (prefixlen == 0)
|
||||
return (DNS_R_SUCCESS);
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_a6(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t tr;
|
||||
isc_region_t sr;
|
||||
unsigned char addr[16];
|
||||
unsigned char prefixlen;
|
||||
unsigned char octets;
|
||||
unsigned char mask;
|
||||
char buf[sizeof "128"];
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 38);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
prefixlen = sr.base[0];
|
||||
INSIST(prefixlen <= 128);
|
||||
isc_region_consume(&sr, 1);
|
||||
sprintf(buf, "%u", prefixlen);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
if (prefixlen != 128) {
|
||||
octets = prefixlen/8;
|
||||
memset(addr, 0, sizeof addr);
|
||||
memcpy(&addr[octets], sr.base, 16 - octets);
|
||||
mask = 0xff >> (prefixlen % 8);
|
||||
addr[octets] &= mask;
|
||||
isc_buffer_available(target, &tr);
|
||||
if (isc_inet_ntop(AF_INET6, addr,
|
||||
(char *)tr.base, tr.length) == NULL)
|
||||
return (DNS_R_NOSPACE);
|
||||
|
||||
isc_buffer_add(target, strlen((char *)tr.base));
|
||||
isc_region_consume(&sr, 16 - octets);
|
||||
}
|
||||
|
||||
if (prefixlen == 0)
|
||||
return (DNS_R_SUCCESS);
|
||||
|
||||
RETERR(str_totext(" ", target));
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
return(dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_a6(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
unsigned char prefixlen;
|
||||
unsigned char octets;
|
||||
unsigned char mask;
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 38);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
/* prefix length */
|
||||
if (sr.length < 1)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
prefixlen = sr.base[0];
|
||||
if (prefixlen > 128)
|
||||
return (DNS_R_RANGE);
|
||||
isc_region_consume(&sr, 1);
|
||||
RETERR(mem_tobuffer(target, &prefixlen, 1));
|
||||
isc_buffer_forward(source, 1);
|
||||
|
||||
/* suffix */
|
||||
if (prefixlen != 128) {
|
||||
octets = 16 - prefixlen / 8;
|
||||
if (sr.length < octets)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
mask = 0xff >> (prefixlen % 8);
|
||||
sr.base[0] &= mask; /* ensure pad bits are zero */
|
||||
RETERR(mem_tobuffer(target, sr.base, octets));
|
||||
isc_buffer_forward(source, octets);
|
||||
}
|
||||
|
||||
if (prefixlen == 0)
|
||||
return (DNS_R_SUCCESS);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_a6(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
dns_name_t name;
|
||||
unsigned char prefixlen;
|
||||
unsigned char octets;
|
||||
|
||||
REQUIRE(rdata->type == 38);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
prefixlen = sr.base[0];
|
||||
INSIST(prefixlen <= 128);
|
||||
|
||||
octets = 1 + 16 - prefixlen / 8;
|
||||
RETERR(mem_tobuffer(target, sr.base, octets));
|
||||
isc_region_consume(&sr, octets);
|
||||
|
||||
if (prefixlen == 0)
|
||||
return (DNS_R_SUCCESS);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_a6(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
int result;
|
||||
unsigned char prefixlen;
|
||||
unsigned char octets;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 38);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
prefixlen = MAX(region1.base[0], region2.base[0]);
|
||||
octets = 1 + 16 - prefixlen / 8;
|
||||
|
||||
result = memcmp(region1.base, region2.base, octets);
|
||||
if (result != 0)
|
||||
result = (result < 0) ? -1 : 1;
|
||||
|
||||
isc_region_consume(®ion1, octets);
|
||||
isc_region_consume(®ion2, octets);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_a6(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 1);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_a6(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 38);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_IN_1_A6_38_H */
|
||||
|
@@ -15,150 +15,17 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: a_1.h,v 1.12 1999/02/16 22:42:31 marka Exp $ */
|
||||
/* $Id: a_1.h,v 1.13 1999/05/05 01:55:12 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_IN_1_A_1_H
|
||||
#define RDATA_IN_1_A_1_H
|
||||
|
||||
#include <string.h>
|
||||
typedef struct dns_rdata_in_a {
|
||||
dns_rdataclass_t rdclass; /* host order */
|
||||
dns_rdatatype_t rdtype; /* host order */
|
||||
ISC_LINK(void) link;
|
||||
isc_mem_t *mctx;
|
||||
isc_uint32_t address; /* network order */
|
||||
} dns_rdata_in_a_t;
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <isc/inet.h>
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_a(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
struct in_addr addr;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(type == 1);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
if (isc_inet_aton(token.value.as_pointer, &addr) != 1)
|
||||
return (DNS_R_BADDOTTEDQUAD);
|
||||
isc_buffer_available(target, ®ion);
|
||||
if (region.length < 4)
|
||||
return (DNS_R_NOSPACE);
|
||||
memcpy(region.base, &addr, 4);
|
||||
isc_buffer_add(target, 4);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_a(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 1);
|
||||
REQUIRE(rdata->class == 1);
|
||||
REQUIRE(rdata->length == 4);
|
||||
|
||||
origin = origin; /* unused */
|
||||
|
||||
isc_buffer_available(target, ®ion);
|
||||
if (isc_inet_ntop(AF_INET, rdata->data,
|
||||
(char *)region.base, region.length) == NULL)
|
||||
return (DNS_R_NOSPACE);
|
||||
|
||||
isc_buffer_add(target, strlen((char *)region.base));
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_a(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sregion;
|
||||
isc_region_t tregion;
|
||||
|
||||
REQUIRE(type == 1);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
dctx = dctx; /* unused */
|
||||
downcase = downcase; /* unused */
|
||||
|
||||
|
||||
isc_buffer_active(source, &sregion);
|
||||
isc_buffer_available(target, &tregion);
|
||||
if (sregion.length < 4)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
if (tregion.length < 4)
|
||||
return (DNS_R_NOSPACE);
|
||||
|
||||
memcpy(tregion.base, sregion.base, 4);
|
||||
isc_buffer_forward(source, 4);
|
||||
isc_buffer_add(target, 4);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_a(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 1);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
isc_buffer_available(target, ®ion);
|
||||
if (region.length < rdata->length)
|
||||
return (DNS_R_NOSPACE);
|
||||
memcpy(region.base, rdata->data, rdata->length);
|
||||
isc_buffer_add(target, 4);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_a(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->type);
|
||||
REQUIRE(rdata1->type == 1);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
result = memcmp(rdata1->data, rdata2->data, 4);
|
||||
if (result != 0)
|
||||
result = (result < 0) ? -1 : 1;
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_a(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 1);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_a(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 1);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_IN_1_A_1_H */
|
||||
#endif RDATA_IN_1_A_1_H
|
||||
|
@@ -15,152 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: aaaa_28.h,v 1.6 1999/02/16 22:42:31 marka Exp $ */
|
||||
/* $Id: aaaa_28.h,v 1.7 1999/05/05 01:55:12 marka Exp $ */
|
||||
|
||||
/* RFC 1886 */
|
||||
|
||||
#ifndef RDATA_IN_1_AAAA_28_H
|
||||
#define RDATA_IN_1_AAAA_28_H
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <isc/inet.h>
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_aaaa(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
unsigned char addr[16];
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(type == 28);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
if (isc_inet_pton(AF_INET6, token.value.as_pointer, addr) != 1)
|
||||
return (DNS_R_BADAAAA);
|
||||
isc_buffer_available(target, ®ion);
|
||||
if (region.length < 16)
|
||||
return (DNS_R_NOSPACE);
|
||||
memcpy(region.base, addr, 16);
|
||||
isc_buffer_add(target, 16);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_aaaa(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 28);
|
||||
REQUIRE(rdata->class == 1);
|
||||
REQUIRE(rdata->length == 16);
|
||||
|
||||
origin = origin; /* unused */
|
||||
|
||||
isc_buffer_available(target, ®ion);
|
||||
if (isc_inet_ntop(AF_INET6, rdata->data,
|
||||
(char *)region.base, region.length) == NULL)
|
||||
return (DNS_R_NOSPACE);
|
||||
|
||||
isc_buffer_add(target, strlen((char *)region.base));
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_aaaa(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sregion;
|
||||
isc_region_t tregion;
|
||||
|
||||
REQUIRE(type == 28);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
dctx = dctx; /* unused */
|
||||
downcase = downcase; /* unused */
|
||||
|
||||
|
||||
isc_buffer_active(source, &sregion);
|
||||
isc_buffer_available(target, &tregion);
|
||||
if (sregion.length < 16)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
if (tregion.length < 16)
|
||||
return (DNS_R_NOSPACE);
|
||||
|
||||
memcpy(tregion.base, sregion.base, 16);
|
||||
isc_buffer_forward(source, 16);
|
||||
isc_buffer_add(target, 16);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_aaaa(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 28);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
isc_buffer_available(target, ®ion);
|
||||
if (region.length < rdata->length)
|
||||
return (DNS_R_NOSPACE);
|
||||
memcpy(region.base, rdata->data, rdata->length);
|
||||
isc_buffer_add(target, 16);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_aaaa(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 28);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
result = memcmp(rdata1->data, rdata2->data, 16);
|
||||
if (result != 0)
|
||||
result = (result < 0) ? -1 : 1;
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_aaaa(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 1);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_aaaa(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 28);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_IN_1_AAAA_28_H */
|
||||
|
@@ -15,166 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: kx_36.h,v 1.5 1999/02/24 06:31:35 marka Exp $ */
|
||||
/* $Id: kx_36.h,v 1.6 1999/05/05 01:55:12 marka Exp $ */
|
||||
|
||||
/* RFC 2230 */
|
||||
|
||||
#ifndef RDATA_GENERIC_KX_36_H
|
||||
#define RDATA_GENERIC_KX_36_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_kx(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 36);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_kx(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
char buf[sizeof "64000"];
|
||||
unsigned short num;
|
||||
|
||||
REQUIRE(rdata->type == 36);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
return(dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_kx(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
isc_region_t sregion;
|
||||
|
||||
REQUIRE(type == 36);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
|
||||
isc_buffer_active(source, &sregion);
|
||||
if (sregion.length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
RETERR(mem_tobuffer(target, sregion.base, 2));
|
||||
isc_buffer_forward(source, 2);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_kx(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 36);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
RETERR(mem_tobuffer(target, region.base, 2));
|
||||
isc_region_consume(®ion, 2);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_kx(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 36);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
result = memcmp(rdata1->data, rdata2->data, 2);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
isc_region_consume(®ion1, 2);
|
||||
isc_region_consume(®ion2, 2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_kx(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 36);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_kx(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 36);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_GENERIC_KX_15_H */
|
||||
|
@@ -15,252 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: naptr_35.h,v 1.5 1999/02/24 06:31:35 marka Exp $ */
|
||||
/* $Id: naptr_35.h,v 1.6 1999/05/05 01:55:12 marka Exp $ */
|
||||
|
||||
/* RFC 2168 */
|
||||
|
||||
#ifndef RDATA_IN_1_NAPTR_35_H
|
||||
#define RDATA_IN_1_NAPTR_35_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_naptr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 35);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
/* priority */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* weight */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* flags */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_qstring, ISC_FALSE));
|
||||
RETERR(txt_fromtext(&token.value.as_textregion, target));
|
||||
|
||||
/* service */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_qstring, ISC_FALSE));
|
||||
RETERR(txt_fromtext(&token.value.as_textregion, target));
|
||||
|
||||
/* regexp */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_qstring, ISC_FALSE));
|
||||
RETERR(txt_fromtext(&token.value.as_textregion, target));
|
||||
|
||||
/* replacement */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_naptr(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
char buf[sizeof "64000"];
|
||||
unsigned short num;
|
||||
|
||||
REQUIRE(rdata->type == 35);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
/* priority */
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* weight */
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* flags */
|
||||
RETERR(txt_totext(®ion, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* service */
|
||||
RETERR(txt_totext(®ion, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* regexp */
|
||||
RETERR(txt_totext(®ion, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* replacement */
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
return(dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_naptr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(type == 35);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
|
||||
/* priority, weight */
|
||||
isc_buffer_active(source, &sr);
|
||||
if (sr.length < 4)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
RETERR(mem_tobuffer(target, sr.base, 4));
|
||||
isc_buffer_forward(source, 4);
|
||||
|
||||
/* flags */
|
||||
RETERR(txt_fromwire(source, target));
|
||||
|
||||
/* service */
|
||||
RETERR(txt_fromwire(source, target));
|
||||
|
||||
/* regexp */
|
||||
RETERR(txt_fromwire(source, target));
|
||||
|
||||
/* replacement */
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_naptr(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(rdata->type == 35);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
/* priority, weight */
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
RETERR(mem_tobuffer(target, sr.base, 4));
|
||||
isc_region_consume(&sr, 4);
|
||||
|
||||
/* flags */
|
||||
RETERR(mem_tobuffer(target, sr.base, sr.base[0] + 1));
|
||||
isc_region_consume(&sr, sr.base[0] + 1);
|
||||
|
||||
/* service */
|
||||
RETERR(mem_tobuffer(target, sr.base, sr.base[0] + 1));
|
||||
isc_region_consume(&sr, sr.base[0] + 1);
|
||||
|
||||
/* regexp */
|
||||
RETERR(mem_tobuffer(target, sr.base, sr.base[0] + 1));
|
||||
isc_region_consume(&sr, sr.base[0] + 1);
|
||||
|
||||
/* replacement */
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_naptr(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 35);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
/* priority, weight */
|
||||
result = memcmp(region1.base, region2.base, 4);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
isc_region_consume(®ion1, 4);
|
||||
isc_region_consume(®ion2, 4);
|
||||
|
||||
/* flags */
|
||||
result = memcmp(region1.base, region2.base, region1.base[0] + 1);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
isc_region_consume(®ion1, region1.base[0] + 1);
|
||||
isc_region_consume(®ion2, region2.base[0] + 1);
|
||||
|
||||
/* service */
|
||||
result = memcmp(region1.base, region2.base, region1.base[0] + 1);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
isc_region_consume(®ion1, region1.base[0] + 1);
|
||||
isc_region_consume(®ion2, region2.base[0] + 1);
|
||||
|
||||
/* regexp */
|
||||
result = memcmp(region1.base, region2.base, region1.base[0] + 1);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
isc_region_consume(®ion1, region1.base[0] + 1);
|
||||
isc_region_consume(®ion2, region2.base[0] + 1);
|
||||
|
||||
/* replacement */
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_naptr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
void *source, isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 35);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_naptr(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 35);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_IN_1_NAPTR_35_H */
|
||||
|
@@ -15,144 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nsap-ptr_23.h,v 1.4 1999/02/24 06:31:35 marka Exp $ */
|
||||
/* $Id: nsap-ptr_23.h,v 1.5 1999/05/05 01:55:12 marka Exp $ */
|
||||
|
||||
/* RFC 1348 */
|
||||
|
||||
#ifndef RDATA_IN_1_NSAP_PTR_23_H
|
||||
#define RDATA_IN_1_NSAP_PTR_23_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_nsap_ptr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 23);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_nsap_ptr(dns_rdata_t *rdata, dns_name_t *origin,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
|
||||
REQUIRE(rdata->type == 23);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
|
||||
return (dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_nsap_ptr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
|
||||
REQUIRE(type == 23);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_nsap_ptr(dns_rdata_t *rdata, dns_compress_t *cctx,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 23);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_nsap_ptr(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 23);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_nsap_ptr(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
void *source, isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 23);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_nsap_ptr(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 23);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_IN_1_NSAP_PTR_23_H */
|
||||
|
@@ -15,152 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nsap_22.h,v 1.2 1999/02/16 22:42:32 marka Exp $ */
|
||||
/* $Id: nsap_22.h,v 1.3 1999/05/05 01:55:12 marka Exp $ */
|
||||
|
||||
/* RFC 1706 */
|
||||
|
||||
#ifndef RDATA_IN_1_NSAP_22_H
|
||||
#define RDATA_IN_1_NSAP_22_H
|
||||
|
||||
#include <string.h>
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_nsap(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target) {
|
||||
isc_token_t token;
|
||||
isc_textregion_t *sr;
|
||||
int n;
|
||||
int digits;
|
||||
unsigned char c;
|
||||
|
||||
REQUIRE(type == 22);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
/* 0x<hex.string.with.periods> */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
sr = &token.value.as_textregion;
|
||||
if (sr->length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
if (sr->base[0] != '0' || (sr->base[1] != 'x' && sr->base[1] != 'X'))
|
||||
return (DNS_R_SYNTAX);
|
||||
isc_textregion_consume(sr, 2);
|
||||
digits = 0;
|
||||
n = 0;
|
||||
while (sr->length > 1) {
|
||||
if (sr->base[0] == '.') {
|
||||
isc_textregion_consume(sr, 1);
|
||||
continue;
|
||||
}
|
||||
if ((n = hexvalue(sr->base[0])) == -1)
|
||||
return (DNS_R_SYNTAX);
|
||||
c <<= 4;
|
||||
c += n;
|
||||
if (++digits == 2) {
|
||||
RETERR(mem_tobuffer(target, &n, 1));
|
||||
digits = 0;
|
||||
}
|
||||
}
|
||||
if (digits) {
|
||||
c <<= 4;
|
||||
return (mem_tobuffer(target, &c, 1));
|
||||
}
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_nsap(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
char buf[sizeof "xx"];
|
||||
|
||||
REQUIRE(rdata->type == 22);
|
||||
REQUIRE(rdata->class == 1);
|
||||
REQUIRE(rdata->length == 4);
|
||||
|
||||
origin = origin; /* unused */
|
||||
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
RETERR(str_totext("0x", target));
|
||||
while (region.length) {
|
||||
sprintf(buf, "%02x", region.base[0]);
|
||||
isc_region_consume(®ion, 1);
|
||||
RETERR(str_totext(buf, target));
|
||||
}
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_nsap(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(type == 22);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
dctx = dctx; /* unused */
|
||||
downcase = downcase; /* unused */
|
||||
|
||||
|
||||
isc_buffer_active(source, ®ion);
|
||||
if (region.length < 1)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
|
||||
return (mem_tobuffer(target, region.base, region.length));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_nsap(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
|
||||
REQUIRE(rdata->type == 22);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
return (mem_tobuffer(target, rdata->data, rdata->length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_nsap(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->type);
|
||||
REQUIRE(rdata1->type == 22);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_nsap(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 22);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_nsap(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 22);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_IN_1_NSAP_22_H */
|
||||
|
@@ -15,208 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: px_26.h,v 1.4 1999/02/24 06:31:35 marka Exp $ */
|
||||
/* $Id: px_26.h,v 1.5 1999/05/05 01:55:13 marka Exp $ */
|
||||
|
||||
/* RFC 2163 */
|
||||
|
||||
#ifndef RDATA_IN_1_PX_26_H
|
||||
#define RDATA_IN_1_PX_26_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_px(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 26);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
/* preference */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* MAP822 */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
RETERR(dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
|
||||
/* MAPX400 */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_px(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
char buf[sizeof "64000"];
|
||||
unsigned short num;
|
||||
|
||||
REQUIRE(rdata->type == 26);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
/* preference */
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* MAP822 */
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
isc_region_consume(®ion, name_length(&name));
|
||||
RETERR(dns_name_totext(&prefix, sub, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* MAPX400 */
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
return(dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_px(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
isc_region_t sregion;
|
||||
|
||||
REQUIRE(type == 26);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
|
||||
/* preference */
|
||||
isc_buffer_active(source, &sregion);
|
||||
if (sregion.length < 2)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
RETERR(mem_tobuffer(target, sregion.base, 2));
|
||||
isc_buffer_forward(source, 2);
|
||||
|
||||
/* MAP822 */
|
||||
RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
|
||||
/* MAPX400 */
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_px(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t region;
|
||||
|
||||
REQUIRE(rdata->type == 26);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
/* preference */
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
RETERR(mem_tobuffer(target, region.base, 2));
|
||||
isc_region_consume(®ion, 2);
|
||||
|
||||
/* MAP822 */
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
RETERR(dns_name_towire(&name, cctx, target));
|
||||
isc_region_consume(®ion, name_length(&name));
|
||||
|
||||
/* MAPX400 */
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_px(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 26);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
result = memcmp(rdata1->data, rdata2->data, 2);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
isc_region_consume(®ion1, 2);
|
||||
isc_region_consume(®ion2, 2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
result = dns_name_rdatacompare(&name1, &name2);
|
||||
if (result != 0)
|
||||
return (result);
|
||||
|
||||
isc_region_consume(®ion1, name_length(&name1));
|
||||
isc_region_consume(®ion2, name_length(&name2));
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_px(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 26);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_px(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 26);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_IN_1_PX_26_H */
|
||||
|
@@ -15,197 +15,10 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: srv_33.h,v 1.4 1999/02/24 06:31:35 marka Exp $ */
|
||||
/* $Id: srv_33.h,v 1.5 1999/05/05 01:55:13 marka Exp $ */
|
||||
|
||||
/* RFC 2052 bis */
|
||||
|
||||
#ifndef RDATA_IN_1_SRV_33_H
|
||||
#define RDATA_IN_1_SRV_33_H
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_srv(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
dns_name_t name;
|
||||
isc_buffer_t buffer;
|
||||
|
||||
REQUIRE(type == 33);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
/* priority */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* weight */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* port */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_number, ISC_FALSE));
|
||||
RETERR(uint16_tobuffer(token.value.as_ulong, target));
|
||||
|
||||
/* target */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
dns_name_init(&name, NULL);
|
||||
buffer_fromregion(&buffer, &token.value.as_region,
|
||||
ISC_BUFFERTYPE_TEXT);
|
||||
origin = (origin != NULL) ? origin : dns_rootname;
|
||||
return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_srv(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t region;
|
||||
dns_name_t name;
|
||||
dns_name_t prefix;
|
||||
isc_boolean_t sub;
|
||||
char buf[sizeof "64000"];
|
||||
unsigned short num;
|
||||
|
||||
REQUIRE(rdata->type == 33);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_init(&prefix, NULL);
|
||||
|
||||
/* priority */
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* weight */
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* port */
|
||||
num = uint16_fromregion(®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
sprintf(buf, "%u", num);
|
||||
RETERR(str_totext(buf, target));
|
||||
RETERR(str_totext(" ", target));
|
||||
|
||||
/* target */
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
sub = name_prefix(&name, origin, &prefix);
|
||||
return(dns_name_totext(&prefix, sub, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_srv(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
dns_name_t name;
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(type == 33);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
if (dns_decompress_edns(dctx) >= 1 || !dns_decompress_strict(dctx))
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
|
||||
dns_name_init(&name, NULL);
|
||||
|
||||
/* priority, weight, port */
|
||||
isc_buffer_active(source, &sr);
|
||||
if (sr.length < 6)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
RETERR(mem_tobuffer(target, sr.base, 6));
|
||||
isc_buffer_forward(source, 6);
|
||||
|
||||
/* target */
|
||||
return (dns_name_fromwire(&name, source, dctx, downcase, target));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_srv(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
dns_name_t name;
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(rdata->type == 33);
|
||||
|
||||
if (dns_compress_getedns(cctx) >= 1)
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_ALL);
|
||||
else
|
||||
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
|
||||
|
||||
/* priority, weight, port */
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
RETERR(mem_tobuffer(target, sr.base, 6));
|
||||
isc_region_consume(&sr, 6);
|
||||
|
||||
/* target */
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
return (dns_name_towire(&name, cctx, target));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_srv(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
int result;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 33);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
/* priority, weight, port */
|
||||
result = memcmp(rdata1->data, rdata2->data, 6);
|
||||
if (result != 0)
|
||||
return (result < 0 ? -1 : 1);
|
||||
|
||||
/* target */
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
isc_region_consume(®ion1, 6);
|
||||
isc_region_consume(®ion2, 6);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
return (dns_name_rdatacompare(&name1, &name2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_srv(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
REQUIRE(type == 33);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_srv(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 33);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_IN_1_SRV_33_H */
|
||||
|
@@ -15,224 +15,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: wks_11.h,v 1.8 1999/02/16 22:42:33 marka Exp $ */
|
||||
/* $Id: wks_11.h,v 1.9 1999/05/05 01:55:13 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_IN_1_WKS_11_H
|
||||
#define RDATA_IN_1_WKS_11_H
|
||||
|
||||
#include <limits.h>
|
||||
#include <netdb.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <isc/inet.h>
|
||||
|
||||
static dns_result_t
|
||||
fromtext_in_wks(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_lex_t *lexer, dns_name_t *origin,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_token_t token;
|
||||
isc_region_t region;
|
||||
struct in_addr addr;
|
||||
struct protoent *pe;
|
||||
struct servent *se;
|
||||
char *e;
|
||||
long proto;
|
||||
unsigned char bm[8*1024]; /* 64k bits */
|
||||
long port;
|
||||
long maxport = -1;
|
||||
char *ps = NULL;
|
||||
unsigned int n;
|
||||
|
||||
REQUIRE(type == 11);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
origin = origin; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
/* IPv4 dotted quad */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
isc_buffer_available(target, ®ion);
|
||||
if (isc_inet_aton(token.value.as_pointer, &addr) != 1)
|
||||
return (DNS_R_BADDOTTEDQUAD);
|
||||
if (region.length < 4)
|
||||
return (DNS_R_NOSPACE);
|
||||
memcpy(region.base, &addr, 4);
|
||||
isc_buffer_add(target, 4);
|
||||
|
||||
/* protocol */
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
|
||||
|
||||
proto = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e == 0)
|
||||
(void)NULL;
|
||||
else if ((pe = getprotobyname(token.value.as_pointer)) != NULL)
|
||||
proto = pe->p_proto;
|
||||
else
|
||||
return (DNS_R_UNEXPECTED);
|
||||
if (proto < 0 || proto > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
|
||||
if (proto == IPPROTO_TCP)
|
||||
ps = "tcp";
|
||||
else if (proto == IPPROTO_UDP)
|
||||
ps = "udp";
|
||||
|
||||
RETERR(uint16_tobuffer(proto, target));
|
||||
|
||||
memset(bm, 0, sizeof bm);
|
||||
while (1) {
|
||||
RETERR(gettoken(lexer, &token, isc_tokentype_string,
|
||||
ISC_TRUE));
|
||||
if (token.type != isc_tokentype_string)
|
||||
break;
|
||||
port = strtol(token.value.as_pointer, &e, 10);
|
||||
if (*e == 0)
|
||||
(void) NULL;
|
||||
else if ((se = getservbyname(token.value.as_pointer, ps))
|
||||
!= NULL)
|
||||
port = ntohs(se->s_port);
|
||||
else
|
||||
return (DNS_R_UNEXPECTED);
|
||||
if (port < 0 || port > 0xffff)
|
||||
return (DNS_R_RANGE);
|
||||
if (port > maxport)
|
||||
maxport = port;
|
||||
bm[port/8] |= (0x80>>(port%8));
|
||||
}
|
||||
isc_lex_ungettoken(lexer, &token);
|
||||
n = (maxport + 8) / 8;
|
||||
return (mem_tobuffer(target, bm, n));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
totext_in_wks(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
isc_region_t tr;
|
||||
unsigned short proto;
|
||||
char buf[sizeof "65535"];
|
||||
unsigned int i, j;
|
||||
|
||||
REQUIRE(rdata->type == 11);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
origin = origin;
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
isc_buffer_available(target, &tr);
|
||||
if (isc_inet_ntop(AF_INET, sr.base, (char *)tr.base, tr.length)
|
||||
== NULL)
|
||||
return (DNS_R_NOSPACE);
|
||||
isc_buffer_add(target, strlen((char *)tr.base));
|
||||
isc_region_consume(&sr, 4);
|
||||
|
||||
proto = uint16_fromregion(&sr);
|
||||
sprintf(buf, "%u", proto);
|
||||
RETERR(str_totext(" ", target));
|
||||
RETERR(str_totext(buf, target));
|
||||
isc_region_consume(&sr, 2);
|
||||
RETERR(str_totext(" (", target));
|
||||
|
||||
for (i = 0 ; i < sr.length ; i++) {
|
||||
if (sr.base[i] != 0)
|
||||
for (j = 0; j < 8; j++)
|
||||
if ((sr.base[i] & (0x80>>j)) != 0) {
|
||||
sprintf(buf, "%u", i * 8 + j);
|
||||
RETERR(str_totext(" ", target));
|
||||
RETERR(str_totext(buf, target));
|
||||
}
|
||||
}
|
||||
RETERR(str_totext(" )", target));
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromwire_in_wks(dns_rdataclass_t class, dns_rdatatype_t type,
|
||||
isc_buffer_t *source, dns_decompress_t *dctx,
|
||||
isc_boolean_t downcase, isc_buffer_t *target)
|
||||
{
|
||||
isc_region_t sr;
|
||||
isc_region_t tr;
|
||||
|
||||
REQUIRE(type == 11);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
dctx = dctx; /*unused*/
|
||||
downcase = downcase; /*unused*/
|
||||
|
||||
isc_buffer_active(source, &sr);
|
||||
isc_buffer_available(target, &tr);
|
||||
|
||||
if (sr.length < 6)
|
||||
return (DNS_R_UNEXPECTEDEND);
|
||||
if (sr.length > 8 * 1024 + 6)
|
||||
return (DNS_R_EXTRADATA);
|
||||
if (tr.length < sr.length)
|
||||
return (DNS_R_NOSPACE);
|
||||
|
||||
memcpy(tr.base, sr.base, sr.length);
|
||||
isc_buffer_add(target, sr.length);
|
||||
isc_buffer_forward(source, sr.length);
|
||||
return (DNS_R_SUCCESS);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
towire_in_wks(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(rdata->type == 11);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
cctx = cctx; /*unused*/
|
||||
|
||||
dns_rdata_toregion(rdata, &sr);
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
||||
static int
|
||||
compare_in_wks(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->class == rdata2->class);
|
||||
REQUIRE(rdata1->type == 11);
|
||||
REQUIRE(rdata1->class == 1);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (compare_region(&r1, &r2));
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
fromstruct_in_wks(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
|
||||
isc_buffer_t *target)
|
||||
{
|
||||
|
||||
|
||||
REQUIRE(type == 11);
|
||||
REQUIRE(class == 1);
|
||||
|
||||
source = source;
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
|
||||
static dns_result_t
|
||||
tostruct_in_wks(dns_rdata_t *rdata, void *target) {
|
||||
|
||||
REQUIRE(rdata->type == 11);
|
||||
REQUIRE(rdata->class == 1);
|
||||
|
||||
target = target;
|
||||
|
||||
return (DNS_R_NOTIMPLEMENTED);
|
||||
}
|
||||
#endif /* RDATA_IN_1_WKS_11_H */
|
||||
|
Reference in New Issue
Block a user