Update of /cvsroot/naviserver/modules/nsdns
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14829
Modified Files:
dns.c dns.h
Log Message:
NAPTR bugfixes
Index: dns.c
===================================================================
RCS file: /cvsroot/naviserver/modules/nsdns/dns.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** dns.c 17 Jun 2005 04:44:58 -0000 1.6
--- dns.c 17 Jun 2005 15:00:23 -0000 1.7
***************
*** 469,474 ****
y->data.naptr->flags = ns_strcopy(flags);
y->data.naptr->service = ns_strcopy(service);
! y->data.naptr->regexp = ns_strcopy(regexp ? regexp : "");
! y->data.naptr->replace = ns_strcopy(replace ? replace : "");
y->len = 2;
if(y->data.name) y->len += strlen(y->data.name);
--- 469,474 ----
y->data.naptr->flags = ns_strcopy(flags);
y->data.naptr->service = ns_strcopy(service);
! y->data.naptr->regexp = ns_strcopy(regexp && *regexp ? regexp : 0);
! y->data.naptr->replace = ns_strcopy(replace && *replace ? replace : 0);
y->len = 2;
if(y->data.name) y->len += strlen(y->data.name);
***************
*** 651,654 ****
--- 651,668 ----
int
+ dnsParseString(dnsPacket *pkt,char **buf)
+ {
+ int len;
+
+ if(!(len = *pkt->buf.ptr++)) return 0;
+ if(pkt->buf.ptr+len > pkt->buf.data+pkt->buf.allocated) return -1;
+ *buf = ns_malloc(len+1);
+ strncpy(*buf,pkt->buf.ptr,len);
+ (*buf)[len] = 0;
+ pkt->buf.ptr += len;
+ return 0;
+ }
+
+ int
dnsParseName(dnsPacket *pkt,char **ptr,char *buf,int buflen,int pos,int level)
{
***************
*** 790,801 ****
pkt->buf.ptr += 2;
/* flags */
! if(dnsParseName(pkt,&pkt->buf.ptr,name,255,0,0) < 0) goto err;
! y->data.naptr->flags = ns_strdup(name);
/* service */
! if(dnsParseName(pkt,&pkt->buf.ptr,name,255,0,0) < 0) goto err;
! y->data.naptr->service = ns_strdup(name);
/* regexp */
! if(dnsParseName(pkt,&pkt->buf.ptr,name,255,0,0) < 0) goto err;
! y->data.naptr->regexp = ns_strdup(name);
/* replace */
if(dnsParseName(pkt,&pkt->buf.ptr,name,255,0,0) < 0) goto err;
--- 804,821 ----
pkt->buf.ptr += 2;
/* flags */
! if(dnsParseString(pkt,&y->data.naptr->flags) < 0) {
! strcpy(name,"invalid NAPTR flags len");
! goto err;
! }
/* service */
! if(dnsParseString(pkt,&y->data.naptr->service) < 0) {
! strcpy(name,"invalid NAPTR service len");
! goto err;
! }
/* regexp */
! if(dnsParseString(pkt,&y->data.naptr->regexp) < 0) {
! strcpy(name,"invalid NAPTR regexp len");
! goto err;
! }
/* replace */
if(dnsParseName(pkt,&pkt->buf.ptr,name,255,0,0) < 0) goto err;
Index: dns.h
===================================================================
RCS file: /cvsroot/naviserver/modules/nsdns/dns.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** dns.h 17 Jun 2005 04:44:58 -0000 1.5
--- dns.h 17 Jun 2005 15:00:39 -0000 1.6
***************
*** 184,187 ****
--- 184,188 ----
dnsPacket *dnsParsePacket(unsigned char *packet,int size);
int dnsParseName(dnsPacket *pkt,char **ptr,char *buf,int len,int pos,int level);
+ int dnsParseString(dnsPacket *pkt,char **buf);
void dnsEncodeName(dnsPacket *pkt,char *name,int compress);
void dnsEncodeGrow(dnsPacket *pkt,unsigned int size,char *proc);
|