diff options
Diffstat (limited to 'src/lib/libc/net/res_mkquery.c')
-rw-r--r-- | src/lib/libc/net/res_mkquery.c | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/src/lib/libc/net/res_mkquery.c b/src/lib/libc/net/res_mkquery.c index 25f025e147..1f04c96272 100644 --- a/src/lib/libc/net/res_mkquery.c +++ b/src/lib/libc/net/res_mkquery.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $NetBSD: res_mkquery.c,v 1.5 1995/02/25 06:20:58 cgd Exp $ */ | 1 | /* $NetBSD: res_mkquery.c,v 1.6 1996/02/02 15:22:32 mrg Exp $ */ |
2 | 2 | ||
3 | /*- | 3 | /*- |
4 | * Copyright (c) 1985, 1993 | 4 | * Copyright (c) 1985, 1993 |
@@ -56,9 +56,9 @@ | |||
56 | #if defined(LIBC_SCCS) && !defined(lint) | 56 | #if defined(LIBC_SCCS) && !defined(lint) |
57 | #if 0 | 57 | #if 0 |
58 | static char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93"; | 58 | static char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93"; |
59 | static char rcsid[] = "$Id: res_mkquery.c,v 4.9.1.2 1993/05/17 10:00:01 vixie Exp "; | 59 | static char rcsid[] = "$Id: res_mkquery.c,v 8.3 1995/06/29 09:26:28 vixie Exp "; |
60 | #else | 60 | #else |
61 | static char rcsid[] = "$NetBSD: res_mkquery.c,v 1.5 1995/02/25 06:20:58 cgd Exp $"; | 61 | static char rcsid[] = "$NetBSD: res_mkquery.c,v 1.6 1996/02/02 15:22:32 mrg Exp $"; |
62 | #endif | 62 | #endif |
63 | #endif /* LIBC_SCCS and not lint */ | 63 | #endif /* LIBC_SCCS and not lint */ |
64 | 64 | ||
@@ -73,21 +73,22 @@ static char rcsid[] = "$NetBSD: res_mkquery.c,v 1.5 1995/02/25 06:20:58 cgd Exp | |||
73 | * Form all types of queries. | 73 | * Form all types of queries. |
74 | * Returns the size of the result or -1. | 74 | * Returns the size of the result or -1. |
75 | */ | 75 | */ |
76 | int | ||
76 | res_mkquery(op, dname, class, type, data, datalen, newrr_in, buf, buflen) | 77 | res_mkquery(op, dname, class, type, data, datalen, newrr_in, buf, buflen) |
77 | int op; /* opcode of query */ | 78 | int op; /* opcode of query */ |
78 | const char *dname; /* domain name */ | 79 | const char *dname; /* domain name */ |
79 | int class, type; /* class and type of query */ | 80 | int class, type; /* class and type of query */ |
80 | const char *data; /* resource record data */ | 81 | const u_char *data; /* resource record data */ |
81 | int datalen; /* length of data */ | 82 | int datalen; /* length of data */ |
82 | const char *newrr_in; /* new rr for modify or append */ | 83 | const u_char *newrr_in; /* new rr for modify or append */ |
83 | char *buf; /* buffer to put query */ | 84 | u_char *buf; /* buffer to put query */ |
84 | int buflen; /* size of buffer */ | 85 | int buflen; /* size of buffer */ |
85 | { | 86 | { |
86 | register HEADER *hp; | 87 | register HEADER *hp; |
87 | register char *cp; | 88 | register u_char *cp; |
88 | register int n; | 89 | register int n; |
89 | struct rrec *newrr = (struct rrec *) newrr_in; | 90 | struct rrec *newrr = (struct rrec *) newrr_in; |
90 | char *dnptrs[10], **dpp, **lastdnptr; | 91 | u_char *dnptrs[10], **dpp, **lastdnptr; |
91 | 92 | ||
92 | #ifdef DEBUG | 93 | #ifdef DEBUG |
93 | if (_res.options & RES_DEBUG) | 94 | if (_res.options & RES_DEBUG) |
@@ -117,16 +118,16 @@ res_mkquery(op, dname, class, type, data, datalen, newrr_in, buf, buflen) | |||
117 | */ | 118 | */ |
118 | switch (op) { | 119 | switch (op) { |
119 | case QUERY: | 120 | case QUERY: |
121 | case NS_NOTIFY_OP: | ||
120 | if ((buflen -= QFIXEDSZ) < 0) | 122 | if ((buflen -= QFIXEDSZ) < 0) |
121 | return(-1); | 123 | return(-1); |
122 | if ((n = dn_comp((u_char *)dname, (u_char *)cp, buflen, | 124 | if ((n = dn_comp(dname, cp, buflen, dnptrs, lastdnptr)) < 0) |
123 | (u_char **)dnptrs, (u_char **)lastdnptr)) < 0) | ||
124 | return (-1); | 125 | return (-1); |
125 | cp += n; | 126 | cp += n; |
126 | buflen -= n; | 127 | buflen -= n; |
127 | __putshort(type, (u_char *)cp); | 128 | __putshort(type, cp); |
128 | cp += sizeof(u_int16_t); | 129 | cp += sizeof(u_int16_t); |
129 | __putshort(class, (u_char *)cp); | 130 | __putshort(class, cp); |
130 | cp += sizeof(u_int16_t); | 131 | cp += sizeof(u_int16_t); |
131 | hp->qdcount = htons(1); | 132 | hp->qdcount = htons(1); |
132 | if (op == QUERY || data == NULL) | 133 | if (op == QUERY || data == NULL) |
@@ -135,18 +136,17 @@ res_mkquery(op, dname, class, type, data, datalen, newrr_in, buf, buflen) | |||
135 | * Make an additional record for completion domain. | 136 | * Make an additional record for completion domain. |
136 | */ | 137 | */ |
137 | buflen -= RRFIXEDSZ; | 138 | buflen -= RRFIXEDSZ; |
138 | if ((n = dn_comp((u_char *)data, (u_char *)cp, buflen, | 139 | if ((n = dn_comp(data, cp, buflen, dnptrs, lastdnptr)) < 0) |
139 | (u_char **)dnptrs, (u_char **)lastdnptr)) < 0) | ||
140 | return (-1); | 140 | return (-1); |
141 | cp += n; | 141 | cp += n; |
142 | buflen -= n; | 142 | buflen -= n; |
143 | __putshort(T_NULL, (u_char *)cp); | 143 | __putshort(T_NULL, cp); |
144 | cp += sizeof(u_int16_t); | 144 | cp += sizeof(u_int16_t); |
145 | __putshort(class, (u_char *)cp); | 145 | __putshort(class, cp); |
146 | cp += sizeof(u_int16_t); | 146 | cp += sizeof(u_int16_t); |
147 | __putlong(0, (u_char *)cp); | 147 | __putlong(0, cp); |
148 | cp += sizeof(u_int32_t); | 148 | cp += sizeof(u_int32_t); |
149 | __putshort(0, (u_char *)cp); | 149 | __putshort(0, cp); |
150 | cp += sizeof(u_int16_t); | 150 | cp += sizeof(u_int16_t); |
151 | hp->arcount = htons(1); | 151 | hp->arcount = htons(1); |
152 | break; | 152 | break; |
@@ -158,13 +158,13 @@ res_mkquery(op, dname, class, type, data, datalen, newrr_in, buf, buflen) | |||
158 | if (buflen < 1 + RRFIXEDSZ + datalen) | 158 | if (buflen < 1 + RRFIXEDSZ + datalen) |
159 | return (-1); | 159 | return (-1); |
160 | *cp++ = '\0'; /* no domain name */ | 160 | *cp++ = '\0'; /* no domain name */ |
161 | __putshort(type, (u_char *)cp); | 161 | __putshort(type, cp); |
162 | cp += sizeof(u_int16_t); | 162 | cp += sizeof(u_int16_t); |
163 | __putshort(class, (u_char *)cp); | 163 | __putshort(class, cp); |
164 | cp += sizeof(u_int16_t); | 164 | cp += sizeof(u_int16_t); |
165 | __putlong(0, (u_char *)cp); | 165 | __putlong(0, cp); |
166 | cp += sizeof(u_int32_t); | 166 | cp += sizeof(u_int32_t); |
167 | __putshort(datalen, (u_char *)cp); | 167 | __putshort(datalen, cp); |
168 | cp += sizeof(u_int16_t); | 168 | cp += sizeof(u_int16_t); |
169 | if (datalen) { | 169 | if (datalen) { |
170 | bcopy(data, cp, datalen); | 170 | bcopy(data, cp, datalen); |
@@ -231,6 +231,8 @@ res_mkquery(op, dname, class, type, data, datalen, newrr_in, buf, buflen) | |||
231 | break; | 231 | break; |
232 | 232 | ||
233 | #endif /* ALLOW_UPDATES */ | 233 | #endif /* ALLOW_UPDATES */ |
234 | default: | ||
235 | return (-1); | ||
234 | } | 236 | } |
235 | return (cp - buf); | 237 | return (cp - buf); |
236 | } | 238 | } |