]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
check per-query flags instead of global options, getter for NS name
authorMarek Vavruša <mvavrusa@cloudflare.com>
Fri, 6 Apr 2018 05:43:57 +0000 (22:43 -0700)
committerMarek Vavruša <mvavrusa@cloudflare.com>
Fri, 7 Sep 2018 17:45:21 +0000 (10:45 -0700)
Checking query flags instead of global context option allows setting
overrides on individual queries. The effect is the same as query flags
start by copying request flags which start by copying context options.

daemon/lua/kres-gen.lua
daemon/lua/kres-gen.sh
lib/nsrep.c
lib/zonecut.c
lib/zonecut.h

index 7d06d2003f9208aa159c0cde6724210f692d2a0b..dc0a7ad6fdfcb6adc86ed25db79d996d15a5761e 100644 (file)
@@ -310,6 +310,7 @@ void kr_qflags_clear(struct kr_qflags *, struct kr_qflags);
 int kr_zonecut_add(struct kr_zonecut *, const knot_dname_t *, const knot_rdata_t *);
 _Bool kr_zonecut_is_empty(struct kr_zonecut *);
 void kr_zonecut_set(struct kr_zonecut *, const knot_dname_t *);
+const knot_dname_t *kr_zonecut_find_nsname(struct kr_zonecut *);
 uint64_t kr_now();
 void lru_free_items_impl(struct lru *);
 struct lru *lru_create_impl(unsigned int, knot_mm_t *, knot_mm_t *);
index 82ab19b6b0b4d822208f32c4ca11339bf06f746e..78a0401c91493fac81a330692c568520bd9a5b18 100755 (executable)
@@ -166,6 +166,7 @@ EOF
        kr_zonecut_add
        kr_zonecut_is_empty
        kr_zonecut_set
+       kr_zonecut_find_nsname
        kr_now
        lru_free_items_impl
        lru_create_impl
index 3a9462bf4776624dec1588bd9ceb1e69d67a36cf..c1a273de3fdef2cfc1678ea868cea503de14cd60 100644 (file)
@@ -542,4 +542,4 @@ int kr_nsrep_sort(struct kr_nsrep *ns, kr_nsrep_rtt_lru_t *rtt_cache)
        ns->score = scores[0];
        ns->reputation = 0;
        return kr_ok();
-}
+}
\ No newline at end of file
index 45d6d760e5e7ebc8162cf5904455833c28e54768..f2ad4d139c71964a8877aafc198c400a3386bf54 100644 (file)
@@ -466,3 +466,21 @@ int kr_zonecut_find_cached(struct kr_context *ctx, struct kr_zonecut *cut,
        mm_free(cut->pool, qname);
        return kr_error(ENOENT);
 }
+
+static int select_first_ns(const char *k, void *v, void *baton)
+{
+       assert(baton);
+       *((const knot_dname_t **)baton) = (const knot_dname_t *)k;
+       return 1;
+}
+
+const knot_dname_t *kr_zonecut_find_nsname(struct kr_zonecut *cut)
+{
+       if (!cut) {
+               return NULL;
+       }
+
+       const knot_dname_t *result = NULL;
+       map_walk(&cut->nsset, select_first_ns, &result);
+       return result;
+}
\ No newline at end of file
index f1ab0c31cfda2e413c58024e20b681528afafb33..342c5ca548b72eabea72bde2af4032191e499d99 100644 (file)
@@ -161,3 +161,10 @@ int kr_zonecut_find_cached(struct kr_context *ctx, struct kr_zonecut *cut,
 KR_EXPORT
 bool kr_zonecut_is_empty(struct kr_zonecut *cut);
 
+/**
+ * Return first NS name in the zone cut.
+ * @param cut zone cut used
+ * @return name or NULL if empty
+ */
+KR_EXPORT
+const knot_dname_t *kr_zonecut_find_nsname(struct kr_zonecut *cut);