4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Copyright (c) 1985, 1993
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * The Regents of the University of California. All rights reserved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Portions copyright (c) 1999, 2000
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Intel Corporation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * All rights reserved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Redistribution and use in source and binary forms, with or without
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * modification, are permitted provided that the following conditions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * are met:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 1. Redistributions of source code must retain the above copyright
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * notice, this list of conditions and the following disclaimer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 2. Redistributions in binary form must reproduce the above copyright
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * notice, this list of conditions and the following disclaimer in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * documentation and/or other materials provided with the distribution.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 3. All advertising materials mentioning features or use of this software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * must display the following acknowledgement:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * This product includes software developed by the University of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * California, Berkeley, Intel Corporation, and its contributors.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 4. Neither the name of University, Intel Corporation, or their respective
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * contributors may be used to endorse or promote products derived from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * this software without specific prior written permission.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Portions Copyright (c) 1993 by Digital Equipment Corporation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Permission to use, copy, modify, and distribute this software for any
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * purpose with or without fee is hereby granted, provided that the above
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * copyright notice and this permission notice appear in all copies, and that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * the name of Digital Equipment Corporation not be used in advertising or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * publicity pertaining to distribution of the document or software without
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * specific, written prior permission.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * SOFTWARE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Portions Copyright (c) 1996 by Internet Software Consortium.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Permission to use, copy, modify, and distribute this software for any
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * purpose with or without fee is hereby granted, provided that the above
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * copyright notice and this permission notice appear in all copies.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * SOFTWARE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if defined(LIBC_SCCS) && !defined(lint)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93";
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic char orig_rcsid[] = "From: Id: res_mkquery.c,v 8.9 1997/04/24 22:22:36 vixie Exp $";
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic char rcsid[] = "$Id: res_mkquery.c,v 1.1.1.1 2003/11/19 01:51:37 kyu3 Exp $";
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif /* LIBC_SCCS and not lint */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <sys/types.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <sys/param.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <netinet/in.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <arpa/nameser.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <netdb.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <resolv.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <stdio.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <string.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "res_config.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Form all types of queries.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Returns the size of the result or -1.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncres_mkquery(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int op, /* opcode of query */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const char *dname, /* domain name */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int class, /* class of query */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int type, /* type of query */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const u_char *data, /* resource record data */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int datalen, /* length of data */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const u_char *newrr_in, /* new rr for modify or append */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_char *buf, /* buffer to put query */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int buflen /* size of buffer */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync register HEADER *hp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync register u_char *cp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync register int n;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync u_char *dnptrs[20], **dpp, **lastdnptr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync h_errno = NETDB_INTERNAL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (-1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef DEBUG
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (_res.options & RES_DEBUG)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync printf(";; res_mkquery(%d, %s, %d, %d)\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync op, dname, class, type);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Initialize header fields.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((buf == NULL) || (buflen < HFIXEDSZ))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (-1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync memset(buf, 0, HFIXEDSZ);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync hp = (HEADER *) buf;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync hp->id = htons(++_res.id);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync hp->opcode = op;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync hp->rd = (_res.options & RES_RECURSE) != 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync hp->rcode = NOERROR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp = buf + HFIXEDSZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buflen -= HFIXEDSZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync dpp = dnptrs;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *dpp++ = buf;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *dpp++ = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync lastdnptr = dnptrs + sizeof dnptrs / sizeof dnptrs[0];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * perform opcode specific processing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync switch (op) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case QUERY: /*FALLTHROUGH*/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case NS_NOTIFY_OP:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((buflen -= QFIXEDSZ) < 0)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (-1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((n = dn_comp(dname, cp, buflen, dnptrs, lastdnptr)) < 0)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (-1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += n;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buflen -= n;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putshort((u_int16_t)type, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT16SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putshort((u_int16_t)class, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT16SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync hp->qdcount = htons(1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (op == QUERY || data == NULL)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Make an additional record for completion domain.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buflen -= RRFIXEDSZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync n = dn_comp((char *)data, cp, buflen, dnptrs, lastdnptr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (n < 0)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (-1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += n;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buflen -= n;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putshort(T_NULL, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT16SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putshort((u_int16_t)class, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT16SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putlong(0, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT32SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putshort(0, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT16SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync hp->arcount = htons(1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case IQUERY:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Initialize answer section
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (buflen < 1 + RRFIXEDSZ + datalen)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (-1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *cp++ = '\0'; /* no domain name */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putshort((u_int16_t)type, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT16SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putshort((u_int16_t)class, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT16SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putlong(0, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT32SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync __putshort((u_int16_t)datalen, cp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += INT16SZ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (datalen) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync memcpy(cp, data, datalen);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync cp += datalen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync hp->ancount = htons(1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync default:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (-1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ((int)(cp - buf));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}