Update our stub resolver to final version of libbind.
Obtained from: ISC
This commit is contained in:
parent
e288c07405
commit
228ba577ee
@ -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$
|
||||
*/
|
||||
|
||||
|
@ -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 */
|
||||
@ -102,6 +105,18 @@ typedef enum __ns_sect {
|
||||
ns_s_max = 4
|
||||
} 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
|
||||
@ -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 *errp);
|
||||
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_char *, size_t,
|
||||
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 char *);
|
||||
#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
|
||||
|
@ -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$
|
||||
*/
|
||||
|
||||
|
@ -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$
|
||||
*/
|
||||
|
||||
|
@ -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; /*%< extension 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_syms[];
|
||||
#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 *,
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -6,6 +6,7 @@
|
||||
#define _LIBC 1
|
||||
#define DO_PTHREADS 1
|
||||
#define USE_POLL 1
|
||||
#define HAVE_MD5 1
|
||||
|
||||
#define ISC_SOCKLEN_T socklen_t
|
||||
#define ISC_FORMAT_PRINTF(fmt, args) \
|
||||
|
@ -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$");
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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$");
|
||||
|
@ -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$");
|
||||
|
@ -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$");
|
||||
|
@ -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$");
|
||||
|
@ -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$");
|
||||
|
@ -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$");
|
||||
|
@ -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$");
|
||||
|
@ -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$");
|
||||
|
@ -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$");
|
||||
|
@ -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$");
|
||||
|
@ -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$
|
||||
*/
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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 *dst, size_t dstsiz)
|
||||
}
|
||||
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 *dst, size_t dstsiz)
|
||||
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 *dst, size_t dstsiz)
|
||||
* notes:
|
||||
*\li Enforces label and domain length limits.
|
||||
*/
|
||||
|
||||
int
|
||||
ns_name_pton(const char *src, u_char *dst, size_t dstsiz)
|
||||
{
|
||||
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_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 *dst, size_t dstsiz)
|
||||
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 *dst, size_t dstsiz)
|
||||
goto done;
|
||||
else if (c != '.') {
|
||||
errno = EINVAL;
|
||||
return(-1);
|
||||
return (-1);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@ -281,6 +298,8 @@ ns_name_pton(const char *src, u_char *dst, size_t dstsiz)
|
||||
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 *dst, size_t dstsiz)
|
||||
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 *dst, size_t dstsiz)
|
||||
}
|
||||
for ((void)NULL; l > 0; l--) {
|
||||
c = *cp++;
|
||||
if (isupper(c))
|
||||
if (isascii(c) && isupper(c))
|
||||
*dn++ = tolower(c);
|
||||
else
|
||||
*dn++ = c;
|
||||
@ -384,6 +405,21 @@ ns_name_ntol(const u_char *src, u_char *dst, size_t dstsiz)
|
||||
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;
|
||||
@ -407,7 +443,7 @@ ns_name_unpack(const u_char *msg, const u_char *eom, const u_char *src,
|
||||
/* 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 u_char *eom, const u_char *src,
|
||||
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 *dst, int dstsiz,
|
||||
}
|
||||
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, const u_char *eom)
|
||||
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, const u_char *eom)
|
||||
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);
|
||||
}
|
||||
|
||||
/* Recurse to get rest of name done first. */
|
||||
l = ns_name_map(nname + n, namelen - n, map, mapsize);
|
||||
if (l < 0)
|
||||
return (-1);
|
||||
|
||||
/* Too many labels? */
|
||||
if (l >= mapsize) {
|
||||
errno = ENAMETOOLONG;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/* We're on our way back up-stack, store current map data. */
|
||||
map[l].base = nname;
|
||||
map[l].len = n;
|
||||
return (l + 1);
|
||||
}
|
||||
|
||||
/* Count the labels in a domain name. Root counts, so COM. has two. This
|
||||
* is to make the result comparable to the result of ns_name_map().
|
||||
*/
|
||||
int
|
||||
ns_name_labels(ns_nname_ct nname, size_t namesiz) {
|
||||
int ret = 0;
|
||||
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;
|
||||
ret++;
|
||||
}
|
||||
return (ret + 1);
|
||||
}
|
||||
|
||||
/* Private. */
|
||||
|
||||
/*%
|
||||
@ -806,7 +988,7 @@ decode_bitstring(const unsigned char **cpp, char *dn, const char *eom)
|
||||
plen = (blen + 3) / 4;
|
||||
plen += sizeof("\\[x/]") + (blen > 99 ? 3 : (blen > 9) ? 2 : 1);
|
||||
if (dn + plen >= eom)
|
||||
return(-1);
|
||||
return (-1);
|
||||
|
||||
cp++;
|
||||
i = SPRINTF((dn, "\\[x"));
|
||||
@ -839,12 +1021,12 @@ decode_bitstring(const unsigned char **cpp, char *dn, const char *eom)
|
||||
dn += i;
|
||||
|
||||
*cpp = cp;
|
||||
return(dn - beg);
|
||||
return (dn - beg);
|
||||
}
|
||||
|
||||
static int
|
||||
encode_bitsring(const char **bp, const char *end, unsigned char **labelp,
|
||||
unsigned char ** dst, unsigned const char *eom)
|
||||
unsigned char ** dst, unsigned const char *eom)
|
||||
{
|
||||
int afterslash = 0;
|
||||
const char *cp = *bp;
|
||||
@ -858,23 +1040,23 @@ encode_bitsring(const char **bp, const char *end, unsigned char **labelp,
|
||||
|
||||
/* a bitstring must contain at least 2 characters */
|
||||
if (end - cp < 2)
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
|
||||
/* XXX: currently, only hex strings are supported */
|
||||
if (*cp++ != 'x')
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
if (!isxdigit((*cp) & 0xff)) /*%< reject '\[x/BLEN]' */
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
|
||||
for (tp = *dst + 1; cp < end && tp < eom; cp++) {
|
||||
switch((c = *cp)) {
|
||||
case ']': /*%< end of the bitstring */
|
||||
if (afterslash) {
|
||||
if (beg_blen == NULL)
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
blen = (int)strtol(beg_blen, &end_blen, 10);
|
||||
if (*end_blen != ']')
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
}
|
||||
if (count)
|
||||
*tp++ = ((value << 4) & 0xff);
|
||||
@ -886,24 +1068,24 @@ encode_bitsring(const char **bp, const char *end, unsigned char **labelp,
|
||||
default:
|
||||
if (afterslash) {
|
||||
if (!isdigit(c&0xff))
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
if (beg_blen == NULL) {
|
||||
|
||||
if (c == '0') {
|
||||
/* blen never begings with 0 */
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
}
|
||||
beg_blen = cp;
|
||||
}
|
||||
} else {
|
||||
if (!isxdigit(c&0xff))
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
value <<= 4;
|
||||
value += digitvalue[(int)c];
|
||||
count += 4;
|
||||
tbcount += 4;
|
||||
if (tbcount > 256)
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
if (count == 8) {
|
||||
*tp++ = value;
|
||||
count = 0;
|
||||
@ -914,7 +1096,7 @@ encode_bitsring(const char **bp, const char *end, unsigned char **labelp,
|
||||
}
|
||||
done:
|
||||
if (cp >= end || tp >= eom)
|
||||
return(EMSGSIZE);
|
||||
return (EMSGSIZE);
|
||||
|
||||
/*
|
||||
* bit length validation:
|
||||
@ -928,10 +1110,10 @@ encode_bitsring(const char **bp, const char *end, unsigned char **labelp,
|
||||
int traillen;
|
||||
|
||||
if (((blen + 3) & ~3) != tbcount)
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
traillen = tbcount - blen; /*%< between 0 and 3 */
|
||||
if (((value << (8 - traillen)) & 0xff) != 0)
|
||||
return(EINVAL);
|
||||
return (EINVAL);
|
||||
}
|
||||
else
|
||||
blen = tbcount;
|
||||
@ -945,7 +1127,7 @@ encode_bitsring(const char **bp, const char *end, unsigned char **labelp,
|
||||
*bp = cp;
|
||||
*dst = tp;
|
||||
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -956,18 +1138,18 @@ labellen(const u_char *lp)
|
||||
|
||||
if ((l & NS_CMPRSFLGS) == NS_CMPRSFLGS) {
|
||||
/* should be avoided by the caller */
|
||||
return(-1);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if ((l & NS_CMPRSFLGS) == NS_TYPE_ELT) {
|
||||
if (l == DNS_LABELTYPE_BITSTRING) {
|
||||
if ((bitlen = *(lp + 1)) == 0)
|
||||
bitlen = 256;
|
||||
return((bitlen + 7 ) / 8 + 1);
|
||||
return ((bitlen + 7 ) / 8 + 1);
|
||||
}
|
||||
return(-1); /*%< unknwon ELT */
|
||||
return (-1); /*%< unknwon ELT */
|
||||
}
|
||||
return(l);
|
||||
return (l);
|
||||
}
|
||||
|
||||
/*! \file */
|
||||
|
@ -16,8 +16,10 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] = "$Id: ns_netint.c,v 1.2.18.1 2005/04/27 05:01:08 sra Exp $";
|
||||
static const char rcsid[] = "$Id: ns_netint.c,v 1.3 2005/04/27 04:56:40 sra Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* Import. */
|
||||
|
||||
|
@ -16,8 +16,10 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] = "$Id: ns_parse.c,v 1.5.18.4 2007/08/27 03:34:24 marka Exp $";
|
||||
static const char rcsid[] = "$Id: ns_parse.c,v 1.10 2009/01/23 19:59:16 each Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* Import. */
|
||||
|
||||
@ -47,6 +49,9 @@ static void setsection(ns_msg *msg, ns_sect sect);
|
||||
do { errno = (err); if (errno == errno) return (-1); } while (0)
|
||||
#endif
|
||||
|
||||
#define PARSE_FMT_PRESO 0 /* Parse using presentation-format names */
|
||||
#define PARSE_FMT_WIRE 1 /* Parse using network-format names */
|
||||
|
||||
/* Public. */
|
||||
|
||||
/* These need to be in the same order as the nres.h:ns_flag enum. */
|
||||
@ -102,7 +107,6 @@ ns_initparse(const u_char *msg, int msglen, ns_msg *handle) {
|
||||
const u_char *eom = msg + msglen;
|
||||
int i;
|
||||
|
||||
memset(handle, 0x5e, sizeof *handle);
|
||||
handle->_msg = msg;
|
||||
handle->_eom = eom;
|
||||
if (msg + NS_INT16SZ > eom)
|
||||
@ -194,6 +198,68 @@ ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr) {
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is identical to the above but uses network-format (uncompressed) names.
|
||||
*/
|
||||
int
|
||||
ns_parserr2(ns_msg *handle, ns_sect section, int rrnum, ns_rr2 *rr) {
|
||||
int b;
|
||||
int tmp;
|
||||
|
||||
/* Make section right. */
|
||||
if ((tmp = section) < 0 || section >= ns_s_max)
|
||||
RETERR(ENODEV);
|
||||
if (section != handle->_sect)
|
||||
setsection(handle, section);
|
||||
|
||||
/* Make rrnum right. */
|
||||
if (rrnum == -1)
|
||||
rrnum = handle->_rrnum;
|
||||
if (rrnum < 0 || rrnum >= handle->_counts[(int)section])
|
||||
RETERR(ENODEV);
|
||||
if (rrnum < handle->_rrnum)
|
||||
setsection(handle, section);
|
||||
if (rrnum > handle->_rrnum) {
|
||||
b = ns_skiprr(handle->_msg_ptr, handle->_eom, section,
|
||||
rrnum - handle->_rrnum);
|
||||
|
||||
if (b < 0)
|
||||
return (-1);
|
||||
handle->_msg_ptr += b;
|
||||
handle->_rrnum = rrnum;
|
||||
}
|
||||
|
||||
/* Do the parse. */
|
||||
b = ns_name_unpack2(handle->_msg, handle->_eom, handle->_msg_ptr,
|
||||
rr->nname, NS_MAXNNAME, &rr->nnamel);
|
||||
if (b < 0)
|
||||
return (-1);
|
||||
handle->_msg_ptr += b;
|
||||
if (handle->_msg_ptr + NS_INT16SZ + NS_INT16SZ > handle->_eom)
|
||||
RETERR(EMSGSIZE);
|
||||
NS_GET16(rr->type, handle->_msg_ptr);
|
||||
NS_GET16(rr->rr_class, handle->_msg_ptr);
|
||||
if (section == ns_s_qd) {
|
||||
rr->ttl = 0;
|
||||
rr->rdlength = 0;
|
||||
rr->rdata = NULL;
|
||||
} else {
|
||||
if (handle->_msg_ptr + NS_INT32SZ + NS_INT16SZ > handle->_eom)
|
||||
RETERR(EMSGSIZE);
|
||||
NS_GET32(rr->ttl, handle->_msg_ptr);
|
||||
NS_GET16(rr->rdlength, handle->_msg_ptr);
|
||||
if (handle->_msg_ptr + rr->rdlength > handle->_eom)
|
||||
RETERR(EMSGSIZE);
|
||||
rr->rdata = handle->_msg_ptr;
|
||||
handle->_msg_ptr += rr->rdlength;
|
||||
}
|
||||
if (++handle->_rrnum > handle->_counts[(int)section])
|
||||
setsection(handle, (ns_sect)((int)section + 1));
|
||||
|
||||
/* All done. */
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Private. */
|
||||
|
||||
static void
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] = "$Id: ns_print.c,v 1.6.18.4 2005/04/27 05:01:09 sra Exp $";
|
||||
static const char rcsid[] = "$Id: ns_print.c,v 1.12 2009/03/03 05:29:58 each Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -74,6 +74,9 @@ static int addtab(size_t len, size_t target, int spaced,
|
||||
return (-1); \
|
||||
} while (0)
|
||||
|
||||
static const char base32hex[] =
|
||||
"0123456789ABCDEFGHIJKLMNOPQRSTUV=0123456789abcdefghijklmnopqrstuv";
|
||||
|
||||
/* Public. */
|
||||
|
||||
/*%
|
||||
@ -257,7 +260,8 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
|
||||
|
||||
case ns_t_mx:
|
||||
case ns_t_afsdb:
|
||||
case ns_t_rt: {
|
||||
case ns_t_rt:
|
||||
case ns_t_kx: {
|
||||
u_int t;
|
||||
|
||||
if (rdlen < (size_t)NS_INT16SZ)
|
||||
@ -305,6 +309,7 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
|
||||
break;
|
||||
|
||||
case ns_t_txt:
|
||||
case ns_t_spf:
|
||||
while (rdata < edata) {
|
||||
T(len = charstr(rdata, edata, &buf, &buflen));
|
||||
if (len == 0)
|
||||
@ -451,7 +456,8 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
|
||||
break;
|
||||
}
|
||||
|
||||
case ns_t_key: {
|
||||
case ns_t_key:
|
||||
case ns_t_dnskey: {
|
||||
char base64_key[NS_MD5RSA_MAX_BASE64];
|
||||
u_int keyflags, protocol, algorithm, key_id;
|
||||
const char *leader;
|
||||
@ -497,7 +503,8 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
|
||||
break;
|
||||
}
|
||||
|
||||
case ns_t_sig: {
|
||||
case ns_t_sig:
|
||||
case ns_t_rrsig: {
|
||||
char base64_key[NS_MD5RSA_MAX_BASE64];
|
||||
u_int type, algorithm, labels, footprint;
|
||||
const char *leader;
|
||||
@ -508,7 +515,7 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
|
||||
goto formerr;
|
||||
|
||||
/* Type covered, Algorithm, Label count, Original TTL. */
|
||||
type = ns_get16(rdata); rdata += NS_INT16SZ;
|
||||
type = ns_get16(rdata); rdata += NS_INT16SZ;
|
||||
algorithm = *rdata++;
|
||||
labels = *rdata++;
|
||||
t = ns_get32(rdata); rdata += NS_INT32SZ;
|
||||
@ -702,6 +709,344 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
|
||||
break;
|
||||
}
|
||||
|
||||
case ns_t_ds:
|
||||
case ns_t_dlv:
|
||||
case ns_t_sshfp: {
|
||||
u_int t;
|
||||
|
||||
if (type == ns_t_ds || type == ns_t_dlv) {
|
||||
if (rdlen < 4U) goto formerr;
|
||||
t = ns_get16(rdata);
|
||||
rdata += NS_INT16SZ;
|
||||
len = SPRINTF((tmp, "%u ", t));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
} else
|
||||
if (rdlen < 2U) goto formerr;
|
||||
|
||||
len = SPRINTF((tmp, "%u ", *rdata));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
|
||||
len = SPRINTF((tmp, "%u ", *rdata));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
|
||||
while (rdata < edata) {
|
||||
len = SPRINTF((tmp, "%02X", *rdata));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ns_t_nsec3:
|
||||
case ns_t_nsec3param: {
|
||||
u_int t, w, l, j, k, c;
|
||||
|
||||
len = SPRINTF((tmp, "%u ", *rdata));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
|
||||
len = SPRINTF((tmp, "%u ", *rdata));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
|
||||
t = ns_get16(rdata);
|
||||
rdata += NS_INT16SZ;
|
||||
len = SPRINTF((tmp, "%u ", t));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
|
||||
t = *rdata++;
|
||||
if (t == 0) {
|
||||
T(addstr("-", 1, &buf, &buflen));
|
||||
} else {
|
||||
while (t-- > 0) {
|
||||
len = SPRINTF((tmp, "%02X", *rdata));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
}
|
||||
}
|
||||
if (type == ns_t_nsec3param)
|
||||
break;
|
||||
T(addstr(" ", 1, &buf, &buflen));
|
||||
|
||||
t = *rdata++;
|
||||
while (t > 0) {
|
||||
switch (t) {
|
||||
case 1:
|
||||
tmp[0] = base32hex[((rdata[0]>>3)&0x1f)];
|
||||
tmp[1] = base32hex[((rdata[0]<<2)&0x1c)];
|
||||
tmp[2] = tmp[3] = tmp[4] = '=';
|
||||
tmp[5] = tmp[6] = tmp[7] = '=';
|
||||
break;
|
||||
case 2:
|
||||
tmp[0] = base32hex[((rdata[0]>>3)&0x1f)];
|
||||
tmp[1] = base32hex[((rdata[0]<<2)&0x1c)|
|
||||
((rdata[1]>>6)&0x03)];
|
||||
tmp[2] = base32hex[((rdata[1]>>1)&0x1f)];
|
||||
tmp[3] = base32hex[((rdata[1]<<4)&0x10)];
|
||||
tmp[4] = tmp[5] = tmp[6] = tmp[7] = '=';
|
||||
break;
|
||||
case 3:
|
||||
tmp[0] = base32hex[((rdata[0]>>3)&0x1f)];
|
||||
tmp[1] = base32hex[((rdata[0]<<2)&0x1c)|
|
||||
((rdata[1]>>6)&0x03)];
|
||||
tmp[2] = base32hex[((rdata[1]>>1)&0x1f)];
|
||||
tmp[3] = base32hex[((rdata[1]<<4)&0x10)|
|
||||
((rdata[2]>>4)&0x0f)];
|
||||
tmp[4] = base32hex[((rdata[2]<<1)&0x1e)];
|
||||
tmp[5] = tmp[6] = tmp[7] = '=';
|
||||
break;
|
||||
case 4:
|
||||
tmp[0] = base32hex[((rdata[0]>>3)&0x1f)];
|
||||
tmp[1] = base32hex[((rdata[0]<<2)&0x1c)|
|
||||
((rdata[1]>>6)&0x03)];
|
||||
tmp[2] = base32hex[((rdata[1]>>1)&0x1f)];
|
||||
tmp[3] = base32hex[((rdata[1]<<4)&0x10)|
|
||||
((rdata[2]>>4)&0x0f)];
|
||||
tmp[4] = base32hex[((rdata[2]<<1)&0x1e)|
|
||||
((rdata[3]>>7)&0x01)];
|
||||
tmp[5] = base32hex[((rdata[3]>>2)&0x1f)];
|
||||
tmp[6] = base32hex[(rdata[3]<<3)&0x18];
|
||||
tmp[7] = '=';
|
||||
break;
|
||||
default:
|
||||
tmp[0] = base32hex[((rdata[0]>>3)&0x1f)];
|
||||
tmp[1] = base32hex[((rdata[0]<<2)&0x1c)|
|
||||
((rdata[1]>>6)&0x03)];
|
||||
tmp[2] = base32hex[((rdata[1]>>1)&0x1f)];
|
||||
tmp[3] = base32hex[((rdata[1]<<4)&0x10)|
|
||||
((rdata[2]>>4)&0x0f)];
|
||||
tmp[4] = base32hex[((rdata[2]<<1)&0x1e)|
|
||||
((rdata[3]>>7)&0x01)];
|
||||
tmp[5] = base32hex[((rdata[3]>>2)&0x1f)];
|
||||
tmp[6] = base32hex[((rdata[3]<<3)&0x18)|
|
||||
((rdata[4]>>5)&0x07)];
|
||||
tmp[7] = base32hex[(rdata[4]&0x1f)];
|
||||
break;
|
||||
}
|
||||
T(addstr(tmp, 8, &buf, &buflen));
|
||||
if (t >= 5) {
|
||||
rdata += 5;
|
||||
t -= 5;
|
||||
} else {
|
||||
rdata += t;
|
||||
t -= t;
|
||||
}
|
||||
}
|
||||
|
||||
while (rdata < edata) {
|
||||
w = *rdata++;
|
||||
l = *rdata++;
|
||||
for (j = 0; j < l; j++) {
|
||||
if (rdata[j] == 0)
|
||||
continue;
|
||||
for (k = 0; k < 8; k++) {
|
||||
if ((rdata[j] & (0x80 >> k)) == 0)
|
||||
continue;
|
||||
c = w * 256 + j * 8 + k;
|
||||
len = SPRINTF((tmp, " %s", p_type(c)));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
}
|
||||
}
|
||||
rdata += l;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ns_t_nsec: {
|
||||
u_int w, l, j, k, c;
|
||||
|
||||
T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
|
||||
|
||||
while (rdata < edata) {
|
||||
w = *rdata++;
|
||||
l = *rdata++;
|
||||
for (j = 0; j < l; j++) {
|
||||
if (rdata[j] == 0)
|
||||
continue;
|
||||
for (k = 0; k < 8; k++) {
|
||||
if ((rdata[j] & (0x80 >> k)) == 0)
|
||||
continue;
|
||||
c = w * 256 + j * 8 + k;
|
||||
len = SPRINTF((tmp, " %s", p_type(c)));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
}
|
||||
}
|
||||
rdata += l;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ns_t_dhcid: {
|
||||
int n;
|
||||
unsigned int siz;
|
||||
char base64_dhcid[8192];
|
||||
const char *leader;
|
||||
|
||||
siz = (edata-rdata)*4/3 + 4; /* "+4" accounts for trailing \0 */
|
||||
if (siz > sizeof(base64_dhcid) * 3/4) {
|
||||
const char *str = "record too long to print";
|
||||
T(addstr(str, strlen(str), &buf, &buflen));
|
||||
} else {
|
||||
len = b64_ntop(rdata, edata-rdata, base64_dhcid, siz);
|
||||
|
||||
if (len < 0)
|
||||
goto formerr;
|
||||
|
||||
else if (len > 15) {
|
||||
T(addstr(" (", 2, &buf, &buflen));
|
||||
leader = "\n\t\t";
|
||||
spaced = 0;
|
||||
}
|
||||
else
|
||||
leader = " ";
|
||||
|
||||
for (n = 0; n < len; n += 48) {
|
||||
T(addstr(leader, strlen(leader),
|
||||
&buf, &buflen));
|
||||
T(addstr(base64_dhcid + n, MIN(len - n, 48),
|
||||
&buf, &buflen));
|
||||
}
|
||||
if (len > 15)
|
||||
T(addstr(" )", 2, &buf, &buflen));
|
||||
}
|
||||
}
|
||||
|
||||
case ns_t_ipseckey: {
|
||||
int n;
|
||||
unsigned int siz;
|
||||
char base64_key[8192];
|
||||
const char *leader;
|
||||
|
||||
if (rdlen < 2)
|
||||
goto formerr;
|
||||
|
||||
switch (rdata[1]) {
|
||||
case 0:
|
||||
case 3:
|
||||
if (rdlen < 3)
|
||||
goto formerr;
|
||||
break;
|
||||
case 1:
|
||||
if (rdlen < 7)
|
||||
goto formerr;
|
||||
break;
|
||||
case 2:
|
||||
if (rdlen < 19)
|
||||
goto formerr;
|
||||
break;
|
||||
default:
|
||||
comment = "unknown IPSECKEY gateway type";
|
||||
goto hexify;
|
||||
}
|
||||
|
||||
len = SPRINTF((tmp, "%u ", *rdata));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
|
||||
len = SPRINTF((tmp, "%u ", *rdata));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
|
||||
len = SPRINTF((tmp, "%u ", *rdata));
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
|
||||
switch (rdata[-2]) {
|
||||
case 0:
|
||||
T(addstr(".", 1, &buf, &buflen));
|
||||
break;
|
||||
case 1:
|
||||
(void) inet_ntop(AF_INET, rdata, buf, buflen);
|
||||
addlen(strlen(buf), &buf, &buflen);
|
||||
rdata += 4;
|
||||
break;
|
||||
case 2:
|
||||
(void) inet_ntop(AF_INET6, rdata, buf, buflen);
|
||||
addlen(strlen(buf), &buf, &buflen);
|
||||
rdata += 16;
|
||||
break;
|
||||
case 3:
|
||||
T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
|
||||
break;
|
||||
}
|
||||
|
||||
if (rdata >= edata)
|
||||
break;
|
||||
|
||||
siz = (edata-rdata)*4/3 + 4; /* "+4" accounts for trailing \0 */
|
||||
if (siz > sizeof(base64_key) * 3/4) {
|
||||
const char *str = "record too long to print";
|
||||
T(addstr(str, strlen(str), &buf, &buflen));
|
||||
} else {
|
||||
len = b64_ntop(rdata, edata-rdata, base64_key, siz);
|
||||
|
||||
if (len < 0)
|
||||
goto formerr;
|
||||
|
||||
else if (len > 15) {
|
||||
T(addstr(" (", 2, &buf, &buflen));
|
||||
leader = "\n\t\t";
|
||||
spaced = 0;
|
||||
}
|
||||
else
|
||||
leader = " ";
|
||||
|
||||
for (n = 0; n < len; n += 48) {
|
||||
T(addstr(leader, strlen(leader),
|
||||
&buf, &buflen));
|
||||
T(addstr(base64_key + n, MIN(len - n, 48),
|
||||
&buf, &buflen));
|
||||
}
|
||||
if (len > 15)
|
||||
T(addstr(" )", 2, &buf, &buflen));
|
||||
}
|
||||
}
|
||||
|
||||
case ns_t_hip: {
|
||||
unsigned int i, hip_len, algorithm, key_len;
|
||||
char base64_key[NS_MD5RSA_MAX_BASE64];
|
||||
unsigned int siz;
|
||||
const char *leader = "\n\t\t\t\t\t";
|
||||
|
||||
hip_len = *rdata++;
|
||||
algorithm = *rdata++;
|
||||
key_len = ns_get16(rdata);
|
||||
rdata += NS_INT16SZ;
|
||||
|
||||
siz = key_len*4/3 + 4; /* "+4" accounts for trailing \0 */
|
||||
if (siz > sizeof(base64_key) * 3/4) {
|
||||
const char *str = "record too long to print";
|
||||
T(addstr(str, strlen(str), &buf, &buflen));
|
||||
} else {
|
||||
len = sprintf(tmp, "( %u ", algorithm);
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
|
||||
for (i = 0; i < hip_len; i++) {
|
||||
len = sprintf(tmp, "%02X", *rdata);
|
||||
T(addstr(tmp, len, &buf, &buflen));
|
||||
rdata++;
|
||||
}
|
||||
T(addstr(leader, strlen(leader), &buf, &buflen));
|
||||
|
||||
len = b64_ntop(rdata, key_len, base64_key, siz);
|
||||
if (len < 0)
|
||||
goto formerr;
|
||||
|
||||
T(addstr(base64_key, len, &buf, &buflen));
|
||||
|
||||
rdata += key_len;
|
||||
while (rdata < edata) {
|
||||
T(addstr(leader, strlen(leader), &buf, &buflen));
|
||||
T(addname(msg, msglen, &rdata, origin,
|
||||
&buf, &buflen));
|
||||
}
|
||||
T(addstr(" )", 2, &buf, &buflen));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
comment = "unknown RR type";
|
||||
goto hexify;
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] = "$Id: ns_samedomain.c,v 1.5.18.1 2005/04/27 05:01:09 sra Exp $";
|
||||
static const char rcsid[] = "$Id: ns_samedomain.c,v 1.6 2005/04/27 04:56:40 sra Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
@ -16,8 +16,10 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] = "$Id: ns_ttl.c,v 1.2.18.2 2005/07/28 07:38:10 marka Exp $";
|
||||
static const char rcsid[] = "$Id: ns_ttl.c,v 1.4 2005/07/28 06:51:49 marka Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* Import. */
|
||||
|
||||
|
@ -8,3 +8,5 @@ SRCS+= herror.c h_errno.c mtctxres.c res_comp.c res_data.c res_debug.c \
|
||||
res_query.c res_send.c res_state.c res_update.c
|
||||
|
||||
SYM_MAPS+= ${LIBC_SRCTOP}/resolv/Symbol.map
|
||||
|
||||
CFLAGS+=-I${LIBC_SRCTOP}/../libmd
|
||||
|
@ -105,3 +105,8 @@ FBSD_1.0 {
|
||||
res_send;
|
||||
__res_update;
|
||||
};
|
||||
|
||||
FBSD_1.4 {
|
||||
__res_rndinit;
|
||||
__res_nrandomid;
|
||||
};
|
||||
|
@ -46,7 +46,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)herror.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: herror.c,v 1.3.18.1 2005/04/27 05:01:09 sra Exp $";
|
||||
static const char rcsid[] = "$Id: herror.c,v 1.4 2005/04/27 04:56:41 sra Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
@ -66,7 +66,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_comp.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: res_comp.c,v 1.3.18.2 2005/07/28 07:38:11 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_comp.c,v 1.5 2005/07/28 06:51:50 marka Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] = "$Id: res_data.c,v 1.3.18.2 2007/09/14 05:35:47 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_data.c,v 1.7 2008/12/11 09:59:00 marka Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -107,13 +107,6 @@ res_init(void) {
|
||||
if (!(_res.options & RES_INIT))
|
||||
_res.options = RES_DEFAULT;
|
||||
|
||||
/*
|
||||
* This one used to initialize implicitly to zero, so unless the app
|
||||
* has set it to something in particular, we can randomize it now.
|
||||
*/
|
||||
if (!_res.id)
|
||||
_res.id = res_randomid();
|
||||
|
||||
return (__res_vinit(&_res, 1));
|
||||
}
|
||||
|
||||
@ -264,6 +257,16 @@ res_querydomain(const char *name,
|
||||
answer, anslen));
|
||||
}
|
||||
|
||||
u_int
|
||||
res_randomid(void) {
|
||||
if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
|
||||
RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
return (res_nrandomid(&_res));
|
||||
}
|
||||
|
||||
int
|
||||
res_opt(int n0, u_char *buf, int buflen, int anslen)
|
||||
{
|
||||
|
@ -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) 1985
|
||||
* 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 @@
|
||||
* 4. 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
|
||||
@ -29,14 +46,14 @@
|
||||
|
||||
/*
|
||||
* Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
*
|
||||
*
|
||||
* 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, and that
|
||||
* the name of Digital Equipment Corporation not be used in advertising or
|
||||
* publicity pertaining to distribution of the document or software without
|
||||
* specific, written prior permission.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
@ -72,26 +89,9 @@
|
||||
* IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: res_debug.c,v 1.10.18.6 2008/04/03 23:15:15 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_debug.c,v 1.19 2009/02/26 11:20:20 tbox Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -327,7 +327,7 @@ res_pquery(const res_state statp, const u_char *msg, int len, FILE *file) {
|
||||
fprintf(file, ", %s: %d",
|
||||
p_section(ns_s_ar, opcode), arcount);
|
||||
}
|
||||
if ((!statp->pfcode) || (statp->pfcode &
|
||||
if ((!statp->pfcode) || (statp->pfcode &
|
||||
(RES_PRF_HEADX | RES_PRF_HEAD2 | RES_PRF_HEAD1))) {
|
||||
putc('\n',file);
|
||||
}
|
||||
@ -494,6 +494,24 @@ const struct res_sym __p_type_syms[] = {
|
||||
{ns_t_nimloc, "NIMLOC", "NIMROD locator (unimplemented)"},
|
||||
{ns_t_srv, "SRV", "server selection"},
|
||||
{ns_t_atma, "ATMA", "ATM address (unimplemented)"},
|
||||
{ns_t_naptr, "NAPTR", "naptr"},
|
||||
{ns_t_kx, "KX", "key exchange"},
|
||||
{ns_t_cert, "CERT", "certificate"},
|
||||
{ns_t_a6, "A", "IPv6 address (experminental)"},
|
||||
{ns_t_dname, "DNAME", "non-terminal redirection"},
|
||||
{ns_t_opt, "OPT", "opt"},
|
||||
{ns_t_apl, "apl", "apl"},
|
||||
{ns_t_ds, "DS", "delegation signer"},
|
||||
{ns_t_sshfp, "SSFP", "SSH fingerprint"},
|
||||
{ns_t_ipseckey, "IPSECKEY", "IPSEC key"},
|
||||
{ns_t_rrsig, "RRSIG", "rrsig"},
|
||||
{ns_t_nsec, "NSEC", "nsec"},
|
||||
{ns_t_dnskey, "DNSKEY", "DNS key"},
|
||||
{ns_t_dhcid, "DHCID", "dynamic host configuration identifier"},
|
||||
{ns_t_nsec3, "NSEC3", "nsec3"},
|
||||
{ns_t_nsec3param, "NSEC3PARAM", "NSEC3 parameters"},
|
||||
{ns_t_hip, "HIP", "host identity protocol"},
|
||||
{ns_t_spf, "SPF", "sender policy framework"},
|
||||
{ns_t_tkey, "TKEY", "tkey"},
|
||||
{ns_t_tsig, "TSIG", "transaction signature"},
|
||||
{ns_t_ixfr, "IXFR", "incremental zone transfer"},
|
||||
@ -509,6 +527,7 @@ const struct res_sym __p_type_syms[] = {
|
||||
{ns_t_sink, "SINK", "Kitchen Sink (experimental)"},
|
||||
{ns_t_opt, "OPT", "EDNS Options"},
|
||||
{ns_t_any, "ANY", "\"any\""},
|
||||
{ns_t_dlv, "DLV", "DNSSEC look-aside validation"},
|
||||
{0, NULL, NULL}
|
||||
};
|
||||
|
||||
@ -936,7 +955,7 @@ loc_aton(ascii, binary)
|
||||
altsign = -1;
|
||||
cp++;
|
||||
}
|
||||
|
||||
|
||||
if (*cp == '+')
|
||||
cp++;
|
||||
|
||||
@ -965,7 +984,7 @@ loc_aton(ascii, binary)
|
||||
goto defaults;
|
||||
|
||||
siz = precsize_aton(&cp);
|
||||
|
||||
|
||||
while (!isspace((unsigned char)*cp) && (cp < maxcp)) /*%< if trailing garbage or m */
|
||||
cp++;
|
||||
|
||||
@ -998,7 +1017,7 @@ loc_aton(ascii, binary)
|
||||
PUTLONG(latit,bcp);
|
||||
PUTLONG(longit,bcp);
|
||||
PUTLONG(alt,bcp);
|
||||
|
||||
|
||||
return (16); /*%< size of RR in octets */
|
||||
}
|
||||
|
||||
@ -1024,7 +1043,7 @@ loc_ntoa(binary, ascii)
|
||||
int32_t latval, longval, altval;
|
||||
u_int32_t templ;
|
||||
u_int8_t sizeval, hpval, vpval, versionval;
|
||||
|
||||
|
||||
char *sizestr, *hpstr, *vpstr;
|
||||
|
||||
versionval = *cp++;
|
||||
@ -1138,7 +1157,7 @@ dn_count_labels(const char *name) {
|
||||
}
|
||||
|
||||
/*%
|
||||
* Make dates expressed in seconds-since-Jan-1-1970 easy to read.
|
||||
* Make dates expressed in seconds-since-Jan-1-1970 easy to read.
|
||||
* SIG records are required to be printed like this, by the Secure DNS RFC.
|
||||
*/
|
||||
char *
|
||||
@ -1148,7 +1167,7 @@ p_secstodate (u_long secs) {
|
||||
struct tm *time;
|
||||
#ifdef HAVE_TIME_R
|
||||
struct tm res;
|
||||
|
||||
|
||||
time = gmtime_r(&clock, &res);
|
||||
#else
|
||||
time = gmtime(&clock);
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: res_findzonecut.c,v 1.7.18.3 2005/10/11 00:25:11 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_findzonecut.c,v 1.10 2005/10/11 00:10:16 marka Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
|
@ -66,7 +66,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_init.c 8.1 (Berkeley) 6/7/93";
|
||||
static const char rcsid[] = "$Id: res_init.c,v 1.16.18.7 2007/07/09 01:52:58 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_init.c,v 1.26 2008/12/11 09:59:00 marka Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -91,6 +91,19 @@ __FBSDID("$FreeBSD$");
|
||||
#include <unistd.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#ifndef HAVE_MD5
|
||||
# include "../dst/md5.h"
|
||||
#else
|
||||
# ifdef SOLARIS2
|
||||
# include <sys/md5.h>
|
||||
# elif _LIBC
|
||||
# include <md5.h>
|
||||
# endif
|
||||
#endif
|
||||
#ifndef _MD5_H_
|
||||
# define _MD5_H_ 1 /*%< make sure we do not include rsaref md5.h file */
|
||||
#endif
|
||||
|
||||
#include "un-namespace.h"
|
||||
|
||||
#include "port_after.h"
|
||||
@ -178,9 +191,12 @@ __res_vinit(res_state statp, int preinit) {
|
||||
statp->retrans = RES_TIMEOUT;
|
||||
statp->retry = RES_DFLRETRY;
|
||||
statp->options = RES_DEFAULT;
|
||||
statp->id = res_randomid();
|
||||
}
|
||||
|
||||
statp->_rnd = malloc(16);
|
||||
res_rndinit(statp);
|
||||
statp->id = res_nrandomid(statp);
|
||||
|
||||
memset(u, 0, sizeof(u));
|
||||
#ifdef USELOOPBACK
|
||||
u[nserv].sin.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
|
||||
@ -715,12 +731,48 @@ net_mask(in) /*!< XXX - should really use system's version of this */
|
||||
}
|
||||
#endif
|
||||
|
||||
u_int
|
||||
res_randomid(void) {
|
||||
static u_char srnd[16];
|
||||
|
||||
void
|
||||
res_rndinit(res_state statp)
|
||||
{
|
||||
struct timeval now;
|
||||
u_int32_t u32;
|
||||
u_int16_t u16;
|
||||
u_char *rnd = statp->_rnd == NULL ? srnd : statp->_rnd;
|
||||
|
||||
gettimeofday(&now, NULL);
|
||||
return (0xffff & (now.tv_sec ^ now.tv_usec ^ getpid()));
|
||||
u32 = now.tv_sec;
|
||||
memcpy(rnd, &u32, 4);
|
||||
u32 = now.tv_usec;
|
||||
memcpy(rnd + 4, &u32, 4);
|
||||
u32 += now.tv_sec;
|
||||
memcpy(rnd + 8, &u32, 4);
|
||||
u16 = getpid();
|
||||
memcpy(rnd + 12, &u16, 2);
|
||||
}
|
||||
|
||||
u_int
|
||||
res_nrandomid(res_state statp) {
|
||||
struct timeval now;
|
||||
u_int16_t u16;
|
||||
MD5_CTX ctx;
|
||||
u_char *rnd = statp->_rnd == NULL ? srnd : statp->_rnd;
|
||||
|
||||
gettimeofday(&now, NULL);
|
||||
u16 = (u_int16_t) (now.tv_sec ^ now.tv_usec);
|
||||
memcpy(rnd + 14, &u16, 2);
|
||||
#ifndef HAVE_MD5
|
||||
MD5_Init(&ctx);
|
||||
MD5_Update(&ctx, rnd, 16);
|
||||
MD5_Final(rnd, &ctx);
|
||||
#else
|
||||
MD5Init(&ctx);
|
||||
MD5Update(&ctx, rnd, 16);
|
||||
MD5Final(rnd, &ctx);
|
||||
#endif
|
||||
memcpy(&u16, rnd + 14, 2);
|
||||
return ((u_int) u16);
|
||||
}
|
||||
|
||||
/*%
|
||||
@ -750,10 +802,15 @@ res_nclose(res_state statp) {
|
||||
void
|
||||
res_ndestroy(res_state statp) {
|
||||
res_nclose(statp);
|
||||
if (statp->_u._ext.ext != NULL)
|
||||
if (statp->_u._ext.ext != NULL) {
|
||||
free(statp->_u._ext.ext);
|
||||
statp->_u._ext.ext = NULL;
|
||||
}
|
||||
if (statp->_rnd != NULL) {
|
||||
free(statp->_rnd);
|
||||
statp->_rnd = NULL;
|
||||
}
|
||||
statp->options &= ~RES_INIT;
|
||||
statp->_u._ext.ext = NULL;
|
||||
}
|
||||
|
||||
#ifndef _LIBC
|
||||
|
@ -1,7 +1,24 @@
|
||||
/*
|
||||
* Portions Copyright (C) 2004, 2005, 2008 Internet Systems Consortium, Inc. ("ISC")
|
||||
* Portions Copyright (C) 1996, 1997, 1988, 1999, 2001, 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) 1985, 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 @@
|
||||
* 4. 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
|
||||
@ -29,14 +46,14 @@
|
||||
|
||||
/*
|
||||
* Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
*
|
||||
*
|
||||
* 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, and that
|
||||
* the name of Digital Equipment Corporation not be used in advertising or
|
||||
* publicity pertaining to distribution of the document or software without
|
||||
* specific, written prior permission.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
@ -47,26 +64,9 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: res_mkquery.c,v 1.5.18.2 2008/04/03 23:15:15 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_mkquery.c,v 1.10 2008/12/11 09:59:00 marka Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -121,7 +121,8 @@ res_nmkquery(res_state statp,
|
||||
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 = op;
|
||||
hp->rd = (statp->options & RES_RECURSE) != 0U;
|
||||
hp->rcode = NOERROR;
|
||||
|
@ -22,7 +22,7 @@
|
||||
*/
|
||||
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: res_mkupdate.c,v 1.4.18.4 2005/10/14 05:44:12 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 <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -116,7 +116,8 @@ 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;
|
||||
cp = buf + HFIXEDSZ;
|
||||
|
@ -1,7 +1,24 @@
|
||||
/*
|
||||
* Portions Copyright (C) 2004, 2005, 2008 Internet Systems Consortium, Inc. ("ISC")
|
||||
* Portions Copyright (C) 1996-2001, 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) 1988, 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 @@
|
||||
* 4. 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
|
||||
@ -29,14 +46,14 @@
|
||||
|
||||
/*
|
||||
* Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
*
|
||||
*
|
||||
* 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, and that
|
||||
* the name of Digital Equipment Corporation not be used in advertising or
|
||||
* publicity pertaining to distribution of the document or software without
|
||||
* specific, written prior permission.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
@ -47,26 +64,9 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_query.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: res_query.c,v 1.7.18.2 2008/04/03 23:15:15 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_query.c,v 1.11 2008/11/14 02:36:51 marka Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
@ -1,7 +1,24 @@
|
||||
/*
|
||||
* Portions Copyright (C) 2004-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) 1985, 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 @@
|
||||
* 4. 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
|
||||
@ -29,14 +46,14 @@
|
||||
|
||||
/*
|
||||
* Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
*
|
||||
*
|
||||
* 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, and that
|
||||
* the name of Digital Equipment Corporation not be used in advertising or
|
||||
* publicity pertaining to distribution of the document or software without
|
||||
* specific, written prior permission.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
@ -47,26 +64,9 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2005 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.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char rcsid[] = "$Id: res_send.c,v 1.9.18.10 2008/01/27 02:06:26 marka Exp $";
|
||||
static const char rcsid[] = "$Id: res_send.c,v 1.22 2009/01/22 23:49:23 tbox Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
@ -353,7 +353,7 @@ res_nsend(res_state statp,
|
||||
if (EXT(statp).nssocks[ns] == -1)
|
||||
continue;
|
||||
peerlen = sizeof(peer);
|
||||
if (_getsockname(EXT(statp).nssocks[ns],
|
||||
if (_getpeername(EXT(statp).nssocks[ns],
|
||||
(struct sockaddr *)&peer, &peerlen) < 0) {
|
||||
needclose++;
|
||||
break;
|
||||
@ -404,7 +404,7 @@ res_nsend(res_state statp,
|
||||
nstime = EXT(statp).nstimes[0];
|
||||
for (ns = 0; ns < lastns; ns++) {
|
||||
if (EXT(statp).ext != NULL)
|
||||
EXT(statp).ext->nsaddrs[ns] =
|
||||
EXT(statp).ext->nsaddrs[ns] =
|
||||
EXT(statp).ext->nsaddrs[ns + 1];
|
||||
statp->nsaddr_list[ns] = statp->nsaddr_list[ns + 1];
|
||||
EXT(statp).nssocks[ns] = EXT(statp).nssocks[ns + 1];
|
||||
@ -687,12 +687,12 @@ send_vc(res_state statp,
|
||||
/*
|
||||
* Disable generation of SIGPIPE when writing to a closed
|
||||
* socket. Write should return -1 and set errno to EPIPE
|
||||
* instead.
|
||||
* instead.
|
||||
*
|
||||
* Push on even if setsockopt(SO_NOSIGPIPE) fails.
|
||||
*/
|
||||
(void)_setsockopt(statp->_vcsock, SOL_SOCKET, SO_NOSIGPIPE, &on,
|
||||
sizeof(on));
|
||||
sizeof(on));
|
||||
#endif
|
||||
errno = 0;
|
||||
if (_connect(statp->_vcsock, nsap, nsaplen) < 0) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static const char rcsid[] = "$Id: res_update.c,v 1.12.18.1 2005/04/27 05:01:12 sra Exp $";
|
||||
static const char rcsid[] = "$Id: res_update.c,v 1.13 2005/04/27 04:56:43 sra Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user