dns: explicitly endian-convert all fields in header and question
[project/mdnsd.git] / dns.c
diff --git a/dns.c b/dns.c
index aadfdd8f6927806cbdb7108d81c1031559100308..86e5ea3aaa6c7f44cc4d52d4082b8ec9580046e0 100644 (file)
--- a/dns.c
+++ b/dns.c
@@ -237,16 +237,16 @@ static struct dns_header*
 dns_consume_header(uint8_t **data, int *len)
 {
        struct dns_header *h = (struct dns_header *) *data;
-       uint16_t *swap = (uint16_t *) h;
-       int endianess = 6;
 
        if (*len < sizeof(struct dns_header))
                return NULL;
 
-       while (endianess--) {
-               *swap = be16_to_cpu(*swap);
-               swap++;
-       }
+       h->id = be16_to_cpu(h->id);
+       h->flags = be16_to_cpu(h->flags);
+       h->questions = be16_to_cpu(h->questions);
+       h->answers = be16_to_cpu(h->answers);
+       h->authority = be16_to_cpu(h->authority);
+       h->additional = be16_to_cpu(h->additional);
 
        *len -= sizeof(struct dns_header);
        *data += sizeof(struct dns_header);
@@ -258,16 +258,12 @@ static struct dns_question*
 dns_consume_question(uint8_t **data, int *len)
 {
        struct dns_question *q = (struct dns_question *) *data;
-       uint16_t *swap = (uint16_t *) q;
-       int endianess = 2;
 
        if (*len < sizeof(struct dns_question))
                return NULL;
 
-       while (endianess--) {
-               *swap = be16_to_cpu(*swap);
-               swap++;
-       }
+       q->type = be16_to_cpu(q->type);
+       q->class = be16_to_cpu(q->class);
 
        *len -= sizeof(struct dns_question);
        *data += sizeof(struct dns_question);