aboutsummaryrefslogtreecommitdiff
path: root/resolv
diff options
context:
space:
mode:
Diffstat (limited to 'resolv')
-rw-r--r--resolv/Banner1
-rw-r--r--resolv/Makefile5
-rw-r--r--resolv/arpa/nameser.h2
-rw-r--r--resolv/base64.c4
-rw-r--r--resolv/gethnamaddr.c36
-rw-r--r--resolv/res_comp.c20
-rw-r--r--resolv/res_debug.c7
-rw-r--r--resolv/res_query.c8
-rw-r--r--resolv/res_send.c17
-rw-r--r--resolv/resolv.h107
10 files changed, 146 insertions, 61 deletions
diff --git a/resolv/Banner b/resolv/Banner
new file mode 100644
index 0000000000..e08f0b4cd3
--- /dev/null
+++ b/resolv/Banner
@@ -0,0 +1 @@
+BIND-4.9.5-T4B
diff --git a/resolv/Makefile b/resolv/Makefile
index a141fc7569..9df98fab5a 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 7da0aef597..2352af684c 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 98983e0a93..8b01de33f4 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 755fc52ea8..fb51e31003 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 7da1c3e0f6..76f7cea5c5 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 b47667626f..61724bf23b 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 135c6aa5c0..2d191d0332 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 841baa64e3..4c258b99bf 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 23460c5280..e5ec75a4db 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_ */