summaryrefslogtreecommitdiff
path: root/usr/src/lib/libresolv2/common/resolv/res_mkupdate.c
diff options
context:
space:
mode:
authorRao Shoaib <Rao.Shoaib@Sun.COM>2009-11-11 08:45:41 -0800
committerRao Shoaib <Rao.Shoaib@Sun.COM>2009-11-11 08:45:41 -0800
commit9525b14bcdeb5b5f6f95ab27c2f48f18bd2ec829 (patch)
treedf51891a276edf456c1481f49653a76cdfedee53 /usr/src/lib/libresolv2/common/resolv/res_mkupdate.c
parent0324f02a004039d6377111191fdd7134452d7817 (diff)
downloadillumos-gate-9525b14bcdeb5b5f6f95ab27c2f48f18bd2ec829.tar.gz
6289479 libresolv2 clean up and alignment with libbind.6.0
Diffstat (limited to 'usr/src/lib/libresolv2/common/resolv/res_mkupdate.c')
-rw-r--r--usr/src/lib/libresolv2/common/resolv/res_mkupdate.c126
1 files changed, 62 insertions, 64 deletions
diff --git a/usr/src/lib/libresolv2/common/resolv/res_mkupdate.c b/usr/src/lib/libresolv2/common/resolv/res_mkupdate.c
index d66f0b91ed..2eb6757a0e 100644
--- a/usr/src/lib/libresolv2/common/resolv/res_mkupdate.c
+++ b/usr/src/lib/libresolv2/common/resolv/res_mkupdate.c
@@ -1,34 +1,28 @@
/*
- * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
+ * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1996-1999 by Internet Software Consortium.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
+/*! \file
+ * \brief
* Based on the Dynamic DNS reference implementation by Viraj Bais
- * <viraj_bais@ccm.fm.intel.com>
+ * &lt;viraj_bais@ccm.fm.intel.com>
*/
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: res_mkupdate.c,v 1.30 2003/08/14 07:54:50 marka Exp $";
+static const char rcsid[] = "$Id: res_mkupdate.c,v 1.10 2008/12/11 09:59:00 marka Exp $";
#endif /* not lint */
#include "port_before.h"
@@ -69,23 +63,25 @@ static int getstr_str(char *, int, u_char **, u_char *);
int res_protocolnumber(const char *);
int res_servicenumber(const char *);
-/*
+/*%
* Form update packets.
* Returns the size of the resulting packet if no error
+ *
* On error,
- * returns -1 if error in reading a word/number in rdata
+ * returns
+ *\li -1 if error in reading a word/number in rdata
* portion for update packets
- * -2 if length of buffer passed is insufficient
- * -3 if zone section is not the first section in
+ *\li -2 if length of buffer passed is insufficient
+ *\li -3 if zone section is not the first section in
* the linked list, or section order has a problem
- * -4 on a number overflow
- * -5 unknown operation or no records
+ *\li -4 on a number overflow
+ *\li -5 unknown operation or no records
*/
int
res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
ns_updrec *rrecp_start = rrecp_in;
HEADER *hp;
- u_char *cp, *sp1, *sp2, *startp, *endp;
+ u_char *cp, *sp2, *startp, *endp;
int n, i, soanum, multiline;
ns_updrec *rrecp;
struct in_addr ina;
@@ -105,10 +101,10 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
return (-1);
memset(buf, 0, HFIXEDSZ);
hp = (HEADER *) buf;
- hp->id = htons(++statp->id);
+ statp->id = res_nrandomid(statp);
+ hp->id = htons(statp->id);
hp->opcode = ns_o_update;
hp->rcode = NOERROR;
- sp1 = buf + 2*INT16SZ; /* save pointer to zocount */
cp = buf + HFIXEDSZ;
buflen -= HFIXEDSZ;
dpp = dnptrs;
@@ -197,7 +193,7 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
}
ShrinkBuffer(INT32SZ + INT16SZ);
PUTLONG(rttl, cp);
- sp2 = cp; /* save pointer to length byte */
+ sp2 = cp; /*%< save pointer to length byte */
cp += INT16SZ;
if (rrecp->r_size == 0) {
if (section == S_UPDATE && rclass != C_ANY)
@@ -226,6 +222,7 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
case T_MR:
case T_NS:
case T_PTR:
+ case ns_t_dname:
if (!getword_str(buf2, sizeof buf2, &startp, endp))
return (-1);
n = dn_comp(buf2, cp, buflen, dnptrs, lastdnptr);
@@ -356,13 +353,13 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
bm[i] = 0;
while (getword_str(buf2, sizeof buf2, &startp, endp)) {
- if ((n1 = res_servicenumber(buf2)) <= 0)
+ if ((n = res_servicenumber(buf2)) <= 0)
return (-1);
- if (n1 < MAXPORT) {
- bm[n1/8] |= (0x80>>(n1%8));
- if (n1 > maxbm)
- maxbm = n1;
+ if (n < MAXPORT) {
+ bm[n/8] |= (0x80>>(n%8));
+ if ((unsigned)n > maxbm)
+ maxbm = n;
} else
return (-1);
}
@@ -386,7 +383,7 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
}
break;
case T_TXT:
- while (1) {
+ for (;;) {
if ((n = getstr_str(buf2, sizeof buf2,
&startp, endp)) < 0) {
if (cp != (sp2 + INT16SZ))
@@ -402,7 +399,7 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
}
break;
case T_X25:
- /* RFC 1183 */
+ /* RFC1183 */
if ((n = getstr_str(buf2, sizeof buf2, &startp,
endp)) < 0)
return (-1);
@@ -414,7 +411,7 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
cp += n;
break;
case T_ISDN:
- /* RFC 1183 */
+ /* RFC1183 */
if ((n = getstr_str(buf2, sizeof buf2, &startp,
endp)) < 0)
return (-1);
@@ -588,7 +585,7 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
ShrinkBuffer(n);
maxtype = 0;
memset(data, 0, sizeof data);
- while (1) {
+ for (;;) {
if (!getword_str(buf2, sizeof buf2, &startp,
endp))
break;
@@ -715,7 +712,7 @@ res_nmkupdate(res_state statp, ns_updrec *rrecp_in, u_char *buf, int buflen) {
return (cp - buf);
}
-/*
+/*%
* Get a whitespace delimited word from a string (not file)
* into buf. modify the start pointer to point after the
* word in the string.
@@ -728,9 +725,9 @@ getword_str(char *buf, int size, u_char **startpp, u_char *endp) {
for (cp = buf; *startpp <= endp; ) {
c = **startpp;
if (isspace(c) || c == '\0') {
- if (cp != buf) /* trailing whitespace */
+ if (cp != buf) /*%< trailing whitespace */
break;
- else { /* leading whitespace */
+ else { /*%< leading whitespace */
(*startpp)++;
continue;
}
@@ -744,9 +741,9 @@ getword_str(char *buf, int size, u_char **startpp, u_char *endp) {
return (cp != buf);
}
-/*
+/*%
* get a white spae delimited string from memory. Process quoted strings
- * and \DDD escapes. Return length or -1 on error. Returned string may
+ * and \\DDD escapes. Return length or -1 on error. Returned string may
* contain nulls.
*/
static char digits[] = "0123456789";
@@ -823,7 +820,8 @@ getstr_str(char *buf, int size, u_char **startpp, u_char *endp) {
*cp = '\0';
return ((cp == buf)? (seen_quote? 0: -1): (cp - buf));
}
-/*
+
+/*%
* Get a whitespace delimited base 16 number from a string (not file) into buf
* update the start pointer to point after the number in the string.
*/
@@ -839,9 +837,9 @@ gethexnum_str(u_char **startpp, u_char *endp) {
for (n = 0; *startpp <= endp; ) {
c = **startpp;
if (isspace(c) || c == '\0') {
- if (seendigit) /* trailing whitespace */
+ if (seendigit) /*%< trailing whitespace */
break;
- else { /* leading whitespace */
+ else { /*%< leading whitespace */
(*startpp)++;
continue;
}
@@ -871,7 +869,7 @@ gethexnum_str(u_char **startpp, u_char *endp) {
return (n + m);
}
-/*
+/*%
* Get a whitespace delimited base 10 number from a string (not file) into buf
* update the start pointer to point after the number in the string.
*/
@@ -884,9 +882,9 @@ getnum_str(u_char **startpp, u_char *endp) {
for (n = 0; *startpp <= endp; ) {
c = **startpp;
if (isspace(c) || c == '\0') {
- if (seendigit) /* trailing whitespace */
+ if (seendigit) /*%< trailing whitespace */
break;
- else { /* leading whitespace */
+ else { /*%< leading whitespace */
(*startpp)++;
continue;
}
@@ -913,7 +911,7 @@ getnum_str(u_char **startpp, u_char *endp) {
return (n + m);
}
-/*
+/*%
* Allocate a resource record buffer & save rr info.
*/
ns_updrec *
@@ -928,14 +926,14 @@ res_mkupdrec(int section, const char *dname,
}
INIT_LINK(rrecp, r_link);
INIT_LINK(rrecp, r_glink);
- rrecp->r_class = class;
- rrecp->r_type = type;
+ rrecp->r_class = (ns_class)class;
+ rrecp->r_type = (ns_type)type;
rrecp->r_ttl = ttl;
- rrecp->r_section = section;
+ rrecp->r_section = (ns_sect)section;
return (rrecp);
}
-/*
+/*%
* Free a resource record buffer created by res_mkupdrec.
*/
void
@@ -977,7 +975,7 @@ res_buildservicelist() {
free(slp);
break;
}
- slp->port = ntohs((u_int16_t)sp->s_port); /* host byt order */
+ slp->port = ntohs((u_int16_t)sp->s_port); /*%< host byt order */
slp->next = servicelist;
slp->prev = NULL;
if (servicelist)
@@ -1019,7 +1017,7 @@ res_buildprotolist(void) {
free(slp);
break;
}
- slp->port = pp->p_proto; /* host byte order */
+ slp->port = pp->p_proto; /*%< host byte order */
slp->next = protolist;
slp->prev = NULL;
if (protolist)
@@ -1056,14 +1054,14 @@ findservice(const char *s, struct valuelist **list) {
lp->next = *list;
*list = lp;
}
- return (lp->port); /* host byte order */
+ return (lp->port); /*%< host byte order */
}
if (sscanf(s, "%d", &n) != 1 || n <= 0)
n = -1;
return (n);
}
-/*
+/*%
* Convert service name or (ascii) number to int.
*/
int
@@ -1073,7 +1071,7 @@ res_servicenumber(const char *p) {
return (findservice(p, &servicelist));
}
-/*
+/*%
* Convert protocol name or (ascii) number to int.
*/
int
@@ -1084,14 +1082,14 @@ res_protocolnumber(const char *p) {
}
static struct servent *
-cgetservbyport(u_int16_t port, const char *proto) { /* Host byte order. */
+cgetservbyport(u_int16_t port, const char *proto) { /*%< Host byte order. */
struct valuelist **list = &servicelist;
struct valuelist *lp = *list;
static struct servent serv;
port = ntohs(port);
for (; lp != NULL; lp = lp->next) {
- if (port != (u_int16_t)lp->port) /* Host byte order. */
+ if (port != (u_int16_t)lp->port) /*%< Host byte order. */
continue;
if (strcasecmp(lp->proto, proto) == 0) {
if (lp != *list) {
@@ -1112,13 +1110,13 @@ cgetservbyport(u_int16_t port, const char *proto) { /* Host byte order. */
}
static struct protoent *
-cgetprotobynumber(int proto) { /* Host byte order. */
+cgetprotobynumber(int proto) { /*%< Host byte order. */
struct valuelist **list = &protolist;
struct valuelist *lp = *list;
static struct protoent prot;
for (; lp != NULL; lp = lp->next)
- if (lp->port == proto) { /* Host byte order. */
+ if (lp->port == proto) { /*%< Host byte order. */
if (lp != *list) {
lp->prev->next = lp->next;
if (lp->next)
@@ -1128,7 +1126,7 @@ cgetprotobynumber(int proto) { /* Host byte order. */
*list = lp;
}
prot.p_name = lp->name;
- prot.p_proto = lp->port; /* Host byte order. */
+ prot.p_proto = lp->port; /*%< Host byte order. */
return (&prot);
}
return (0);
@@ -1150,7 +1148,7 @@ res_protocolname(int num) {
}
const char *
-res_servicename(u_int16_t port, const char *proto) { /* Host byte order. */
+res_servicename(u_int16_t port, const char *proto) { /*%< Host byte order. */
static char number[8];
struct servent *ss;