From: Mark Andrews Date: Tue, 21 May 2002 06:12:45 +0000 (+0000) Subject: 1297. [func] You can now create your own customised printing X-Git-Tag: v9.0.1^2~8357 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=b9efcf0a377381b29960137e54ecaf4db85a35c8;p=thirdparty%2Fbind9.git 1297. [func] You can now create your own customised printing styles: dns_master_stylecreate() and dns_master_styledestroy(). --- diff --git a/CHANGES b/CHANGES index 61c909d32ef..1c13fafce43 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +1297. [func] You can now create your own customised printing + styles: dns_master_stylecreate() and + dns_master_styledestroy(). + 1296. [bug] libbind: const pointer conficts in res_debug.c. 1295. [port] libbind: hpux: treat all hpux systems as BIG_ENDIAN. diff --git a/lib/dns/include/dns/masterdump.h b/lib/dns/include/dns/masterdump.h index d779525df90..17687afdb58 100644 --- a/lib/dns/include/dns/masterdump.h +++ b/lib/dns/include/dns/masterdump.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: masterdump.h,v 1.27 2002/02/20 03:34:31 marka Exp $ */ +/* $Id: masterdump.h,v 1.28 2002/05/21 06:12:45 marka Exp $ */ #ifndef DNS_MASTERDUMP_H #define DNS_MASTERDUMP_H 1 @@ -34,14 +34,66 @@ *** Types ***/ +typedef struct dns_master_style dns_master_style_t; + +/*** + *** Definitions + ***/ + /* - * Style options for masterfile dumps. This struct is currently - * opaque, so applications cannot define their own style but have - * to choose a predefined style. A more flexible interface may - * be exported in the future. + * Flags affecting master file formatting. Flags 0x0000FFFF + * define the formatting of the rdata part and are defined in + * rdata.h. */ -typedef struct dns_master_style dns_master_style_t; +/* Omit the owner name when possible. */ +#define DNS_STYLEFLAG_OMIT_OWNER 0x00010000U + +/* + * Omit the TTL when possible. If DNS_STYLEFLAG_TTL is + * also set, this means no TTLs are ever printed + * because $TTL directives are generated before every + * change in the TTL. In this case, no columns need to + * be reserved for the TTL. Master files generated with + * these options will be rejected by BIND 4.x because it + * does not recognize the $TTL directive. + * + * If DNS_STYLEFLAG_TTL is not also set, the TTL will be + * omitted when it is equal to the previous TTL. + * This is correct according to RFC1035, but the + * TTLs may be silently misinterpreted by older + * versions of BIND which use the SOA MINTTL as a + * default TTL value. + */ +#define DNS_STYLEFLAG_OMIT_TTL 0x00020000U + +/* Omit the class when possible. */ +#define DNS_STYLEFLAG_OMIT_CLASS 0x00040000U + +/* Output $TTL directives. */ +#define DNS_STYLEFLAG_TTL 0x00080000U + +/* + * Output $ORIGIN directives and print owner names relative to + * the origin when possible. + */ +#define DNS_STYLEFLAG_REL_OWNER 0x00100000U + +/* Print domain names in RR data in relative form when possible. + For this to take effect, DNS_STYLEFLAG_REL_OWNER must also be set. */ +#define DNS_STYLEFLAG_REL_DATA 0x00200000U + +/* Print the trust level of each rdataset. */ +#define DNS_STYLEFLAG_TRUST 0x00400000U + +/* Print negative caching entries. */ +#define DNS_STYLEFLAG_NCACHE 0x00800000U + +/* Never print the TTL */ +#define DNS_STYLEFLAG_NO_TTL 0x01000000U + +/* Never print the CLASS */ +#define DNS_STYLEFLAG_NO_CLASS 0x02000000U ISC_LANG_BEGINDECLS @@ -230,6 +282,16 @@ dns_master_dumpnode(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node, dns_name_t *name, const dns_master_style_t *style, const char *filename); +isc_result_t +dns_master_stylecreate(dns_master_style_t **style, unsigned int flags, + unsigned int ttl_column, unsigned int class_column, + unsigned int type_column, unsigned int rdata_column, + unsigned int line_length, unsigned int tab_width, + isc_mem_t *mctx); + +void +dns_master_styledestroy(dns_master_style_t **style, isc_mem_t *mctx); + ISC_LANG_ENDDECLS #endif /* DNS_MASTERDUMP_H */ diff --git a/lib/dns/masterdump.c b/lib/dns/masterdump.c index d0e5b0ccccd..bfae35b290c 100644 --- a/lib/dns/masterdump.c +++ b/lib/dns/masterdump.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: masterdump.c,v 1.64 2001/11/19 21:34:31 gson Exp $ */ +/* $Id: masterdump.c,v 1.65 2002/05/21 06:12:44 marka Exp $ */ #include @@ -64,56 +64,6 @@ struct dns_master_style { unsigned int tab_width; }; -/* - * Flags affecting master file formatting. Flags 0x0000FFFF - * define the formatting of the rdata part and are defined in - * rdata.h. - */ - -/* Omit the owner name when possible. */ -#define DNS_STYLEFLAG_OMIT_OWNER 0x00010000U - -/* - * Omit the TTL when possible. If DNS_STYLEFLAG_TTL is - * also set, this means no TTLs are ever printed - * because $TTL directives are generated before every - * change in the TTL. In this case, no columns need to - * be reserved for the TTL. Master files generated with - * these options will be rejected by BIND 4.x because it - * does not recognize the $TTL directive. - * - * If DNS_STYLEFLAG_TTL is not also set, the TTL will be - * omitted when it is equal to the previous TTL. - * This is correct according to RFC1035, but the - * TTLs may be silently misinterpreted by older - * versions of BIND which use the SOA MINTTL as a - * default TTL value. - */ -#define DNS_STYLEFLAG_OMIT_TTL 0x00020000U - -/* Omit the class when possible. */ -#define DNS_STYLEFLAG_OMIT_CLASS 0x00040000U - -/* Output $TTL directives. */ -#define DNS_STYLEFLAG_TTL 0x00080000U - -/* - * Output $ORIGIN directives and print owner names relative to - * the origin when possible. - */ -#define DNS_STYLEFLAG_REL_OWNER 0x00100000U - -/* Print domain names in RR data in relative form when possible. - For this to take effect, DNS_STYLEFLAG_REL_OWNER must also be set. */ -#define DNS_STYLEFLAG_REL_DATA 0x00200000U - -/* Print the trust level of each rdataset. */ -#define DNS_STYLEFLAG_TRUST 0x00400000U - -/* Print negative caching entries. */ -#define DNS_STYLEFLAG_NCACHE 0x00800000U - - /* * The maximum length of the newline+indentation that is output * when inserting a line break in an RR. This effectively puts an @@ -176,7 +126,6 @@ dns_master_style_simple = { 24, 32, 32, 40, 80, 8 }; - /* * A style suitable for dns_rdataset_totext(). */ @@ -414,9 +363,10 @@ rdataset_totext(dns_rdataset_t *rdataset, /* * TTL. */ - if (! ((ctx->style.flags & DNS_STYLEFLAG_OMIT_TTL) != 0 && - current_ttl_valid && - rdataset->ttl == current_ttl)) + if ((ctx->style.flags & DNS_STYLEFLAG_NO_TTL) == 0 && + !((ctx->style.flags & DNS_STYLEFLAG_OMIT_TTL) != 0 && + current_ttl_valid && + rdataset->ttl == current_ttl)) { char ttlbuf[64]; isc_region_t r; @@ -445,8 +395,9 @@ rdataset_totext(dns_rdataset_t *rdataset, /* * Class. */ - if ((ctx->style.flags & DNS_STYLEFLAG_OMIT_CLASS) == 0 || - ctx->class_printed == ISC_FALSE) + if ((ctx->style.flags & DNS_STYLEFLAG_NO_CLASS) == 0 && + ((ctx->style.flags & DNS_STYLEFLAG_OMIT_CLASS) == 0 || + ctx->class_printed == ISC_FALSE)) { unsigned int class_start; INDENT_TO(class_column); @@ -1443,3 +1394,40 @@ dns_master_dumpnode(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version, return (result); } + +isc_result_t +dns_master_stylecreate(dns_master_style_t **stylep, unsigned int flags, + unsigned int ttl_column, unsigned int class_column, + unsigned int type_column, unsigned int rdata_column, + unsigned int line_length, unsigned int tab_width, + isc_mem_t *mctx) +{ + dns_master_style_t *style; + + REQUIRE(stylep != NULL && *stylep == NULL); + style = isc_mem_get(mctx, sizeof(*style)); + if (style == NULL) + return (ISC_R_NOMEMORY); + + style->flags = flags; + style->ttl_column = ttl_column; + style->class_column = class_column; + style->type_column = type_column; + style->rdata_column = rdata_column; + style->line_length = line_length; + style->tab_width = tab_width; + + *stylep = style; + return (ISC_R_SUCCESS); +} + +void +dns_master_styledestroy(dns_master_style_t **stylep, isc_mem_t *mctx) { + dns_master_style_t *style; + + REQUIRE(stylep != NULL && *stylep != NULL); + style = *stylep; + *stylep = NULL; + isc_mem_put(mctx, style, sizeof(*style)); +} +