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 | } | 
