From 217f572018871cdf09db052a676b9933512cdbfa Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 2 Feb 1999 22:34:20 +0000 Subject: [PATCH] NSAP-PTR Initial implementation. Modified gen.c to support "-" in class and type names. --- lib/dns/gen.c | 40 ++++++--- lib/dns/rdata.c | 4 +- lib/dns/rdata/in_1/nsap-ptr_23.c | 148 +++++++++++++++++++++++++++++++ lib/dns/rdata/in_1/nsap-ptr_23.h | 148 +++++++++++++++++++++++++++++++ 4 files changed, 327 insertions(+), 13 deletions(-) create mode 100644 lib/dns/rdata/in_1/nsap-ptr_23.c create mode 100644 lib/dns/rdata/in_1/nsap-ptr_23.h diff --git a/lib/dns/gen.c b/lib/dns/gen.c index 90b84ef2bb..d6af7f040f 100644 --- a/lib/dns/gen.c +++ b/lib/dns/gen.c @@ -15,7 +15,7 @@ * SOFTWARE. */ - /* $Id: gen.c,v 1.11 1999/01/28 05:03:23 marka Exp $ */ + /* $Id: gen.c,v 1.12 1999/02/02 22:34:20 marka Exp $ */ #include @@ -108,6 +108,7 @@ struct tt { } *types; char * upper(char *); +char * funname(char *, char *); void doswitch(char *, char *, char *, char *, char *, char *); void dodecl(char *, char *, char *); void add(int, char *, int, char *, char *); @@ -127,6 +128,18 @@ upper(char *s) { return (buf); } +char * +funname(char *s, char *buf) { + char *b = buf; + char c; + + while ((c = *s++)) { + *b++ = (c == '-') ? '_' : c; + } + *b = '\0'; + return (buf); +} + void doswitch(char *name, char *function, char *args, char *tsw, char *csw, char *res) @@ -135,6 +148,7 @@ doswitch(char *name, char *function, char *args, int first = 1; int lasttype = 0; int subswitch = 0; + char buf1[11], buf2[11]; for (tt = types; tt != NULL ; tt = tt->next) { if (first) { @@ -156,12 +170,14 @@ doswitch(char *name, char *function, char *args, if (tt->class == 0) fprintf(stdout, "\tcase %d: result = %s_%s(%s); break;", - tt->type, function, tt->typename, args); + tt->type, function, + funname(tt->typename, buf1), args); else fprintf(stdout, "\t\tcase %d: result = %s_%s_%s(%s); break;", - tt->class, function, tt->classname, - tt->typename, args); + tt->class, function, + funname(tt->classname, buf1), + funname(tt->typename, buf2), args); fputs(" \\\n", stdout); lasttype = tt->type; } @@ -181,18 +197,21 @@ doswitch(char *name, char *function, char *args, void dodecl(char *type, char *function, char *args) { struct tt *tt; + char buf1[11], buf2[11]; fputs("\n", stdout); for (tt = types; tt ; tt = tt->next) if (tt->class) fprintf(stdout, "static %s %s_%s_%s(%s);\n", - type, function, tt->classname, - tt->typename, args); + type, function, + funname(tt->classname, buf1), + funname(tt->typename, buf2), args); else fprintf(stdout, "static %s %s_%s(%s);\n", - type, function, tt->typename, args); + type, function, + funname(tt->typename, buf1), args); } void @@ -277,7 +296,7 @@ sd(int class, char *classname, char *dir) { return; while ((dp = readdir(d)) != NULL) { - if (sscanf(dp->d_name, "%10[0-9a-z]_%d.h", + if (sscanf(dp->d_name, "%10[-0-9a-z]_%d.h", typename, &type) != 2) continue; if ((type > 65535) || (type < 0)) @@ -308,6 +327,7 @@ main(int argc, char **argv) { int class_enum = 0; int type_enum = 0; int c; + char buf1[11]; while ((c = getopt(argc, argv, "ct")) != -1) switch (c) { @@ -411,7 +431,7 @@ main(int argc, char **argv) { for (tt = types; tt != NULL ; tt = tt->next) if (tt->type != lasttype) fprintf(stdout, "\t ns_t_%s = %d,%s\n", - tt->typename, + funname(tt->typename, buf1), lasttype = tt->type, tt->next != NULL ? " \\" : ""); fprintf(stdout, "#endif /* TYPEENUM */\n"); @@ -422,7 +442,7 @@ main(int argc, char **argv) { for (cc = classes; cc != NULL; cc = cc->next) fprintf(stdout, "\t ns_c_%s = %d,%s\n", - cc->classname, + funname(cc->classname, buf1), cc->class, cc->next != NULL ? " \\" : ""); fprintf(stdout, "#endif /* CLASSENUM */\n"); diff --git a/lib/dns/rdata.c b/lib/dns/rdata.c index b3dab14ab4..de7b8d4530 100644 --- a/lib/dns/rdata.c +++ b/lib/dns/rdata.c @@ -15,7 +15,7 @@ * SOFTWARE. */ - /* $Id: rdata.c,v 1.21 1999/02/02 05:44:51 marka Exp $ */ + /* $Id: rdata.c,v 1.22 1999/02/02 22:34:20 marka Exp $ */ #include @@ -84,14 +84,12 @@ static const char octdigits[] = "01234567"; #define METATYPES \ { 0, "NONE", META }, \ - { 23, "NSAP-PTR", RESERVED }, \ { 31, "EID", RESERVED }, \ { 32, "NIMLOC", RESERVED }, \ { 34, "ATMA", RESERVED }, \ { 100, "UINFO", RESERVED }, \ { 101, "UID", RESERVED }, \ { 102, "GID", RESERVED }, \ - { 103, "UNSPEC", RESERVED }, \ { 249, "TKEY", META }, \ { 250, "TSIG", META }, \ { 251, "IXFR", META }, \ diff --git a/lib/dns/rdata/in_1/nsap-ptr_23.c b/lib/dns/rdata/in_1/nsap-ptr_23.c new file mode 100644 index 0000000000..41f1922188 --- /dev/null +++ b/lib/dns/rdata/in_1/nsap-ptr_23.c @@ -0,0 +1,148 @@ +/* + * Copyright (C) 1999 Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + + /* $Id: nsap-ptr_23.c,v 1.1 1999/02/02 22:34:20 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); + + 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); + + 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_compare(&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 */ diff --git a/lib/dns/rdata/in_1/nsap-ptr_23.h b/lib/dns/rdata/in_1/nsap-ptr_23.h new file mode 100644 index 0000000000..5e25a2cc9d --- /dev/null +++ b/lib/dns/rdata/in_1/nsap-ptr_23.h @@ -0,0 +1,148 @@ +/* + * Copyright (C) 1999 Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + + /* $Id: nsap-ptr_23.h,v 1.1 1999/02/02 22:34:20 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); + + 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); + + 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_compare(&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 */