diff options
Diffstat (limited to 'resolv')
-rw-r--r-- | resolv/Banner | 1 | ||||
-rw-r--r-- | resolv/Makefile | 5 | ||||
-rw-r--r-- | resolv/arpa/nameser.h | 2 | ||||
-rw-r--r-- | resolv/base64.c | 4 | ||||
-rw-r--r-- | resolv/gethnamaddr.c | 36 | ||||
-rw-r--r-- | resolv/res_comp.c | 20 | ||||
-rw-r--r-- | resolv/res_debug.c | 7 | ||||
-rw-r--r-- | resolv/res_query.c | 8 | ||||
-rw-r--r-- | resolv/res_send.c | 17 | ||||
-rw-r--r-- | resolv/resolv.h | 107 |
10 files changed, 146 insertions, 61 deletions
diff --git a/resolv/Banner b/resolv/Banner new file mode 100644 index 0000000..e08f0b4 --- /dev/null +++ b/resolv/Banner @@ -0,0 +1 @@ +BIND-4.9.5-T4B diff --git a/resolv/Makefile b/resolv/Makefile index a141fc7..9df98fa 100644 --- a/resolv/Makefile +++ b/resolv/Makefile @@ -22,13 +22,14 @@ subdir := resolv headers := resolv.h netdb.h arpa/nameser.h sys/bitypes.h -distribute := ../conf/portability.h mapv4v6addr.h mapv4v6hostent.h +distribute := ../conf/portability.h mapv4v6addr.h mapv4v6hostent.h \ + Banner routines := herror inet_addr inet_ntop inet_pton nsap_addr res_init extra-libs := libresolv extra-libs-others = $(extra-libs) -libresolv-routines := gethnamaddr getnetnamadr res_comp res_debug \ +libresolv-routines := gethnamaddr res_comp res_debug \ res_data res_mkquery res_query res_send \ inet_net_ntop inet_net_pton inet_neta base64 diff --git a/resolv/arpa/nameser.h b/resolv/arpa/nameser.h index 7da0aef..2352af6 100644 --- a/resolv/arpa/nameser.h +++ b/resolv/arpa/nameser.h @@ -111,7 +111,7 @@ * Define constants based on rfc883 */ #define PACKETSZ 512 /* maximum packet size */ -#define MAXDNAME 256 /* maximum domain name */ +#define MAXDNAME 1025 /* maximum domain name */ #define MAXCDNAME 255 /* maximum compressed domain name */ #define MAXLABEL 63 /* maximum length of domain label */ #define HFIXEDSZ 12 /* #/bytes of fixed data in header */ diff --git a/resolv/base64.c b/resolv/base64.c index 98983e0..8b01de3 100644 --- a/resolv/base64.c +++ b/resolv/base64.c @@ -127,7 +127,7 @@ static const char Pad64 = '='; characters followed by one "=" padding character. */ -ssize_t +int b64_ntop(src, srclength, target, targsize) u_char const *src; size_t srclength; @@ -198,7 +198,7 @@ b64_ntop(src, srclength, target, targsize) it returns the number of data bytes stored at the target, or -1 on error. */ -ssize_t +int b64_pton(src, target, targsize) char const *src; u_char *target; diff --git a/resolv/gethnamaddr.c b/resolv/gethnamaddr.c index 755fc52..fb51e31 100644 --- a/resolv/gethnamaddr.c +++ b/resolv/gethnamaddr.c @@ -167,7 +167,7 @@ getanswer(answer, anslen, qname, qtype) int type, class, buflen, ancount, qdcount; int haveanswer, had_error; int toobig = 0; - char tbuf[MAXDNAME+1]; + char tbuf[MAXDNAME]; const char *tname; int (*name_ok) __P((const char *)); @@ -417,6 +417,10 @@ gethostbyname(name) { struct hostent *hp; + if ((_res.options & RES_INIT) == 0 && res_init() == -1) { + h_errno = NETDB_INTERNAL; + return (NULL); + } if (_res.options & RES_USE_INET6) { hp = gethostbyname2(name, AF_INET6); if (hp) @@ -502,6 +506,36 @@ gethostbyname2(name, af) } if (!isdigit(*cp) && *cp != '.') break; + } + if (isxdigit(name[0]) || name[0] == ':') + for (cp = name;; ++cp) { + if (!*cp) { + if (*--cp == '.') + break; + /* + * All-IPv6-legal, no dot at the end. + * Fake up a hostent as if we'd actually + * done a lookup. + */ + if (inet_pton(af, name, host_addr) <= 0) { + h_errno = HOST_NOT_FOUND; + return (NULL); + } + strncpy(hostbuf, name, MAXDNAME); + hostbuf[MAXDNAME] = '\0'; + bp = hostbuf + MAXDNAME; + len = sizeof hostbuf - MAXDNAME; + host.h_name = hostbuf; + host.h_aliases = host_aliases; + host_aliases[0] = NULL; + h_addr_ptrs[0] = (char *)host_addr; + h_addr_ptrs[1] = NULL; + host.h_addr_list = h_addr_ptrs; + h_errno = NETDB_SUCCESS; + return (&host); + } + if (!isxdigit(*cp) && *cp != ':' && *cp != '.') + break; } if ((n = res_search(name, C_IN, type, buf.buf, sizeof(buf))) < 0) { diff --git a/resolv/res_comp.c b/resolv/res_comp.c index 7da1c3e..76f7cea 100644 --- a/resolv/res_comp.c +++ b/resolv/res_comp.c @@ -526,6 +526,26 @@ putlong(l, msgp) __putlong(l, msgp); } +#undef dn_comp +int +dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr) + const char *exp_dn; + u_char *comp_dn, **dnptrs, **lastdnptr; + int length; +{ + return (__dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)); +} + +#undef dn_expand +int +dn_expand(msg, eomorig, comp_dn, exp_dn, length) + const u_char *msg, *eomorig, *comp_dn; + char *exp_dn; + int length; +{ + return (__dn_expand(msg, eomorig, comp_dn, exp_dn, length)); +} + #undef dn_skipname dn_skipname(comp_dn, eom) const u_char *comp_dn, *eom; diff --git a/resolv/res_debug.c b/resolv/res_debug.c index b476676..61724bf 100644 --- a/resolv/res_debug.c +++ b/resolv/res_debug.c @@ -238,6 +238,7 @@ __p_query(msg) } #ifdef ultrix +#undef p_query /* ultrix 4.0's packaging has some icky packaging. alias for it here. * there is more junk of this kind over in res_comp.c. */ @@ -1041,8 +1042,8 @@ __p_option(option) /* * Return a mnemonic for a time to live */ -char * -__p_time(value) +const char * +p_time(value) u_int32_t value; { static char nbuf[40]; @@ -1369,7 +1370,7 @@ loc_aton(ascii, binary) } /* takes an on-the-wire LOC RR and formats it in a human readable format. */ -char * +const char * loc_ntoa(binary, ascii) const u_char *binary; char *ascii; diff --git a/resolv/res_query.c b/resolv/res_query.c index 135c6aa..2d191d0 100644 --- a/resolv/res_query.c +++ b/resolv/res_query.c @@ -86,7 +86,7 @@ static char rcsid[] = "$Id$"; #define MAXPACKET 1024 #endif -char *__hostalias __P((const char *)); +const char *hostalias __P((const char *)); /* @@ -321,7 +321,7 @@ res_querydomain(name, domain, class, type, answer, anslen) u_char *answer; /* buffer to put answer */ int anslen; /* size of answer */ { - char nbuf[2*MAXDNAME+2]; + char nbuf[MAXDNAME]; const char *longname = nbuf; int n; @@ -351,8 +351,8 @@ res_querydomain(name, domain, class, type, answer, anslen) return (res_query(longname, class, type, answer, anslen)); } -char * -__hostalias(name) +const char * +hostalias(name) register const char *name; { register char *cp1, *cp2; diff --git a/resolv/res_send.c b/resolv/res_send.c index 841baa6..4c258b9 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -781,3 +781,20 @@ _res_close() vc = 0; } } + +#ifdef ultrix +/* ultrix 4.0 had some icky packaging in its libc.a. alias for it here. + * there is more gunk of this kind over in res_debug.c. + */ + +#undef res_send +int +res_send(buf, buflen, ans, anssiz) + const u_char *buf; + int buflen; + u_char *ans; + int anssiz; +{ + return (__res_send(buf, buflen, ans, anssiz)); +} +#endif /* Ultrix 4.0 hackery */ diff --git a/resolv/resolv.h b/resolv/resolv.h index 23460c5..e5ec75a 100644 --- a/resolv/resolv.h +++ b/resolv/resolv.h @@ -112,7 +112,7 @@ struct __res_state { #define nsaddr nsaddr_list[0] /* for backward compatibility */ u_short id; /* current packet id */ char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */ - char defdname[MAXDNAME]; /* default domain */ + char defdname[256]; /* default domain (deprecated) */ u_long pfcode; /* RES_PRF_ flags - see below. */ unsigned ndots:4; /* threshold for initial abs. query */ unsigned nsort:4; /* number of elements in sort_list[] */ @@ -205,6 +205,7 @@ extern const struct res_sym __p_type_syms[]; #define loc_ntoa __loc_ntoa #define loc_aton __loc_aton #define dn_skipname __dn_skipname +#define fp_resstat __fp_resstat #define fp_query __fp_query #define fp_nquery __fp_nquery #define hostalias __hostalias @@ -213,6 +214,7 @@ extern const struct res_sym __p_type_syms[]; #define p_class __p_class #define p_time __p_time #define p_type __p_type +#define p_query __p_query #define p_cdnname __p_cdnname #define p_cdname __p_cdname #define p_fqnname __p_fqnname @@ -221,59 +223,68 @@ extern const struct res_sym __p_type_syms[]; #define p_option __p_option #define p_secstodate __p_secstodate #define dn_count_labels __dn_count_labels +#define dn_comp __dn_comp +#define dn_expand __dn_expand +#define res_init __res_init #define res_randomid __res_randomid +#define res_query __res_query +#define res_search __res_search +#define res_querydomain __res_querydomain +#define res_mkquery __res_mkquery +#define res_send __res_send #define res_isourserver __res_isourserver #define res_nameinquery __res_nameinquery #define res_queriesmatch __res_queriesmatch __BEGIN_DECLS -int __res_hnok __P((const char *)); -int __res_ownok __P((const char *)); -int __res_mailok __P((const char *)); -int __res_dnok __P((const char *)); -int sym_ston __P((const struct res_sym *, char *, int *)); -const char *sym_ntos __P((const struct res_sym *, int, int *)); -const char *sym_ntop __P((const struct res_sym *, int, int *)); -ssize_t b64_ntop __P((u_char const *, size_t, char *, size_t)); -ssize_t b64_pton __P((char const *, u_char *, size_t)); -int __loc_aton __P((const char *ascii, u_char *binary)); -char * __loc_ntoa __P((const u_char *binary, char *ascii)); -int __dn_skipname __P((const u_char *, const u_char *)); -void __fp_resstat __P((struct __res_state *, FILE *)); -void __fp_query __P((const u_char *, FILE *)); -void __fp_nquery __P((const u_char *, int, FILE *)); -char *__hostalias __P((const char *)); -void __putlong __P((u_int32_t, u_char *)); -void __putshort __P((u_int16_t, u_char *)); -char *__p_time __P((u_int32_t)); -void __p_query __P((const u_char *)); -const u_char *__p_cdnname __P((const u_char *, const u_char *, int, FILE *)); -const u_char *__p_cdname __P((const u_char *, const u_char *, FILE *)); -const u_char *__p_fqnname __P((const u_char *cp, const u_char *msg, +int res_hnok __P((const char *)); +int res_ownok __P((const char *)); +int res_mailok __P((const char *)); +int res_dnok __P((const char *)); +int sym_ston __P((const struct res_sym *, char *, int *)); +const char * sym_ntos __P((const struct res_sym *, int, int *)); +const char * sym_ntop __P((const struct res_sym *, int, int *)); +int b64_ntop __P((u_char const *, size_t, char *, size_t)); +int b64_pton __P((char const *, u_char *, size_t)); +int loc_aton __P((const char *, u_char *)); +const char * loc_ntoa __P((const u_char *, char *)); +int dn_skipname __P((const u_char *, const u_char *)); +void fp_resstat __P((struct __res_state *, FILE *)); +void fp_query __P((const u_char *, FILE *)); +void fp_nquery __P((const u_char *, int, FILE *)); +const char * hostalias __P((const char *)); +void putlong __P((u_int32_t, u_char *)); +void putshort __P((u_int16_t, u_char *)); +const char * p_class __P((int)); +const char * p_time __P((u_int32_t)); +const char * p_type __P((int)); +void p_query __P((const u_char *)); +const u_char * p_cdnname __P((const u_char *, const u_char *, int, FILE *)); +const u_char * p_cdname __P((const u_char *, const u_char *, FILE *)); +const u_char * p_fqnname __P((const u_char *cp, const u_char *msg, int, char *, int)); -const u_char *__p_fqname __P((const u_char *, const u_char *, FILE *)); -const u_char *__p_rr __P((const u_char *, const u_char *, FILE *)); -const char *__p_type __P((int)); -const char *__p_class __P((int)); -const char *__p_option __P((u_long option)); -char * __p_secstodate __P((unsigned long)); -int dn_count_labels __P((char *)); -int dn_comp __P((const char *, u_char *, int, u_char **, u_char **)); -int dn_expand __P((const u_char *, const u_char *, const u_char *, - char *, int)); -int res_init __P((void)); -u_int16_t res_randomid __P((void)); -int res_query __P((const char *, int, int, u_char *, int)); -int res_search __P((const char *, int, int, u_char *, int)); -int res_querydomain __P((const char *, const char *, int, int, - u_char *, int)); -int res_mkquery __P((int, const char *, int, int, const u_char *, int, - const u_char *, u_char *, int)); -int res_send __P((const u_char *, int, u_char *, int)); -int res_isourserver __P((const struct sockaddr_in *)); -int res_nameinquery __P((const char *, int, int, - const u_char *, const u_char *)); -int res_queriesmatch __P((const u_char *, const u_char *, - const u_char *, const u_char *)); +const u_char * p_fqname __P((const u_char *, const u_char *, FILE *)); +const u_char * p_rr __P((const u_char *, const u_char *, FILE *)); +const char * p_option __P((u_long option)); +char * p_secstodate __P((u_long)); +int dn_count_labels __P((char *)); +int dn_comp __P((const char *, u_char *, int, + u_char **, u_char **)); +int dn_expand __P((const u_char *, const u_char *, const u_char *, + char *, int)); +int res_init __P((void)); +u_int16_t res_randomid __P((void)); +int res_query __P((const char *, int, int, u_char *, int)); +int res_search __P((const char *, int, int, u_char *, int)); +int res_querydomain __P((const char *, const char *, int, int, + u_char *, int)); +int res_mkquery __P((int, const char *, int, int, const u_char *, int, + const u_char *, u_char *, int)); +int res_send __P((const u_char *, int, u_char *, int)); +int res_isourserver __P((const struct sockaddr_in *)); +int res_nameinquery __P((const char *, int, int, + const u_char *, const u_char *)); +int res_queriesmatch __P((const u_char *, const u_char *, + const u_char *, const u_char *)); __END_DECLS #endif /* !_RESOLV_H_ */ |