Author: ume
Date: Sat Aug 30 17:56:58 2014
New Revision: 270851
URL: http://svnweb.freebsd.org/changeset/base/270851

Log:
  MFC r269867:
  Update our stub resolver to final version of libbind
  (libbind-6.0).
  
  Obtained from:        ISC

Modified:
  stable/9/include/arpa/inet.h
  stable/9/include/arpa/nameser.h
  stable/9/include/arpa/nameser_compat.h
  stable/9/include/res_update.h
  stable/9/include/resolv.h
  stable/9/lib/libc/include/isc/eventlib.h
  stable/9/lib/libc/include/isc/list.h
  stable/9/lib/libc/include/port_before.h
  stable/9/lib/libc/inet/inet_addr.c
  stable/9/lib/libc/inet/inet_cidr_ntop.c
  stable/9/lib/libc/inet/inet_cidr_pton.c
  stable/9/lib/libc/inet/inet_net_ntop.c
  stable/9/lib/libc/inet/inet_net_pton.c
  stable/9/lib/libc/inet/inet_neta.c
  stable/9/lib/libc/inet/inet_ntoa.c
  stable/9/lib/libc/inet/inet_ntop.c
  stable/9/lib/libc/inet/inet_pton.c
  stable/9/lib/libc/inet/nsap_addr.c
  stable/9/lib/libc/isc/ev_streams.c
  stable/9/lib/libc/isc/ev_timers.c
  stable/9/lib/libc/isc/eventlib_p.h
  stable/9/lib/libc/nameser/Symbol.map
  stable/9/lib/libc/nameser/ns_name.c
  stable/9/lib/libc/nameser/ns_netint.c
  stable/9/lib/libc/nameser/ns_parse.c
  stable/9/lib/libc/nameser/ns_print.c
  stable/9/lib/libc/nameser/ns_samedomain.c
  stable/9/lib/libc/nameser/ns_ttl.c
  stable/9/lib/libc/resolv/Makefile.inc
  stable/9/lib/libc/resolv/Symbol.map
  stable/9/lib/libc/resolv/herror.c
  stable/9/lib/libc/resolv/res_comp.c
  stable/9/lib/libc/resolv/res_data.c
  stable/9/lib/libc/resolv/res_debug.c
  stable/9/lib/libc/resolv/res_findzonecut.c
  stable/9/lib/libc/resolv/res_init.c
  stable/9/lib/libc/resolv/res_mkquery.c
  stable/9/lib/libc/resolv/res_mkupdate.c
  stable/9/lib/libc/resolv/res_query.c
  stable/9/lib/libc/resolv/res_send.c
  stable/9/lib/libc/resolv/res_update.c
Directory Properties:
  stable/9/include/   (props changed)
  stable/9/include/arpa/   (props changed)
  stable/9/lib/libc/   (props changed)

Modified: stable/9/include/arpa/inet.h
==============================================================================
--- stable/9/include/arpa/inet.h        Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/include/arpa/inet.h        Sat Aug 30 17:56:58 2014        
(r270851)
@@ -51,7 +51,7 @@
 
 /*%
  *     @(#)inet.h      8.1 (Berkeley) 6/2/93
- *     $Id: inet.h,v 1.2.18.1 2005/04/27 05:00:50 sra Exp $
+ *     $Id: inet.h,v 1.3 2005/04/27 04:56:16 sra Exp $
  * $FreeBSD$
  */
 

Modified: stable/9/include/arpa/nameser.h
==============================================================================
--- stable/9/include/arpa/nameser.h     Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/include/arpa/nameser.h     Sat Aug 30 17:56:58 2014        
(r270851)
@@ -1,7 +1,24 @@
 /*
+ * Portions Copyright (C) 2004, 2005, 2008, 2009  Internet Systems Consortium, 
Inc. ("ISC")
+ * Portions Copyright (C) 1996-2003  Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or 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 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.
+ */
+
+/*
  * Copyright (c) 1983, 1989, 1993
  *    The Regents of the University of California.  All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -13,7 +30,7 @@
  * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -28,24 +45,7 @@
  */
 
 /*
- * 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 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.
- */
-
-/*
- *     $Id: nameser.h,v 1.7.18.2 2008/04/03 23:15:15 marka Exp $
+ *     $Id: nameser.h,v 1.16 2009/03/03 01:52:48 each Exp $
  * $FreeBSD$
  */
 
@@ -68,15 +68,18 @@
  * contains a new enough lib/nameser/ to support the feature you need.
  */
 
-#define __NAMESER      19991006        /*%< New interface version stamp. */
+#define __NAMESER      20090302        /*%< New interface version stamp. */
 /*
  * Define constants based on RFC0883, RFC1034, RFC 1035
  */
 #define NS_PACKETSZ    512     /*%< default UDP packet size */
-#define NS_MAXDNAME    1025    /*%< maximum domain name */
+#define NS_MAXDNAME    1025    /*%< maximum domain name (presentation format)*/
 #define NS_MAXMSG      65535   /*%< maximum message size */
 #define NS_MAXCDNAME   255     /*%< maximum compressed domain name */
 #define NS_MAXLABEL    63      /*%< maximum length of domain label */
+#define NS_MAXLABELS   128     /*%< theoretical max #/labels per domain name */
+#define NS_MAXNNAME    256     /*%< maximum uncompressed (binary) domain name*/
+#define        NS_MAXPADDR     (sizeof 
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")
 #define NS_HFIXEDSZ    12      /*%< #/bytes of fixed data in header */
 #define NS_QFIXEDSZ    4       /*%< #/bytes of fixed data in query */
 #define NS_RRFIXEDSZ   10      /*%< #/bytes of fixed data in r record */
@@ -103,6 +106,18 @@ typedef enum __ns_sect {
 } ns_sect;
 
 /*%
+ * Network name (compressed or not) type.  Equivilent to a pointer when used
+ * in a function prototype.  Can be const'd.
+ */
+typedef u_char ns_nname[NS_MAXNNAME];
+typedef const u_char *ns_nname_ct;
+typedef u_char *ns_nname_t;
+
+struct ns_namemap { ns_nname_ct base; int len; };
+typedef struct ns_namemap *ns_namemap_t;
+typedef const struct ns_namemap *ns_namemap_ct;
+
+/*%
  * This is a message handle.  It is caller allocated and has no dynamic data.
  * This structure is intended to be opaque to all but ns_parse.c, thus the
  * leading _'s on the member names.  Use the accessor functions, not the _'s.
@@ -116,6 +131,17 @@ typedef struct __ns_msg {
        const u_char    *_msg_ptr;
 } ns_msg;
 
+/*
+ * This is a newmsg handle, used when constructing new messages with
+ * ns_newmsg_init, et al.
+ */
+struct ns_newmsg {
+       ns_msg          msg;
+       const u_char    *dnptrs[25];
+       const u_char    **lastdnptr;
+};
+typedef struct ns_newmsg ns_newmsg;
+
 /* Private data structure - do not use from outside library. */
 struct _ns_flagdata {  int mask, shift;  };
 extern struct _ns_flagdata _ns_flagdata[];
@@ -140,8 +166,23 @@ typedef    struct __ns_rr {
        const u_char *  rdata;
 } ns_rr;
 
+/*
+ * Same thing, but using uncompressed network binary names, and real C types.
+ */
+typedef        struct __ns_rr2 {
+       ns_nname        nname;
+       size_t          nnamel;
+       int             type;
+       int             rr_class;
+       u_int           ttl;
+       int             rdlength;
+       const u_char *  rdata;
+} ns_rr2;
+
 /* Accessor macros - this is part of the public interface. */
 #define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
+#define ns_rr_nname(rr)        ((const ns_nname_t)(rr).nname)
+#define ns_rr_nnamel(rr) ((rr).nnamel + 0)
 #define ns_rr_type(rr) ((ns_type)((rr).type + 0))
 #define ns_rr_class(rr)        ((ns_class)((rr).rr_class + 0))
 #define ns_rr_ttl(rr)  ((rr).ttl + 0)
@@ -216,9 +257,9 @@ typedef enum __ns_update_operation {
  * This structure is used for TSIG authenticated messages
  */
 struct ns_tsig_key {
-        char name[NS_MAXDNAME], alg[NS_MAXDNAME];
-        unsigned char *data;
-        int len;
+       char name[NS_MAXDNAME], alg[NS_MAXDNAME];
+       unsigned char *data;
+       int len;
 };
 typedef struct ns_tsig_key ns_tsig_key;
 
@@ -274,7 +315,7 @@ typedef enum __ns_type {
        ns_t_key = 25,          /*%< Security key. */
        ns_t_px = 26,           /*%< X.400 mail mapping. */
        ns_t_gpos = 27,         /*%< Geographical position (withdrawn). */
-       ns_t_aaaa = 28,         /*%< Ip6 Address. */
+       ns_t_aaaa = 28,         /*%< IPv6 Address. */
        ns_t_loc = 29,          /*%< Location Information. */
        ns_t_nxt = 30,          /*%< Next domain (security). */
        ns_t_eid = 31,          /*%< Endpoint identifier. */
@@ -284,11 +325,22 @@ typedef enum __ns_type {
        ns_t_naptr = 35,        /*%< Naming Authority PoinTeR */
        ns_t_kx = 36,           /*%< Key Exchange */
        ns_t_cert = 37,         /*%< Certification record */
-       ns_t_a6 = 38,           /*%< IPv6 address (deprecates AAAA) */
-       ns_t_dname = 39,        /*%< Non-terminal DNAME (for IPv6) */
+       ns_t_a6 = 38,           /*%< IPv6 address (experimental) */
+       ns_t_dname = 39,        /*%< Non-terminal DNAME */
        ns_t_sink = 40,         /*%< Kitchen sink (experimentatl) */
        ns_t_opt = 41,          /*%< EDNS0 option (meta-RR) */
        ns_t_apl = 42,          /*%< Address prefix list (RFC3123) */
+       ns_t_ds = 43,           /*%< Delegation Signer */
+       ns_t_sshfp = 44,        /*%< SSH Fingerprint */
+       ns_t_ipseckey = 45,     /*%< IPSEC Key */
+       ns_t_rrsig = 46,        /*%< RRset Signature */
+       ns_t_nsec = 47,         /*%< Negative security */
+       ns_t_dnskey = 48,       /*%< DNS Key */
+       ns_t_dhcid = 49,        /*%< Dynamic host configuratin identifier */
+       ns_t_nsec3 = 50,        /*%< Negative security type 3 */
+       ns_t_nsec3param = 51,   /*%< Negative security type 3 parameters */
+       ns_t_hip = 55,          /*%< Host Identity Protocol */
+       ns_t_spf = 99,          /*%< Sender Policy Framework */
        ns_t_tkey = 249,        /*%< Transaction key */
        ns_t_tsig = 250,        /*%< Transaction signature. */
        ns_t_ixfr = 251,        /*%< Incremental zone transfer. */
@@ -297,6 +349,7 @@ typedef enum __ns_type {
        ns_t_maila = 254,       /*%< Transfer mail agent records. */
        ns_t_any = 255,         /*%< Wildcard match. */
        ns_t_zxfr = 256,        /*%< BIND-specific, nonstandard. */
+       ns_t_dlv = 32769,       /*%< DNSSEC look-aside validatation. */
        ns_t_max = 65536
 } ns_type;
 
@@ -475,6 +528,7 @@ typedef enum __ns_cert_types {
 #define ns_initparse           __ns_initparse
 #define ns_skiprr              __ns_skiprr
 #define ns_parserr             __ns_parserr
+#define ns_parserr2            __ns_parserr2
 #define        ns_sprintrr             __ns_sprintrr
 #define        ns_sprintrrf            __ns_sprintrrf
 #define        ns_format_ttl           __ns_format_ttl
@@ -485,12 +539,19 @@ typedef enum __ns_cert_types {
 #define        ns_name_ntol            __ns_name_ntol
 #define        ns_name_ntop            __ns_name_ntop
 #define        ns_name_pton            __ns_name_pton
+#define        ns_name_pton2           __ns_name_pton2
 #define        ns_name_unpack          __ns_name_unpack
+#define        ns_name_unpack2         __ns_name_unpack2
 #define        ns_name_pack            __ns_name_pack
 #define        ns_name_compress        __ns_name_compress
 #define        ns_name_uncompress      __ns_name_uncompress
 #define        ns_name_skip            __ns_name_skip
 #define        ns_name_rollback        __ns_name_rollback
+#define        ns_name_length          __ns_name_length
+#define        ns_name_eq              __ns_name_eq
+#define        ns_name_owned           __ns_name_owned
+#define        ns_name_map             __ns_name_map
+#define        ns_name_labels          __ns_name_labels
 #if 0
 #define        ns_sign                 __ns_sign
 #define        ns_sign2                __ns_sign2
@@ -508,6 +569,16 @@ typedef enum __ns_cert_types {
 #endif
 #define        ns_makecanon            __ns_makecanon
 #define        ns_samename             __ns_samename
+#define        ns_newmsg_init          __ns_newmsg_init
+#define        ns_newmsg_copy          __ns_newmsg_copy
+#define        ns_newmsg_id            __ns_newmsg_id
+#define        ns_newmsg_flag          __ns_newmsg_flag
+#define        ns_newmsg_q             __ns_newmsg_q
+#define        ns_newmsg_rr            __ns_newmsg_rr
+#define        ns_newmsg_done          __ns_newmsg_done
+#define        ns_rdata_unpack         __ns_rdata_unpack
+#define        ns_rdata_equal          __ns_rdata_equal
+#define        ns_rdata_refers         __ns_rdata_refers
 
 __BEGIN_DECLS
 int            ns_msg_getflag(ns_msg, int);
@@ -518,6 +589,7 @@ void                ns_put32(u_long, u_char *);
 int            ns_initparse(const u_char *, int, ns_msg *);
 int            ns_skiprr(const u_char *, const u_char *, ns_sect, int);
 int            ns_parserr(ns_msg *, ns_sect, int, ns_rr *);
+int            ns_parserr2(ns_msg *, ns_sect, int, ns_rr2 *);
 int            ns_sprintrr(const ns_msg *, const ns_rr *,
                            const char *, const char *, char *, size_t);
 int            ns_sprintrrf(const u_char *, size_t, const char *,
@@ -532,8 +604,12 @@ u_int32_t  ns_datetosecs(const char *cp, 
 int            ns_name_ntol(const u_char *, u_char *, size_t);
 int            ns_name_ntop(const u_char *, char *, size_t);
 int            ns_name_pton(const char *, u_char *, size_t);
+int            ns_name_pton2(const char *, u_char *, size_t, size_t *);
 int            ns_name_unpack(const u_char *, const u_char *,
                               const u_char *, u_char *, size_t);
+int            ns_name_unpack2(const u_char *, const u_char *,
+                               const u_char *, u_char *, size_t,
+                               size_t *);
 int            ns_name_pack(const u_char *, u_char *, int,
                             const u_char **, const u_char **);
 int            ns_name_uncompress(const u_char *, const u_char *,
@@ -543,6 +619,11 @@ int                ns_name_compress(const char *, u_ch
 int            ns_name_skip(const u_char **, const u_char *);
 void           ns_name_rollback(const u_char *, const u_char **,
                                 const u_char **);
+ssize_t                ns_name_length(ns_nname_ct, size_t);
+int            ns_name_eq(ns_nname_ct, size_t, ns_nname_ct, size_t);
+int            ns_name_owned(ns_namemap_ct, int, ns_namemap_ct, int);
+int            ns_name_map(ns_nname_ct, size_t, ns_namemap_t, int);
+int            ns_name_labels(ns_nname_ct, size_t);
 #if 0
 int            ns_sign(u_char *, int *, int, int, void *,
                        const u_char *, int, u_char *, int *, time_t);
@@ -570,6 +651,25 @@ int                ns_subdomain(const char *, const ch
 #endif
 int            ns_makecanon(const char *, char *, size_t);
 int            ns_samename(const char *, const char *);
+int            ns_newmsg_init(u_char *buffer, size_t bufsiz, ns_newmsg *);
+int            ns_newmsg_copy(ns_newmsg *, ns_msg *);
+void           ns_newmsg_id(ns_newmsg *handle, u_int16_t id);
+void           ns_newmsg_flag(ns_newmsg *handle, ns_flag flag, u_int value);
+int            ns_newmsg_q(ns_newmsg *handle, ns_nname_ct qname,
+                           ns_type qtype, ns_class qclass);
+int            ns_newmsg_rr(ns_newmsg *handle, ns_sect sect,
+                            ns_nname_ct name, ns_type type,
+                            ns_class rr_class, u_int32_t ttl,
+                            u_int16_t rdlen, const u_char *rdata);
+size_t         ns_newmsg_done(ns_newmsg *handle);
+ssize_t                ns_rdata_unpack(const u_char *, const u_char *, ns_type,
+                               const u_char *, size_t, u_char *, size_t);
+int            ns_rdata_equal(ns_type,
+                              const u_char *, size_t,
+                              const u_char *, size_t);
+int            ns_rdata_refers(ns_type,
+                               const u_char *, size_t,
+                               const u_char *);
 __END_DECLS
 
 #ifdef BIND_4_COMPAT

Modified: stable/9/include/arpa/nameser_compat.h
==============================================================================
--- stable/9/include/arpa/nameser_compat.h      Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/include/arpa/nameser_compat.h      Sat Aug 30 17:56:58 2014        
(r270851)
@@ -28,7 +28,7 @@
 
 /*%
  *      from nameser.h 8.1 (Berkeley) 6/2/93
- *     $Id: nameser_compat.h,v 1.5.18.3 2006/05/19 02:36:00 marka Exp $
+ *     $Id: nameser_compat.h,v 1.8 2006/05/19 02:33:40 marka Exp $
  * $FreeBSD$
  */
 

Modified: stable/9/include/res_update.h
==============================================================================
--- stable/9/include/res_update.h       Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/include/res_update.h       Sat Aug 30 17:56:58 2014        
(r270851)
@@ -16,7 +16,7 @@
  */
 
 /*
- *     $Id: res_update.h,v 1.2.18.1 2005/04/27 05:00:49 sra Exp $
+ *     $Id: res_update.h,v 1.3 2005/04/27 04:56:15 sra Exp $
  * $FreeBSD$
  */
 

Modified: stable/9/include/resolv.h
==============================================================================
--- stable/9/include/resolv.h   Sat Aug 30 17:48:38 2014        (r270850)
+++ stable/9/include/resolv.h   Sat Aug 30 17:56:58 2014        (r270851)
@@ -1,7 +1,24 @@
 /*
+ * Portions Copyright (C) 2004, 2005, 2008, 2009  Internet Systems Consortium, 
Inc. ("ISC")
+ * Portions Copyright (C) 1995-2003  Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or 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 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.
+ */
+
+/*
  * Copyright (c) 1983, 1987, 1989
  *    The Regents of the University of California.  All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -13,7 +30,7 @@
  * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -27,26 +44,9 @@
  * SUCH DAMAGE.
  */
 
-/*
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
- * Portions 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 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.
- */
-
 /*%
  *     @(#)resolv.h    8.1 (Berkeley) 6/2/93
- *     $Id: resolv.h,v 1.19.18.4 2008/04/03 23:15:15 marka Exp $
+ *     $Id: resolv.h,v 1.30 2009/03/03 01:52:48 each Exp $
  * $FreeBSD$
  */
 
@@ -68,7 +68,7 @@
  * is new enough to contain a certain feature.
  */
 
-#define        __RES   20030124
+#define        __RES   20090302
 
 /*%
  * This used to be defined in res_query.c, now it's in herror.c.
@@ -179,7 +179,7 @@ struct __res_state {
        u_int   _pad;                   /*%< make _u 64 bit aligned */
        union {
                /* On an 32-bit arch this means 512b total. */
-               char    pad[72 - 4*sizeof (int) - 2*sizeof (void *)];
+               char    pad[72 - 4*sizeof (int) - 3*sizeof (void *)];
                struct {
                        u_int16_t               nscount;
                        u_int16_t               nstimes[MAXNS]; /*%< ms. */
@@ -187,6 +187,7 @@ struct __res_state {
                        struct __res_state_ext *ext;    /*%< extention for IPv6 
*/
                } _ext;
        } _u;
+       u_char  *_rnd;                  /*%< PRIVATE: random state */
 };
 
 typedef struct __res_state *res_state;
@@ -320,7 +321,7 @@ __END_DECLS
 #if !defined(SHARED_LIBBIND) || defined(LIB)
 /*
  * If libbind is a shared object (well, DLL anyway)
- * these externs break the linker when resolv.h is 
+ * these externs break the linker when resolv.h is
  * included by a lib client (like named)
  * Make them go away if a client is including this
  *
@@ -378,7 +379,9 @@ extern const struct res_sym __p_rcode_sy
 #define res_nisourserver       __res_nisourserver
 #define res_ownok              __res_ownok
 #define res_queriesmatch       __res_queriesmatch
+#define res_rndinit            __res_rndinit
 #define res_randomid           __res_randomid
+#define res_nrandomid          __res_nrandomid
 #define sym_ntop               __sym_ntop
 #define sym_ntos               __sym_ntos
 #define sym_ston               __sym_ston
@@ -441,7 +444,9 @@ int         dn_count_labels(const char *);
 int            dn_comp(const char *, u_char *, int, u_char **, u_char **);
 int            dn_expand(const u_char *, const u_char *, const u_char *,
                          char *, int);
+void           res_rndinit(res_state);
 u_int          res_randomid(void);
+u_int          res_nrandomid(res_state);
 int            res_nameinquery(const char *, int, int, const u_char *,
                                const u_char *);
 int            res_queriesmatch(const u_char *, const u_char *,

Modified: stable/9/lib/libc/include/isc/eventlib.h
==============================================================================
--- stable/9/lib/libc/include/isc/eventlib.h    Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/include/isc/eventlib.h    Sat Aug 30 17:56:58 2014        
(r270851)
@@ -1,24 +1,24 @@
 /*
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
- * Copyright (c) 1995-1999 by Internet Software Consortium
+ * Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 1995-1999, 2001, 2003  Internet Software Consortium.
  *
- * Permission to use, copy, modify, and distribute this software for any
+ * Permission to use, copy, modify, and/or 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 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.
+ * 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.
  */
 
 /* eventlib.h - exported interfaces for eventlib
  * vix 09sep95 [initial]
  *
- * $Id: eventlib.h,v 1.3.18.3 2008/01/23 02:12:01 marka Exp $
+ * $Id: eventlib.h,v 1.7 2008/11/14 02:36:51 marka Exp $
  */
 
 #ifndef _EVENTLIB_H

Modified: stable/9/lib/libc/include/isc/list.h
==============================================================================
--- stable/9/lib/libc/include/isc/list.h        Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/include/isc/list.h        Sat Aug 30 17:56:58 2014        
(r270851)
@@ -38,7 +38,8 @@
        } while (0)
 #define INIT_LINK(elt, link) \
        INIT_LINK_TYPE(elt, link, void)
-#define LINKED(elt, link) ((void *)((elt)->link.prev) != (void *)(-1))
+#define LINKED(elt, link) ((void *)((elt)->link.prev) != (void *)(-1) && \
+                          (void *)((elt)->link.next) != (void *)(-1))
 
 #define HEAD(list) ((list).head)
 #define TAIL(list) ((list).tail)

Modified: stable/9/lib/libc/include/port_before.h
==============================================================================
--- stable/9/lib/libc/include/port_before.h     Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/include/port_before.h     Sat Aug 30 17:56:58 2014        
(r270851)
@@ -6,6 +6,7 @@
 #define _LIBC          1
 #define DO_PTHREADS    1
 #define USE_KQUEUE     1
+#define HAVE_MD5       1
 
 #define ISC_SOCKLEN_T  socklen_t
 #define ISC_FORMAT_PRINTF(fmt, args) \

Modified: stable/9/lib/libc/inet/inet_addr.c
==============================================================================
--- stable/9/lib/libc/inet/inet_addr.c  Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/inet_addr.c  Sat Aug 30 17:56:58 2014        
(r270851)
@@ -66,7 +66,7 @@
 
 #if defined(LIBC_SCCS) && !defined(lint)
 static const char sccsid[] = "@(#)inet_addr.c  8.1 (Berkeley) 6/17/93";
-static const char rcsid[] = "$Id: inet_addr.c,v 1.4.18.1 2005/04/27 05:00:52 
sra Exp $";
+static const char rcsid[] = "$Id: inet_addr.c,v 1.5 2005/04/27 04:56:19 sra 
Exp $";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/inet/inet_cidr_ntop.c
==============================================================================
--- stable/9/lib/libc/inet/inet_cidr_ntop.c     Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/inet_cidr_ntop.c     Sat Aug 30 17:56:58 2014        
(r270851)
@@ -16,8 +16,10 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_cidr_ntop.c,v 1.4.18.3 2006/10/11 
02:32:47 marka Exp $";
+static const char rcsid[] = "$Id: inet_cidr_ntop.c,v 1.7 2006/10/11 02:18:18 
marka Exp $";
 #endif
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
 
 #include "port_before.h"
 

Modified: stable/9/lib/libc/inet/inet_cidr_pton.c
==============================================================================
--- stable/9/lib/libc/inet/inet_cidr_pton.c     Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/inet_cidr_pton.c     Sat Aug 30 17:56:58 2014        
(r270851)
@@ -16,7 +16,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_cidr_pton.c,v 1.5.18.1 2005/04/27 
05:00:53 sra Exp $";
+static const char rcsid[] = "$Id: inet_cidr_pton.c,v 1.6 2005/04/27 04:56:19 
sra Exp $";
 #endif
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/inet/inet_net_ntop.c
==============================================================================
--- stable/9/lib/libc/inet/inet_net_ntop.c      Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/inet_net_ntop.c      Sat Aug 30 17:56:58 2014        
(r270851)
@@ -16,7 +16,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.3.18.2 2006/06/20 
02:51:32 marka Exp $";
+static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.5 2006/06/20 02:50:14 
marka Exp $";
 #endif
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/inet/inet_net_pton.c
==============================================================================
--- stable/9/lib/libc/inet/inet_net_pton.c      Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/inet_net_pton.c      Sat Aug 30 17:56:58 2014        
(r270851)
@@ -1,22 +1,22 @@
 /*
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
- * Copyright (c) 1996,1999 by Internet Software Consortium.
+ * Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 1996, 1998, 1999, 2001, 2003  Internet Software Consortium.
  *
- * Permission to use, copy, modify, and distribute this software for any
+ * Permission to use, copy, modify, and/or 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 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.
+ * 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.
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_net_pton.c,v 1.7.18.2 2008/08/26 
04:42:43 marka Exp $";
+static const char rcsid[] = "$Id: inet_net_pton.c,v 1.10 2008/11/14 02:36:51 
marka Exp $";
 #endif
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/inet/inet_neta.c
==============================================================================
--- stable/9/lib/libc/inet/inet_neta.c  Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/inet_neta.c  Sat Aug 30 17:56:58 2014        
(r270851)
@@ -16,7 +16,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_neta.c,v 1.2.18.1 2005/04/27 05:00:53 
sra Exp $";
+static const char rcsid[] = "$Id: inet_neta.c,v 1.3 2005/04/27 04:56:20 sra 
Exp $";
 #endif
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/inet/inet_ntoa.c
==============================================================================
--- stable/9/lib/libc/inet/inet_ntoa.c  Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/inet_ntoa.c  Sat Aug 30 17:56:58 2014        
(r270851)
@@ -29,7 +29,7 @@
 
 #if defined(LIBC_SCCS) && !defined(lint)
 static const char sccsid[] = "@(#)inet_ntoa.c  8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: inet_ntoa.c,v 1.1.352.1 2005/04/27 05:00:54 
sra Exp $";
+static const char rcsid[] = "$Id: inet_ntoa.c,v 1.2 2005/04/27 04:56:21 sra 
Exp $";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/inet/inet_ntop.c
==============================================================================
--- stable/9/lib/libc/inet/inet_ntop.c  Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/inet_ntop.c  Sat Aug 30 17:56:58 2014        
(r270851)
@@ -16,7 +16,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_ntop.c,v 1.3.18.2 2005/11/03 23:02:22 
marka Exp $";
+static const char rcsid[] = "$Id: inet_ntop.c,v 1.5 2005/11/03 22:59:52 marka 
Exp $";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/inet/inet_pton.c
==============================================================================
--- stable/9/lib/libc/inet/inet_pton.c  Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/inet_pton.c  Sat Aug 30 17:56:58 2014        
(r270851)
@@ -16,7 +16,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_pton.c,v 1.3.18.2 2005/07/28 07:38:07 
marka Exp $";
+static const char rcsid[] = "$Id: inet_pton.c,v 1.5 2005/07/28 06:51:47 marka 
Exp $";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/inet/nsap_addr.c
==============================================================================
--- stable/9/lib/libc/inet/nsap_addr.c  Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/inet/nsap_addr.c  Sat Aug 30 17:56:58 2014        
(r270851)
@@ -16,7 +16,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nsap_addr.c,v 1.3.18.2 2005/07/28 07:38:08 
marka Exp $";
+static const char rcsid[] = "$Id: nsap_addr.c,v 1.5 2005/07/28 06:51:48 marka 
Exp $";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/isc/ev_streams.c
==============================================================================
--- stable/9/lib/libc/isc/ev_streams.c  Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/isc/ev_streams.c  Sat Aug 30 17:56:58 2014        
(r270851)
@@ -20,7 +20,7 @@
  */
 
 #if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: ev_streams.c,v 1.4.18.1 2005/04/27 05:01:06 
sra Exp $";
+static const char rcsid[] = "$Id: ev_streams.c,v 1.5 2005/04/27 04:56:36 sra 
Exp $";
 #endif
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/isc/ev_timers.c
==============================================================================
--- stable/9/lib/libc/isc/ev_timers.c   Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/isc/ev_timers.c   Sat Aug 30 17:56:58 2014        
(r270851)
@@ -20,7 +20,7 @@
  */
 
 #if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: ev_timers.c,v 1.5.18.1 2005/04/27 05:01:06 
sra Exp $";
+static const char rcsid[] = "$Id: ev_timers.c,v 1.6 2005/04/27 04:56:36 sra 
Exp $";
 #endif
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");

Modified: stable/9/lib/libc/isc/eventlib_p.h
==============================================================================
--- stable/9/lib/libc/isc/eventlib_p.h  Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/isc/eventlib_p.h  Sat Aug 30 17:56:58 2014        
(r270851)
@@ -19,7 +19,7 @@
  * \brief private interfaces for eventlib
  * \author vix 09sep95 [initial]
  *
- * $Id: eventlib_p.h,v 1.5.18.4 2006/03/10 00:20:08 marka Exp $
+ * $Id: eventlib_p.h,v 1.9 2006/03/09 23:57:56 marka Exp $
  * $FreeBSD$
  */
 

Modified: stable/9/lib/libc/nameser/Symbol.map
==============================================================================
--- stable/9/lib/libc/nameser/Symbol.map        Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/nameser/Symbol.map        Sat Aug 30 17:56:58 2014        
(r270851)
@@ -29,3 +29,24 @@ FBSD_1.0 {
        __ns_format_ttl;
        __ns_parse_ttl;
 };
+
+FBSD_1.4 {
+       __ns_parserr2;
+       __ns_name_pton2;
+       __ns_name_unpack2;
+       __ns_name_length;
+       __ns_name_eq;
+       __ns_name_owned;
+       __ns_name_map;
+       __ns_name_labels;
+       __ns_newmsg_init;
+       __ns_newmsg_copy;
+       __ns_newmsg_id;
+       __ns_newmsg_flag;
+       __ns_newmsg_q;
+       __ns_newmsg_rr;
+       __ns_newmsg_done;
+       __ns_rdata_unpack;
+       __ns_rdata_equal;
+       __ns_rdata_refers;
+};

Modified: stable/9/lib/libc/nameser/ns_name.c
==============================================================================
--- stable/9/lib/libc/nameser/ns_name.c Sat Aug 30 17:48:38 2014        
(r270850)
+++ stable/9/lib/libc/nameser/ns_name.c Sat Aug 30 17:56:58 2014        
(r270851)
@@ -16,8 +16,10 @@
  */
 
 #ifndef lint
-static const char rcsid[] = "$Id: ns_name.c,v 1.8.18.2 2005/04/27 05:01:08 sra 
Exp $";
+static const char rcsid[] = "$Id: ns_name.c,v 1.11 2009/01/23 19:59:16 each 
Exp $";
 #endif
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
 
 #include "port_before.h"
 
@@ -121,7 +123,7 @@ ns_name_ntop(const u_char *src, char *ds
                }
                if ((l = labellen(cp - 1)) < 0) {
                        errno = EMSGSIZE; /*%< XXX */
-                       return(-1);
+                       return (-1);
                }
                if (dn + l >= eom) {
                        errno = EMSGSIZE;
@@ -133,12 +135,12 @@ ns_name_ntop(const u_char *src, char *ds
                        if (n != DNS_LABELTYPE_BITSTRING) {
                                /* XXX: labellen should reject this case */
                                errno = EINVAL;
-                               return(-1);
+                               return (-1);
                        }
                        if ((m = decode_bitstring(&cp, dn, eom)) < 0)
                        {
                                errno = EMSGSIZE;
-                               return(-1);
+                               return (-1);
                        }
                        dn += m; 
                        continue;
@@ -197,10 +199,25 @@ ns_name_ntop(const u_char *src, char *ds
  * notes:
  *\li  Enforces label and domain length limits.
  */
+int
+ns_name_pton(const char *src, u_char *dst, size_t dstsiz) {
+       return (ns_name_pton2(src, dst, dstsiz, NULL));
+}
 
+/*
+ * ns_name_pton2(src, dst, dstsiz, *dstlen)
+ *     Convert a ascii string into an encoded domain name as per RFC1035.
+ * return:
+ *     -1 if it fails
+ *     1 if string was fully qualified
+ *     0 is string was not fully qualified
+ * side effects:
+ *     fills in *dstlen (if non-NULL)
+ * notes:
+ *     Enforces label and domain length limits.
+ */
 int
-ns_name_pton(const char *src, u_char *dst, size_t dstsiz)
-{
+ns_name_pton2(const char *src, u_char *dst, size_t dstsiz, size_t *dstlen) {
        u_char *label, *bp, *eom;
        int c, n, escaped, e = 0;
        char *cp;
@@ -215,13 +232,13 @@ ns_name_pton(const char *src, u_char *ds
                        if (c == '[') { /*%< start a bit string label */
                                if ((cp = strchr(src, ']')) == NULL) {
                                        errno = EINVAL; /*%< ??? */
-                                       return(-1);
+                                       return (-1);
                                }
                                if ((e = encode_bitsring(&src, cp + 2,
                                                         &label, &bp, eom))
                                    != 0) {
                                        errno = e;
-                                       return(-1);
+                                       return (-1);
                                }
                                escaped = 0;
                                label = bp++;
@@ -229,7 +246,7 @@ ns_name_pton(const char *src, u_char *ds
                                        goto done;
                                else if (c != '.') {
                                        errno = EINVAL;
-                                       return(-1);
+                                       return  (-1);
                                }
                                continue;
                        }
@@ -281,6 +298,8 @@ ns_name_pton(const char *src, u_char *ds
                                        errno = EMSGSIZE;
                                        return (-1);
                                }
+                               if (dstlen != NULL)
+                                       *dstlen = (bp - dst);
                                return (1);
                        }
                        if (c == 0 || *src == '.') {
@@ -318,6 +337,8 @@ ns_name_pton(const char *src, u_char *ds
                errno = EMSGSIZE;
                return (-1);
        }
+       if (dstlen != NULL)
+               *dstlen = (bp - dst);
        return (0);
 }
 
@@ -365,7 +386,7 @@ ns_name_ntol(const u_char *src, u_char *
                }
                for ((void)NULL; l > 0; l--) {
                        c = *cp++;
-                       if (isupper(c))
+                       if (isascii(c) && isupper(c))
                                *dn++ = tolower(c);
                        else
                                *dn++ = c;
@@ -385,6 +406,21 @@ int
 ns_name_unpack(const u_char *msg, const u_char *eom, const u_char *src,
               u_char *dst, size_t dstsiz)
 {
+       return (ns_name_unpack2(msg, eom, src, dst, dstsiz, NULL));
+}
+
+/*
+ * ns_name_unpack2(msg, eom, src, dst, dstsiz, *dstlen)
+ *     Unpack a domain name from a message, source may be compressed.
+ * return:
+ *     -1 if it fails, or consumed octets if it succeeds.
+ * side effect:
+ *     fills in *dstlen (if non-NULL).
+ */
+int
+ns_name_unpack2(const u_char *msg, const u_char *eom, const u_char *src,
+               u_char *dst, size_t dstsiz, size_t *dstlen)
+{
        const u_char *srcp, *dstlim;
        u_char *dstp;
        int n, len, checked, l;
@@ -407,7 +443,7 @@ ns_name_unpack(const u_char *msg, const 
                        /* Limit checks. */
                        if ((l = labellen(srcp - 1)) < 0) {
                                errno = EMSGSIZE;
-                               return(-1);
+                               return (-1);
                        }
                        if (dstp + l + 1 >= dstlim || srcp + l >= eom) {
                                errno = EMSGSIZE;
@@ -449,7 +485,9 @@ ns_name_unpack(const u_char *msg, const 
                        return (-1);                    /*%< flag error */
                }
        }
-       *dstp = '\0';
+       *dstp++ = 0;
+       if (dstlen != NULL)
+               *dstlen = dstp - dst;
        if (len < 0)
                len = srcp - src;
        return (len);
@@ -508,7 +546,7 @@ ns_name_pack(const u_char *src, u_char *
                }
                if ((l0 = labellen(srcp)) < 0) {
                        errno = EINVAL;
-                       return(-1);
+                       return (-1);
                }
                l += l0 + 1;
                if (l > MAXCDNAME) {
@@ -655,7 +693,7 @@ ns_name_skip(const u_char **ptrptr, cons
                case NS_TYPE_ELT: /*%< EDNS0 extended label */
                        if ((l = labellen(cp - 1)) < 0) {
                                errno = EMSGSIZE; /*%< XXX */
-                               return(-1);
+                               return (-1);
                        }
                        cp += l;
                        continue;
@@ -676,6 +714,150 @@ ns_name_skip(const u_char **ptrptr, cons
        return (0);
 }
 
+/* Find the number of octets an nname takes up, including the root label.
+ * (This is basically ns_name_skip() without compression-pointer support.)
+ * ((NOTE: can only return zero if passed-in namesiz argument is zero.))
+ */
+ssize_t
+ns_name_length(ns_nname_ct nname, size_t namesiz) {
+       ns_nname_ct orig = nname;
+       u_int n;
+
+       while (namesiz-- > 0 && (n = *nname++) != 0) {
+               if ((n & NS_CMPRSFLGS) != 0) {
+                       errno = EISDIR;
+                       return (-1);
+               }
+               if (n > namesiz) {
+                       errno = EMSGSIZE;
+                       return (-1);
+               }
+               nname += n;
+               namesiz -= n;
+       }
+       return (nname - orig);
+}
+
+/* Compare two nname's for equality.  Return -1 on error (setting errno).
+ */
+int
+ns_name_eq(ns_nname_ct a, size_t as, ns_nname_ct b, size_t bs) {
+       ns_nname_ct ae = a + as, be = b + bs;
+       int ac, bc;
+
+       while (ac = *a, bc = *b, ac != 0 && bc != 0) {
+               if ((ac & NS_CMPRSFLGS) != 0 || (bc & NS_CMPRSFLGS) != 0) {
+                       errno = EISDIR;
+                       return (-1);
+               }
+               if (a + ac >= ae || b + bc >= be) {
+                       errno = EMSGSIZE;
+                       return (-1);
+               }
+               if (ac != bc || strncasecmp((const char *) ++a,
+                                           (const char *) ++b, ac) != 0)
+                       return (0);
+               a += ac, b += bc;
+       }
+       return (ac == 0 && bc == 0);
+}
+
+/* Is domain "A" owned by (at or below) domain "B"?
+ */
+int
+ns_name_owned(ns_namemap_ct a, int an, ns_namemap_ct b, int bn) {
+       /* If A is shorter, it cannot be owned by B. */
+       if (an < bn)
+               return (0);
+
+       /* If they are unequal before the length of the shorter, A cannot... */
+       while (bn > 0) {
+               if (a->len != b->len ||
+                   strncasecmp((const char *) a->base,
+                               (const char *) b->base, a->len) != 0)
+                       return (0);
+               a++, an--;
+               b++, bn--;
+       }
+
+       /* A might be longer or not, but either way, B owns it. */
+       return (1);
+}
+
+/* Build an array of <base,len> tuples from an nname, top-down order.
+ * Return the number of tuples (labels) thus discovered.
+ */
+int
+ns_name_map(ns_nname_ct nname, size_t namelen, ns_namemap_t map, int mapsize) {
+       u_int n;
+       int l;
+
+       n = *nname++;
+       namelen--;
+
+       /* Root zone? */
+       if (n == 0) {
+               /* Extra data follows name? */
+               if (namelen > 0) {
+                       errno = EMSGSIZE;
+                       return (-1);
+               }
+               return (0);
+       }
+
+       /* Compression pointer? */
+       if ((n & NS_CMPRSFLGS) != 0) {
+               errno = EISDIR;
+               return (-1);
+       }
+
+       /* Label too long? */
+       if (n > namelen) {
+               errno = EMSGSIZE;
+               return (-1);
+       }
+

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to