summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/res_mkquery.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libc/net/res_mkquery.c')
-rw-r--r--src/lib/libc/net/res_mkquery.c46
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
58static char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93"; 58static char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93";
59static char rcsid[] = "$Id: res_mkquery.c,v 4.9.1.2 1993/05/17 10:00:01 vixie Exp "; 59static char rcsid[] = "$Id: res_mkquery.c,v 8.3 1995/06/29 09:26:28 vixie Exp ";
60#else 60#else
61static char rcsid[] = "$NetBSD: res_mkquery.c,v 1.5 1995/02/25 06:20:58 cgd Exp $"; 61static 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 */
76int
76res_mkquery(op, dname, class, type, data, datalen, newrr_in, buf, buflen) 77res_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}