Module Name: src Committed By: tsarna Date: Fri Oct 2 02:45:30 UTC 2009
Modified Files: src/distrib/sets/lists/base: md.amd64 md.sparc64 shl.mi src/distrib/sets/lists/comp: mi src/include: netdb.h src/lib/libc: shlib_version src/lib/libc/net: Makefile.inc getaddrinfo.3 getaddrinfo.c Log Message: Introduce allocaddrinfo(3) to make writing getaddrinfo() nss plugins easier. Discussed on tech-net. To generate a diff of this commit: cvs rdiff -u -r1.68 -r1.69 src/distrib/sets/lists/base/md.amd64 cvs rdiff -u -r1.61 -r1.62 src/distrib/sets/lists/base/md.sparc64 cvs rdiff -u -r1.493 -r1.494 src/distrib/sets/lists/base/shl.mi cvs rdiff -u -r1.1314 -r1.1315 src/distrib/sets/lists/comp/mi cvs rdiff -u -r1.61 -r1.62 src/include/netdb.h cvs rdiff -u -r1.214 -r1.215 src/lib/libc/shlib_version cvs rdiff -u -r1.77 -r1.78 src/lib/libc/net/Makefile.inc cvs rdiff -u -r1.46 -r1.47 src/lib/libc/net/getaddrinfo.3 cvs rdiff -u -r1.92 -r1.93 src/lib/libc/net/getaddrinfo.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/base/md.amd64 diff -u src/distrib/sets/lists/base/md.amd64:1.68 src/distrib/sets/lists/base/md.amd64:1.69 --- src/distrib/sets/lists/base/md.amd64:1.68 Fri Sep 11 16:01:59 2009 +++ src/distrib/sets/lists/base/md.amd64 Fri Oct 2 02:45:28 2009 @@ -1,4 +1,4 @@ -# $NetBSD: md.amd64,v 1.68 2009/09/11 16:01:59 mrg Exp $ +# $NetBSD: md.amd64,v 1.69 2009/10/02 02:45:28 tsarna Exp $ ./dev/lms0 base-obsolete obsolete ./dev/mms0 base-obsolete obsolete ./libexec/ld.elf_so-i386 base-sys-shlib compat,pic @@ -67,7 +67,7 @@ ./usr/lib/i386/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/i386/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/i386/libc.so.12 base-compat-shlib compat,pic -./usr/lib/i386/libc.so.12.170 base-compat-shlib compat,pic +./usr/lib/i386/libc.so.12.171 base-compat-shlib compat,pic ./usr/lib/i386/libcom_err.so.6 base-compat-shlib compat,pic,kerberos ./usr/lib/i386/libcom_err.so.6.0 base-compat-shlib compat,pic,kerberos ./usr/lib/i386/libcrypt.so.1 base-compat-shlib compat,pic Index: src/distrib/sets/lists/base/md.sparc64 diff -u src/distrib/sets/lists/base/md.sparc64:1.61 src/distrib/sets/lists/base/md.sparc64:1.62 --- src/distrib/sets/lists/base/md.sparc64:1.61 Fri Sep 11 22:36:53 2009 +++ src/distrib/sets/lists/base/md.sparc64 Fri Oct 2 02:45:28 2009 @@ -1,4 +1,4 @@ -# $NetBSD: md.sparc64,v 1.61 2009/09/11 22:36:53 mrg Exp $ +# $NetBSD: md.sparc64,v 1.62 2009/10/02 02:45:28 tsarna Exp $ ./libexec/ld.elf_so-sparc base-sysutil-bin compat,pic ./sbin/edlabel base-sysutil-root ./usr/bin/fdformat base-util-bin @@ -65,7 +65,7 @@ ./usr/lib/sparc/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/sparc/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/sparc/libc.so.12 base-compat-shlib compat,pic -./usr/lib/sparc/libc.so.12.170 base-compat-shlib compat,pic +./usr/lib/sparc/libc.so.12.171 base-compat-shlib compat,pic ./usr/lib/sparc/libcom_err.so.6 base-compat-shlib compat,pic ./usr/lib/sparc/libcom_err.so.6.0 base-compat-shlib compat,pic ./usr/lib/sparc/libcrypt.so.1 base-compat-shlib compat,pic Index: src/distrib/sets/lists/base/shl.mi diff -u src/distrib/sets/lists/base/shl.mi:1.493 src/distrib/sets/lists/base/shl.mi:1.494 --- src/distrib/sets/lists/base/shl.mi:1.493 Wed Sep 30 03:41:12 2009 +++ src/distrib/sets/lists/base/shl.mi Fri Oct 2 02:45:28 2009 @@ -1,4 +1,4 @@ -# $NetBSD: shl.mi,v 1.493 2009/09/30 03:41:12 tsarna Exp $ +# $NetBSD: shl.mi,v 1.494 2009/10/02 02:45:28 tsarna Exp $ # # Note: Don't delete entries from here - mark them as "obsolete" instead, # unless otherwise stated below. @@ -13,7 +13,7 @@ # # Note: libtermcap and libtermlib are hardlinked and share the same version. # -./lib/libc.so.12.170 base-sys-shlib dynamicroot +./lib/libc.so.12.171 base-sys-shlib dynamicroot ./lib/libcrypt.so.1.0 base-sys-shlib dynamicroot ./lib/libcrypto.so.6.0 base-crypto-shlib crypto,dynamicroot ./lib/libdevmapper.so.1.0 base-lvm-shlib lvm,dynamicroot @@ -61,7 +61,7 @@ ./usr/lib/libbluetooth.so.4.2 base-sys-shlib ./usr/lib/libbsdmalloc.so.0.0 base-sys-shlib ./usr/lib/libbz2.so.1.1 base-sys-shlib -./usr/lib/libc.so.12.170 base-sys-shlib +./usr/lib/libc.so.12.171 base-sys-shlib ./usr/lib/libcom_err.so.6.0 base-krb5-shlib kerberos ./usr/lib/libcrypt.so.1.0 base-sys-shlib ./usr/lib/libcrypto.so.6.0 base-crypto-shlib crypto Index: src/distrib/sets/lists/comp/mi diff -u src/distrib/sets/lists/comp/mi:1.1314 src/distrib/sets/lists/comp/mi:1.1315 --- src/distrib/sets/lists/comp/mi:1.1314 Tue Sep 29 23:56:26 2009 +++ src/distrib/sets/lists/comp/mi Fri Oct 2 02:45:29 2009 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1314 2009/09/29 23:56:26 tsarna Exp $ +# $NetBSD: mi,v 1.1315 2009/10/02 02:45:29 tsarna Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -4636,6 +4636,7 @@ ./usr/share/man/cat3/aio_write.0 comp-c-catman .cat ./usr/share/man/cat3/alarm.0 comp-c-catman .cat ./usr/share/man/cat3/alloca.0 comp-c-catman .cat +./usr/share/man/cat3/allocaddrinfo.0 comp-c-catman .cat ./usr/share/man/cat3/alphasort.0 comp-c-catman .cat ./usr/share/man/cat3/arc4random.0 comp-c-catman .cat ./usr/share/man/cat3/archive.0 comp-c-catman .cat @@ -10215,6 +10216,7 @@ ./usr/share/man/html3/aio_write.html comp-c-htmlman html ./usr/share/man/html3/alarm.html comp-c-htmlman html ./usr/share/man/html3/alloca.html comp-c-htmlman html +./usr/share/man/html3/allocaddrinfo.html comp-c-htmlman html ./usr/share/man/html3/alphasort.html comp-c-htmlman html ./usr/share/man/html3/arc4random.html comp-c-htmlman html ./usr/share/man/html3/archive.html comp-c-htmlman html @@ -15594,6 +15596,7 @@ ./usr/share/man/man3/aio_write.3 comp-c-man .man ./usr/share/man/man3/alarm.3 comp-c-man .man ./usr/share/man/man3/alloca.3 comp-c-man .man +./usr/share/man/man3/allocaddrinfo.3 comp-c-man .man ./usr/share/man/man3/alphasort.3 comp-c-man .man ./usr/share/man/man3/arc4random.3 comp-c-man .man ./usr/share/man/man3/archive.3 comp-c-man .man Index: src/include/netdb.h diff -u src/include/netdb.h:1.61 src/include/netdb.h:1.62 --- src/include/netdb.h:1.61 Sun Apr 12 17:07:33 2009 +++ src/include/netdb.h Fri Oct 2 02:45:29 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: netdb.h,v 1.61 2009/04/12 17:07:33 christos Exp $ */ +/* $NetBSD: netdb.h,v 1.62 2009/10/02 02:45:29 tsarna Exp $ */ /* * ++Copyright++ 1980, 1983, 1988, 1993 @@ -343,6 +343,7 @@ int getnameinfo(const struct sockaddr * __restrict, socklen_t, char * __restrict, socklen_t, char * __restrict, socklen_t, int); +struct addrinfo *allocaddrinfo(socklen_t); void freeaddrinfo(struct addrinfo *); const char *gai_strerror(int); #endif Index: src/lib/libc/shlib_version diff -u src/lib/libc/shlib_version:1.214 src/lib/libc/shlib_version:1.215 --- src/lib/libc/shlib_version:1.214 Sun Aug 16 19:33:38 2009 +++ src/lib/libc/shlib_version Fri Oct 2 02:45:29 2009 @@ -1,4 +1,4 @@ -# $NetBSD: shlib_version,v 1.214 2009/08/16 19:33:38 christos Exp $ +# $NetBSD: shlib_version,v 1.215 2009/10/02 02:45:29 tsarna Exp $ # Remember to update distrib/sets/lists/base/shl.* when changing # # things we wish to do on next major version bump: @@ -35,4 +35,4 @@ # it's insufficient bitwidth to implement all ctype class. # see isblank's comment in ctype.h. major=12 -minor=170 +minor=171 Index: src/lib/libc/net/Makefile.inc diff -u src/lib/libc/net/Makefile.inc:1.77 src/lib/libc/net/Makefile.inc:1.78 --- src/lib/libc/net/Makefile.inc:1.77 Mon Jun 8 17:18:11 2009 +++ src/lib/libc/net/Makefile.inc Fri Oct 2 02:45:29 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.77 2009/06/08 17:18:11 christos Exp $ +# $NetBSD: Makefile.inc,v 1.78 2009/10/02 02:45:29 tsarna Exp $ # @(#)Makefile.inc 8.2 (Berkeley) 9/5/93 # net sources @@ -114,6 +114,7 @@ inet6_option_space.3 inet6_rthdr_space.3 \ inet6_opt_init.3 inet6_rth_space.3 MLINKS+=getaddrinfo.3 freeaddrinfo.3 \ + getaddrinfo.3 allocaddrinfo.3 \ getifaddrs.3 freeifaddrs.3 \ if_indextoname.3 if_nametoindex.3 if_indextoname.3 if_nameindex.3 \ if_indextoname.3 if_freenameindex.3 \ Index: src/lib/libc/net/getaddrinfo.3 diff -u src/lib/libc/net/getaddrinfo.3:1.46 src/lib/libc/net/getaddrinfo.3:1.47 --- src/lib/libc/net/getaddrinfo.3:1.46 Sat Dec 23 07:42:30 2006 +++ src/lib/libc/net/getaddrinfo.3 Fri Oct 2 02:45:29 2009 @@ -1,4 +1,4 @@ -.\" $NetBSD: getaddrinfo.3,v 1.46 2006/12/23 07:42:30 wiz Exp $ +.\" $NetBSD: getaddrinfo.3,v 1.47 2009/10/02 02:45:29 tsarna Exp $ .\" $KAME: getaddrinfo.3,v 1.36 2005/01/05 03:23:05 itojun Exp $ .\" $OpenBSD: getaddrinfo.3,v 1.35 2004/12/21 03:40:31 jaredy Exp $ .\" @@ -22,7 +22,8 @@ .Os .Sh NAME .Nm getaddrinfo , -.Nm freeaddrinfo +.Nm freeaddrinfo , +.Nm allocaddrinfo .Nd host and service name to socket address structure .Sh SYNOPSIS .In netdb.h @@ -32,6 +33,8 @@ "const struct addrinfo * restrict hints" "struct addrinfo ** restrict res" .Ft void .Fn freeaddrinfo "struct addrinfo *ai" +.Ft struct addrinfo * +.Fn allocaddrinfo "socklen_t len" .Sh DESCRIPTION The .Fn getaddrinfo @@ -280,7 +283,35 @@ pointer should be a .Li addrinfo structure created by a call to -.Fn getaddrinfo . +.Fn getaddrinfo +or +.Fn allocaddrinfo . +The +.Fn allocaddrinfo +function is intended primarily for authors of +.Xr nsdispatch 3 +plugins implementing +.Fn getaddrinfo +backends. +.Fn allocaddrinfo +allocates a +.Li struct addrinfo +in a way that is compatible with being returned from +.Fn getaddrinfo +and being ultimately freed by +.Fn freeaddrinfo . +The returned structure is zeroed, except for the +.Fa ai_addr +field, which +will point to +.Fa len +bytes of memory for storage of a socket address. +It is safe to allocate memory separately for +.Fa ai_canonname +with +.Xr malloc 3 , +or in any other way that is compatible with deallocation by +.Xr free 3 . .Sh RETURN VALUES .Fn getaddrinfo returns zero on success or one of the error codes listed in Index: src/lib/libc/net/getaddrinfo.c diff -u src/lib/libc/net/getaddrinfo.c:1.92 src/lib/libc/net/getaddrinfo.c:1.93 --- src/lib/libc/net/getaddrinfo.c:1.92 Fri Jan 23 00:48:57 2009 +++ src/lib/libc/net/getaddrinfo.c Fri Oct 2 02:45:29 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: getaddrinfo.c,v 1.92 2009/01/23 00:48:57 tls Exp $ */ +/* $NetBSD: getaddrinfo.c,v 1.93 2009/10/02 02:45:29 tsarna Exp $ */ /* $KAME: getaddrinfo.c,v 1.29 2000/08/31 17:26:57 itojun Exp $ */ /* @@ -55,7 +55,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: getaddrinfo.c,v 1.92 2009/01/23 00:48:57 tls Exp $"); +__RCSID("$NetBSD: getaddrinfo.c,v 1.93 2009/10/02 02:45:29 tsarna Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -847,26 +847,43 @@ return 0; } +struct addrinfo * +allocaddrinfo(socklen_t addrlen) +{ + struct addrinfo *ai; + + ai = calloc(sizeof(struct addrinfo) + addrlen, 1); + if (ai) { + ai->ai_addr = (void *)(ai+1); + ai->ai_addrlen = ai->ai_addr->sa_len = addrlen; + } + + return ai; +} + static struct addrinfo * get_ai(const struct addrinfo *pai, const struct afd *afd, const char *addr) { char *p; struct addrinfo *ai; + struct sockaddr *save; _DIAGASSERT(pai != NULL); _DIAGASSERT(afd != NULL); _DIAGASSERT(addr != NULL); - ai = (struct addrinfo *)malloc(sizeof(struct addrinfo) - + (afd->a_socklen)); + ai = allocaddrinfo((socklen_t)afd->a_socklen); if (ai == NULL) return NULL; + save = ai->ai_addr; memcpy(ai, pai, sizeof(struct addrinfo)); - ai->ai_addr = (struct sockaddr *)(void *)(ai + 1); - memset(ai->ai_addr, 0, (size_t)afd->a_socklen); - ai->ai_addr->sa_len = afd->a_socklen; - ai->ai_addrlen = afd->a_socklen; + + /* since we just overwrote all of ai, we have + to restore ai_addr and ai_addrlen */ + ai->ai_addr = save; + ai->ai_addrlen = (socklen_t)afd->a_socklen; + ai->ai_addr->sa_family = ai->ai_family = afd->a_af; p = (char *)(void *)(ai->ai_addr); memcpy(p + afd->a_off, addr, (size_t)afd->a_addrlen);