Browse Source

[805] Misc fixes

* Close the socket after sending from the creator, so it doesn't leak
  (but it doesn't seem to help :-().
* Correct range for the token numbers, so they are harder to guess
* Set the socket as reuse address
Michal 'vorner' Vaner 13 years ago
parent
commit
01d2bc6d79
2 changed files with 8 additions and 2 deletions
  1. 6 0
      src/bin/sockcreator/sockcreator.cc
  2. 2 2
      src/lib/python/isc/bind10/socket_cache.py

+ 6 - 0
src/bin/sockcreator/sockcreator.cc

@@ -35,6 +35,10 @@ get_sock(const int type, struct sockaddr *bind_addr, const socklen_t addr_len)
     if (sock == -1) {
         return -1;
     }
+    const int on(1);
+    if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) {
+        return -2; // This is part of the binding process, so it's a bind error
+    }
     if (bind(sock, bind_addr, addr_len) == -1) {
         return -2;
     }
@@ -124,6 +128,8 @@ run(const int input_fd, const int output_fd, const get_sock_t get_sock,
                     WRITE("S", 1);
                     // FIXME: Check the output and write a test for it
                     send_fd(output_fd, result);
+                    // Don't leak the socket
+                    close(result);
                 } else {
                     WRITE("E", 1);
                     switch (result) {

+ 2 - 2
src/lib/python/isc/bind10/socket_cache.py

@@ -205,9 +205,9 @@ class Cache:
             raise ShareError("Cached socket not compatible with mode " +
                              share_mode + " and name " + share_name)
         # Grab yet unused token
-        token = 't' + str(random.randint(0, 2^32-1))
+        token = 't' + str(random.randint(0, 2 ** 32-1))
         while token in self._live_tokens:
-            token = 't' + str(random.randint(0, 2^32-1))
+            token = 't' + str(random.randint(0, 2 ** 32-1))
         self._waiting_tokens[token] = socket
         self._live_tokens.add(token)
         socket.shares[token] = (share_mode, share_name)