Merge branch 'ser_core_cvs' of ssh://git.sip-router.org/sip-router
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Tue, 31 Mar 2009 17:26:41 +0000 (19:26 +0200)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Tue, 31 Mar 2009 17:26:41 +0000 (19:26 +0200)
* 'ser_core_cvs' of ssh://git.sip-router.org/sip-router:
  dns: minor fixes
  Static buffer is resetted before calling the route block -- Thanks to Jan.
  Missing include is added.

Conflicts:
modules/tm/t_suspend.c : sip-router version uses
i                        run_top_route()

modules/tm/t_suspend.c
resolve.c
select_buf.h

index 4a31b80..1c0b729 100644 (file)
@@ -30,6 +30,8 @@
  *
  */
 
+#include "../../select_buf.h" /* reset_static_buffer() */
+
 #include "sip_msg.h"
 #include "t_reply.h"
 #include "h_table.h"
index 8dfde34..b04e629 100644 (file)
--- a/resolve.c
+++ b/resolve.c
@@ -230,6 +230,7 @@ unsigned char* dns_skipname(unsigned char* p, unsigned char* end)
 /* parses the srv record into a srv_rdata structure
  *   msg   - pointer to the dns message
  *   end   - pointer to the end of the message
+ *   eor   - pointer to the end of the record/rdata
  *   rdata - pointer  to the rdata part of the srv answer
  * returns 0 on error, or a dyn. alloc'ed srv_rdata structure */
 /* SRV rdata format:
@@ -248,6 +249,7 @@ unsigned char* dns_skipname(unsigned char* p, unsigned char* end)
  * +----------------+
  */
 struct srv_rdata* dns_srv_parser( unsigned char* msg, unsigned char* end,
+                                                                 unsigned char* eor,
                                                                  unsigned char* rdata)
 {
        struct srv_rdata* srv;
@@ -258,7 +260,7 @@ struct srv_rdata* dns_srv_parser( unsigned char* msg, unsigned char* end,
        char name[MAX_DNS_NAME];
        
        srv=0;
-       if ((rdata+6+1)>end) goto error;
+       if ((rdata+6+1)>eor) goto error;
        
        memcpy((void*)&priority, rdata, 2);
        memcpy((void*)&weight,   rdata+2, 2);
@@ -292,6 +294,7 @@ error:
 /* parses the naptr record into a naptr_rdata structure
  *   msg   - pointer to the dns message
  *   end   - pointer to the end of the message
+ *   eor   - pointer to the end of the record/rdata
  *   rdata - pointer  to the rdata part of the naptr answer
  * returns 0 on error, or a dyn. alloc'ed naptr_rdata structure */
 /* NAPTR rdata format:
@@ -316,7 +319,8 @@ error:
  * +----------------+
  */
 struct naptr_rdata* dns_naptr_parser( unsigned char* msg, unsigned char* end,
-                                                                 unsigned char* rdata)
+                                                                               unsigned char* eor,
+                                                                               unsigned char* rdata)
 {
        struct naptr_rdata* naptr;
        unsigned char* flags;
@@ -331,20 +335,20 @@ struct naptr_rdata* dns_naptr_parser( unsigned char* msg, unsigned char* end,
        char repl[MAX_DNS_NAME];
        
        naptr = 0;
-       if ((rdata + 7 + 1)>end) goto error;
+       if ((rdata + 7 + 1)>eor) goto error;
        
        memcpy((void*)&order, rdata, 2);
        memcpy((void*)&pref, rdata + 2, 2);
        flags_len = rdata[4];
-       if ((rdata + 7 + 1 +  flags_len) > end)
+       if ((rdata + 7 + 1 +  flags_len) > eor)
                goto error;
        flags=rdata+5;
        services_len = rdata[5 + flags_len];
-       if ((rdata + 7 + 1 + flags_len + services_len) > end)
+       if ((rdata + 7 + 1 + flags_len + services_len) > eor)
                goto error;
        services=rdata + 6 + flags_len;
        regexp_len = rdata[6 + flags_len + services_len];
-       if ((rdata + 7 +1 + flags_len + services_len + regexp_len) > end)
+       if ((rdata + 7 +1 + flags_len + services_len + regexp_len) > eor)
                goto error;
        regexp=rdata + 7 + flags_len + services_len;
        rdata = rdata + 7 + flags_len + services_len + regexp_len;
@@ -418,11 +422,11 @@ error:
 /* parses an A record rdata into an a_rdata structure
  * returns 0 on error or a dyn. alloc'ed a_rdata struct
  */
-struct a_rdata* dns_a_parser(unsigned char* rdata, unsigned char* end)
+struct a_rdata* dns_a_parser(unsigned char* rdata, unsigned char* eor)
 {
        struct a_rdata* a;
        
-       if (rdata+4>end) goto error;
+       if (rdata+4>eor) goto error;
        a=(struct a_rdata*)local_malloc(sizeof(struct a_rdata));
        if (a==0){
                LOG(L_ERR, "ERROR: dns_a_parser: out of memory\n");
@@ -438,11 +442,11 @@ error:
 
 /* parses an AAAA (ipv6) record rdata into an aaaa_rdata structure
  * returns 0 on error or a dyn. alloc'ed aaaa_rdata struct */
-struct aaaa_rdata* dns_aaaa_parser(unsigned char* rdata, unsigned char* end)
+struct aaaa_rdata* dns_aaaa_parser(unsigned char* rdata, unsigned char* eor)
 {
        struct aaaa_rdata* aaaa;
        
-       if (rdata+16>end) goto error;
+       if (rdata+16>eor) goto error;
        aaaa=(struct aaaa_rdata*)local_malloc(sizeof(struct aaaa_rdata));
        if (aaaa==0){
                LOG(L_ERR, "ERROR: dns_aaaa_parser: out of memory\n");
@@ -708,7 +712,7 @@ again:
                }
                switch(rtype){
                        case T_SRV:
-                               srv_rd= dns_srv_parser(buff.buff, rd_end, p);
+                               srv_rd= dns_srv_parser(buff.buff, end, rd_end, p);
                                rd->rdata=(void*)srv_rd;
                                if (unlikely(srv_rd==0)) goto error_parse;
                                
@@ -745,13 +749,13 @@ again:
                                last=&(rd->next);
                                break;
                        case T_CNAME:
-                               rd->rdata=(void*) dns_cname_parser(buff.buff, rd_end, p);
+                               rd->rdata=(void*) dns_cname_parser(buff.buff, end, p);
                                if(unlikely(rd->rdata==0)) goto error_parse;
                                *last=rd;
                                last=&(rd->next);
                                break;
                        case T_NAPTR:
-                               rd->rdata=(void*) dns_naptr_parser(buff.buff, rd_end, p);
+                               rd->rdata=(void*)dns_naptr_parser(buff.buff, end, rd_end, p);
                                if(unlikely(rd->rdata==0)) goto error_parse;
                                *last=rd;
                                last=&(rd->next);
index 5e1cbe7..12343ce 100644 (file)
@@ -35,6 +35,8 @@
 #ifndef SELECT_BUFFER_H
 #define SELECT_BUFFER_H
 
+#include "str.h"
+
 /*
  * Request for space from buffer
  *