Skip to content

Commit

Permalink
resolved: reorder functions
Browse files Browse the repository at this point in the history
Preparation to make gcrypt optional.
  • Loading branch information
michaelolbrich committed Jan 31, 2016
1 parent 09ce74e commit dbf0b8a
Showing 1 changed file with 62 additions and 62 deletions.
124 changes: 62 additions & 62 deletions src/resolve/resolved-dns-dnssec.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,6 @@
* Normal RR → RRSIG/DNSKEY+ → DS → RRSIG/DNSKEY+ → DS → ... → DS → RRSIG/DNSKEY+ → DS
*/

static void initialize_libgcrypt(void) {
const char *p;

if (gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P))
return;

p = gcry_check_version("1.4.5");
assert(p);

gcry_control(GCRYCTL_DISABLE_SECMEM);
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
}

uint16_t dnssec_keytag(DnsResourceRecord *dnskey, bool mask_revoke) {
const uint8_t *p;
uint32_t sum, f;
Expand Down Expand Up @@ -88,6 +75,68 @@ uint16_t dnssec_keytag(DnsResourceRecord *dnskey, bool mask_revoke) {
return sum & UINT32_C(0xFFFF);
}

int dnssec_canonicalize(const char *n, char *buffer, size_t buffer_max) {
size_t c = 0;
int r;

/* Converts the specified hostname into DNSSEC canonicalized
* form. */

if (buffer_max < 2)
return -ENOBUFS;

for (;;) {
r = dns_label_unescape(&n, buffer, buffer_max);
if (r < 0)
return r;
if (r == 0)
break;

if (buffer_max < (size_t) r + 2)
return -ENOBUFS;

/* The DNSSEC canonical form is not clear on what to
* do with dots appearing in labels, the way DNS-SD
* does it. Refuse it for now. */

if (memchr(buffer, '.', r))
return -EINVAL;

ascii_strlower_n(buffer, (size_t) r);
buffer[r] = '.';

buffer += r + 1;
c += r + 1;

buffer_max -= r + 1;
}

if (c <= 0) {
/* Not even a single label: this is the root domain name */

assert(buffer_max > 2);
buffer[0] = '.';
buffer[1] = 0;

return 1;
}

return (int) c;
}

static void initialize_libgcrypt(void) {
const char *p;

if (gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P))
return;

p = gcry_check_version("1.4.5");
assert(p);

gcry_control(GCRYCTL_DISABLE_SECMEM);
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
}

static int rr_compare(const void *a, const void *b) {
DnsResourceRecord **x = (DnsResourceRecord**) a, **y = (DnsResourceRecord**) b;
size_t m;
Expand Down Expand Up @@ -971,55 +1020,6 @@ int dnssec_has_rrsig(DnsAnswer *a, const DnsResourceKey *key) {
return 0;
}

int dnssec_canonicalize(const char *n, char *buffer, size_t buffer_max) {
size_t c = 0;
int r;

/* Converts the specified hostname into DNSSEC canonicalized
* form. */

if (buffer_max < 2)
return -ENOBUFS;

for (;;) {
r = dns_label_unescape(&n, buffer, buffer_max);
if (r < 0)
return r;
if (r == 0)
break;

if (buffer_max < (size_t) r + 2)
return -ENOBUFS;

/* The DNSSEC canonical form is not clear on what to
* do with dots appearing in labels, the way DNS-SD
* does it. Refuse it for now. */

if (memchr(buffer, '.', r))
return -EINVAL;

ascii_strlower_n(buffer, (size_t) r);
buffer[r] = '.';

buffer += r + 1;
c += r + 1;

buffer_max -= r + 1;
}

if (c <= 0) {
/* Not even a single label: this is the root domain name */

assert(buffer_max > 2);
buffer[0] = '.';
buffer[1] = 0;

return 1;
}

return (int) c;
}

static int digest_to_gcrypt_md(uint8_t algorithm) {

/* Translates a DNSSEC digest algorithm into a gcrypt digest identifier */
Expand Down

0 comments on commit dbf0b8a

Please sign in to comment.