decompression revision 40f53fa8d9c6a4fc38c0014495e7a42b08f52481
7a8401ce858002b67e8f4198fde45a1562696ccbChristian MaederCopyright (C) 1999, 2000 Internet Software Consortium.
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens ElknerSee COPYRIGHT in the source root or http://www.isc.org/copyright for terms.
e071fb22ea9923a2a4ff41184d80ca46b55ee932Till Mossakowski
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder Name Decompression
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu
2eeec5240b424984e3ee26296da1eeab6c6d739eChristian Maeder $Id: decompression,v 1.5 2000/08/01 01:18:09 tale Exp $
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski
ab419eb9bb19c32515fb35793f1192a86c74712eTill MossakowskiOverview.
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder There are 4 type of compression: global 14 bit, global 16 bit,
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski local 14 bit and local 16 bit.
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski In general the resolver / nameserver should accept any compression
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski method at any time regardless of whether it was legal to
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski send it. This fits with the priciple of being liberal with
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski what you accept and strict with what you send.
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski There are a few cases where it does not make sence to accept
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski compression pointers of a given type. i.e. the first domain name
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski in a message, local compression pointers in the ownername of a RR
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski or in a question.
35db0960aa2e2a13652381c756fae5fb2b27213bChristian Maeder
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski When performing regression testing however we should be as strict
88c66e48620750c42b94db9feb01b42ae23dba97Till Mossakowski as possible. Hence we need to be able modifiy the behaviour of the
ce281f61edfa8aa168c586511b0d1f98ca106cd7Christian Maeder decompression routines.
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder To be able to decompress a domain name we need some or all of the
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder following pieces of information.
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder
81f49ee02aaa3bc870401f8883bf52742eb3ea7aJonathan von Schroeder 1. where the message starts.
81f49ee02aaa3bc870401f8883bf52742eb3ea7aJonathan von Schroeder 2. where the current rdata starts in the message (local compression).
81f49ee02aaa3bc870401f8883bf52742eb3ea7aJonathan von Schroeder 3. what the current owner name is (local compression).
414ffa281d82f05a2d742c702f8e06b0cb05b229Christian Maeder 4. where the domainname we are decompressing starts.
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder 5. what are allowable decompression method. These vary across type
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder and edn version.
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian MaederImplementation:
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_rdata_fromwire will set the allowed decompression methods allowed
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder by looking at edns, strict and the type values.
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian MaederTypes:
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder struct dns_decompress {
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder unsigned int magic;
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder unsigned int allowed;
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski int edns;
414ffa281d82f05a2d742c702f8e06b0cb05b229Christian Maeder dns_name_t owner_name;
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder unsigned int rdata;
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder isc_boolean_t strict;
e953bea49e7f0e1a43bccf2a66c5e2a2b50848e0Christian Maeder }
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
76647324ed70f33b95a881b536d883daccf9568dChristian MaederFunctions:
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder void
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_decompress_init(dns_decompress_t *dctx, int edns,
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski isc_boolean_t strict);
4ac9fad8454f66963e8985a41e061653147d4d60Christian Maeder initalise dctx
4ac9fad8454f66963e8985a41e061653147d4d60Christian Maeder dctx->ownername is invalidated
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski
414ffa281d82f05a2d742c702f8e06b0cb05b229Christian Maeder void
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_decompress_localinit(dns_decompress_t *dctx, dns_name_t *name,
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder isc_buffer_t *source);
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder initalise dctx->ownername
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder record source->current to dctx->rdata
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder void
4ac9fad8454f66963e8985a41e061653147d4d60Christian Maeder dns_decompress_invalidate(dns_decompress_t *dctx);
4ac9fad8454f66963e8985a41e061653147d4d60Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder invalidate dctx
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder void
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_decompress_localinvalidate(dns_decompress_t *dctx);
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski invalidate dctx->ownername
414ffa281d82f05a2d742c702f8e06b0cb05b229Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder void
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_decompress_setmethods(dns_decompress_t *dctx, unsigned int allowed);
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski
414ffa281d82f05a2d742c702f8e06b0cb05b229Christian Maeder sets dctx->allowed
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder unsigned int
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_decompress_getmethods(dns_decompress_t *dctx);
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder returns dctx->allowed
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder int
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_decompress_edns(dns_decompress_t *dctx);
4ac9fad8454f66963e8985a41e061653147d4d60Christian Maeder
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski returns dctx->edns
414ffa281d82f05a2d742c702f8e06b0cb05b229Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder isc_boolean_t
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_decompress_strict(dns_decompress_t *dctx);
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder returns dctx->strict
ab419eb9bb19c32515fb35793f1192a86c74712eTill Mossakowski
414ffa281d82f05a2d742c702f8e06b0cb05b229Christian Maeder dns_result_t
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_name_fromwire(dns_name_t *name, isc_buffer_t *source,
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder dns_decompress_t *dctx, isc_boolean_t downcase,
51c96f356eaa4600d90dbddf7f1750295cc923a9Christian Maeder isc_buffer_t *target)
4ac9fad8454f66963e8985a41e061653147d4d60Christian Maeder