gnu: knot-resolver: Update to 5.2.1.
* gnu/packages/dns.scm (knot-resolver): Update to 5.2.1. [source]: Remove obsolete patch. * gnu/packages/patches/knot-resolver-fix-map-command-on-32-bit.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr>
This commit is contained in:
parent
8361817bf6
commit
7eb920351a
3 changed files with 2 additions and 152 deletions
|
|
@ -1223,7 +1223,6 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/kmail-Fix-missing-link-libraries.patch \
|
%D%/packages/patches/kmail-Fix-missing-link-libraries.patch \
|
||||||
%D%/packages/patches/kmod-module-directory.patch \
|
%D%/packages/patches/kmod-module-directory.patch \
|
||||||
%D%/packages/patches/kmscon-runtime-keymap-switch.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-allow-external-paths.patch \
|
||||||
%D%/packages/patches/kpackage-fix-KF5PackageMacros.cmake.patch \
|
%D%/packages/patches/kpackage-fix-KF5PackageMacros.cmake.patch \
|
||||||
%D%/packages/patches/kmplayer-aarch64.patch \
|
%D%/packages/patches/kmplayer-aarch64.patch \
|
||||||
|
|
|
||||||
|
|
@ -937,17 +937,14 @@ synthesis, and on-the-fly re-configuration.")
|
||||||
(define-public knot-resolver
|
(define-public knot-resolver
|
||||||
(package
|
(package
|
||||||
(name "knot-resolver")
|
(name "knot-resolver")
|
||||||
(version "5.2.0")
|
(version "5.2.1")
|
||||||
(source (origin
|
(source (origin
|
||||||
(method url-fetch)
|
(method url-fetch)
|
||||||
(uri (string-append "https://secure.nic.cz/files/knot-resolver/"
|
(uri (string-append "https://secure.nic.cz/files/knot-resolver/"
|
||||||
"knot-resolver-" version ".tar.xz"))
|
"knot-resolver-" version ".tar.xz"))
|
||||||
(sha256
|
(sha256
|
||||||
(base32
|
(base32
|
||||||
"0cwlipib3x88dr6cijqv2aps13b4ijv524wc85ns07rkldy2c948"))
|
"09jqy23q1pgj76y2qd1xfk72wwmypnyawm3span3gx00qi2bfdxa"))))
|
||||||
(patches
|
|
||||||
(search-patches
|
|
||||||
"knot-resolver-fix-map-command-on-32-bit.patch"))))
|
|
||||||
(build-system meson-build-system)
|
(build-system meson-build-system)
|
||||||
(outputs '("out" "doc"))
|
(outputs '("out" "doc"))
|
||||||
(arguments
|
(arguments
|
||||||
|
|
|
||||||
|
|
@ -1,146 +0,0 @@
|
||||||
commit e01979620025666633250b3e2d545fe59c629f73
|
|
||||||
Author: Vladimír Čunát <vladimir.cunat@nic.cz>
|
|
||||||
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 <dirent.h>
|
|
||||||
#include <lua.h>
|
|
||||||
#include <lauxlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
@@ -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
|
|
||||||
Reference in a new issue