summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFederico Lucifredi <flucifredi@acm.org>2007-12-27 09:12:42 +0000
committerFederico Lucifredi <flucifredi@acm.org>2007-12-27 09:12:42 +0000
commit04a12e4c8b75b68ff137eafdbe50f5354f17b4e9 (patch)
tree81cfeed8c37eb5465b50dd8f37dfd81d7f4a6bc9
parent0c05ad822bb8fe4cd640c64819b16a2b82ae79a2 (diff)
added uint16_to_canonical_string()
git-svn-id: file:///home/lennart/svn/public/avahi/branches/federico@1657 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
-rw-r--r--avahi-core/domain-util.c8
-rw-r--r--avahi-core/domain-util.h3
-rw-r--r--avahi-core/entry.c4
-rw-r--r--avahi-core/wide-area.c14
4 files changed, 24 insertions, 5 deletions
diff --git a/avahi-core/domain-util.c b/avahi-core/domain-util.c
index d58e22b..2bbf127 100644
--- a/avahi-core/domain-util.c
+++ b/avahi-core/domain-util.c
@@ -188,6 +188,7 @@ int avahi_domain_ends_with(const char *domain, const char *suffix) {
}
}
+/*todo: revise location of this function in this file vs domain.c (and.h) */
char * c_to_canonical_string(char* input)
{
char *label = avahi_malloc(AVAHI_LABEL_MAX);
@@ -223,3 +224,10 @@ char * c_to_canonical_string(char* input)
return retval;
}
+char * uint16_to_canonical_string(uint16_t v) {
+ uint8_t *c = avahi_malloc(2);
+
+ c[0] = (uint8_t) (v >> 8);
+ c[1] = (uint8_t) v;
+ return c;
+} \ No newline at end of file
diff --git a/avahi-core/domain-util.h b/avahi-core/domain-util.h
index 363f249..2981537 100644
--- a/avahi-core/domain-util.h
+++ b/avahi-core/domain-util.h
@@ -45,6 +45,9 @@ int avahi_domain_ends_with(const char *domain, const char *suffix);
/** returns canonical DNS representation of C string representing a domain */
char * c_to_canonical_string(char* input);
+/** returns canonical wire representation of uint16 */
+char * uint16_to_canonical_string(uint16_t v);
+
AVAHI_C_DECL_END
#endif
diff --git a/avahi-core/entry.c b/avahi-core/entry.c
index 1882d48..d1b2be9 100644
--- a/avahi-core/entry.c
+++ b/avahi-core/entry.c
@@ -225,12 +225,12 @@ static AvahiEntry * server_add_internal(
/* may have to move lower into logic, for _new_ and _modified_ records only */
printf("+++ record of type %d named %s observed at entrypoint\n", r->key->type, r->key->name);
- if (r->key->type == 12 || r->key->type == 2 || r->key->type == 5)
+ /*if (r->key->type == 12 || r->key->type == 2 || r->key->type == 5)
{
printf("c-style: \"%s\"\n", r->data.ptr.name);
printf("canonical: \"%s\"\n", c_to_canonical_string(r->data.ptr.name));
printf("length: \"%d\"\n", (char)strlen(c_to_canonical_string(r->data.ptr.name)));
- }
+ }*/
/*wide_area_publish();*/
diff --git a/avahi-core/wide-area.c b/avahi-core/wide-area.c
index 6195a03..b134018 100644
--- a/avahi-core/wide-area.c
+++ b/avahi-core/wide-area.c
@@ -731,10 +731,12 @@ int avahi_wide_area_has_servers(AvahiWideAreaLookupEngine *e) {
AvahiRecord* tsig_sign_packet(const char* keyname, const char* key, unsigned keylength, AvahiDnsPacket *p, unsigned algorithm) {
AvahiRecord *r;
- unsigned char keyed_hash[EVP_MAX_MD_SIZE];
+ unsigned char keyed_hash[EVP_MAX_MD_SIZE]; /*used for signing */
HMAC_CTX ctx;
unsigned hash_length;
+ char canonic[AVAHI_DOMAIN_NAME_MAX]; /*used in conversions */
+
r = avahi_record_new_full(keyname, AVAHI_DNS_CLASS_ANY, AVAHI_DNS_TYPE_TSIG, 0);
if (!r) {
@@ -802,8 +804,14 @@ AvahiRecord* tsig_sign_packet(const char* keyname, const char* key, unsigned key
/*feed all the data to be hashed in */
/*HMAC_Update(&ctx, <data/>, <length/>);*/
- HMAC_Update(&ctx, p->data, p->size);
- /* HMAC_Update(&ctx, CONTINUE */
+ HMAC_Update(&ctx, p->data, p->size); /*packet in wire format*/
+
+ canonic = c_to_canonical_string(keyname);
+ HMAC_Update(&ctx, canonic, strlen(canonic) +1); /* key name in canonical wire format */
+
+ HMAC_Update(&ctx, uint16_to_canonical_string(AVAHI_DNS_CLASS_ANY), 2); /* class */
+/* HMAC_Update(&ctx,
+ HMAC_Update(&ctx, */
HMAC_Final(&ctx, keyed_hash, &hash_length);
HMAC_cleanup(&ctx);