diff options
author | Federico Lucifredi <flucifredi@acm.org> | 2007-12-27 09:12:42 +0000 |
---|---|---|
committer | Federico Lucifredi <flucifredi@acm.org> | 2007-12-27 09:12:42 +0000 |
commit | 04a12e4c8b75b68ff137eafdbe50f5354f17b4e9 (patch) | |
tree | 81cfeed8c37eb5465b50dd8f37dfd81d7f4a6bc9 | |
parent | 0c05ad822bb8fe4cd640c64819b16a2b82ae79a2 (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.c | 8 | ||||
-rw-r--r-- | avahi-core/domain-util.h | 3 | ||||
-rw-r--r-- | avahi-core/entry.c | 4 | ||||
-rw-r--r-- | avahi-core/wide-area.c | 14 |
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); |