diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-07-19 22:03:58 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-07-19 22:03:58 +0000 |
commit | e685e07dfa9de08cd0b671e293b94efe116349fa (patch) | |
tree | 3c283589ea027f9b4ef9062366e9729e87efd46a /resolv/inet_pton.c | |
parent | 80ec4993cc416058f6f8e98ce32bd729e9be1150 (diff) | |
download | glibc-e685e07dfa9de08cd0b671e293b94efe116349fa.tar.gz glibc-e685e07dfa9de08cd0b671e293b94efe116349fa.tar.xz glibc-e685e07dfa9de08cd0b671e293b94efe116349fa.zip |
Update.
2000-07-18 Mark Kettenis <kettenis@gnu.org> Update resolver code to BIND 8.2.3-T5B. * resolv/Versions [GLIBC_2.2] (libc): Add __res_init and __res_nclose. [GLIBC_2.2] (libresolv): Add __dn_expand, __ns_samename, __res_mkquery, __res_nsend, __res_query, __res_querydomain and __res_search. * resolv/Banner: BIND-8.2.3-T5B. * resolv/base64.c: Update from BIND 8.2.3-T5B. * resolv/herror.c: Likewise. * resolv/inet_addr.c: Likewise. * resolv/inet_net_ntop.c: Likewise. * resolv/inet_net_pton.c: Likewise. * resolv/inet_neta.c: Likewise. * resolv/inet_ntop.c: Likewise. * resolv/nsap_addr.c: Likewise. * resolv/inet_pton.c: Likewise. Reject a few more more invalid IPv6 addresses (ISC bug #520). * resolv/ns_name.c: Avoid emitting RCS ID in object file. * resolv/ns_parse.c: Likewise. * resolv/ns_netint.c: Likewise. * resolv/ns_samedomain.c: Likewise. * resolv/ns_ttl.c: Likewise. * resolv/ns_print.c: Update from BIND 8.2.3-T5B. Avoid emitting RCS ID in object file. * resolv/res_debug.c: Update from BIND 8.2.3-T5B. * resolv/res_mkquery.c: Likewise. * resolv/res_query.c: Likewise. * resolv/res_init.c: Likewise. (res_setoptions): Mark internal. * resolv/res_send.c: Likewise. [_LIBC]: Fully reinstate the code that avoids the FD_SETSIZE limit by using poll instead. * resolv/res_comp.c: Likewise. [SHLIB_COMPAT (libresolv, GLIBC_2_0, GLIBC_2_2)]: Make dn_expand a weak alias for __dn_expand. * resolv/res_data.c: Likewise. (res_close) [_LIBC]: Don't call res_nclose if RES_INIT isn't set in _res.options. Avoids a potential security risk by avoiding a close (0). [SHLIB_COMPAT (libresolv, GLIBC_2_0, GLIBC_2_2)]: Make res_mkquery, res_query, res_querydomain adn res_search weak aliases for __res_mkquery, __res_query, __res_querydomain and __res_search. * resolv/res_libc.c: (_res): Don't initialize. Fix res_close instead to avoid close(0). (res_init): Always use the static resolver context. [SHLIB_COMPAT (libc, GLIBC_2.0, GLIBC_2_2)]: Make res_init a weak alias for __res_init. * resolv/resolv.h: Update from BIND 8.2.3-T5B. Move definition of RES_SET_H_ERRNO and accompanying comment to... * include/resolv.h: ... here. * resolv/arpa/namser.h: Update from BIND 8.2.3-T5B. * resolv/arpa/nameser_compat.h: Likewise.
Diffstat (limited to 'resolv/inet_pton.c')
-rw-r--r-- | resolv/inet_pton.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/resolv/inet_pton.c b/resolv/inet_pton.c index 4dcbad95c4..264278be0d 100644 --- a/resolv/inet_pton.c +++ b/resolv/inet_pton.c @@ -1,4 +1,5 @@ -/* Copyright (c) 1996 by Internet Software Consortium. +/* + * 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 @@ -15,7 +16,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char rcsid[] = "$Id$"; +static const char rcsid[] = "$BINDId: inet_pton.c,v 1.7 1999/10/13 16:39:28 vixie Exp $"; #endif /* LIBC_SCCS and not lint */ #include <sys/param.h> @@ -27,7 +28,6 @@ static char rcsid[] = "$Id$"; #include <ctype.h> #include <string.h> #include <errno.h> -#include <conf/portability.h> /* * WARNING: Don't even consider trying to compile this on a system where @@ -83,7 +83,7 @@ inet_pton4(src, dst) u_char *dst; { int saw_digit, octets, ch; - u_char tmp[INADDRSZ], *tp; + u_char tmp[NS_INADDRSZ], *tp; saw_digit = 0; octets = 0; @@ -111,8 +111,7 @@ inet_pton4(src, dst) } if (octets < 4) return (0); - - memcpy(dst, tmp, INADDRSZ); + memcpy(dst, tmp, NS_INADDRSZ); return (1); } @@ -136,13 +135,13 @@ inet_pton6(src, dst) u_char *dst; { static const char xdigits[] = "0123456789abcdef"; - u_char tmp[IN6ADDRSZ], *tp, *endp, *colonp; + u_char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; const char *curtok; int ch, saw_xdigit; u_int val; - tp = memset(tmp, '\0', IN6ADDRSZ); - endp = tp + IN6ADDRSZ; + tp = memset(tmp, '\0', NS_IN6ADDRSZ); + endp = tp + NS_IN6ADDRSZ; colonp = NULL; /* Leading :: requires some special handling. */ if (*src == ':') @@ -170,8 +169,10 @@ inet_pton6(src, dst) return (0); colonp = tp; continue; + } else if (*src == '\0') { + return (0); } - if (tp + INT16SZ > endp) + if (tp + NS_INT16SZ > endp) return (0); *tp++ = (u_char) (val >> 8) & 0xff; *tp++ = (u_char) val & 0xff; @@ -179,16 +180,16 @@ inet_pton6(src, dst) val = 0; continue; } - if (ch == '.' && ((tp + INADDRSZ) <= endp) && + if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && inet_pton4(curtok, tp) > 0) { - tp += INADDRSZ; + tp += NS_INADDRSZ; saw_xdigit = 0; break; /* '\0' was seen by inet_pton4(). */ } return (0); } if (saw_xdigit) { - if (tp + INT16SZ > endp) + if (tp + NS_INT16SZ > endp) return (0); *tp++ = (u_char) (val >> 8) & 0xff; *tp++ = (u_char) val & 0xff; @@ -201,6 +202,8 @@ inet_pton6(src, dst) const int n = tp - colonp; int i; + if (tp == endp) + return (0); for (i = 1; i <= n; i++) { endp[- i] = colonp[n - i]; colonp[n - i] = 0; @@ -209,6 +212,6 @@ inet_pton6(src, dst) } if (tp != endp) return (0); - memcpy(dst, tmp, IN6ADDRSZ); + memcpy(dst, tmp, NS_IN6ADDRSZ); return (1); } |