]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
Merge branch 'master'
authorVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 23 Jan 2018 18:36:49 +0000 (19:36 +0100)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 23 Jan 2018 18:36:49 +0000 (19:36 +0100)
15 files changed:
1  2 
.luacheckrc
contrib/contrib.mk
daemon/README.rst
daemon/bindings.c
daemon/lua/kres-gen.lua
daemon/lua/kres-gen.sh
daemon/lua/kres.lua
daemon/lua/sandbox.lua
daemon/main.c
daemon/worker.c
lib/layer/iterate.c
lib/nsrep.c
lib/resolve.c
lib/utils.c
modules/predict/tests/predict.test.lua

diff --cc .luacheckrc
index e45db7d05d37841e98cb6695b83d04d976c5161e,a6a3210868879005af1db100a6ab9a12a478ad69..7e65c7a62cee649c6b1775362f68c29e0e2794a4
@@@ -76,4 -76,4 +76,4 @@@ files['daemon/lua/kres-gen.lua'].ignor
  -- Tests and scripts can use global variables
  files['scripts'].ignore = {'111', '112', '113'}
  files['tests'].ignore = {'111', '112', '113'}
- files['modules/*/*_test.lua'].ignore = {'111', '112', '113', '121', '122'}
 -files['modules/**/*.test.lua'].ignore = {'111', '112', '113', '122'}
++files['modules/**/*.test.lua'].ignore = {'111', '112', '113', '121', '122'}
Simple merge
Simple merge
index 42aee6020b271c6b35acee94efa82522d6677e7e,74e9c865fbb04bf5cf79b6dc1abfa8cf3885e276..d615c3c8d00304a12156ae64abfc69883bab2823
@@@ -1392,23 -1411,8 +1393,23 @@@ static int wrk_resolve(lua_State *L
        if (!lua_isnumber(L, 3)) { /* Default class is IN */
                rrclass = KNOT_CLASS_IN;
        }
-               lua_pushstring(L, strerror(ENOMEM));
 +
 +      /* Add query options */
 +      const struct kr_qflags *options = lua_topointer(L, 4);
 +      if (!options) { /* but we rely on the lua wrapper when dereferencing non-NULL */
 +              lua_pushstring(L, "invalid options");
 +              lua_error(L);
 +      }
 +
 +      /* Create query packet */
 +      knot_pkt_t *pkt = knot_pkt_new(NULL, KNOT_EDNS_MAX_UDP_PAYLOAD, NULL);
 +      if (!pkt) {
++              lua_pushstring(L, kr_strerror(ENOMEM));
 +              lua_error(L);
 +      }
        knot_pkt_put_question(pkt, dname, rrclass, rrtype);
        knot_wire_set_rd(pkt->wire);
 +
        /* Add OPT RR */
        pkt->opt_rr = knot_rrset_copy(worker->engine->resolver.opt_rr, NULL);
        if (!pkt->opt_rr) {
Simple merge
Simple merge
Simple merge
index 9eb6437b42be10d3d8796634256f8525b606d330,e86ab2391d3448a4929dcac4d4eb5b299e80ae59..4d8d308161d623e2ed546b3b45a403ea90cae754
@@@ -233,8 -203,8 +233,9 @@@ else -- Lua 5.2
  end
  
  -- Load embedded modules
 +trust_anchors = require('trust_anchors')
  modules.load('ta_signal_query')
+ modules.load('policy')
  modules.load('priming')
  modules.load('detect_time_skew')
  modules.load('detect_time_jump')
diff --cc daemon/main.c
index 6517a8c528ac2e534a4789316079744a56eb5208,0d212696285e68050edd761dd2a070b281895569..560aec2a7f0a1c571dde1de8c1d06c16dc6a66fe
@@@ -598,49 -685,15 +685,16 @@@ int main(int argc, char **argv
                kr_log_error("[system] not enough memory\n");
                return EXIT_FAILURE;
        }
-       /* Bind to passed fds and run */
-       for (size_t i = 0; i < fd_set.len; ++i) {
-               ret = network_listen_fd(&engine.net, fd_set.at[i], false);
-               if (ret != 0) {
-                       kr_log_error("[system] listen on fd=%d %s\n", fd_set.at[i], kr_strerror(ret));
-                       ret = EXIT_FAILURE;
-                       break;
-               }
-       }
-       /* Do the same for TLS */
-       for (size_t i = 0; i < tls_fd_set.len; ++i) {
-               ret = network_listen_fd(&engine.net, tls_fd_set.at[i], true);
-               if (ret != 0) {
-                       kr_log_error("[system] TLS listen on fd=%d %s\n", tls_fd_set.at[i], kr_strerror(ret));
-                       ret = EXIT_FAILURE;
-                       break;
-               }
-       }
-       /* Bind to sockets and run */
-       if (ret == 0) {
-               for (size_t i = 0; i < addr_set.len; ++i) {
-                       int port = 53;
-                       const char *addr = set_addr(addr_set.at[i], &port);
-                       ret = network_listen(&engine.net, addr, (uint16_t)port, NET_UDP|NET_TCP);
-                       if (ret != 0) {
-                               kr_log_error("[system] bind to '%s@%d' %s\n", addr, port, kr_strerror(ret));
-                               ret = EXIT_FAILURE;
-                               break;
-                       }
-               }
-       }
-       /* Bind to TLS sockets */
-       if (ret == 0) {
-               for (size_t i = 0; i < tls_set.len; ++i) {
-                       int port = KR_DNS_TLS_PORT;
-                       const char *addr = set_addr(tls_set.at[i], &port);
-                       ret = network_listen(&engine.net, addr, (uint16_t)port, NET_TCP|NET_TLS);
-                       if (ret != 0) {
-                               kr_log_error("[system] bind to '%s@%d' (TLS) %s\n", addr, port, kr_strerror(ret));
-                               ret = EXIT_FAILURE;
-                               break;
-                       }
-               }
 -      
++
++      uv_loop_t *loop = NULL;
+       /* Bind to passed fds and sockets*/
+       if (bind_fds(&engine.net, &args.fd_set, false) != 0 ||
+           bind_fds(&engine.net, &args.tls_fd_set, true) != 0 ||
+           bind_sockets(&engine.net, &args.addr_set, false) != 0 ||
+           bind_sockets(&engine.net, &args.tls_set, true) != 0
+       ) {
+               ret = EXIT_FAILURE;
+               goto cleanup;
        }
  
        /* Workaround for https://github.com/libuv/libuv/issues/45
                goto cleanup;
        }
  
-       engine_set_moduledir(&engine, moduledir);
+       engine_set_moduledir(&engine, args.moduledir);
        
        /* Block signals. */
 -      uv_loop_t *loop = uv_default_loop();
 +      loop = uv_default_loop();
        uv_signal_t sigint, sigterm;
        uv_signal_init(loop, &sigint);
        uv_signal_init(loop, &sigterm);
  cleanup:/* Cleanup. */
        engine_deinit(&engine);
        worker_reclaim(worker);
 +      if (loop != NULL) {
 +              uv_loop_close(loop);    
 +      }
        mp_delete(pool.ctx);
-       array_clear(addr_set);
-       array_clear(tls_set);
+       array_clear(args.addr_set);
+       array_clear(args.tls_set);
        kr_crypto_cleanup();
        return ret;
  }
diff --cc daemon/worker.c
Simple merge
Simple merge
diff --cc lib/nsrep.c
Simple merge
diff --cc lib/resolve.c
Simple merge
diff --cc lib/utils.c
index d41bd4066d17de14c255e5092560c0304c5fe2a1,fa516e55208f7489ae7fb18054736201c421998d..4b320428f522f91d54648cb9a8f2261437227582
@@@ -108,30 -106,12 +108,34 @@@ void kr_log_verbose(const char *fmt, ..
        }
  }
  
 +bool kr_log_trace(const struct kr_query *query, const char *source, const char *fmt, ...)
 +{
 +      if (!kr_log_trace_enabled(query)) {
 +              return false;
 +      }
 +
 +      auto_free char *msg = NULL;
 +
 +      va_list args;
 +      va_start(args, fmt);
 +      int len = vasprintf(&msg, fmt, args);
 +      va_end(args);
 +
 +      /* Check formatting result before logging */
 +      if (len < 0) {
 +              return false;
 +      }
 +
 +      query->request->trace_log(query, source, msg);
 +      return true;
 +}
 +
  char* kr_strcatdup(unsigned n, ...)
  {
+       if (n < 1) {
+               return NULL;
+       }
        /* Calculate total length */
        size_t total_len = 0;
        va_list vl;