~ubuntu-branches/ubuntu/lucid/bind9/lucid

« back to all changes in this revision

Viewing changes to lib/bind/isc/hex.c

  • Committer: Bazaar Package Importer
  • Author(s): LaMont Jones, Internet Software Consortium, Inc, InterNIC, LaMont Jones
  • Date: 2009-07-28 22:03:14 UTC
  • mfrom: (1.6.1 upstream) (10.2.3 sid)
  • Revision ID: james.westby@ubuntu.com-20090728220314-9wztcj047dxvvhdh
Tags: 1:9.6.1.dfsg.P1-1
[Internet Software Consortium, Inc]

* A specially crafted update packet will cause named to exit. 
  CVE-2009-0696, CERT VU#725188.  Closes: #538975

[InterNIC]

* Update db.root hints file.

[LaMont Jones]

* Move default zone definitions from named.conf to named.conf.default-zones.
   Closes: #492308
* use start-stop-daemon if rndc stop fails.  Closes: #536487
* lwresd: pidfile name was wrong in init script.  Closes: #527137

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
3
 
 * Copyright (c) 2001 by Internet Software Consortium.
4
 
 *
5
 
 * Permission to use, copy, modify, and distribute this software for any
6
 
 * purpose with or without fee is hereby granted, provided that the above
7
 
 * copyright notice and this permission notice appear in all copies.
8
 
 *
9
 
 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
10
 
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
 
 * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
12
 
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
 
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
 
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
15
 
 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
 
 */
17
 
 
18
 
#include <port_before.h>
19
 
#include <ctype.h>
20
 
#include <stdio.h>
21
 
#include <string.h>
22
 
#include <isc/misc.h>
23
 
#include <port_after.h>
24
 
 
25
 
static const char hex[17] = "0123456789abcdef";
26
 
 
27
 
int
28
 
isc_gethexstring(unsigned char *buf, size_t len, int count, FILE *fp,
29
 
                 int *multiline)
30
 
{
31
 
        int c, n;
32
 
        unsigned char x;
33
 
        char *s;
34
 
        int result = count;
35
 
        
36
 
        x = 0; /*%< silence compiler */
37
 
        n = 0;
38
 
        while (count > 0) {
39
 
                c = fgetc(fp);
40
 
 
41
 
                if ((c == EOF) ||
42
 
                    (c == '\n' && !*multiline) ||
43
 
                    (c == '(' && *multiline) ||
44
 
                    (c == ')' && !*multiline))
45
 
                        goto formerr;
46
 
                /* comment */
47
 
                if (c == ';') {
48
 
                        do {
49
 
                                c = fgetc(fp);
50
 
                        } while (c != EOF && c != '\n');
51
 
                        if (c == '\n' && *multiline)
52
 
                                continue;
53
 
                        goto formerr;
54
 
                }
55
 
                /* white space */
56
 
                if (c == ' ' || c == '\t' || c == '\n' || c == '\r')
57
 
                        continue;
58
 
                /* multiline */
59
 
                if ('(' == c || c == ')') {
60
 
                        *multiline = (c == '(' /*)*/);
61
 
                        continue;
62
 
                }
63
 
                if ((s = strchr(hex, tolower(c))) == NULL)
64
 
                        goto formerr;
65
 
                x = (x<<4) | (s - hex);
66
 
                if (++n == 2) {
67
 
                        if (len > 0U) {
68
 
                                *buf++ = x;
69
 
                                len--;
70
 
                        } else
71
 
                                result = -1;
72
 
                        count--;
73
 
                        n = 0;
74
 
                }
75
 
        }
76
 
        return (result);
77
 
 
78
 
 formerr:
79
 
        if (c == '\n')
80
 
                ungetc(c, fp);
81
 
        return (-1);
82
 
}
83
 
 
84
 
void
85
 
isc_puthexstring(FILE *fp, const unsigned char *buf, size_t buflen,
86
 
                 size_t len1, size_t len2, const char *sep)
87
 
{
88
 
        size_t i = 0;
89
 
 
90
 
        if (len1 < 4U)
91
 
                len1 = 4;
92
 
        if (len2 < 4U)
93
 
                len2 = 4;
94
 
        while (buflen > 0U) {
95
 
                fputc(hex[(buf[0]>>4)&0xf], fp);
96
 
                fputc(hex[buf[0]&0xf], fp);
97
 
                i += 2;
98
 
                buflen--;
99
 
                buf++;
100
 
                if (i >= len1 && sep != NULL) {
101
 
                        fputs(sep, fp);
102
 
                        i = 0;
103
 
                        len1 = len2;
104
 
                }
105
 
        }
106
 
}
107
 
 
108
 
void
109
 
isc_tohex(const unsigned char *buf, size_t buflen, char *t) {
110
 
        while (buflen > 0U) {
111
 
                *t++ = hex[(buf[0]>>4)&0xf];
112
 
                *t++ = hex[buf[0]&0xf];
113
 
                buf++;
114
 
                buflen--;
115
 
        }
116
 
        *t = '\0';
117
 
}
118
 
 
119
 
/*! \file */