[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [Patch] tcpip: DNS



Am Freitag, 21. Dezember 2007 00.33:33 schrieb Kevin Wolf:
> Nach den vielen Rückmeldungen hier die von meiner Seite aus endgültige
> Version.


> +/**
> + * Loest einen Domainnamen in eine IP-Adresse auf.
> + *
> + * @param domain Der auszul�sender Domainname als nullterminierter String,
War wohl schon etwas spät... ;-)



> +    size_t domain_len = strlen(domain);
> +    char data[2 + sizeof(struct dns_header) + domain_len + 6];
Hier wäre es noch schön zu wissen, was das +6 da überall soll... ;-)

> +    for (i = domain_len; i; i--) {
> +        if (domain[i - 1] != '.') {
> +            qname[i] = domain[i - 1];
> +            label_len++;
> +        } else {
> +            qname[i] = label_len;
> +            label_len = 0;
> +        }
> +    }
Was passiert denn wenn ich jetzt ganz fies bin, und Lables habe die länger als 
63 Zeichen oder sogar länger als 255 Zeichen sind?

> +    // QTYPE = A und QCLASS = IN
> +    *((word*) &data[2 + sizeof(struct dns_header) + domain_len + 2]) =
> +        big_endian_word(1);
> +    *((word*) &data[2 + sizeof(struct dns_header) + domain_len + 4]) =
> +        big_endian_word(1);
Makros für A und IN wären da wohl nicht schlecht. Kommt ja auch weiter unten 
nochmal vor.

> +    // Senden
> +    struct tcp_out_buffer out_buffer = {
> +        .size = 2 + sizeof(struct dns_header) + domain_len + 6,
> +        .data = data
> +    };
Vielleicht packst du diese Grösse am besten in eine Variable? Dann musst du 
nicht überall erklären, wie sie sich zusammensetzt. ;-)

Das ist was mir gerade so aufgefallen ist. Beim Rest fällt mir zumindest 
nichts auf, das offensichtlich falsch ist.