From: Miek Gieben Date: Wed, 15 Dec 2004 12:34:17 +0000 (+0000) Subject: error.h started, used in rdata.c _ldns_octet X-Git-Tag: release-0.50~678 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=17bf6afe32b42f227242ae478ced20717fa87901;p=thirdparty%2Fldns.git error.h started, used in rdata.c _ldns_octet --- diff --git a/Makefile.in b/Makefile.in index 2be3c345..390d6ff3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -21,7 +21,8 @@ LINTFLAGS = +quiet +posixlib -weak -warnposix -unrecog #INSTALL_PROGRAM = $(INSTALL) LIBDNS_SOURCES=rdata.c util.c rr.c packet.c -LIBDNS_HEADERS=rdata.h prototype.h rr.h packet.h util.h +LIBDNS_HEADERS=rdata.h prototype.h rr.h packet.h util.h \ +error.h LIBDNS_OBJECTS=$(LIBDNS_SOURCES:.c=.o) ALL_SOURCES=run-test0.c $(LIBDNS_SOURCES) diff --git a/error.h b/error.h new file mode 100644 index 00000000..adb977fa --- /dev/null +++ b/error.h @@ -0,0 +1,27 @@ +/* + * error.h + * + * error reporting function and definition + * + * a Net::DNS like library for C + * + * (c) NLnet Labs, 2004 + * + * See the file LICENSE for the license + */ + +#ifndef _ERROR_H +#define _ERORR_H + +/* we do negative error codes? */ +#define __X -1 + +enum ldns_enum_status_type +{ + EEMPTY_LABEL = 1 * __X, + EDDD_OVERFLOW = 2 * __X + +}; +typedef enum ldns_enum_status_type ldns_t_status; + +#endif /* _ERROR_H */ diff --git a/libdns.vim b/libdns.vim index e8528539..30e361a2 100644 --- a/libdns.vim +++ b/libdns.vim @@ -1,4 +1,3 @@ -" source /home/miekg/.vim/syntax/ldns.vim " Vim syntax file " Language: C libdns " Maintainer: miekg @@ -12,6 +11,10 @@ syn keyword ldnsType ldns_rr_descriptor_type syn keyword ldnsType ldns_header_type syn keyword ldnsType ldns_packet_type syn keyword ldnsType t_rrset +syn keyword ldnsType true +syn keyword ldnsType false + +" ldns/rr.h syn keyword ldnsConstant TYPE_A syn keyword ldnsConstant TYPE_NS syn keyword ldnsConstant TYPE_MD @@ -61,6 +64,66 @@ syn keyword ldnsConstant TYPE_ANY syn keyword ldnsConstant MAXLABELLEN syn keyword ldnsConstant MAXDOMAINLEN + +syn keyword ldnsMacro QHEADERSZ +syn keyword ldnsMacro RD_MASK +syn keyword ldnsMacro RD_SHIFT +syn keyword ldnsMacro RD +syn keyword ldnsMacro RD_SET +syn keyword ldnsMacro RD_CLR +syn keyword ldnsMacro TC_MASK +syn keyword ldnsMacro TC_SHIFT +syn keyword ldnsMacro TC +syn keyword ldnsMacro TC_SET +syn keyword ldnsMacro TC_CLR +syn keyword ldnsMacro AA_MASK +syn keyword ldnsMacro AA_SHIFT +syn keyword ldnsMacro AA +syn keyword ldnsMacro AA_SET +syn keyword ldnsMacro AA_CLR +syn keyword ldnsMacro OPCODE_MASK +syn keyword ldnsMacro OPCODE_SHIFT +syn keyword ldnsMacro OPCODE +syn keyword ldnsMacro OPCODE_SET +syn keyword ldnsMacro QR_MASK +syn keyword ldnsMacro QR_SHIFT +syn keyword ldnsMacro QR +syn keyword ldnsMacro QR_SET +syn keyword ldnsMacro QR_CLR +syn keyword ldnsMacro RCODE_MASK +syn keyword ldnsMacro RCODE_SHIFT +syn keyword ldnsMacro RCODE +syn keyword ldnsMacro RCODE_SET +syn keyword ldnsMacro CD_MASK +syn keyword ldnsMacro CD_SHIFT +syn keyword ldnsMacro CD +syn keyword ldnsMacro CD_SET +syn keyword ldnsMacro CD_CLR +syn keyword ldnsMacro AD_MASK +syn keyword ldnsMacro AD_SHIFT +syn keyword ldnsMacro AD +syn keyword ldnsMacro AD_SET +syn keyword ldnsMacro AD_CLR +syn keyword ldnsMacro Z_MASK +syn keyword ldnsMacro Z_SHIFT +syn keyword ldnsMacro Z +syn keyword ldnsMacro Z_SET +syn keyword ldnsMacro Z_CLR +syn keyword ldnsMacro RA_MASK +syn keyword ldnsMacro RA_SHIFT +syn keyword ldnsMacro RA +syn keyword ldnsMacro RA_SET +syn keyword ldnsMacro RA_CLR +syn keyword ldnsMacro ID +syn keyword ldnsMacro QDCOUNT_OFF +syn keyword ldnsMacro QDCOUNT +syn keyword ldnsMacro ANCOUNT_OFF +syn keyword ldnsMacro ANCOUNT +syn keyword ldnsMacro NSCOUNT_OFF +syn keyword ldnsMacro NSCOUNT +syn keyword ldnsMacro ARCOUNT_OFF +syn keyword ldnsMacro ARCOUNT + " Default highlighting command -nargs=+ HiLink hi def link HiLink ldnsType Type diff --git a/rdata.c b/rdata.c index 1de50aab..69feb92a 100644 --- a/rdata.c +++ b/rdata.c @@ -15,6 +15,7 @@ #include #include "util.h" +#include "error.h" /* Access functions * do this as functions to get type checking @@ -97,3 +98,70 @@ _ldns_rd_field_destroy(t_rdata_field *rd) /* empty */ } +/** + * remove \DDD, \[space] and other escapes from the input + * See RFC 1035, section 5.1 + * Return the lenght of the string or a negative error + * code + */ +ldns_t_status +_ldns_octet(char *word) +{ + char *s; char *p; + unsigned int length = 0; + + for (s = p = word; *s != '\0'; s++,p++) { + switch (*s) { + case '.': + if (s[1] == '.') { + fprintf(stderr,"Empty label"); + return EEMPTY_LABEL; + } + *p = *s; + length++; + break; + case '\\': + if ('0' <= s[1] && s[1] <= '9' && + '0' <= s[2] && s[2] <= '9' && + '0' <= s[3] && s[3] <= '9') + { + /* \DDD seen */ + int val = ((s[1] - '0') * 100 + + (s[2] - '0') * 10 + (s[3] - '0')); + + if (0 <= val && val <= 255) { + /* this also handles \0 */ + s += 3; + *p = val; + length++; + } else { + fprintf(stderr,"ASCII \\DDD overflow"); + } + } else { + /* an espaced character, like \ ? + * remove the '\' keep the rest */ + *p = *++s; + length++; + } + break; + case '\"': + /* non quoted " Is either first or the last character in + * the string */ + + *p = *++s; /* skip it */ + length++; + /* I'm not sure if this is needed in libdns... MG */ + if ( *s == '\0' ) { + /* ok, it was the last one */ + *p = '\0'; return length; + } + break; + default: + *p = *s; + length++; + break; + } + } + *p = '\0'; + return length; +}