From: Vlad S. <ser...@us...> - 2005-06-17 04:45:07
|
Update of /cvsroot/naviserver/modules/nsdns In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2287 Modified Files: dns.c dns.h Log Message: naptr support Index: dns.c =================================================================== RCS file: /cvsroot/naviserver/modules/nsdns/dns.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** dns.c 17 Jun 2005 02:35:53 -0000 1.5 --- dns.c 17 Jun 2005 04:44:58 -0000 1.6 *************** *** 469,474 **** y->data.naptr->flags = ns_strcopy(flags); y->data.naptr->service = ns_strcopy(service); ! y->data.naptr->regexp = ns_strcopy(regexp); ! y->data.naptr->replace = ns_strcopy(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 : ""); ! y->data.naptr->replace = ns_strcopy(replace ? replace : ""); y->len = 2; if(y->data.name) y->len += strlen(y->data.name); *************** *** 871,875 **** void ! dnsEncodeName(dnsPacket *pkt,char *name) { dnsName *nm; --- 871,875 ---- void ! dnsEncodeName(dnsPacket *pkt,char *name,int compress) { dnsName *nm; *************** *** 883,887 **** if(!len || len > 63) break; // Find already saved domain name ! for(nm = pkt->nmlist;nm;nm = nm->next) { if(!strcasecmp(nm->name,&name[k])) { dnsEncodePtr(pkt,nm->offset); --- 883,887 ---- if(!len || len > 63) break; // Find already saved domain name ! for(nm = pkt->nmlist;compress && nm;nm = nm->next) { if(!strcasecmp(nm->name,&name[k])) { dnsEncodePtr(pkt,nm->offset); *************** *** 948,951 **** --- 948,963 ---- void + dnsEncodeString(dnsPacket *pkt,char *str) + { + int len = str ? strlen(str) : 0; + *((unsigned short*)pkt->buf.ptr) = len; + pkt->buf.ptr++; + if(len) { + memcpy(pkt->buf.ptr,str,(unsigned)len); + pkt->buf.ptr += len; + } + } + + void dnsEncodeBegin(dnsPacket *pkt) { *************** *** 967,971 **** dnsEncodeGrow(pkt,12,"pkt:hdr"); for(;list;list = list->next) { ! dnsEncodeName(pkt,list->name); dnsEncodeGrow(pkt,16,"pkt:data"); dnsEncodeShort(pkt,list->type); --- 979,983 ---- dnsEncodeGrow(pkt,12,"pkt:hdr"); for(;list;list = list->next) { ! dnsEncodeName(pkt,list->name,1); dnsEncodeGrow(pkt,16,"pkt:data"); dnsEncodeShort(pkt,list->type); *************** *** 979,987 **** case DNS_TYPE_MX: dnsEncodeShort(pkt,list->data.mx->preference); ! dnsEncodeName(pkt,list->data.mx->name); break; case DNS_TYPE_SOA: ! dnsEncodeName(pkt,list->data.soa->mname); ! dnsEncodeName(pkt,list->data.soa->rname); dnsEncodeGrow(pkt,20,"pkt:soa"); dnsEncodeLong(pkt,list->data.soa->serial); --- 991,999 ---- case DNS_TYPE_MX: dnsEncodeShort(pkt,list->data.mx->preference); ! dnsEncodeName(pkt,list->data.mx->name,1); break; case DNS_TYPE_SOA: ! dnsEncodeName(pkt,list->data.soa->mname,1); ! dnsEncodeName(pkt,list->data.soa->rname,1); dnsEncodeGrow(pkt,20,"pkt:soa"); dnsEncodeLong(pkt,list->data.soa->serial); *************** *** 994,1010 **** case DNS_TYPE_CNAME: case DNS_TYPE_PTR: ! dnsEncodeName(pkt,list->data.name); break; case DNS_TYPE_NAPTR: dnsEncodeShort(pkt,list->data.naptr->order); dnsEncodeShort(pkt,list->data.naptr->preference); ! dnsEncodeGrow(pkt,64,"pkt:naptr"); ! dnsEncodeName(pkt,list->data.naptr->flags); ! dnsEncodeGrow(pkt,64,"pkt:naptr"); ! dnsEncodeName(pkt,list->data.naptr->service); ! dnsEncodeGrow(pkt,64,"pkt:naptr"); ! dnsEncodeName(pkt,list->data.naptr->regexp); ! dnsEncodeGrow(pkt,64,"pkt:naptr"); ! dnsEncodeName(pkt,list->data.naptr->replace); break; } --- 1006,1018 ---- case DNS_TYPE_CNAME: case DNS_TYPE_PTR: ! dnsEncodeName(pkt,list->data.name,1); break; case DNS_TYPE_NAPTR: dnsEncodeShort(pkt,list->data.naptr->order); dnsEncodeShort(pkt,list->data.naptr->preference); ! dnsEncodeString(pkt,list->data.naptr->flags); ! dnsEncodeString(pkt,list->data.naptr->service); ! dnsEncodeString(pkt,list->data.naptr->regexp); ! dnsEncodeName(pkt,list->data.naptr->replace,0); break; } *************** *** 1018,1022 **** pkt->buf.ptr = &pkt->buf.data[DNS_HEADER_LEN+2]; /* Encode query part */ ! dnsEncodeName(pkt,pkt->qdlist->name); dnsEncodeShort(pkt,pkt->qdlist->type); dnsEncodeShort(pkt,pkt->qdlist->class); --- 1026,1030 ---- pkt->buf.ptr = &pkt->buf.data[DNS_HEADER_LEN+2]; /* Encode query part */ ! dnsEncodeName(pkt,pkt->qdlist->name,1); dnsEncodeShort(pkt,pkt->qdlist->type); dnsEncodeShort(pkt,pkt->qdlist->class); Index: dns.h =================================================================== RCS file: /cvsroot/naviserver/modules/nsdns/dns.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** dns.h 14 Jun 2005 03:20:38 -0000 1.4 --- dns.h 17 Jun 2005 04:44:58 -0000 1.5 *************** *** 108,112 **** typedef struct _dnsNAPTR { ! struct _dnsNA *next; short order; short preference; --- 108,112 ---- typedef struct _dnsNAPTR { ! struct _dnsNAPTR *next; short order; short preference; *************** *** 184,188 **** dnsPacket *dnsParsePacket(unsigned char *packet,int size); int dnsParseName(dnsPacket *pkt,char **ptr,char *buf,int len,int pos,int level); ! void dnsEncodeName(dnsPacket *pkt,char *name); void dnsEncodeGrow(dnsPacket *pkt,unsigned int size,char *proc); void dnsEncodeHeader(dnsPacket *pkt); --- 184,188 ---- dnsPacket *dnsParsePacket(unsigned char *packet,int size); int dnsParseName(dnsPacket *pkt,char **ptr,char *buf,int len,int pos,int level); ! void dnsEncodeName(dnsPacket *pkt,char *name,int compress); void dnsEncodeGrow(dnsPacket *pkt,unsigned int size,char *proc); void dnsEncodeHeader(dnsPacket *pkt); *************** *** 191,194 **** --- 191,195 ---- void dnsEncodeLong(dnsPacket *pkt,unsigned long num); void dnsEncodeData(dnsPacket *pkt,void *ptr,int len); + void dnsEncodeString(dnsPacket *pkt,char *str); void dnsEncodeObj(dnsPacket *pkt); void dnsEncodeBegin(dnsPacket *pkt); |