From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id OEVpAG9Xxl9fSAAA0tVLHw (envelope-from ) for ; Tue, 01 Dec 2020 14:47:11 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id OKjEN25Xxl8fJgAAbx9fmQ (envelope-from ) for ; Tue, 01 Dec 2020 14:47:10 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 6404E9401C0 for ; Tue, 1 Dec 2020 14:47:10 +0000 (UTC) Received: from localhost ([::1]:43488 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kk6vt-0003Fj-EX for larch@yhetil.org; Tue, 01 Dec 2020 09:47:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52014) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kk6up-0002j5-IO for guix-patches@gnu.org; Tue, 01 Dec 2020 09:46:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:46781) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kk6up-0008UF-9B for guix-patches@gnu.org; Tue, 01 Dec 2020 09:46:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kk6up-0004FQ-7k for guix-patches@gnu.org; Tue, 01 Dec 2020 09:46:03 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#44596] [PATCH v2 1/2] gnu: knot-resolver: Update to 5.2.0. Resent-From: Simon South Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 01 Dec 2020 14:46:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 44596 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 44596@debbugs.gnu.org Cc: Simon South Received: via spool by 44596-submit@debbugs.gnu.org id=B44596.160683395116281 (code B ref 44596); Tue, 01 Dec 2020 14:46:03 +0000 Received: (at 44596) by debbugs.gnu.org; 1 Dec 2020 14:45:51 +0000 Received: from localhost ([127.0.0.1]:58325 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kk6uY-0004ER-TZ for submit@debbugs.gnu.org; Tue, 01 Dec 2020 09:45:50 -0500 Received: from mailout.easymail.ca ([64.68.200.34]:57456) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kk6uQ-0004Di-W8 for 44596@debbugs.gnu.org; Tue, 01 Dec 2020 09:45:43 -0500 Received: from localhost (localhost [127.0.0.1]) by mailout.easymail.ca (Postfix) with ESMTP id B533D21359; Tue, 1 Dec 2020 14:45:33 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at emo06-pco.easydns.vpn Received: from mailout.easymail.ca ([127.0.0.1]) by localhost (emo06-pco.easydns.vpn [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id GC7cMU7QcG2w; Tue, 1 Dec 2020 14:45:33 +0000 (UTC) Received: from localhost.localdomain (unknown [108.162.141.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mailout.easymail.ca (Postfix) with ESMTPSA id AAE0A20EA8; Tue, 1 Dec 2020 14:45:30 +0000 (UTC) From: Simon South Date: Tue, 1 Dec 2020 09:45:19 -0500 Message-Id: X-Mailer: git-send-email 2.29.2 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN X-Migadu-Spam-Score: 0.21 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Queue-Id: 6404E9401C0 X-Spam-Score: 0.21 X-Migadu-Scanner: ns3122888.ip-94-23-21.eu X-TUID: RSP0tXu+BDQ7 * gnu/packages/dns.scm (knot-resolver): Update to 5.2.0. [source]: Add patch from upstream commit to fix the internal map() function on 32-bit platforms. [native-inputs]: Add texinfo to enable generating the manual in Info format. [inputs]: Add nghttp2:lib to enable the new DNS-over-HTTPS implementation. * gnu/packages/patches/knot-resolver-fix-map-command-on-32-bit.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/dns.scm | 12 +- ...t-resolver-fix-map-command-on-32-bit.patch | 146 ++++++++++++++++++ 3 files changed, 155 insertions(+), 4 deletions(-) create mode 100644 gnu/packages/patches/knot-resolver-fix-map-command-on-32-bit.patch diff --git a/gnu/local.mk b/gnu/local.mk index 80f87691fe..e8d63c38df 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1221,6 +1221,7 @@ dist_patch_DATA = \ %D%/packages/patches/kmail-Fix-missing-link-libraries.patch \ %D%/packages/patches/kmod-module-directory.patch \ %D%/packages/patches/kmscon-runtime-keymap-switch.patch \ + %D%/packages/patches/knot-resolver-fix-map-command-on-32-bit.patch \ %D%/packages/patches/kpackage-allow-external-paths.patch \ %D%/packages/patches/kpackage-fix-KF5PackageMacros.cmake.patch \ %D%/packages/patches/kmplayer-aarch64.patch \ diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index 3aa3cf3e8d..f0c3d6a602 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -937,14 +937,16 @@ synthesis, and on-the-fly re-configuration.") (define-public knot-resolver (package (name "knot-resolver") - (version "5.1.3") + (version "5.2.0") (source (origin (method url-fetch) (uri (string-append "https://secure.nic.cz/files/knot-resolver/" "knot-resolver-" version ".tar.xz")) (sha256 (base32 - "12s5070nqqf599s1mb6rjas2as481rjf751qk5yrz6p34y885k90")))) + "0cwlipib3x88dr6cijqv2aps13b4ijv524wc85ns07rkldy2c948")) + (patches + (search-patches "knot-resolver-fix-map-command-on-32-bit.patch")))) (build-system meson-build-system) (arguments '(#:configure-flags '("-Ddoc=enabled") @@ -982,7 +984,8 @@ synthesis, and on-the-fly re-configuration.") ("pkg-config" ,pkg-config) ("python-breathe" ,python-breathe) ("python-sphinx" ,python-sphinx) - ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme))) + ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme) + ("texinfo" ,texinfo))) (inputs `(("fstrm" ,fstrm) ("gnutls" ,gnutls) @@ -991,7 +994,8 @@ synthesis, and on-the-fly re-configuration.") ("lmdb" ,lmdb) ("luajit" ,luajit) ;; TODO: Add optional lua modules: basexx and psl. - ("lua-bitop" ,lua5.1-bitop))) + ("lua-bitop" ,lua5.1-bitop) + ("nghttp2" ,nghttp2 "lib"))) (home-page "https://www.knot-resolver.cz/") (synopsis "Caching validating DNS resolver") (description diff --git a/gnu/packages/patches/knot-resolver-fix-map-command-on-32-bit.patch b/gnu/packages/patches/knot-resolver-fix-map-command-on-32-bit.patch new file mode 100644 index 0000000000..02c0fbcb70 --- /dev/null +++ b/gnu/packages/patches/knot-resolver-fix-map-command-on-32-bit.patch @@ -0,0 +1,146 @@ +commit e01979620025666633250b3e2d545fe59c629f73 +Author: Vladimír Čunát +Date: Fri Nov 13 14:16:32 2020 +0100 + + fix map() command on 32-bit platforms; regressed in 5.2.0 + + LuaJIT FFI was using opendir() (etc.) variants with 32-bit inodes + but the C parts was using them as 64-bit inode variants. + Consequently the `struct dirent` layout didn't match and we were getting + filenames shifted by eight bytes. + + Now the whole dir-listing lua function is written in C. + +diff --git a/.luacheckrc b/.luacheckrc +index 0cf0b884..67bc18f6 100644 +--- a/.luacheckrc ++++ b/.luacheckrc +@@ -20,6 +20,7 @@ new_read_globals = { + 'user', + 'verbose', + 'worker', ++ 'kluautil_list_dir', + -- Sandbox declarations + 'kB', + 'MB', +diff --git a/NEWS b/NEWS +index 2eae3082..9d8cde99 100644 +--- a/NEWS ++++ b/NEWS +@@ -1,6 +1,10 @@ + Knot Resolver X.Y.X (yyyy-mm-dd) + ================================ + ++Bugfixes ++-------- ++- fix map() command on 32-bit platforms; regressed in 5.2.0 (!1093) ++ + + Knot Resolver 5.2.0 (2020-11-11) + ================================ +diff --git a/daemon/bindings/impl.c b/daemon/bindings/impl.c +index d10f4525..d9ad0774 100644 +--- a/daemon/bindings/impl.c ++++ b/daemon/bindings/impl.c +@@ -2,6 +2,7 @@ + * SPDX-License-Identifier: GPL-3.0-or-later + */ + ++#include + #include + #include + #include +@@ -29,6 +30,29 @@ const char * lua_table_checkindices(lua_State *L, const char *keys[]) + return NULL; + } + ++/** Return table listing filenames in a given directory (ls -A). */ ++static int kluautil_list_dir(lua_State *L) ++{ ++ lua_newtable(L); // empty table even on errors ++ ++ const char *path = lua_tolstring(L, 1, NULL); ++ if (!path) return 1; ++ DIR *dir = opendir(path); ++ if (!dir) return 1; ++ ++ struct dirent *entry; ++ int lua_i = 1; ++ while ((entry = readdir(dir)) != NULL) { ++ if (strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")) { ++ lua_pushstring(L, entry->d_name); ++ lua_rawseti(L, -2, lua_i++); ++ } ++ } ++ ++ closedir(dir); ++ return 1; ++} ++ + + /* Each of these just creates the correspondingly named lua table of functions. */ + int kr_bindings_cache (lua_State *L); /* ./cache.c */ +@@ -44,6 +68,9 @@ void kr_bindings_register(lua_State *L) + kr_bindings_modules(L); + kr_bindings_net(L); + kr_bindings_worker(L); ++ ++ /* Finally some lua utils *written in C*, not really a binding. */ ++ lua_register(L, "kluautil_list_dir", kluautil_list_dir); + } + + void lua_error_p(lua_State *L, const char *fmt, ...) +diff --git a/daemon/lua/kluautil.lua b/daemon/lua/kluautil.lua +index 57912e7b..e73e952c 100644 +--- a/daemon/lua/kluautil.lua ++++ b/daemon/lua/kluautil.lua +@@ -1,6 +1,5 @@ + -- SPDX-License-Identifier: GPL-3.0-or-later + +-local ffi = require('ffi') + local kluautil = {} + + -- Get length of table +@@ -28,14 +27,6 @@ function kluautil.kr_table_unpack(tab) + return unpack(tab, 1, tab.n) + end + +-ffi.cdef([[ +- typedef struct __dirstream DIR; +- DIR *opendir(const char *name); +- struct dirent *readdir(DIR *dirp); +- int closedir(DIR *dirp); +- char *strerror(int errnum); +-]]) +- + -- Fetch over HTTPS + function kluautil.kr_https_fetch(url, out_file, ca_file) + local http_ok, http_request = pcall(require, 'http.request') +@@ -88,26 +79,6 @@ function kluautil.kr_https_fetch(url, out_file, ca_file) + return true + end + +--- List directory +-function kluautil.list_dir (path) +- local results = {} +- local dir = ffi.C.opendir(path) +- if dir == nil then +- return results +- end +- +- local entry = ffi.C.readdir(dir) +- while entry ~= nil do +- local entry_name = ffi.string(ffi.C.kr_dirent_name(entry)) +- if entry_name ~= '.' and entry_name ~= '..' then +- table.insert(results, entry_name) +- end +- entry = ffi.C.readdir(dir) +- end +- +- ffi.C.closedir(dir) +- +- return results +-end ++kluautil.list_dir = kluautil_list_dir + + return kluautil -- 2.29.2