about summary refs log tree commit diff
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_ */