]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
key entry.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 3 Aug 2007 14:56:24 +0000 (14:56 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 3 Aug 2007 14:56:24 +0000 (14:56 +0000)
git-svn-id: file:///svn/unbound/trunk@490 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
validator/val_kentry.c [new file with mode: 0644]
validator/val_kentry.h [new file with mode: 0644]

index 18c9d7c13a7a1bc18be4499d0046ed0b9a36d1b1..1b96f15390e9e5eaddb626f0bb57c5c8ad8d0392 100644 (file)
@@ -5,6 +5,7 @@
          DS and DNSKEY entries.
        - unit test trust anchor storage.
        - trust anchors converted to packed rrsets.
+       - key entry definition.
 
 2 August 2007: Wouter
        - configure change for latest libevent trunk version (needs -lrt).
diff --git a/validator/val_kentry.c b/validator/val_kentry.c
new file mode 100644 (file)
index 0000000..6137b3a
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * validator/val_kentry.c - validator key entry definition.
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file contains functions for dealing with validator key entries.
+ */
+#include "config.h"
+#include "validator/val_kentry.h"
+#include "util/data/packed_rrset.h"
+#include "util/data/dname.h"
+#include "util/storage/lookup3.h"
+
+size_t 
+key_entry_sizefunc_t(void* key, void* data)
+{
+       struct key_entry_key* kk = (struct key_entry_key*)key;
+       struct key_entry_data* kd = (struct key_entry_data*)data;
+       size_t s = sizeof(*kk) + kk->namelen;
+       s += sizeof(*kd);
+       if(kd->rrset_data)
+               s += packed_rrset_sizeof(kd->rrset_data);
+       return s;
+}
+
+int 
+key_entry_compfunc_t(void* k1, void* k2)
+{
+       struct key_entry_key* n1 = (struct key_entry_key*)k1;
+       struct key_entry_key* n2 = (struct key_entry_key*)k2;
+       if(n1->key_class != n2->key_class) {
+               if(n1->key_class < n2->key_class)
+                       return -1;
+               return 1;
+       }
+       return query_dname_compare(n1->name, n2->name);
+}
+
+void 
+key_entry_delkeyfunc_t(void* key, void* ATTR_UNUSED(userarg), int islocked)
+{
+       struct key_entry_key* kk = (struct key_entry_key*)key;
+       if(!key)
+               return;
+       if(islocked) {
+               lock_rw_unlock(&kk->entry.lock);
+       }
+       free(kk->name);
+       free(kk);
+}
+
+void 
+key_entry_deldatafunc_t(void* data, void* ATTR_UNUSED(userarg))
+{
+       struct key_entry_data* kd = (struct key_entry_data*)data;
+       free(kd->rrset_data);
+       free(kd);
+}
+
+void 
+key_entry_hash(struct key_entry_key* kk)
+{
+       kk->entry.hash = 0x654;
+       kk->entry.hash = hashlittle(&kk->key_class, sizeof(kk->key_class), 
+               kk->entry.hash);
+       kk->entry.hash = dname_query_hash(kk->name, kk->entry.hash);
+}
diff --git a/validator/val_kentry.h b/validator/val_kentry.h
new file mode 100644 (file)
index 0000000..e0748dd
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * validator/val_kentry.h - validator key entry definition.
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file contains functions for dealing with validator key entries.
+ */
+
+#ifndef VALIDATOR_VAL_KENTRY_H
+#define VALIDATOR_VAL_KENTRY_H
+struct packed_rrset_data;
+#include "util/storage/lruhash.h"
+
+/**
+ * A key entry for the validator.
+ * This may or may not be a trusted key.
+ * This is what is stored in the key cache.
+ * This is the key part for the cache; the key entry key.
+ */
+struct key_entry_key {
+       /** lru hash entry */
+       struct lruhash_entry entry;
+       /** name of the key */
+       uint8_t* name;
+       /** length of name */
+       size_t namelen;
+       /** class of the key, host byteorder */
+       uint16_t key_class;
+};
+
+/**
+ * Key entry for the validator.
+ * Contains key status.
+ * This is the data part for the cache, the key entry data.
+ *
+ * Can be in three basic states:
+ *     isbad=0:                good key
+ *     isbad=1:                bad key
+ *     isbad=0 && rrset=0:     insecure space.
+ */
+struct key_entry_data {
+       /** the TTL of this entry (absolute time) */
+       uint32_t ttl;
+       /** the key rrdata. can be NULL to signal keyless name. */
+       struct packed_rrset_data* rrset_data;
+       /** DNS RR type of the rrset data */
+       uint16_t rrset_type;
+       /** if the key is bad: Bogus or malformed */
+       uint8_t isbad;
+};
+
+/** function for lruhash operation */
+size_t key_entry_sizefunc_t(void* key, void* data);
+
+/** function for lruhash operation */
+int key_entry_compfunc_t(void* k1, void* k2);
+
+/** function for lruhash operation */
+void key_entry_delkeyfunc_t(void* key, void* userarg, int islocked);
+
+/** function for lruhash operation */
+void key_entry_deldatafunc_t(void* data, void* userarg);
+
+/** calculate hash for key entry 
+ * @param kk: key entry. The lruhash entry.hash value is filled in.
+ */
+void key_entry_hash(struct key_entry_key* kk);
+
+#endif /* VALIDATOR_VAL_KENTRY_H */