]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
Fixed the network error. Didn't set the from_len in lua and then called
authorMiek Gieben <miekg@NLnetLabs.nl>
Thu, 25 Aug 2005 09:45:18 +0000 (09:45 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Thu, 25 Aug 2005 09:45:18 +0000 (09:45 +0000)
recvfrom with undef &fromlen. also some lenght issues were fixed in ldns
itself, which could also lead to overflows

lua/lua-rns.c
lua/lua-todo [deleted file]
lua/rns.lua
rdata.c
tests/Makefile.in

index c47e996531302a6103b93ca4db1db62dc3720cec..e20df45402b60644c0aa3f8e1ef96c7614c251d0 100644 (file)
@@ -282,7 +282,7 @@ static int
 l_write_wire_udp(lua_State *L)
 {
        int sockfd = (int)lua_tonumber(L, 1);
-       ldns_buffer *pktbuf = (ldns_buffer*) lua_touserdata(L, 2);
+       ldns_buffer *pktbuf = (ldns_buffer*)lua_touserdata(L, 2);
        ldns_rdf *rdf_to = (ldns_rdf*)lua_touserdata(L, 3);
        uint16_t port = (uint16_t)lua_tonumber(L, 4); /* port number */
 
@@ -312,22 +312,22 @@ l_read_wire_udp(lua_State *L)
        size_t size;
        uint8_t *pktbuf_raw;
        ldns_buffer *pktbuf;
-       /* returned frm wire */
-       socklen_t from_size;
        struct sockaddr_storage *from;
+       socklen_t from_len;
                
        from = LDNS_MALLOC(struct sockaddr_storage);
        if (!from) {
                return 0;
        }
        (void)memset(from, 0, sizeof(struct sockaddr_storage));
+       from_len = sizeof(struct sockaddr_storage); /* set to predefined state */
 
        pktbuf = ldns_buffer_new(LDNS_MIN_BUFLEN); /* this /should/ happen in buf_new_frm_data */
        if (!pktbuf) {
                return 0;
        }
        
-       pktbuf_raw = ldns_udp_read_wire(sockfd, &size, from, &from_size);
+       pktbuf_raw = ldns_udp_read_wire(sockfd, &size, from, &from_len);
 
        if (!pktbuf_raw) {
                return 0;
@@ -335,11 +335,11 @@ l_read_wire_udp(lua_State *L)
        ldns_buffer_new_frm_data(pktbuf, pktbuf_raw, size);
        
        /* push our buffer onto the stack */
-       /* stack func lua cal in same order buf, from, size = */
+       /* stack func lua cal in same order buf, from */
        lua_pushlightuserdata(L, pktbuf);
        lua_pushlightuserdata(L, from);
-       lua_pushnumber(L, (lua_Number)from_size);
-       return 3;
+       /* lua_pushnumber(L, (lua_Number)from_size); */
+       return 2;
 }
 
 /* header bits */
diff --git a/lua/lua-todo b/lua/lua-todo
deleted file mode 100644 (file)
index f86b2ff..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-There is a strange networking problem, calling udp_read more than once
-gives an error 
-upd.read (with a dot) doesn't work at all.
-
-I suspect these 2 errors are related. It may be the case this is a bug
-in the core ldns
index 011d5848707e94d96e27ec9ee8f343224177eaf6..a0e86e393bc52619681896e223c4709600893865 100644 (file)
@@ -22,8 +22,8 @@ socket = udp.open(rdf_ip, 5353)
 while true do
 
 -- read from the socket, this blocks...
-wirebuf, sockaddr_from, fromlen  = udp_read(socket) -- this works
---wirebuf, sockaddr_from, fromlen  = udp.read(socket) -- this doesn't
+wirebuf, sockaddr_from  = udp_read(socket) -- this works
+--wirebuf, sockaddr_from  = udp.read(socket) -- this doesn't
 
 -- wrap this in new functions
 if wirebuf == nil then
diff --git a/rdata.c b/rdata.c
index b2dad32ac077700b648699b64993c2acd84477cf..0c9892e45e398bfa81498196057296ba0b4bbc88 100644 (file)
--- a/rdata.c
+++ b/rdata.c
@@ -135,12 +135,6 @@ ldns_rdf2native_sockaddr_storage(ldns_rdf *rd, uint16_t port, size_t *size)
        struct sockaddr_in  *data_in;
        struct sockaddr_in6 *data_in6;
 
-/*
- * DEAD CODE???
-       struct in_addr *b;
-       b = (struct in_addr*)rd->_data;
-*/
-       
        data = LDNS_MALLOC(struct sockaddr_storage);
        if (!data) {
                return NULL;
@@ -174,7 +168,6 @@ ldns_rdf2native_sockaddr_storage(ldns_rdf *rd, uint16_t port, size_t *size)
 ldns_rdf *
 ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port)
 {
-
        ldns_rdf *addr;
        struct sockaddr_in *data_in;
        struct sockaddr_in6 *data_in6;
@@ -183,19 +176,19 @@ ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port)
                case AF_INET:
                        data_in = (struct sockaddr_in*)sock;
                        if (port) {
-                               *port = ntohs(data_in->sin_port);
+                               *port = ntohs((uint16_t)data_in->sin_port);
                        }
                        addr = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_A, 
-                                       sizeof(struct sockaddr_in),
+                                       LDNS_IP4ADDRLEN, 
                                        &data_in->sin_addr);
                        break;
                case AF_INET6:
                        data_in6 = (struct sockaddr_in6*)sock;
                        if (port) {
-                               *port = ntohs(data_in6->sin6_port);
+                               *port = ntohs((uint16_t)data_in6->sin6_port);
                        }
                        addr = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_AAAA,
-                                       sizeof(struct sockaddr_in6),
+                                       LDNS_IP6ADDRLEN,
                                        &data_in6->sin6_addr);
                        break;
                default:
index 005bf8e4089ffb334d6379d976a03eedf5d9b83e..3b563f33112cb3c6e43a7843b0c9a24651eabbac 100644 (file)
@@ -20,7 +20,7 @@ LINK            = $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS)
 HEADER         = config.h
 TESTS          = run-test0 run-test7 run-test18 run-test19 run-test20 \
                        dname-label-test notify run-test-read-zone \
-                       rrsig-test serial
+                       rrsig-test serial server
 
 .PHONY:        all clean realclean
 
@@ -59,6 +59,9 @@ notify:       notify.o
 serial:        serial.o
                $(LINK) -o $@ $+
 
+server:        server.o
+               $(LINK) -o $@ $+
+
 ## implicit rule
 %.o:    %.c $(HEADER)
        $(COMPILE) -c $<