summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFederico Lucifredi <flucifredi@acm.org>2008-01-17 07:16:44 +0000
committerFederico Lucifredi <flucifredi@acm.org>2008-01-17 07:16:44 +0000
commit44f5496be8c0a584bdba371135bc9a7d4bd2ef52 (patch)
tree13d76dea83a8693c010f9d35efaac19d28f29e80
parent9bb9a63f078a6302c4af48423b796d7ed805a345 (diff)
adding avahi_get_local_zsk_pubkey(uint32_t ttl).
git-svn-id: file:///home/lennart/svn/public/avahi/branches/federico2@1718 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
-rw-r--r--avahi-core/dns.c31
-rw-r--r--avahi-core/dns.h5
2 files changed, 36 insertions, 0 deletions
diff --git a/avahi-core/dns.c b/avahi-core/dns.c
index 0206ec7..29fe515 100644
--- a/avahi-core/dns.c
+++ b/avahi-core/dns.c
@@ -858,3 +858,34 @@ size_t avahi_rdata_serialize(AvahiRecord *record, void *rdata, size_t max_size)
return p.size;
}
+
+/* TODO: should this be located in this file? */
+/* r = avahi_get_local_zsk_pubkey(<ttl>) */
+AvahiRecord* avahi_get_local_zsk_pubkey(uint32_t ttl){
+
+ AvahiRecord *r;
+
+ r = avahi_record_new_full(keyname, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_DNSKEY, 0);
+
+ if (!r) {
+ avahi_log_error("avahi_record_new_full() failed.");
+ return NULL;
+ }
+
+ r->ttl = ttl; /* TTL of records associated with a signature MUST match the record's */
+
+ r->flags = AVAHI_DNSSEC_DNSKEY_ZK_FLAG; /* bit 7 MUST be set to indicate DNSSEC key */
+
+ r->protocol = AVAHI_DNSSEC_PROTO; /* used for "compatibility" with KEY record */
+
+ /* TODO: in merged version into upstream, key needs to be an external configurable pulled from /etc */
+ /* in the prototype, we just statically configure */
+
+ r->algorithm = AVAHI_DNSSEC_KEY_SHA1; /* SHA1 is mandatory in the spec, but others do exist */
+
+ /* statically using key 62051 which has 512b length */
+ /* 512b ZSK pubkey in base64 encoding */
+ r->public_key = avahi_strndup("AQO/7WDOTMzPbRAEVbwYttMZztSn+exNoeNTsPqNXb6dtNqpRIdzwgfS3kBtaBtqiOGyJjts7qjXbQRX/QvvFuFF", strlen("AQO/7WDOTMzPbRAEVbwYttMZztSn+exNoeNTsPqNXb6dtNqpRIdzwgfS3kBtaBtqiOGyJjts7qjXbQRX/QvvFuFF"));
+
+ return r;
+}
diff --git a/avahi-core/dns.h b/avahi-core/dns.h
index d485510..3084720 100644
--- a/avahi-core/dns.h
+++ b/avahi-core/dns.h
@@ -79,6 +79,8 @@ int avahi_dns_packet_skip(AvahiDnsPacket *p, size_t length);
int avahi_dns_packet_is_empty(AvahiDnsPacket *p);
size_t avahi_dns_packet_space(AvahiDnsPacket *p);
+AvahiRecord* avahi_get_local_zsk_pubkey(uint32_t ttl);
+
#define AVAHI_DNS_FIELD_ID 0
#define AVAHI_DNS_FIELD_FLAGS 1
#define AVAHI_DNS_FIELD_QDCOUNT 2
@@ -92,6 +94,9 @@ size_t avahi_dns_packet_space(AvahiDnsPacket *p);
#define AVAHI_DNS_FLAG_TC (1 << 9)
#define AVAHI_DNS_FLAG_AA (1 << 10)
+#define AVAHI_DNSSEC_DNSKEY_ZK_FLAG = (1 << 7)
+#define AVAHI_DNSSEC_DNSKEY_SEP_FLAG = (1 << 15)
+
#define AVAHI_DNS_FLAGS(qr, opcode, aa, tc, rd, ra, z, ad, cd, rcode) \
(((uint16_t) !!qr << 15) | \
((uint16_t) (opcode & 15) << 11) | \