Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • knot/knot-resolver
  • dkg/resolver
  • sbalazik/resolver
  • anb/knot-resolver
  • tkrizek/knot-resolver
  • jono/knot-resolver
  • analogic/knot-resolver
  • flokli/knot-resolver
  • hectorm/knot-resolver
  • aisha/knot-resolver
10 results
Show changes
Commits on Source (18)
......@@ -243,7 +243,7 @@ lint:scan-build:
script:
- export SCANBUILD="$(realpath ./scripts/run-scanbuild-with-args.sh)"
- ninja -C build_ci* scan-build || true
- test "$(ls build_ci*/meson-logs/scanbuild/*/report-*.html | wc -l)" = 24 # we have this many errors ATM :-)
- test "$(ls build_ci*/meson-logs/scanbuild/*/report-*.html | wc -l)" = 22 # we have this many errors ATM :-)
lint:tidy:
<<: *after_build
......
......@@ -11,6 +11,7 @@ Bugfixes
- daemon/http: improved URI checks to fix some proxies (#746, !1311)
- daemon/tls: fixed a double-free for some cases of policy.TLS_FORWARD (!1314)
- hints module: improve parsing comments in hosts files (!1315)
- renumber module: renumbering works with name matching again (#760, !1334)
Knot Resolver 5.5.1 (2022-06-14)
......
......@@ -3,6 +3,7 @@
[![Build Status](https://gitlab.nic.cz/knot/knot-resolver/badges/nightly/pipeline.svg?x)](https://gitlab.nic.cz/knot/knot-resolver/commits/nightly)
[![Coverage Status](https://gitlab.nic.cz/knot/knot-resolver/badges/nightly/coverage.svg?x)](https://knot.pages.nic.cz/knot-resolver/)
[![Documentation Status](https://readthedocs.org/projects/knot-resolver/badge/?version=latest)](https://readthedocs.org/projects/knot-resolver/?badge=latest)
[![Packaging status](https://repology.org/badge/tiny-repos/knot-resolver.svg)](https://repology.org/project/knot-resolver/versions)
Knot Resolver is a caching full resolver implementation written in C and [LuaJIT][luajit], both a resolver library and a daemon. The core architecture is tiny and efficient, and provides a foundation and
a state-machine like API for extensions. There are three modules built-in - *iterator*, *validator*, *cache*, and a few more are loaded by default. Most of the [rich features](https://knot-resolver.readthedocs.io/en/latest/config-overview.html) are written in Lua(JIT) and C. Batteries are included, but optional.
......@@ -25,12 +26,13 @@ to add this repository to your system.
Knot Resolver is also available from the following distributions' repositories.
* [Fedora and Fedora EPEL](https://apps.fedoraproject.org/packages/knot-resolver)
* [Fedora and Fedora EPEL](https://src.fedoraproject.org/rpms/knot-resolver)
* [Debian stable](https://packages.debian.org/stable/knot-resolver),
[Debian testing](https://packages.debian.org/testing/knot-resolver),
[Debian unstable](https://packages.debian.org/sid/knot-resolver)
* [Ubuntu](https://packages.ubuntu.com/bionic/knot-resolver)
* [Ubuntu](https://packages.ubuntu.com/jammy/knot-resolver)
* [Arch Linux](https://archlinux.org/packages/community/x86_64/knot-resolver/)
* [Alpine Linux](https://pkgs.alpinelinux.org/packages?name=knot-resolver)
### Building from sources
......
......@@ -15,6 +15,14 @@ inputs for [Coverity Scan](https://scan.coverity.com/).
It is used by the `coverity` CI job to generate and send data to Coverity Scan
for analysis.
To build this image, you need to retrieve the Coverity Scan token from the
dashboard and pass it to the `build.sh` script using the `COVERITY_SCAN_TOKEN`
environment variable, e.g.:
```
$ COVERITY_SCAN_TOKEN=the_secret_token ./build.sh debian-11-coverity
```
### debian-bullseye
Used to serve the same purpose as `debian-11`. As of 2022-03-09, it is still
......
......@@ -2,8 +2,6 @@ Source: knot-resolver
Section: net
Priority: optional
Maintainer: Knot Resolver <knot-resolver@labs.nic.cz>
Uploaders:
Tomas Krizek <tomas.krizek@nic.cz>
Build-Depends:
debhelper (>= 9~),
libcmocka-dev (>= 1.0.0),
......
......@@ -53,14 +53,17 @@
#pragma once
#include <stdlib.h>
/** Simplified Qt containers growth strategy. */
static inline size_t array_next_count(size_t want)
/** Choose array length when it overflows. */
static inline size_t array_next_count(size_t elm_size, size_t want, size_t have)
{
if (want < 2048) {
return (want < 20) ? want + 4 : want * 2;
} else {
return want + 2048;
}
if (want >= have * 2) // We amortized enough and maybe more won't be needed.
return want;
const size_t want_b = want * elm_size;
if (want_b < 64) // Short arrays are cheap to copy; get just one extra.
return want + 1;
if (want_b < 1024) // 50% growth amortizes to roughly 3 copies per element.
return want + want / 2;
return want * 2; // Doubling growth amortizes to roughly 2 copies per element.
}
/** @internal Incremental memory reservation */
......@@ -70,7 +73,7 @@ static inline int array_std_reserve(void *baton, void **mem, size_t elm_size, si
return 0;
}
/* Simplified Qt containers growth strategy */
size_t next_size = array_next_count(want);
size_t next_size = array_next_count(elm_size, want, *have);
void *mem_new = realloc(*mem, next_size * elm_size);
if (mem_new != NULL) {
*mem = mem_new;
......
......@@ -85,6 +85,9 @@ static_assert(LOG_GRP_REQDBG <= 8 * sizeof(kr_log_groups), "Too many log groups.
bool kr_log_group_is_set(enum kr_log_group group)
{
if (kr_fails_assert(group >= 0))
return false;
return kr_log_groups & (1ULL << group);
}
......@@ -162,7 +165,7 @@ const char *kr_log_level2name(kr_log_level_t level)
kr_log_level_t kr_log_name2level(const char *name)
{
if (kr_fails_assert(name))
return LOG_GRP_UNKNOWN;
return LOG_UNKNOWN_LEVEL;
for (int i = 0; level_names[i].name; ++i)
{
......@@ -170,7 +173,7 @@ kr_log_level_t kr_log_name2level(const char *name)
return level_names[i].level;
}
return LOG_GRP_UNKNOWN;
return LOG_UNKNOWN_LEVEL;
}
const char *kr_log_grp2name(enum kr_log_group group)
......@@ -187,7 +190,7 @@ const char *kr_log_grp2name(enum kr_log_group group)
enum kr_log_group kr_log_name2grp(const char *name)
{
if (kr_fails_assert(name))
return -1;
return LOG_GRP_UNKNOWN;
for (int i = 0; log_group_names[i].g_name; ++i)
{
......@@ -195,7 +198,7 @@ enum kr_log_group kr_log_name2grp(const char *name)
return log_group_names[i].g_val;
}
return -1;
return LOG_GRP_UNKNOWN;
}
......@@ -227,6 +230,9 @@ void kr_log_level_set(kr_log_level_t level)
void kr_log_group_add(enum kr_log_group group)
{
if (kr_fails_assert(group >= 0))
return;
kr_log_groups |= (1ULL << group);
if (group == LOG_GRP_GNUTLS)
kr_gnutls_log_level_set();
......
......@@ -7,6 +7,7 @@
#include <syslog.h>
#include "lib/defines.h"
#define LOG_UNKNOWN_LEVEL -1 /**< Negative error value. */
#define LOG_GNUTLS_LEVEL 5 /**< GnuTLS level is 5. */
/* Targets */
......
......@@ -9,7 +9,6 @@
#include <libknot/codes.h>
#include "lib/selection.h"
#include "lib/cache/api.h"
#include "lib/zonecut.h"
/** Query flags */
......
......@@ -185,7 +185,7 @@ int kr_memreserve(void *baton, void **mem, size_t elm_size, size_t want, size_t
return 0;
} else {
knot_mm_t *pool = baton;
size_t next_size = array_next_count(want);
size_t next_size = array_next_count(elm_size, want, *have);
void *mem_new = mm_alloc(pool, next_size * elm_size);
if (mem_new != NULL) {
if (*mem) { /* 0-length memcpy from NULL isn't technically OK */
......
......@@ -405,13 +405,6 @@ static inline bool kr_sockaddr_link_local(const struct sockaddr *addr)
return kr_bitcmp((char *) ip6->sin6_addr.s6_addr, (char *) prefix, 10) == 0;
}
/** @internal RR map flags. */
static const uint8_t KEY_FLAG_RRSIG = 0x02;
static inline uint8_t KEY_FLAG_RANK(const char *key)
{ return ((uint8_t)(key[0])) >> 2; }
static inline bool KEY_COVERING_RRSIG(const char *key)
{ return ((uint8_t)(key[0])) & KEY_FLAG_RRSIG; }
/* Stash key = {[5] class, [1-255] owner, [5] type, [5] additional, [1] \x00 } */
#define KR_RRKEY_LEN (16 + KNOT_DNAME_MAXLEN)
/** Create unique null-terminated string key for RR.
......
......@@ -205,7 +205,7 @@ static int dnstap_log(kr_layer_t *ctx, enum dnstap_log_phase phase) {
m.has_query_message = qpkt != NULL;
if (qpkt != NULL) {
m.query_message.len = qpkt->size;
m.query_message.data = (uint8_t *)qpkt->wire;
m.query_message.data = qpkt->wire;
}
}
......
......@@ -199,11 +199,6 @@ function policy.REROUTE(tbl, names)
local prefixes = {}
for from, to in pairs(tbl) do
local prefix = names and ren.name(from, to) or ren.prefix(from, to)
local bitlen = prefix[2]
if bitlen ~= nil and bitlen % 8 ~= 0 then
log_warn(ffi.C.LOG_GRP_POLICY,
'REROUTE: network mask - only /8, /16, /24 etc. are supported (entire octets are rewritten)')
end
table.insert(prefixes, prefix)
end
-- Return rule closure
......
......@@ -25,10 +25,14 @@ local function mergeIps(ipNet, ipHost, intMask)
local octetMask
local result = ""
if (#ipNet ~= #ipHost) then
if #ipNet ~= #ipHost then
return nil
end
if intMask == nil then
return ipNet
end
for currentOctetNo = 1, #ipNet do
if intMask >= 8 then
result = result .. ipNet:sub(currentOctetNo,currentOctetNo)
......