From: Vlad S. <ser...@us...> - 2005-06-17 15:00:49
|
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); |