From f7a223fa1b4106d58e9be4a6930983c175758e57 Mon Sep 17 00:00:00 2001 From: Waldemar Kornewald Date: Mon, 19 Dec 2005 13:26:54 +0000 Subject: [PATCH] Removed unneeded libbind files (were never compiled, anyway). Moved some headers around and cleaned them up. Fixed threading code in libbind.so. Don't know why I hadn't noticed this before. Now it is reliable, but uses an even uglier hack. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15585 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/legacy/network/arpa/inet.h | 132 ----- headers/legacy/network/netdb.h | 552 ------------------ headers/legacy/network/resolv.h | 503 ---------------- headers/posix/arpa/inet.h | 53 +- headers/{private/net => posix}/arpa/nameser.h | 14 +- .../net => posix}/arpa/nameser_compat.h | 34 +- headers/posix/netdb.h | 125 +--- headers/posix/resolv.h | 68 +-- src/kits/network/compat/libbind/DEVNOTES | 27 +- src/kits/network/compat/libbind/Jamfile | 28 +- .../compat/libbind/headers}/fd_setsize.h | 0 .../network/compat/libbind/headers}/irp.h | 0 .../network/compat/libbind/headers}/irs.h | 0 .../compat/libbind/headers}/isc/assertions.h | 0 .../network/compat/libbind/headers}/isc/ctl.h | 0 .../network/compat/libbind/headers}/isc/dst.h | 0 .../compat/libbind/headers}/isc/eventlib.h | 0 .../compat/libbind/headers}/isc/heap.h | 0 .../compat/libbind/headers}/isc/irpmarshall.h | 0 .../compat/libbind/headers}/isc/list.h | 0 .../compat/libbind/headers}/isc/logging.h | 0 .../compat/libbind/headers}/isc/memcluster.h | 0 .../compat/libbind/headers}/isc/misc.h | 0 .../compat/libbind/headers}/isc/tree.h | 0 .../compat/libbind/headers/pthread_emu.h | 8 + .../compat/libbind/headers}/res_update.h | 0 src/kits/network/compat/libbind/irs/dns_gr.c | 293 ---------- src/kits/network/compat/libbind/irs/dns_pw.c | 231 -------- .../network/compat/libbind/irs/gai_strerror.c | 23 +- src/kits/network/compat/libbind/irs/gen_gr.c | 492 ---------------- src/kits/network/compat/libbind/irs/gen_pw.c | 233 -------- .../network/compat/libbind/irs/getgrent.c | 223 ------- .../network/compat/libbind/irs/getgrent_r.c | 229 -------- .../network/compat/libbind/irs/getpwent.c | 200 ------- .../network/compat/libbind/irs/getpwent_r.c | 275 --------- src/kits/network/compat/libbind/irs/irp_gr.c | 408 ------------- src/kits/network/compat/libbind/irs/irp_pw.c | 358 ------------ .../network/compat/libbind/irs/irs_data.c | 23 +- src/kits/network/compat/libbind/irs/lcl_gr.c | 354 ----------- src/kits/network/compat/libbind/irs/lcl_pw.c | 308 ---------- src/kits/network/compat/libbind/irs/nis_gr.c | 353 ----------- src/kits/network/compat/libbind/irs/nis_ho.c | 533 ----------------- src/kits/network/compat/libbind/irs/nis_ng.c | 302 ---------- src/kits/network/compat/libbind/irs/nis_nw.c | 383 ------------ src/kits/network/compat/libbind/irs/nis_pr.c | 300 ---------- src/kits/network/compat/libbind/irs/nis_pw.c | 287 --------- src/kits/network/compat/libbind/irs/nis_sv.c | 308 ---------- .../network/compat/libbind/src/TLSInit.cpp | 19 + .../network/compat/libbind/src/pthread_emu.c | 44 -- 49 files changed, 145 insertions(+), 7578 deletions(-) delete mode 100644 headers/legacy/network/arpa/inet.h delete mode 100644 headers/legacy/network/netdb.h delete mode 100644 headers/legacy/network/resolv.h rename headers/{private/net => posix}/arpa/nameser.h (99%) rename headers/{private/net => posix}/arpa/nameser_compat.h (82%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/fd_setsize.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/irp.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/irs.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/assertions.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/ctl.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/dst.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/eventlib.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/heap.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/irpmarshall.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/list.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/logging.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/memcluster.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/misc.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/isc/tree.h (100%) rename {headers/private/net => src/kits/network/compat/libbind/headers}/res_update.h (100%) delete mode 100644 src/kits/network/compat/libbind/irs/dns_gr.c delete mode 100644 src/kits/network/compat/libbind/irs/dns_pw.c delete mode 100644 src/kits/network/compat/libbind/irs/gen_gr.c delete mode 100644 src/kits/network/compat/libbind/irs/gen_pw.c delete mode 100644 src/kits/network/compat/libbind/irs/getgrent.c delete mode 100644 src/kits/network/compat/libbind/irs/getgrent_r.c delete mode 100644 src/kits/network/compat/libbind/irs/getpwent.c delete mode 100644 src/kits/network/compat/libbind/irs/getpwent_r.c delete mode 100644 src/kits/network/compat/libbind/irs/irp_gr.c delete mode 100644 src/kits/network/compat/libbind/irs/irp_pw.c delete mode 100644 src/kits/network/compat/libbind/irs/lcl_gr.c delete mode 100644 src/kits/network/compat/libbind/irs/lcl_pw.c delete mode 100644 src/kits/network/compat/libbind/irs/nis_gr.c delete mode 100644 src/kits/network/compat/libbind/irs/nis_ho.c delete mode 100644 src/kits/network/compat/libbind/irs/nis_ng.c delete mode 100644 src/kits/network/compat/libbind/irs/nis_nw.c delete mode 100644 src/kits/network/compat/libbind/irs/nis_pr.c delete mode 100644 src/kits/network/compat/libbind/irs/nis_pw.c delete mode 100644 src/kits/network/compat/libbind/irs/nis_sv.c create mode 100644 src/kits/network/compat/libbind/src/TLSInit.cpp delete mode 100644 src/kits/network/compat/libbind/src/pthread_emu.c diff --git a/headers/legacy/network/arpa/inet.h b/headers/legacy/network/arpa/inet.h deleted file mode 100644 index bb1827cfd8..0000000000 --- a/headers/legacy/network/arpa/inet.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * ++Copyright++ 1983, 1993 - * - - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - - * Portions Copyright (c) 1993 by Digital Equipment Corporation. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies, and that - * the name of Digital Equipment Corporation not be used in advertising or - * publicity pertaining to distribution of the document or software without - * specific, written prior permission. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT - * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - * - - * --Copyright-- - */ - -/* - * @(#)inet.h 8.1 (Berkeley) 6/2/93 - * $Id$ - */ - -#ifndef _INET_H_ -#define _INET_H_ - -/* External definitions for functions in inet(3) */ - -#include -#if (!defined(BSD)) || (BSD < 199306) -# include -#else -# include -#endif -#include - -#define inet_addr __inet_addr -#define inet_aton __inet_aton -#define inet_lnaof __inet_lnaof -#define inet_makeaddr __inet_makeaddr -#define inet_neta __inet_neta -#define inet_netof __inet_netof -#define inet_network __inet_network -#define inet_net_ntop __inet_net_ntop -#define inet_net_pton __inet_net_pton -#define inet_cidr_ntop __inet_cidr_ntop -#define inet_cidr_pton __inet_cidr_pton -#define inet_ntoa __inet_ntoa -#define inet_pton __inet_pton -#define inet_ntop __inet_ntop -#define inet_nsap_addr __inet_nsap_addr -#define inet_nsap_ntoa __inet_nsap_ntoa - -#ifdef __cplusplus -extern "C" { -#endif - -__BEGIN_DECLS -unsigned long inet_addr __P((const char *)); -int inet_aton __P((const char *, struct in_addr *)); -unsigned long inet_lnaof __P((struct in_addr)); -struct in_addr inet_makeaddr __P((u_long , u_long)); -char * inet_neta __P((u_long, char *, size_t)); -unsigned long inet_netof __P((struct in_addr)); -unsigned long inet_network __P((const char *)); -char *inet_net_ntop __P((int, const void *, int, char *, size_t)); -int inet_net_pton __P((int, const char *, void *, size_t)); -char *inet_cidr_ntop __P((int, const void *, int, char *, size_t)); -int inet_cidr_pton __P((int, const char *, void *, int *)); -/*const*/ char *inet_ntoa __P((struct in_addr)); -int inet_pton __P((int, const char *, void *)); -const char *inet_ntop __P((int, const void *, char *, size_t)); -u_int inet_nsap_addr __P((const char *, u_char *, int)); -char *inet_nsap_ntoa __P((int, const u_char *, char *)); -__END_DECLS - -#ifdef __cplusplus -} -#endif - -#if defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED) -/* - * Macros for number representation conversion. - * - * netinet/in.h is another location for these macros - */ -#ifndef ntohl -#define ntohl(x) (x) -#define ntohs(x) (x) -#define htonl(x) (x) -#define htons(x) (x) -#endif -#endif - -#endif /* !_INET_H_ */ diff --git a/headers/legacy/network/netdb.h b/headers/legacy/network/netdb.h deleted file mode 100644 index c5e50a6b2f..0000000000 --- a/headers/legacy/network/netdb.h +++ /dev/null @@ -1,552 +0,0 @@ -/* - * ++Copyright++ 1980, 1983, 1988, 1993 - * - - * Copyright (c) 1980, 1983, 1988, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - - * Portions Copyright (c) 1993 by Digital Equipment Corporation. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies, and that - * the name of Digital Equipment Corporation not be used in advertising or - * publicity pertaining to distribution of the document or software without - * specific, written prior permission. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT - * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - * - - * Portions Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by WIDE Project and - * its contributors. - * 4. Neither the name of the project nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - - * --Copyright-- - */ - -/* - * @(#)netdb.h 8.1 (Berkeley) 6/2/93 - * $Id$ - */ - -#ifndef _NETDB_H_ -#define _NETDB_H_ - -#include -#include -#if (!defined(BSD)) || (BSD < 199306) -# include -#endif -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _PATH_HEQUIV -#define _PATH_HEQUIV "/etc/hosts.equiv" -#endif -#ifndef _PATH_HOSTS -#define _PATH_HOSTS "/etc/hosts" -#endif -#ifndef _PATH_NETWORKS -#define _PATH_NETWORKS "/etc/networks" -#endif -#ifndef _PATH_PROTOCOLS -#define _PATH_PROTOCOLS "/etc/protocols" -#endif -#ifndef _PATH_SERVICES -#define _PATH_SERVICES "/etc/services" -#endif - -#if (__GLIBC__ > 2 || __GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) -#define __h_errno __h_errno_location -#endif -__BEGIN_DECLS -extern int * __h_errno __P((void)); -__END_DECLS -#define h_errno (*__h_errno()) - -/* - * Structures returned by network data base library. All addresses are - * supplied in host order, and returned in network order (suitable for - * use in system calls). - */ -struct hostent { - char *h_name; /* official name of host */ - char **h_aliases; /* alias list */ - int h_addrtype; /* host address type */ - int h_length; /* length of address */ - char **h_addr_list; /* list of addresses from name server */ -#define h_addr h_addr_list[0] /* address, for backward compatiblity */ -}; - -/* - * Assumption here is that a network number - * fits in an unsigned long -- probably a poor one. - */ -struct netent { - char *n_name; /* official name of net */ - char **n_aliases; /* alias list */ - int n_addrtype; /* net address type */ - unsigned long n_net; /* network # */ -}; - -struct servent { - char *s_name; /* official service name */ - char **s_aliases; /* alias list */ - int s_port; /* port # */ - char *s_proto; /* protocol to use */ -}; - -struct protoent { - char *p_name; /* official protocol name */ - char **p_aliases; /* alias list */ - int p_proto; /* protocol # */ -}; - -struct addrinfo { - int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ - int ai_family; /* PF_xxx */ - int ai_socktype; /* SOCK_xxx */ - int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ -#if defined(sun) && defined(_SOCKLEN_T) -#ifdef __sparc9 - int _ai_pad; -#endif - socklen_t ai_addrlen; -#else - size_t ai_addrlen; /* length of ai_addr */ -#endif -#ifdef __linux - struct sockaddr *ai_addr; /* binary address */ - char *ai_canonname; /* canonical name for hostname */ -#else - char *ai_canonname; /* canonical name for hostname */ - struct sockaddr *ai_addr; /* binary address */ -#endif - struct addrinfo *ai_next; /* next structure in linked list */ -}; - -/* - * Error return codes from gethostbyname() and gethostbyaddr() - * (left in extern int h_errno). - */ - -#define NETDB_INTERNAL -1 /* see errno */ -#define NETDB_SUCCESS 0 /* no problem */ -#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ -#define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */ -#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ -#define NO_DATA 4 /* Valid name, no data record of requested type */ -#define NO_ADDRESS NO_DATA /* no address, look for MX record */ - -/* - * Error return codes from getaddrinfo() - */ -#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ -#define EAI_AGAIN 2 /* temporary failure in name resolution */ -#define EAI_BADFLAGS 3 /* invalid value for ai_flags */ -#define EAI_FAIL 4 /* non-recoverable failure in name resolution */ -#define EAI_FAMILY 5 /* ai_family not supported */ -#define EAI_MEMORY 6 /* memory allocation failure */ -#define EAI_NODATA 7 /* no address associated with hostname */ -#define EAI_NONAME 8 /* hostname nor servname provided, or not known */ -#define EAI_SERVICE 9 /* servname not supported for ai_socktype */ -#define EAI_SOCKTYPE 10 /* ai_socktype not supported */ -#define EAI_SYSTEM 11 /* system error returned in errno */ -#define EAI_BADHINTS 12 -#define EAI_PROTOCOL 13 -#define EAI_MAX 14 - -/* - * Flag values for getaddrinfo() - */ -#define AI_PASSIVE 0x00000001 -#define AI_CANONNAME 0x00000002 -#define AI_NUMERICHOST 0x00000004 -#define AI_MASK 0x00000007 - -/* - * Flag values for getipnodebyname() - */ -#define AI_V4MAPPED 0x00000008 -#define AI_ALL 0x00000010 -#define AI_ADDRCONFIG 0x00000020 -#define AI_DEFAULT (AI_V4MAPPED|AI_ADDRCONFIG) - -/* - * Constants for getnameinfo() - */ -#define NI_MAXHOST 1025 -#define NI_MAXSERV 32 - -/* - * Flag values for getnameinfo() - */ -#define NI_NOFQDN 0x00000001 -#define NI_NUMERICHOST 0x00000002 -#define NI_NAMEREQD 0x00000004 -#define NI_NUMERICSERV 0x00000008 -#define NI_DGRAM 0x00000010 -#define NI_WITHSCOPEID 0x00000020 -#define NI_NUMERICSCOPE 0x00000040 - -/* - * Scope delimit character - */ -#define SCOPE_DELIMITER '%' - - -#if defined (__hpux) || defined(__osf__) || defined(_AIX) -#define _MAXALIASES 35 -#define _MAXLINELEN 1024 -#define _MAXADDRS 35 -#define _HOSTBUFSIZE (BUFSIZ + 1) - -struct hostent_data { - struct in_addr host_addr; - char *h_addr_ptrs[_MAXADDRS + 1]; - char hostaddr[_MAXADDRS]; - char hostbuf[_HOSTBUFSIZE]; - char *host_aliases[_MAXALIASES]; - char *host_addrs[2]; - FILE *hostf; -#ifdef __osf__ - int svc_gethostflag; - int svc_gethostbind; -#endif -#ifdef __hpux - short _nsw_src; - short _flags; - char *current; - int currentlen; -#endif -}; - -struct netent_data { - FILE *net_fp; -#ifdef __osf__ - char line[_MAXLINELEN]; -#endif -#ifdef __hpux - char line[_MAXLINELEN+1]; -#endif - char *net_aliases[_MAXALIASES]; -#ifdef __osf__ - int _net_stayopen; - int svc_getnetflag; -#endif -#ifdef __hpux - short _nsw_src; - short _flags; - char *current; - int currentlen; -#endif -}; - -struct protoent_data { - FILE *proto_fp; -#ifdef __osf__ - char line[1024]; -#endif -#ifdef __hpux - char line[_MAXLINELEN+1]; -#endif - char *proto_aliases[_MAXALIASES]; -#ifdef __osf__ - int _proto_stayopen; - int svc_getprotoflag; -#endif -#ifdef __hpux - short _nsw_src; - short _flags; - char *current; - int currentlen; -#endif -}; - -struct servent_data { - FILE *serv_fp; -#ifdef __osf__ - char line[_MAXLINELEN]; -#endif -#ifdef __hpux - char line[_MAXLINELEN+1]; -#endif - char *serv_aliases[_MAXALIASES]; -#ifdef __osf__ - int _serv_stayopen; - int svc_getservflag; -#endif -#ifdef __hpux - short _nsw_src; - short _flags; - char *current; - int currentlen; -#endif -}; -#endif - -__BEGIN_DECLS -void endhostent __P((void)); -void endnetent __P((void)); -void endprotoent __P((void)); -void endservent __P((void)); -void freehostent __P((struct hostent *)); -struct hostent *gethostbyaddr __P((const char *, int, int)); -struct hostent *gethostbyname __P((const char *)); -struct hostent *gethostbyname2 __P((const char *, int)); -struct hostent *gethostent __P((void)); -struct hostent *getipnodebyaddr __P((const void *, size_t, int, int *)); -struct hostent *getipnodebyname __P((const char *, int, int, int *)); -struct netent *getnetbyaddr __P((unsigned long, int)); -struct netent *getnetbyname __P((const char *)); -struct netent *getnetent __P((void)); -struct protoent *getprotobyname __P((const char *)); -struct protoent *getprotobynumber __P((int)); -struct protoent *getprotoent __P((void)); -struct servent *getservbyname __P((const char *, const char *)); -struct servent *getservbyport __P((int, const char *)); -struct servent *getservent __P((void)); -void herror __P((const char *)); -const char *hstrerror __P((int)); -void sethostent __P((int)); -/* void sethostfile __P((const char *)); */ -void setnetent __P((int)); -void setprotoent __P((int)); -void setservent __P((int)); -int getaddrinfo __P((const char *, const char *, - const struct addrinfo *, struct addrinfo **)); -int getnameinfo __P((const struct sockaddr *, size_t, char *, - size_t, char *, size_t, int)); -void freeaddrinfo __P((struct addrinfo *)); -const char *gai_strerror __P((int)); -struct hostent *getipnodebyname __P((const char *, int, int, int *)); -struct hostent *getipnodebyaddr __P((const void *, size_t, int, int *)); -void freehostent __P((struct hostent *)); -#ifdef __GLIBC__ -int getnetgrent __P((/* const */ char **, /* const */ char **, - /* const */ char **)); -void setnetgrent __P((const char *)); -void endnetgrent __P((void)); -int innetgr __P((const char *, const char *, const char *, - const char *)); -#endif - -#if defined(__hpux) || defined(__osf__) || defined(_AIX) -int gethostbyaddr_r __P((const char *, int, int, struct hostent *, - struct hostent_data *)); -int gethostbyname_r __P((const char *, struct hostent *, - struct hostent_data *)); -int gethostent_r __P((struct hostent *, struct hostent_data *)); -#if defined(_AIX) -void sethostent_r __P((int, struct hostent_data *)); -#else -int sethostent_r __P((int, struct hostent_data *)); -#endif -#if defined(__hpux) -int endhostent_r __P((struct hostent_data *)); -#else -void endhostent_r __P((struct hostent_data *)); -#endif - -#if defined(__hpux) || defined(__osf__) -int getnetbyaddr_r __P((int, int, - struct netent *, struct netent_data *)); -#else -int getnetbyaddr_r __P((long, int, - struct netent *, struct netent_data *)); -#endif -int getnetbyname_r __P((const char *, - struct netent *, struct netent_data *)); -int getnetent_r __P((struct netent *, struct netent_data *)); -int setnetent_r __P((int, struct netent_data *)); -#ifdef __hpux -int endnetent_r __P((struct netent_data *buffer)); -#else -void endnetent_r __P((struct netent_data *buffer)); -#endif - -int getprotobyname_r __P((const char *, - struct protoent *, struct protoent_data *)); -int getprotobynumber_r __P((int, - struct protoent *, struct protoent_data *)); -int getprotoent_r __P((struct protoent *, struct protoent_data *)); -int setprotoent_r __P((int, struct protoent_data *)); -#ifdef __hpux -int endprotoent_r __P((struct protoent_data *)); -#else -void endprotoent_r __P((struct protoent_data *)); -#endif - -int getservbyname_r __P((const char *, const char *, - struct servent *, struct servent_data *)); -int getservbyport_r __P((int, const char *, - struct servent *, struct servent_data *)); -int getservent_r __P((struct servent *, struct servent_data *)); -int setservent_r __P((int, struct servent_data *)); -#ifdef __hpux -int endservent_r __P((struct servent_data *)); -#else -void endservent_r __P((struct servent_data *)); -#endif -#else - /* defined(sun) || defined(bsdi) */ -#ifdef __GLIBC__ -int gethostbyaddr_r __P((const char *, int, int, struct hostent *, - char *, size_t, struct hostent **, int *)); -int gethostbyname_r __P((const char *, struct hostent *, - char *, size_t, struct hostent **, int *)); -int gethostent_r __P((struct hostent *, char *, size_t, - struct hostent **, int *)); -#else -struct hostent *gethostbyaddr_r __P((const char *, int, int, struct hostent *, - char *, int, int *)); -struct hostent *gethostbyname_r __P((const char *, struct hostent *, - char *, int, int *)); -struct hostent *gethostent_r __P((struct hostent *, char *, int, int *)); -#endif -void sethostent_r __P((int)); -void endhostent_r __P((void)); - -#ifdef __GLIBC__ -int getnetbyname_r __P((const char *, struct netent *, - char *, size_t, struct netent **, int*)); -int getnetbyaddr_r __P((unsigned long int, int, struct netent *, - char *, size_t, struct netent **, int*)); -int getnetent_r __P((struct netent *, char *, size_t, struct netent **, int*)); -#else -struct netent *getnetbyname_r __P((const char *, struct netent *, - char *, int)); -struct netent *getnetbyaddr_r __P((long, int, struct netent *, - char *, int)); -struct netent *getnetent_r __P((struct netent *, char *, int)); -#endif -void setnetent_r __P((int)); -void endnetent_r __P((void)); - -#ifdef __GLIBC__ -int getprotobyname_r __P((const char *, struct protoent *, char *, - size_t, struct protoent **)); -int getprotobynumber_r __P((int, struct protoent *, char *, size_t, - struct protoent **)); -int getprotoent_r __P((struct protoent *, char *, size_t, struct protoent **)); -#else -struct protoent *getprotobyname_r __P((const char *, - struct protoent *, char *, int)); -struct protoent *getprotobynumber_r __P((int, - struct protoent *, char *, int)); -struct protoent *getprotoent_r __P((struct protoent *, char *, int)); -#endif -void setprotoent_r __P((int)); -void endprotoent_r __P((void)); - -#ifdef __GLIBC__ -int getservbyname_r __P((const char *name, const char *, - struct servent *, char *, size_t, struct servent **)); -int getservbyport_r __P((int port, const char *, - struct servent *, char *, size_t, struct servent **)); -int getservent_r __P((struct servent *, char *, size_t, struct servent **)); -#else -struct servent *getservbyname_r __P((const char *name, const char *, - struct servent *, char *, int)); -struct servent *getservbyport_r __P((int port, const char *, - struct servent *, char *, int)); -struct servent *getservent_r __P((struct servent *, char *, int)); -#endif -void setservent_r __P((int)); -void endservent_r __P((void)); - -#ifdef __GLIBC__ -int getnetgrent_r __P((char **, char **, char **, char *, size_t)); -#endif -#ifdef _AIX -int setnetgrent_r __P((char *, void **)); -#endif - -#endif - -#ifdef __cplusplus -} -#endif -__END_DECLS - -/* This is nec'y to make this include file properly replace the sun version. */ -#ifdef sun -#ifdef __GNU_LIBRARY__ -#include -#else -struct rpcent { - char *r_name; /* name of server for this rpc program */ - char **r_aliases; /* alias list */ - int r_number; /* rpc program number */ -}; -struct rpcent *getrpcbyname(), *getrpcbynumber(), *getrpcent(); -#endif /* __GNU_LIBRARY__ */ -#endif /* sun */ - -#endif /* !_NETDB_H_ */ diff --git a/headers/legacy/network/resolv.h b/headers/legacy/network/resolv.h deleted file mode 100644 index a0115f9468..0000000000 --- a/headers/legacy/network/resolv.h +++ /dev/null @@ -1,503 +0,0 @@ -/* - * Copyright (c) 1983, 1987, 1989 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Portions 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * @(#)resolv.h 8.1 (Berkeley) 6/2/93 - * $Id$ - */ - -#ifndef _RESOLV_H_ -#define _RESOLV_H_ - -#include -#if (!defined(BSD)) || (BSD < 199306) -# include -#else -# include -#endif -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Revision information. This is the release date in YYYYMMDD format. - * It can change every day so the right thing to do with it is use it - * in preprocessor commands such as "#if (__RES > 19931104)". Do not - * compare for equality; rather, use it to determine whether your resolver - * is new enough to contain a certain feature. - */ - -#define __RES 20030124 - -/* - * This used to be defined in res_query.c, now it's in herror.c. - * [XXX no it's not. It's in irs/irs_data.c] - * It was - * never extern'd by any *.h file before it was placed here. For thread - * aware programs, the last h_errno value set is stored in res->h_errno. - * - * XXX: There doesn't seem to be a good reason for exposing RES_SET_H_ERRNO - * (and __h_errno_set) to the public via . - * XXX: __h_errno_set is really part of IRS, not part of the resolver. - * If somebody wants to build and use a resolver that doesn't use IRS, - * what do they do? Perhaps something like - * #ifdef WANT_IRS - * # define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x) - * #else - * # define RES_SET_H_ERRNO(r,x) (h_errno = (r)->res_h_errno = (x)) - * #endif - */ - -#define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x) -struct __res_state; /* forward */ -__BEGIN_DECLS -void __h_errno_set(struct __res_state *res, int err); -__END_DECLS - -/* - * Resolver configuration file. - * Normally not present, but may contain the address of the - * initial name server(s) to query and the domain search list. - */ - -#ifndef _PATH_RESCONF -#define _PATH_RESCONF "/etc/resolv.conf" -#endif - -typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error } - res_sendhookact; - -#ifndef __PMT -#if defined(__STDC__) || defined(__cplusplus) -#define __PMT(args) args -#else -#define __PMT(args) () -#endif -#endif - -typedef res_sendhookact (*res_send_qhook)__PMT((struct sockaddr * const *, - const u_char **, int *, - u_char *, int, int *)); - -typedef res_sendhookact (*res_send_rhook)__PMT((const struct sockaddr *, - const u_char *, int, u_char *, - int, int *)); - -struct res_sym { - int number; /* Identifying number, like T_MX */ - const char * name; /* Its symbolic name, like "MX" */ - const char * humanname; /* Its fun name, like "mail exchanger" */ -}; - -/* - * Global defines and variables for resolver stub. - */ -#define MAXNS 3 /* max # name servers we'll track */ -#define MAXDFLSRCH 3 /* # default domain levels to try */ -#define MAXDNSRCH 6 /* max # domains in search path */ -#define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */ - -#define RES_TIMEOUT 5 /* min. seconds between retries */ -#define MAXRESOLVSORT 10 /* number of net to sort on */ -#define RES_MAXNDOTS 15 /* should reflect bit field size */ -#define RES_MAXRETRANS 30 /* only for resolv.conf/RES_OPTIONS */ -#define RES_MAXRETRY 5 /* only for resolv.conf/RES_OPTIONS */ -#define RES_DFLRETRY 2 /* Default #/tries. */ -#define RES_MAXTIME 65535 /* Infinity, in milliseconds. */ - -struct __res_state_ext; - -struct __res_state { - int retrans; /* retransmission time interval */ - int retry; /* number of times to retransmit */ -#ifdef sun - u_int options; /* option flags - see below. */ -#else - u_long options; /* option flags - see below. */ -#endif - int nscount; /* number of name servers */ - struct sockaddr_in - nsaddr_list[MAXNS]; /* address of name server */ -#define nsaddr nsaddr_list[0] /* for backward compatibility */ - u_short id; /* current message id */ - char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */ - char defdname[256]; /* default domain (deprecated) */ -#ifdef sun - u_int pfcode; /* RES_PRF_ flags - see below. */ -#else - u_long pfcode; /* RES_PRF_ flags - see below. */ -#endif - unsigned ndots:4; /* threshold for initial abs. query */ - unsigned nsort:4; /* number of elements in sort_list[] */ - char unused[3]; - struct { - struct in_addr addr; - u_int32_t mask; - } sort_list[MAXRESOLVSORT]; - res_send_qhook qhook; /* query hook */ - res_send_rhook rhook; /* response hook */ - int res_h_errno; /* last one set for this context */ - int _vcsock; /* PRIVATE: for res_send VC i/o */ - u_int _flags; /* PRIVATE: see below */ - u_int _pad; /* make _u 64 bit aligned */ - union { - /* On an 32-bit arch this means 512b total. */ - char pad[72 - 4*sizeof (int) - 2*sizeof (void *)]; - struct { - u_int16_t nscount; - u_int16_t nstimes[MAXNS]; /* ms. */ - int nssocks[MAXNS]; - struct __res_state_ext *ext; /* extention for IPv6 */ - } _ext; - } _u; -}; - -typedef struct __res_state *res_state; - -union res_sockaddr_union { - struct sockaddr_in sin; -#ifdef IN6ADDR_ANY_INIT - struct sockaddr_in6 sin6; -#endif -#ifdef ISC_ALIGN64 - int64_t __align64; /* 64bit alignment */ -#else - int32_t __align32; /* 32bit alignment */ -#endif - char __space[128]; /* max size */ -}; - -/* - * Resolver flags (used to be discrete per-module statics ints). - */ -#define RES_F_VC 0x00000001 /* socket is TCP */ -#define RES_F_CONN 0x00000002 /* socket is connected */ -#define RES_F_EDNS0ERR 0x00000004 /* EDNS0 caused errors */ -#define RES_F__UNUSED 0x00000008 /* (unused) */ -#define RES_F_LASTMASK 0x000000F0 /* ordinal server of last res_nsend */ -#define RES_F_LASTSHIFT 4 /* bit position of LASTMASK "flag" */ -#define RES_GETLAST(res) (((res)._flags & RES_F_LASTMASK) >> RES_F_LASTSHIFT) - -/* res_findzonecut2() options */ -#define RES_EXHAUSTIVE 0x00000001 /* always do all queries */ -#define RES_IPV4ONLY 0x00000002 /* IPv4 only */ -#define RES_IPV6ONLY 0x00000004 /* IPv6 only */ - -/* - * Resolver options (keep these in synch with res_debug.c, please) - */ -#define RES_INIT 0x00000001 /* address initialized */ -#define RES_DEBUG 0x00000002 /* print debug messages */ -#define RES_AAONLY 0x00000004 /* authoritative answers only (!IMPL)*/ -#define RES_USEVC 0x00000008 /* use virtual circuit */ -#define RES_PRIMARY 0x00000010 /* query primary server only (!IMPL) */ -#define RES_IGNTC 0x00000020 /* ignore trucation errors */ -#define RES_RECURSE 0x00000040 /* recursion desired */ -#define RES_DEFNAMES 0x00000080 /* use default domain name */ -#define RES_STAYOPEN 0x00000100 /* Keep TCP socket open */ -#define RES_DNSRCH 0x00000200 /* search up local domain tree */ -#define RES_INSECURE1 0x00000400 /* type 1 security disabled */ -#define RES_INSECURE2 0x00000800 /* type 2 security disabled */ -#define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */ -#define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */ -#define RES_ROTATE 0x00004000 /* rotate ns list after each query */ -#define RES_NOCHECKNAME 0x00008000 /* do not check names for sanity. */ -#define RES_KEEPTSIG 0x00010000 /* do not strip TSIG records */ -#define RES_BLAST 0x00020000 /* blast all recursive servers */ -#define RES_NOTLDQUERY 0x00100000 /* don't unqualified name as a tld */ -#define RES_USE_DNSSEC 0x00200000 /* use DNSSEC using OK bit in OPT */ -/* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */ -/* KAME extensions: use higher bit to avoid conflict with ISC use */ -#define RES_USE_DNAME 0x10000000 /* use DNAME */ -#define RES_USE_EDNS0 0x40000000 /* use EDNS0 if configured */ -#define RES_NO_NIBBLE2 0x80000000 /* disable alternate nibble lookup */ - -#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | \ - RES_DNSRCH | RES_NO_NIBBLE2) - -/* - * Resolver "pfcode" values. Used by dig. - */ -#define RES_PRF_STATS 0x00000001 -#define RES_PRF_UPDATE 0x00000002 -#define RES_PRF_CLASS 0x00000004 -#define RES_PRF_CMD 0x00000008 -#define RES_PRF_QUES 0x00000010 -#define RES_PRF_ANS 0x00000020 -#define RES_PRF_AUTH 0x00000040 -#define RES_PRF_ADD 0x00000080 -#define RES_PRF_HEAD1 0x00000100 -#define RES_PRF_HEAD2 0x00000200 -#define RES_PRF_TTLID 0x00000400 -#define RES_PRF_HEADX 0x00000800 -#define RES_PRF_QUERY 0x00001000 -#define RES_PRF_REPLY 0x00002000 -#define RES_PRF_INIT 0x00004000 -#define RES_PRF_TRUNC 0x00008000 -/* 0x00010000 */ - -/* Things involving an internal (static) resolver context. */ -__BEGIN_DECLS -extern struct __res_state *__res_state(void); -__END_DECLS -#define _res (*__res_state()) - -#ifndef __BIND_NOSTATIC -#define fp_nquery __fp_nquery -#define fp_query __fp_query -#define hostalias __hostalias -#define p_query __p_query -#define res_close __res_close -#define res_init __res_init -#define res_isourserver __res_isourserver -#define res_mkquery __res_mkquery -#define res_query __res_query -#define res_querydomain __res_querydomain -#define res_search __res_search -#define res_send __res_send -#define res_sendsigned __res_sendsigned - -__BEGIN_DECLS -void fp_nquery __P((const u_char *, int, FILE *)); -void fp_query __P((const u_char *, FILE *)); -const char * hostalias __P((const char *)); -void p_query __P((const u_char *)); -void res_close __P((void)); -int res_init __P((void)); -int res_isourserver __P((const struct sockaddr_in *)); -int res_mkquery __P((int, const char *, int, int, const u_char *, - int, const u_char *, u_char *, int)); -int res_query __P((const char *, int, int, u_char *, int)); -int res_querydomain __P((const char *, const char *, int, int, - u_char *, int)); -int res_search __P((const char *, int, int, u_char *, int)); -int res_send __P((const u_char *, int, u_char *, int)); -int res_sendsigned __P((const u_char *, int, ns_tsig_key *, - u_char *, int)); -__END_DECLS -#endif - -#if !defined(SHARED_LIBBIND) || defined(LIB) -/* - * If libbind is a shared object (well, DLL anyway) - * these externs break the linker when resolv.h is - * included by a lib client (like named) - * Make them go away if a client is including this - * - */ -extern const struct res_sym __p_key_syms[]; -extern const struct res_sym __p_cert_syms[]; -extern const struct res_sym __p_class_syms[]; -extern const struct res_sym __p_type_syms[]; -extern const struct res_sym __p_rcode_syms[]; -#endif /* SHARED_LIBBIND */ - -#define b64_ntop __b64_ntop -#define b64_pton __b64_pton -#define dn_comp __dn_comp -#define dn_count_labels __dn_count_labels -#define dn_expand __dn_expand -#define dn_skipname __dn_skipname -#define fp_resstat __fp_resstat -#define loc_aton __loc_aton -#define loc_ntoa __loc_ntoa -#define p_cdname __p_cdname -#define p_cdnname __p_cdnname -#define p_class __p_class -#define p_fqname __p_fqname -#define p_fqnname __p_fqnname -#define p_option __p_option -#define p_secstodate __p_secstodate -#define p_section __p_section -#define p_time __p_time -#define p_type __p_type -#define p_rcode __p_rcode -#define p_sockun __p_sockun -#define putlong __putlong -#define putshort __putshort -#define res_dnok __res_dnok -#define res_findzonecut __res_findzonecut -#define res_findzonecut2 __res_findzonecut2 -#define res_hnok __res_hnok -#define res_hostalias __res_hostalias -#define res_mailok __res_mailok -#define res_nameinquery __res_nameinquery -#define res_nclose __res_nclose -#define res_ninit __res_ninit -#define res_nmkquery __res_nmkquery -#define res_pquery __res_pquery -#define res_nquery __res_nquery -#define res_nquerydomain __res_nquerydomain -#define res_nsearch __res_nsearch -#define res_nsend __res_nsend -#define res_nsendsigned __res_nsendsigned -#define res_nisourserver __res_nisourserver -#define res_ownok __res_ownok -#define res_queriesmatch __res_queriesmatch -#define res_randomid __res_randomid -#define sym_ntop __sym_ntop -#define sym_ntos __sym_ntos -#define sym_ston __sym_ston -#define res_nopt __res_nopt -#define res_ndestroy __res_ndestroy -#define res_nametoclass __res_nametoclass -#define res_nametotype __res_nametotype -#define res_setservers __res_setservers -#define res_getservers __res_getservers -#define res_buildprotolist __res_buildprotolist -#define res_destroyprotolist __res_destroyprotolist -#define res_destroyservicelist __res_destroyservicelist -#define res_get_nibblesuffix __res_get_nibblesuffix -#define res_get_nibblesuffix2 __res_get_nibblesuffix2 -#define res_ourserver_p __res_ourserver_p -#define res_protocolname __res_protocolname -#define res_protocolnumber __res_protocolnumber -#define res_send_setqhook __res_send_setqhook -#define res_send_setrhook __res_send_setrhook -#define res_servicename __res_servicename -#define res_servicenumber __res_servicenumber -__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 *, const 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 putlong __P((u_int32_t, u_char *)); -void putshort __P((u_int16_t, u_char *)); -#ifndef __ultrix__ -u_int16_t _getshort __P((const u_char *)); -u_int32_t _getlong __P((const u_char *)); -#endif -const char * p_class __P((int)); -const char * p_time __P((u_int32_t)); -const char * p_type __P((int)); -const char * p_rcode __P((int)); -const char * p_sockun __P((union res_sockaddr_union, char *, size_t)); -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 *, const u_char *, - int, char *, int)); -const u_char * p_fqname __P((const u_char *, const u_char *, FILE *)); -const char * p_option __P((u_long)); -char * p_secstodate __P((u_long)); -int dn_count_labels __P((const 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)); -u_int res_randomid __P((void)); -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 char * p_section __P((int, int)); -/* Things involving a resolver context. */ -int res_ninit __P((res_state)); -int res_nisourserver __P((const res_state, - const struct sockaddr_in *)); -void fp_resstat __P((const res_state, FILE *)); -void res_pquery __P((const res_state, const u_char *, int, FILE *)); -const char * res_hostalias __P((const res_state, const char *, - char *, size_t)); -int res_nquery __P((res_state, const char *, int, int, - u_char *, int)); -int res_nsearch __P((res_state, const char *, int, int, u_char *, - int)); -int res_nquerydomain __P((res_state, const char *, const char *, - int, int, u_char *, int)); -int res_nmkquery __P((res_state, int, const char *, int, int, - const u_char *, int, const u_char *, - u_char *, int)); -int res_nsend __P((res_state, const u_char *, int, u_char *, int)); -int res_nsendsigned __P((res_state, const u_char *, int, - ns_tsig_key *, u_char *, int)); -int res_findzonecut __P((res_state, const char *, ns_class, int, - char *, size_t, struct in_addr *, int)); -int res_findzonecut2 __P((res_state, const char *, ns_class, int, - char *, size_t, - union res_sockaddr_union *, int)); -void res_nclose __P((res_state)); -int res_nopt __P((res_state, int, u_char *, int, int)); -void res_send_setqhook __P((res_send_qhook)); -void res_send_setrhook __P((res_send_rhook)); -int __res_vinit __P((res_state, int)); -void res_destroyservicelist __P((void)); -const char * res_servicename __P((u_int16_t, const char *)); -const char * res_protocolname __P((int)); -void res_destroyprotolist __P((void)); -void res_buildprotolist __P((void)); -const char * res_get_nibblesuffix __P((res_state)); -const char * res_get_nibblesuffix2 __P((res_state)); -void res_ndestroy __P((res_state)); -u_int16_t res_nametoclass __P((const char *, int *)); -u_int16_t res_nametotype __P((const char *, int *)); -void res_setservers __P((res_state, - const union res_sockaddr_union *, int)); -int res_getservers __P((res_state, - union res_sockaddr_union *, int)); -__END_DECLS - -#ifdef __cplusplus -} -#endif - -#endif /* !_RESOLV_H_ */ diff --git a/headers/posix/arpa/inet.h b/headers/posix/arpa/inet.h index 57f411081c..620ca73b16 100644 --- a/headers/posix/arpa/inet.h +++ b/headers/posix/arpa/inet.h @@ -61,13 +61,16 @@ #ifndef _INET_H_ #define _INET_H_ -#include -#include - /* External definitions for functions in inet(3) */ -/* R5 libnet.so does not have "__" prefix. */ -#ifndef BUILDING_R5_LIBNET +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + #define inet_addr __inet_addr #define inet_aton __inet_aton #define inet_lnaof __inet_lnaof @@ -84,32 +87,28 @@ #define inet_ntop __inet_ntop #define inet_nsap_addr __inet_nsap_addr #define inet_nsap_ntoa __inet_nsap_ntoa -#endif -#ifdef __cplusplus -extern "C" { -#endif - -unsigned long inet_addr(const char *); -int inet_aton(const char *, struct in_addr *); -unsigned long inet_lnaof(struct in_addr); -struct in_addr inet_makeaddr(u_long , u_long); -char * inet_neta(u_long, char *, size_t); -unsigned long inet_netof(struct in_addr); -unsigned long inet_network(const char *); -char *inet_net_ntop(int, const void *, int, char *, size_t); -int inet_net_pton(int, const char *, void *, size_t); -char *inet_cidr_ntop(int, const void *, int, char *, size_t); -int inet_cidr_pton(int, const char *, void *, int *); -/*const*/ char *inet_ntoa(struct in_addr); -int inet_pton(int, const char *, void *); -const char *inet_ntop(int, const void *, char *, size_t); -u_int inet_nsap_addr(const char *, u_char *, int); -char *inet_nsap_ntoa(int, const u_char *, char *); +__BEGIN_DECLS +unsigned long inet_addr __P((const char *)); +int inet_aton __P((const char *, struct in_addr *)); +unsigned long inet_lnaof __P((struct in_addr)); +struct in_addr inet_makeaddr __P((u_long , u_long)); +char * inet_neta __P((u_long, char *, size_t)); +unsigned long inet_netof __P((struct in_addr)); +unsigned long inet_network __P((const char *)); +char *inet_net_ntop __P((int, const void *, int, char *, size_t)); +int inet_net_pton __P((int, const char *, void *, size_t)); +char *inet_cidr_ntop __P((int, const void *, int, char *, size_t)); +int inet_cidr_pton __P((int, const char *, void *, int *)); +/*const*/ char *inet_ntoa __P((struct in_addr)); +int inet_pton __P((int, const char *, void *)); +const char *inet_ntop __P((int, const void *, char *, size_t)); +u_int inet_nsap_addr __P((const char *, u_char *, int)); +char *inet_nsap_ntoa __P((int, const u_char *, char *)); +__END_DECLS #ifdef __cplusplus } #endif - #endif /* !_INET_H_ */ diff --git a/headers/private/net/arpa/nameser.h b/headers/posix/arpa/nameser.h similarity index 99% rename from headers/private/net/arpa/nameser.h rename to headers/posix/arpa/nameser.h index ea8a1d21bc..63cab48ce5 100644 --- a/headers/private/net/arpa/nameser.h +++ b/headers/posix/arpa/nameser.h @@ -58,13 +58,13 @@ #define BIND_4_COMPAT #include -#if (!defined(BSD)) || (BSD < 199306) -# include -#else -# include -#endif +#include #include +#ifdef __cplusplus +extern "C" { +#endif + /* * Revision information. This is the release date in YYYYMMDD format. * It can change every day so the right thing to do with it is use it @@ -569,6 +569,10 @@ int ns_makecanon __P((const char *, char *, size_t)); int ns_samename __P((const char *, const char *)); __END_DECLS +#ifdef __cplusplus +} +#endif + #ifdef BIND_4_COMPAT #include #endif diff --git a/headers/private/net/arpa/nameser_compat.h b/headers/posix/arpa/nameser_compat.h similarity index 82% rename from headers/private/net/arpa/nameser_compat.h rename to headers/posix/arpa/nameser_compat.h index 2af966fa61..a9426eb1ca 100644 --- a/headers/private/net/arpa/nameser_compat.h +++ b/headers/posix/arpa/nameser_compat.h @@ -40,39 +40,7 @@ #define __BIND 19950621 /* (DEAD) interface version stamp. */ -#ifndef BYTE_ORDER -#if (BSD >= 199103) -# include -#else -#if defined(__linux) || defined(__HAIKU__) || defined(__BEOS__) -# include -#else -#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax, pc) */ -#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ -#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp)*/ - -#if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \ - defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \ - defined(__alpha__) || defined(__alpha) || \ - (defined(__Lynx__) && defined(__x86__)) -#define BYTE_ORDER LITTLE_ENDIAN -#endif - -#if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \ - defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \ - defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\ - defined(apollo) || defined(__convex__) || defined(_CRAY) || \ - defined(__hppa) || defined(__hp9000) || \ - defined(__hp9000s300) || defined(__hp9000s700) || \ - defined(__hp3000s900) || defined(__hpux) || defined(MPE) || \ - defined (BIT_ZERO_ON_LEFT) || defined(m68k) || defined(__sparc) || \ - (defined(__Lynx__) && \ - (defined(__68k__) || defined(__sparc__) || defined(__powerpc__))) -#define BYTE_ORDER BIG_ENDIAN -#endif -#endif /* __linux */ -#endif /* BSD */ -#endif /* BYTE_ORDER */ +#include #if !defined(BYTE_ORDER) || \ (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \ diff --git a/headers/posix/netdb.h b/headers/posix/netdb.h index c60256dd50..d2602c3566 100644 --- a/headers/posix/netdb.h +++ b/headers/posix/netdb.h @@ -1,7 +1,3 @@ -/* - Modified for [Open]BeOS -*/ - /* * ++Copyright++ 1980, 1983, 1988, 1993 * - @@ -92,35 +88,21 @@ * @(#)netdb.h 8.1 (Berkeley) 6/2/93 * $Id$ */ - -/* Modified for OpenBeOS -*/ #ifndef _NETDB_H_ #define _NETDB_H_ -#include -#include -#include - - -/* #include -#include -#if (!defined(BSD)) || (BSD < 199306) -# include -#endif +#include #include #include #include #include -*/ #ifdef __cplusplus extern "C" { #endif - #ifndef _PATH_HEQUIV #define _PATH_HEQUIV "/etc/hosts.equiv" #endif @@ -137,7 +119,9 @@ extern "C" { #define _PATH_SERVICES "/etc/services" #endif -extern int * __h_errno (void); +__BEGIN_DECLS +extern int * __h_errno __P((void)); +__END_DECLS #define h_errno (*__h_errno()) /* @@ -259,98 +243,7 @@ struct addrinfo { #define SCOPE_DELIMITER '%' -#if defined (__hpux) || defined(__osf__) || defined(_AIX) -#define _MAXALIASES 35 -#define _MAXLINELEN 1024 -#define _MAXADDRS 35 -#define _HOSTBUFSIZE (BUFSIZ + 1) - -struct hostent_data { - struct in_addr host_addr; - char *h_addr_ptrs[_MAXADDRS + 1]; - char hostaddr[_MAXADDRS]; - char hostbuf[_HOSTBUFSIZE]; - char *host_aliases[_MAXALIASES]; - char *host_addrs[2]; - FILE *hostf; -#ifdef __osf__ - int svc_gethostflag; - int svc_gethostbind; -#endif -#ifdef __hpux - short _nsw_src; - short _flags; - char *current; - int currentlen; -#endif -}; - -struct netent_data { - FILE *net_fp; -#ifdef __osf__ - char line[_MAXLINELEN]; -#endif -#ifdef __hpux - char line[_MAXLINELEN+1]; -#endif - char *net_aliases[_MAXALIASES]; -#ifdef __osf__ - int _net_stayopen; - int svc_getnetflag; -#endif -#ifdef __hpux - short _nsw_src; - short _flags; - char *current; - int currentlen; -#endif -}; - -struct protoent_data { - FILE *proto_fp; -#ifdef __osf__ - char line[1024]; -#endif -#ifdef __hpux - char line[_MAXLINELEN+1]; -#endif - char *proto_aliases[_MAXALIASES]; -#ifdef __osf__ - int _proto_stayopen; - int svc_getprotoflag; -#endif -#ifdef __hpux - short _nsw_src; - short _flags; - char *current; - int currentlen; -#endif -}; - -struct servent_data { - FILE *serv_fp; -#ifdef __osf__ - char line[_MAXLINELEN]; -#endif -#ifdef __hpux - char line[_MAXLINELEN+1]; -#endif - char *serv_aliases[_MAXALIASES]; -#ifdef __osf__ - int _serv_stayopen; - int svc_getservflag; -#endif -#ifdef __hpux - short _nsw_src; - short _flags; - char *current; - int currentlen; -#endif -}; -#endif - -#define __P(a) a - +__BEGIN_DECLS void endhostent __P((void)); void endnetent __P((void)); void endprotoent __P((void)); @@ -388,7 +281,6 @@ struct hostent *getipnodebyname __P((const char *, int, int, int *)); struct hostent *getipnodebyaddr __P((const void *, size_t, int, int *)); void freehostent __P((struct hostent *)); - struct hostent *gethostbyaddr_r __P((const char *, int, int, struct hostent *, char *, int, int *)); struct hostent *gethostbyname_r __P((const char *, struct hostent *, @@ -420,12 +312,7 @@ struct servent *getservbyport_r __P((int port, const char *, struct servent *getservent_r __P((struct servent *, char *, int)); void setservent_r __P((int)); void endservent_r __P((void)); - - -/* BeOS specific, because of lack of UNIX passwd functions */ -int getusername(char *username, unsigned userlen); -int getpassword(char *password, unsigned passlen); - +__END_DECLS #ifdef __cplusplus } diff --git a/headers/posix/resolv.h b/headers/posix/resolv.h index 70327fd72e..67e872f1ef 100644 --- a/headers/posix/resolv.h +++ b/headers/posix/resolv.h @@ -32,20 +32,20 @@ */ /* + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") * Portions 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 * copyright notice and this permission notice appear in all copies. * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* @@ -57,16 +57,16 @@ #define _RESOLV_H_ #include -#if (!defined(BSD)) || (BSD < 199306) -# include -#else -# include -#endif +#include #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* * Revision information. This is the release date in YYYYMMDD format. * It can change every day so the right thing to do with it is use it @@ -115,13 +115,21 @@ __END_DECLS typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error } res_sendhookact; -typedef res_sendhookact (*res_send_qhook)__P((struct sockaddr * const *, - const u_char **, int *, - u_char *, int, int *)); +#ifndef __PMT +#if defined(__STDC__) || defined(__cplusplus) +#define __PMT(args) args +#else +#define __PMT(args) () +#endif +#endif -typedef res_sendhookact (*res_send_rhook)__P((const struct sockaddr *, - const u_char *, int, u_char *, - int, int *)); +typedef res_sendhookact (*res_send_qhook)__PMT((struct sockaddr * const *, + const u_char **, int *, + u_char *, int, int *)); + +typedef res_sendhookact (*res_send_rhook)__PMT((const struct sockaddr *, + const u_char *, int, u_char *, + int, int *)); struct res_sym { int number; /* Identifying number, like T_MX */ @@ -150,11 +158,7 @@ struct __res_state_ext; struct __res_state { int retrans; /* retransmission time interval */ int retry; /* number of times to retransmit */ -#ifdef sun - u_int options; /* option flags - see below. */ -#else u_long options; /* option flags - see below. */ -#endif int nscount; /* number of name servers */ struct sockaddr_in nsaddr_list[MAXNS]; /* address of name server */ @@ -162,11 +166,7 @@ struct __res_state { u_short id; /* current message id */ char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */ char defdname[256]; /* default domain (deprecated) */ -#ifdef sun - u_int pfcode; /* RES_PRF_ flags - see below. */ -#else u_long pfcode; /* RES_PRF_ flags - see below. */ -#endif unsigned ndots:4; /* threshold for initial abs. query */ unsigned nsort:4; /* number of elements in sort_list[] */ char unused[3]; @@ -246,12 +246,14 @@ union res_sockaddr_union { #define RES_BLAST 0x00020000 /* blast all recursive servers */ #define RES_NOTLDQUERY 0x00100000 /* don't unqualified name as a tld */ #define RES_USE_DNSSEC 0x00200000 /* use DNSSEC using OK bit in OPT */ +/* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */ /* KAME extensions: use higher bit to avoid conflict with ISC use */ #define RES_USE_DNAME 0x10000000 /* use DNAME */ #define RES_USE_EDNS0 0x40000000 /* use EDNS0 if configured */ #define RES_NO_NIBBLE2 0x80000000 /* disable alternate nibble lookup */ -#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH) +#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | \ + RES_DNSRCH | RES_NO_NIBBLE2) /* * Resolver "pfcode" values. Used by dig. @@ -315,7 +317,6 @@ int res_sendsigned __P((const u_char *, int, ns_tsig_key *, __END_DECLS #endif -#if !defined(SHARED_LIBBIND) || defined(LIB) /* * If libbind is a shared object (well, DLL anyway) * these externs break the linker when resolv.h is @@ -328,7 +329,6 @@ extern const struct res_sym __p_cert_syms[]; extern const struct res_sym __p_class_syms[]; extern const struct res_sym __p_type_syms[]; extern const struct res_sym __p_rcode_syms[]; -#endif /* SHARED_LIBBIND */ #define b64_ntop __b64_ntop #define b64_pton __b64_pton @@ -409,10 +409,6 @@ const char * loc_ntoa __P((const u_char *, char *)); int dn_skipname __P((const u_char *, const u_char *)); void putlong __P((u_int32_t, u_char *)); void putshort __P((u_int16_t, u_char *)); -#ifndef __ultrix__ -u_int16_t _getshort __P((const u_char *)); -u_int32_t _getlong __P((const u_char *)); -#endif const char * p_class __P((int)); const char * p_time __P((u_int32_t)); const char * p_type __P((int)); @@ -482,4 +478,8 @@ int res_getservers __P((res_state, union res_sockaddr_union *, int)); __END_DECLS +#ifdef __cplusplus +} +#endif + #endif /* !_RESOLV_H_ */ diff --git a/src/kits/network/compat/libbind/DEVNOTES b/src/kits/network/compat/libbind/DEVNOTES index f6d64470cf..2cf3f97e99 100644 --- a/src/kits/network/compat/libbind/DEVNOTES +++ b/src/kits/network/compat/libbind/DEVNOTES @@ -10,6 +10,29 @@ Added folders and files: All BIND headers were moved to legacy/network (public) and private/net (private) in the system-wide headers folder. +Removed files: + irs/ + dns_gr.c + dns_pw.c + gen_gr.c + gen_pw.c + getgrent.c + getgrent_r.c + getpwent.c + getpwent_r.c + irp_gr.c + irp_pw.c + lcl_gr.c + lcl_pw.c + nis_gr.c + nis_ho.c + nis_ng.c + nis_nw.c + nis_pr.c + nis_pw.c + nis_sv.c + + Porting issues: BIND wants to include sys/un.h and utmp.h. We do not have these, so I put empty headers into the private headers folder. @@ -21,6 +44,6 @@ Added sources for compatibility: Changes made to the sources and headers: nameser_compat.h: added check for __HAIKU__ and __BEOS__ to not redefine endianness - arpa/inet.h, netdb.h, resolv.h: added check for __cplusplus, removed check for _REENTRANT (we are always reentrant) + arpa/inet.h, netdb.h, resolv.h, nameser.h, nameser_compat.h: added check for __cplusplus, removed check for _REENTRANT (we are always reentrant), removed all checks for other operating systems - irs/gai_strerror.c, irs/irs_data.c: Changed the initialization of the mutex lock and switched to BeOS-native TLS in gai_strerror() and net_data_init(). + irs/gai_strerror.c, irs/irs_data.c: Switched to BeOS-native TLS in gai_strerror() and net_data_init() using a very ugly hack (see src/TLSInit.cpp). We need full mutex support! diff --git a/src/kits/network/compat/libbind/Jamfile b/src/kits/network/compat/libbind/Jamfile index 41aa4979b1..0af8831dbb 100644 --- a/src/kits/network/compat/libbind/Jamfile +++ b/src/kits/network/compat/libbind/Jamfile @@ -20,7 +20,6 @@ if $(TARGET_PLATFORM) != haiku { } # our libroot contains functions that are missing in BeOS (e.g.: strlcat) -SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src system libroot posix pthread ] ; SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src system libroot posix string ] ; # private sources for this port @@ -73,24 +72,18 @@ MergeObject inet.o : MergeObject irs.o : dns.c - dns_gr.c dns_ho.c dns_nw.c dns_pr.c - dns_pw.c dns_sv.c gai_strerror.c gen.c - gen_gr.c gen_ho.c gen_ng.c gen_nw.c gen_pr.c - gen_pw.c gen_sv.c getaddrinfo.c - getgrent.c - getgrent_r.c gethostent.c gethostent_r.c getnameinfo.c @@ -100,37 +93,24 @@ MergeObject irs.o : getnetgrent_r.c getprotoent.c getprotoent_r.c - getpwent.c - getpwent_r.c getservent.c getservent_r.c hesiod.c irp.c - irp_gr.c irp_ho.c irp_ng.c irp_nw.c irp_pr.c - irp_pw.c irp_sv.c irpmarshall.c irs_data.c lcl.c - lcl_gr.c lcl_ho.c lcl_ng.c lcl_nw.c lcl_pr.c - lcl_pw.c lcl_sv.c nis.c - nis_gr.c - nis_ho.c - nis_ng.c - nis_nw.c - nis_pr.c - nis_pw.c - nis_sv.c nul_ng.c util.c ; @@ -185,9 +165,7 @@ MergeObject resolv.o : SharedLibrary libbind.so : # functions from our libroot - # ToDo: these can be removed for the Haiku build - pthread_mutex.c - pthread_mutexattr.c + # TODO: these can be removed for the Haiku build strlcat.c # private functions @@ -195,9 +173,11 @@ SharedLibrary libbind.so : ethers.c gettimeofday.c linkaddr.c - pthread_emu.c res_resultcodes.c strsep.c + + # UGLY HACK + TLSInit.cpp ; LinkAgainst libbind.so : diff --git a/headers/private/net/fd_setsize.h b/src/kits/network/compat/libbind/headers/fd_setsize.h similarity index 100% rename from headers/private/net/fd_setsize.h rename to src/kits/network/compat/libbind/headers/fd_setsize.h diff --git a/headers/private/net/irp.h b/src/kits/network/compat/libbind/headers/irp.h similarity index 100% rename from headers/private/net/irp.h rename to src/kits/network/compat/libbind/headers/irp.h diff --git a/headers/private/net/irs.h b/src/kits/network/compat/libbind/headers/irs.h similarity index 100% rename from headers/private/net/irs.h rename to src/kits/network/compat/libbind/headers/irs.h diff --git a/headers/private/net/isc/assertions.h b/src/kits/network/compat/libbind/headers/isc/assertions.h similarity index 100% rename from headers/private/net/isc/assertions.h rename to src/kits/network/compat/libbind/headers/isc/assertions.h diff --git a/headers/private/net/isc/ctl.h b/src/kits/network/compat/libbind/headers/isc/ctl.h similarity index 100% rename from headers/private/net/isc/ctl.h rename to src/kits/network/compat/libbind/headers/isc/ctl.h diff --git a/headers/private/net/isc/dst.h b/src/kits/network/compat/libbind/headers/isc/dst.h similarity index 100% rename from headers/private/net/isc/dst.h rename to src/kits/network/compat/libbind/headers/isc/dst.h diff --git a/headers/private/net/isc/eventlib.h b/src/kits/network/compat/libbind/headers/isc/eventlib.h similarity index 100% rename from headers/private/net/isc/eventlib.h rename to src/kits/network/compat/libbind/headers/isc/eventlib.h diff --git a/headers/private/net/isc/heap.h b/src/kits/network/compat/libbind/headers/isc/heap.h similarity index 100% rename from headers/private/net/isc/heap.h rename to src/kits/network/compat/libbind/headers/isc/heap.h diff --git a/headers/private/net/isc/irpmarshall.h b/src/kits/network/compat/libbind/headers/isc/irpmarshall.h similarity index 100% rename from headers/private/net/isc/irpmarshall.h rename to src/kits/network/compat/libbind/headers/isc/irpmarshall.h diff --git a/headers/private/net/isc/list.h b/src/kits/network/compat/libbind/headers/isc/list.h similarity index 100% rename from headers/private/net/isc/list.h rename to src/kits/network/compat/libbind/headers/isc/list.h diff --git a/headers/private/net/isc/logging.h b/src/kits/network/compat/libbind/headers/isc/logging.h similarity index 100% rename from headers/private/net/isc/logging.h rename to src/kits/network/compat/libbind/headers/isc/logging.h diff --git a/headers/private/net/isc/memcluster.h b/src/kits/network/compat/libbind/headers/isc/memcluster.h similarity index 100% rename from headers/private/net/isc/memcluster.h rename to src/kits/network/compat/libbind/headers/isc/memcluster.h diff --git a/headers/private/net/isc/misc.h b/src/kits/network/compat/libbind/headers/isc/misc.h similarity index 100% rename from headers/private/net/isc/misc.h rename to src/kits/network/compat/libbind/headers/isc/misc.h diff --git a/headers/private/net/isc/tree.h b/src/kits/network/compat/libbind/headers/isc/tree.h similarity index 100% rename from headers/private/net/isc/tree.h rename to src/kits/network/compat/libbind/headers/isc/tree.h diff --git a/src/kits/network/compat/libbind/headers/pthread_emu.h b/src/kits/network/compat/libbind/headers/pthread_emu.h index d5af76f412..5a96ea5d0b 100644 --- a/src/kits/network/compat/libbind/headers/pthread_emu.h +++ b/src/kits/network/compat/libbind/headers/pthread_emu.h @@ -1,6 +1,10 @@ #ifndef PTHREAD_EMU_H #define PTHREAD_EMU_H +#ifdef __cplusplus +extern "C" { +#endif + #include #include #include @@ -16,4 +20,8 @@ extern int pthread_setspecific(pthread_key_t key, void *value); extern void *pthread_getspecific(pthread_key_t key); +#ifdef __cplusplus +} +#endif + #endif /* PTHREAD_EMU_H */ diff --git a/headers/private/net/res_update.h b/src/kits/network/compat/libbind/headers/res_update.h similarity index 100% rename from headers/private/net/res_update.h rename to src/kits/network/compat/libbind/headers/res_update.h diff --git a/src/kits/network/compat/libbind/irs/dns_gr.c b/src/kits/network/compat/libbind/irs/dns_gr.c deleted file mode 100644 index 5d60047201..0000000000 --- a/src/kits/network/compat/libbind/irs/dns_gr.c +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif - -/* - * dns_gr.c --- this file contains the functions for accessing - * group information from Hesiod. - */ - -#include "port_before.h" - -#ifndef WANT_IRS_GR -static int __bind_irs_gr_unneeded; -#else - -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "hesiod.h" -#include "dns_p.h" - -/* Types. */ - -struct pvt { - /* - * This is our private accessor data. It has a shared hesiod context. - */ - struct dns_p * dns; - /* - * Need space to store the entries read from the group file. - * The members list also needs space per member, and the - * strings making up the user names must be allocated - * somewhere. Rather than doing lots of small allocations, - * we keep one buffer and resize it as needed. - */ - struct group group; - size_t nmemb; /* Malloc'd max index of gr_mem[]. */ - char * membuf; - size_t membufsize; -}; - -/* Forward. */ - -static struct group * gr_next(struct irs_gr *); -static struct group * gr_byname(struct irs_gr *, const char *); -static struct group * gr_bygid(struct irs_gr *, gid_t); -static void gr_rewind(struct irs_gr *); -static void gr_close(struct irs_gr *); -static int gr_list(struct irs_gr *, const char *, - gid_t, gid_t *, int *); -static void gr_minimize(struct irs_gr *); -static struct __res_state * gr_res_get(struct irs_gr *); -static void gr_res_set(struct irs_gr *, - struct __res_state *, - void (*)(void *)); - -static struct group * get_hes_group(struct irs_gr *this, - const char *name, - const char *type); - -/* Public. */ - -struct irs_gr * -irs_dns_gr(struct irs_acc *this) { - struct dns_p *dns = (struct dns_p *)this->private; - struct irs_gr *gr; - struct pvt *pvt; - - if (!dns || !dns->hes_ctx) { - errno = ENODEV; - return (NULL); - } - if (!(pvt = memget(sizeof *pvt))) { - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->dns = dns; - if (!(gr = memget(sizeof *gr))) { - memput(pvt, sizeof *pvt); - errno = ENOMEM; - return (NULL); - } - memset(gr, 0x5e, sizeof *gr); - gr->private = pvt; - gr->next = gr_next; - gr->byname = gr_byname; - gr->bygid = gr_bygid; - gr->rewind = gr_rewind; - gr->close = gr_close; - gr->list = gr_list; - gr->minimize = gr_minimize; - gr->res_get = gr_res_get; - gr->res_set = gr_res_set; - return (gr); -} - -/* methods */ - -static void -gr_close(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->group.gr_mem) - free(pvt->group.gr_mem); - if (pvt->membuf) - free(pvt->membuf); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct group * -gr_next(struct irs_gr *this) { - - UNUSED(this); - - return (NULL); -} - -static struct group * -gr_byname(struct irs_gr *this, const char *name) { - return (get_hes_group(this, name, "group")); -} - -static struct group * -gr_bygid(struct irs_gr *this, gid_t gid) { - char name[32]; - - sprintf(name, "%ld", (long)gid); - return (get_hes_group(this, name, "gid")); -} - -static void -gr_rewind(struct irs_gr *this) { - - UNUSED(this); - - /* NOOP */ -} - -static int -gr_list(struct irs_gr *this, const char *name, - gid_t basegid, gid_t *groups, int *ngroups) -{ - UNUSED(this); - UNUSED(name); - UNUSED(basegid); - UNUSED(groups); - - *ngroups = 0; - /* There's some way to do this in Hesiod. */ - return (-1); -} - -static void -gr_minimize(struct irs_gr *this) { - - UNUSED(this); - /* NOOP */ -} - -/* Private. */ - -static struct group * -get_hes_group(struct irs_gr *this, const char *name, const char *type) { - struct pvt *pvt = (struct pvt *)this->private; - char **hes_list, *cp, **new; - size_t num_members = 0; - u_long t; - - hes_list = hesiod_resolve(pvt->dns->hes_ctx, name, type); - if (!hes_list) - return (NULL); - - /* - * Copy the returned hesiod string into storage space. - */ - if (pvt->membuf) - free(pvt->membuf); - pvt->membuf = strdup(*hes_list); - hesiod_free_list(pvt->dns->hes_ctx, hes_list); - - cp = pvt->membuf; - pvt->group.gr_name = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->group.gr_passwd = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - errno = 0; - t = strtoul(cp, NULL, 10); - if (errno == ERANGE) - goto cleanup; - pvt->group.gr_gid = (gid_t) t; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - cp++; - - /* - * Parse the members out. - */ - while (*cp) { - if (num_members+1 >= pvt->nmemb || pvt->group.gr_mem == NULL) { - pvt->nmemb += 10; - new = realloc(pvt->group.gr_mem, - pvt->nmemb * sizeof(char *)); - if (new == NULL) - goto cleanup; - pvt->group.gr_mem = new; - } - pvt->group.gr_mem[num_members++] = cp; - if (!(cp = strchr(cp, ','))) - break; - *cp++ = '\0'; - } - if (!pvt->group.gr_mem) { - pvt->group.gr_mem = malloc(sizeof(char*)); - if (!pvt->group.gr_mem) - goto cleanup; - } - pvt->group.gr_mem[num_members] = NULL; - - return (&pvt->group); - - cleanup: - if (pvt->group.gr_mem) { - free(pvt->group.gr_mem); - pvt->group.gr_mem = NULL; - } - if (pvt->membuf) { - free(pvt->membuf); - pvt->membuf = NULL; - } - return (NULL); -} - -static struct __res_state * -gr_res_get(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct dns_p *dns = pvt->dns; - - return (__hesiod_res_get(dns->hes_ctx)); -} - -static void -gr_res_set(struct irs_gr *this, struct __res_state * res, - void (*free_res)(void *)) { - struct pvt *pvt = (struct pvt *)this->private; - struct dns_p *dns = pvt->dns; - - __hesiod_res_set(dns->hes_ctx, res, free_res); -} - -#endif /* WANT_IRS_GR */ diff --git a/src/kits/network/compat/libbind/irs/dns_pw.c b/src/kits/network/compat/libbind/irs/dns_pw.c deleted file mode 100644 index 8753a2ad24..0000000000 --- a/src/kits/network/compat/libbind/irs/dns_pw.c +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif - -#include "port_before.h" - -#ifndef WANT_IRS_PW -static int __bind_irs_pw_unneeded; -#else - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "hesiod.h" -#include "dns_p.h" - -/* Types. */ - -struct pvt { - struct dns_p * dns; - struct passwd passwd; - char * pwbuf; -}; - -/* Forward. */ - -static void pw_close(struct irs_pw *); -static struct passwd * pw_byname(struct irs_pw *, const char *); -static struct passwd * pw_byuid(struct irs_pw *, uid_t); -static struct passwd * pw_next(struct irs_pw *); -static void pw_rewind(struct irs_pw *); -static void pw_minimize(struct irs_pw *); -static struct __res_state * pw_res_get(struct irs_pw *); -static void pw_res_set(struct irs_pw *, - struct __res_state *, - void (*)(void *)); - -static struct passwd * getpwcommon(struct irs_pw *, const char *, - const char *); - -/* Public. */ - -struct irs_pw * -irs_dns_pw(struct irs_acc *this) { - struct dns_p *dns = (struct dns_p *)this->private; - struct irs_pw *pw; - struct pvt *pvt; - - if (!dns || !dns->hes_ctx) { - errno = ENODEV; - return (NULL); - } - if (!(pvt = memget(sizeof *pvt))) { - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->dns = dns; - if (!(pw = memget(sizeof *pw))) { - memput(pvt, sizeof *pvt); - errno = ENOMEM; - return (NULL); - } - memset(pw, 0x5e, sizeof *pw); - pw->private = pvt; - pw->close = pw_close; - pw->byname = pw_byname; - pw->byuid = pw_byuid; - pw->next = pw_next; - pw->rewind = pw_rewind; - pw->minimize = pw_minimize; - pw->res_get = pw_res_get; - pw->res_set = pw_res_set; - return (pw); -} - -/* Methods. */ - -static void -pw_close(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->pwbuf) - free(pvt->pwbuf); - - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct passwd * -pw_byname(struct irs_pw *this, const char *nam) { - return (getpwcommon(this, nam, "passwd")); -} - -static struct passwd * -pw_byuid(struct irs_pw *this, uid_t uid) { - char uidstr[16]; - - sprintf(uidstr, "%lu", (u_long)uid); - return (getpwcommon(this, uidstr, "uid")); -} - -static struct passwd * -pw_next(struct irs_pw *this) { - UNUSED(this); - errno = ENODEV; - return (NULL); -} - -static void -pw_rewind(struct irs_pw *this) { - UNUSED(this); - /* NOOP */ -} - -static void -pw_minimize(struct irs_pw *this) { - UNUSED(this); - /* NOOP */ -} - -static struct __res_state * -pw_res_get(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct dns_p *dns = pvt->dns; - - return (__hesiod_res_get(dns->hes_ctx)); -} - -static void -pw_res_set(struct irs_pw *this, struct __res_state * res, - void (*free_res)(void *)) { - struct pvt *pvt = (struct pvt *)this->private; - struct dns_p *dns = pvt->dns; - - __hesiod_res_set(dns->hes_ctx, res, free_res); -} - -/* Private. */ - -static struct passwd * -getpwcommon(struct irs_pw *this, const char *arg, const char *type) { - struct pvt *pvt = (struct pvt *)this->private; - char **hes_list, *cp; - - if (!(hes_list = hesiod_resolve(pvt->dns->hes_ctx, arg, type))) - return (NULL); - if (!*hes_list) { - hesiod_free_list(pvt->dns->hes_ctx, hes_list); - errno = ENOENT; - return (NULL); - } - - memset(&pvt->passwd, 0, sizeof pvt->passwd); - if (pvt->pwbuf) - free(pvt->pwbuf); - pvt->pwbuf = strdup(*hes_list); - hesiod_free_list(pvt->dns->hes_ctx, hes_list); - - cp = pvt->pwbuf; - pvt->passwd.pw_name = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_passwd = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_uid = atoi(cp); - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_gid = atoi(cp); - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_gecos = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_dir = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_shell = cp; - return (&pvt->passwd); - - cleanup: - free(pvt->pwbuf); - pvt->pwbuf = NULL; - return (NULL); -} - -#endif /* WANT_IRS_PW */ diff --git a/src/kits/network/compat/libbind/irs/gai_strerror.c b/src/kits/network/compat/libbind/irs/gai_strerror.c index cb5584ddbd..1cfce4f0fe 100644 --- a/src/kits/network/compat/libbind/irs/gai_strerror.c +++ b/src/kits/network/compat/libbind/irs/gai_strerror.c @@ -47,6 +47,10 @@ static const int gai_nerr = (sizeof(gai_errlist)/sizeof(*gai_errlist)); #define EAI_BUFSIZE 128 +#ifdef DO_PTHREADS +pthread_key_t gGaiStrerrorKey; +#endif + const char * gai_strerror(int ecode) { #ifndef DO_PTHREADS @@ -55,33 +59,20 @@ gai_strerror(int ecode) { #ifndef LIBBIND_MUTEX_INITIALIZER #define LIBBIND_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER #endif - static pthread_mutex_t lock; - static pthread_key_t key; - static int once = 0; char *buf; #endif - + if (ecode >= 0 && ecode < (gai_nerr - 1)) return (gai_errlist[ecode]); #ifdef DO_PTHREADS - if (!once) { - /* XXX: Haiku has non-constant mutex initializer! Must init here. */ - lock = LIBBIND_MUTEX_INITIALIZER; - - pthread_mutex_lock(&lock); - if (!once++) - key = tls_allocate(); - pthread_mutex_unlock(&lock); - } - - buf = tls_get(key); + buf = tls_get(gGaiStrerrorKey); if (buf == NULL) { buf = malloc(EAI_BUFSIZE); if (buf == NULL) return ("unknown error"); on_exit_thread(free, buf); - tls_set(key, buf); + tls_set(gGaiStrerrorKey, buf); } #endif /* diff --git a/src/kits/network/compat/libbind/irs/gen_gr.c b/src/kits/network/compat/libbind/irs/gen_gr.c deleted file mode 100644 index b22af20731..0000000000 --- a/src/kits/network/compat/libbind/irs/gen_gr.c +++ /dev/null @@ -1,492 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if !defined(LINT) && !defined(CODECENTER) -static const char rcsid[] = "$Id$"; -#endif - -/* Imports */ - -#include "port_before.h" - -#ifndef WANT_IRS_GR -static int __bind_irs_gr_unneeded; -#else - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "gen_p.h" - -/* Definitions */ - -struct pvt { - struct irs_rule * rules; - struct irs_rule * rule; - struct irs_gr * gr; - /* - * Need space to store the entries read from the group file. - * The members list also needs space per member, and the - * strings making up the user names must be allocated - * somewhere. Rather than doing lots of small allocations, - * we keep one buffer and resize it as needed. - */ - struct group group; - size_t nmemb; /* Malloc'd max index of gr_mem[]. */ - char * membuf; - size_t membufsize; - struct __res_state * res; - void (*free_res)(void *); -}; - -/* Forward */ - -static void gr_close(struct irs_gr *); -static struct group * gr_next(struct irs_gr *); -static struct group * gr_byname(struct irs_gr *, const char *); -static struct group * gr_bygid(struct irs_gr *, gid_t); -static void gr_rewind(struct irs_gr *); -static int gr_list(struct irs_gr *, const char *, - gid_t, gid_t *, int *); -static void gr_minimize(struct irs_gr *); -static struct __res_state * gr_res_get(struct irs_gr *); -static void gr_res_set(struct irs_gr *, - struct __res_state *, - void (*)(void *)); - -static int grmerge(struct irs_gr *gr, const struct group *src, - int preserve); - -static int countvec(char **vec); -static int isnew(char **old, char *new); -static int countnew(char **old, char **new); -static size_t sizenew(char **old, char **new); -static int newgid(int, gid_t *, gid_t); - -/* Macros */ - -#define FREE_IF(x) do { if ((x) != NULL) { free(x); (x) = NULL; } } while (0) - -/* Public */ - -struct irs_gr * -irs_gen_gr(struct irs_acc *this) { - struct gen_p *accpvt = (struct gen_p *)this->private; - struct irs_gr *gr; - struct pvt *pvt; - - if (!(gr = memget(sizeof *gr))) { - errno = ENOMEM; - return (NULL); - } - memset(gr, 0x5e, sizeof *gr); - if (!(pvt = memget(sizeof *pvt))) { - memput(gr, sizeof *gr); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->rules = accpvt->map_rules[irs_gr]; - pvt->rule = pvt->rules; - gr->private = pvt; - gr->close = gr_close; - gr->next = gr_next; - gr->byname = gr_byname; - gr->bygid = gr_bygid; - gr->rewind = gr_rewind; - gr->list = gr_list; - gr->minimize = gr_minimize; - gr->res_get = gr_res_get; - gr->res_set = gr_res_set; - return (gr); -} - -/* Methods. */ - -static void -gr_close(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct group * -gr_next(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct group *rval; - struct irs_gr *gr; - - while (pvt->rule) { - gr = pvt->rule->inst->gr; - rval = (*gr->next)(gr); - if (rval) - return (rval); - if (!(pvt->rule->flags & IRS_CONTINUE)) - break; - pvt->rule = pvt->rule->next; - if (pvt->rule) { - gr = pvt->rule->inst->gr; - (*gr->rewind)(gr); - } - } - return (NULL); -} - -static struct group * -gr_byname(struct irs_gr *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_rule *rule; - struct group *tval; - struct irs_gr *gr; - int dirty; - - dirty = 0; - for (rule = pvt->rules; rule; rule = rule->next) { - gr = rule->inst->gr; - tval = (*gr->byname)(gr, name); - if (tval) { - if (!grmerge(this, tval, dirty++)) - return (NULL); - if (!(rule->flags & IRS_MERGE)) - break; - } else { - if (!(rule->flags & IRS_CONTINUE)) - break; - } - } - if (dirty) - return (&pvt->group); - return (NULL); -} - -static struct group * -gr_bygid(struct irs_gr *this, gid_t gid) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_rule *rule; - struct group *tval; - struct irs_gr *gr; - int dirty; - - dirty = 0; - for (rule = pvt->rules; rule; rule = rule->next) { - gr = rule->inst->gr; - tval = (*gr->bygid)(gr, gid); - if (tval) { - if (!grmerge(this, tval, dirty++)) - return (NULL); - if (!(rule->flags & IRS_MERGE)) - break; - } else { - if (!(rule->flags & IRS_CONTINUE)) - break; - } - } - if (dirty) - return (&pvt->group); - return (NULL); -} - -static void -gr_rewind(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_gr *gr; - - pvt->rule = pvt->rules; - if (pvt->rule) { - gr = pvt->rule->inst->gr; - (*gr->rewind)(gr); - } -} - -static int -gr_list(struct irs_gr *this, const char *name, - gid_t basegid, gid_t *groups, int *ngroups) -{ - struct pvt *pvt = (struct pvt *)this->private; - struct irs_rule *rule; - struct irs_gr *gr; - int t_ngroups, maxgroups; - gid_t *t_groups; - int n, t, rval = 0; - - maxgroups = *ngroups; - *ngroups = 0; - t_groups = (gid_t *)malloc(maxgroups * sizeof(gid_t)); - if (!t_groups) { - errno = ENOMEM; - return (-1); - } - - for (rule = pvt->rules; rule; rule = rule->next) { - t_ngroups = maxgroups; - gr = rule->inst->gr; - t = (*gr->list)(gr, name, basegid, t_groups, &t_ngroups); - for (n = 0; n < t_ngroups; n++) { - if (newgid(*ngroups, groups, t_groups[n])) { - if (*ngroups == maxgroups) { - rval = -1; - goto done; - } - groups[(*ngroups)++] = t_groups[n]; - } - } - if (t == 0) { - if (!(rule->flags & IRS_MERGE)) - break; - } else { - if (!(rule->flags & IRS_CONTINUE)) - break; - } - } - done: - free(t_groups); - return (rval); -} - -static void -gr_minimize(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_rule *rule; - - for (rule = pvt->rules; rule != NULL; rule = rule->next) { - struct irs_gr *gr = rule->inst->gr; - - (*gr->minimize)(gr); - } -} - -static struct __res_state * -gr_res_get(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (!pvt->res) { - struct __res_state *res; - res = (struct __res_state *)malloc(sizeof *res); - if (!res) { - errno = ENOMEM; - return (NULL); - } - memset(res, 0, sizeof *res); - gr_res_set(this, res, free); - } - - return (pvt->res); -} - -static void -gr_res_set(struct irs_gr *this, struct __res_state *res, - void (*free_res)(void *)) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_rule *rule; - - if (pvt->res && pvt->free_res) { - res_nclose(pvt->res); - (*pvt->free_res)(pvt->res); - } - - pvt->res = res; - pvt->free_res = free_res; - - for (rule = pvt->rules; rule != NULL; rule = rule->next) { - struct irs_gr *gr = rule->inst->gr; - - if (gr->res_set) - (*gr->res_set)(gr, pvt->res, NULL); - } -} - -/* Private. */ - -static int -grmerge(struct irs_gr *this, const struct group *src, int preserve) { - struct pvt *pvt = (struct pvt *)this->private; - char *cp, **m, **p, *oldmembuf, *ep; - int n, ndst, nnew; - size_t used; - - if (!preserve) { - pvt->group.gr_gid = src->gr_gid; - if (pvt->nmemb < 1) { - m = malloc(sizeof *m); - if (m == NULL) { - /* No harm done, no work done. */ - return (0); - } - pvt->group.gr_mem = m; - pvt->nmemb = 1; - } - pvt->group.gr_mem[0] = NULL; - } - ndst = countvec(pvt->group.gr_mem); - nnew = countnew(pvt->group.gr_mem, src->gr_mem); - - /* - * Make sure destination member array is large enough. - * p points to new portion. - */ - n = ndst + nnew + 1; - if ((size_t)n > pvt->nmemb) { - m = realloc(pvt->group.gr_mem, n * sizeof *m); - if (m == NULL) { - /* No harm done, no work done. */ - return (0); - } - pvt->group.gr_mem = m; - pvt->nmemb = n; - } - p = pvt->group.gr_mem + ndst; - - /* - * Enlarge destination membuf; cp points at new portion. - */ - n = sizenew(pvt->group.gr_mem, src->gr_mem); - INSIST((nnew == 0) == (n == 0)); - if (!preserve) { - n += strlen(src->gr_name) + 1; - n += strlen(src->gr_passwd) + 1; - } - if (n == 0) { - /* No work to do. */ - return (1); - } - used = preserve ? pvt->membufsize : 0; - cp = malloc(used + n); - if (cp == NULL) { - /* No harm done, no work done. */ - return (0); - } - ep = cp + used + n; - if (used != 0) - memcpy(cp, pvt->membuf, used); - oldmembuf = pvt->membuf; - pvt->membuf = cp; - pvt->membufsize = used + n; - cp += used; - - /* - * Adjust group.gr_mem. - */ - if (pvt->membuf != oldmembuf) - for (m = pvt->group.gr_mem; *m; m++) - *m = pvt->membuf + (*m - oldmembuf); - - /* - * Add new elements. - */ - for (m = src->gr_mem; *m; m++) - if (isnew(pvt->group.gr_mem, *m)) { - *p++ = cp; - *p = NULL; - n = strlen(*m) + 1; - if (n > ep - cp) { - FREE_IF(oldmembuf); - return (0); - } - strcpy(cp, *m); /* (checked) */ - cp += n; - } - if (preserve) { - pvt->group.gr_name = pvt->membuf + - (pvt->group.gr_name - oldmembuf); - pvt->group.gr_passwd = pvt->membuf + - (pvt->group.gr_passwd - oldmembuf); - } else { - pvt->group.gr_name = cp; - n = strlen(src->gr_name) + 1; - if (n > ep - cp) { - FREE_IF(oldmembuf); - return (0); - } - strcpy(cp, src->gr_name); /* (checked) */ - cp += n; - - pvt->group.gr_passwd = cp; - n = strlen(src->gr_passwd) + 1; - if (n > ep - cp) { - FREE_IF(oldmembuf); - return (0); - } - strcpy(cp, src->gr_passwd); /* (checked) */ - cp += n; - } - FREE_IF(oldmembuf); - INSIST(cp >= pvt->membuf && cp <= &pvt->membuf[pvt->membufsize]); - return (1); -} - -static int -countvec(char **vec) { - int n = 0; - - while (*vec++) - n++; - return (n); -} - -static int -isnew(char **old, char *new) { - for (; *old; old++) - if (strcmp(*old, new) == 0) - return (0); - return (1); -} - -static int -countnew(char **old, char **new) { - int n = 0; - - for (; *new; new++) - n += isnew(old, *new); - return (n); -} - -static size_t -sizenew(char **old, char **new) { - size_t n = 0; - - for (; *new; new++) - if (isnew(old, *new)) - n += strlen(*new) + 1; - return (n); -} - -static int -newgid(int ngroups, gid_t *groups, gid_t group) { - ngroups--, groups++; - for (; ngroups-- > 0; groups++) - if (*groups == group) - return (0); - return (1); -} - -#endif /* WANT_IRS_GR */ diff --git a/src/kits/network/compat/libbind/irs/gen_pw.c b/src/kits/network/compat/libbind/irs/gen_pw.c deleted file mode 100644 index e4c32fac28..0000000000 --- a/src/kits/network/compat/libbind/irs/gen_pw.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if !defined(LINT) && !defined(CODECENTER) -static const char rcsid[] = "$Id$"; -#endif - -/* Imports */ - -#include "port_before.h" - -#ifndef WANT_IRS_PW -static int __bind_irs_pw_unneeded; -#else - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "gen_p.h" - -/* Types */ - -struct pvt { - struct irs_rule * rules; - struct irs_rule * rule; - struct __res_state * res; - void (*free_res)(void *); -}; - -/* Forward */ - -static void pw_close(struct irs_pw *); -static struct passwd * pw_next(struct irs_pw *); -static struct passwd * pw_byname(struct irs_pw *, const char *); -static struct passwd * pw_byuid(struct irs_pw *, uid_t); -static void pw_rewind(struct irs_pw *); -static void pw_minimize(struct irs_pw *); -static struct __res_state * pw_res_get(struct irs_pw *); -static void pw_res_set(struct irs_pw *, - struct __res_state *, - void (*)(void *)); - -/* Public */ - -struct irs_pw * -irs_gen_pw(struct irs_acc *this) { - struct gen_p *accpvt = (struct gen_p *)this->private; - struct irs_pw *pw; - struct pvt *pvt; - - if (!(pw = memget(sizeof *pw))) { - errno = ENOMEM; - return (NULL); - } - memset(pw, 0x5e, sizeof *pw); - if (!(pvt = memget(sizeof *pvt))) { - memput(pw, sizeof *pvt); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->rules = accpvt->map_rules[irs_pw]; - pvt->rule = pvt->rules; - pw->private = pvt; - pw->close = pw_close; - pw->next = pw_next; - pw->byname = pw_byname; - pw->byuid = pw_byuid; - pw->rewind = pw_rewind; - pw->minimize = pw_minimize; - pw->res_get = pw_res_get; - pw->res_set = pw_res_set; - return (pw); -} - -/* Methods */ - -static void -pw_close(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct passwd * -pw_next(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct passwd *rval; - struct irs_pw *pw; - - while (pvt->rule) { - pw = pvt->rule->inst->pw; - rval = (*pw->next)(pw); - if (rval) - return (rval); - if (!(pvt->rule->flags & IRS_CONTINUE)) - break; - pvt->rule = pvt->rule->next; - if (pvt->rule) { - pw = pvt->rule->inst->pw; - (*pw->rewind)(pw); - } - } - return (NULL); -} - -static void -pw_rewind(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_pw *pw; - - pvt->rule = pvt->rules; - if (pvt->rule) { - pw = pvt->rule->inst->pw; - (*pw->rewind)(pw); - } -} - -static struct passwd * -pw_byname(struct irs_pw *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_rule *rule; - struct passwd *rval; - struct irs_pw *pw; - - rval = NULL; - for (rule = pvt->rules; rule; rule = rule->next) { - pw = rule->inst->pw; - rval = (*pw->byname)(pw, name); - if (rval || !(rule->flags & IRS_CONTINUE)) - break; - } - return (rval); -} - -static struct passwd * -pw_byuid(struct irs_pw *this, uid_t uid) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_rule *rule; - struct passwd *rval; - struct irs_pw *pw; - - rval = NULL; - for (rule = pvt->rules; rule; rule = rule->next) { - pw = rule->inst->pw; - rval = (*pw->byuid)(pw, uid); - if (rval || !(rule->flags & IRS_CONTINUE)) - break; - } - return (rval); -} - -static void -pw_minimize(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_rule *rule; - - for (rule = pvt->rules; rule != NULL; rule = rule->next) { - struct irs_pw *pw = rule->inst->pw; - - (*pw->minimize)(pw); - } -} - -static struct __res_state * -pw_res_get(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (!pvt->res) { - struct __res_state *res; - res = (struct __res_state *)malloc(sizeof *res); - if (!res) { - errno = ENOMEM; - return (NULL); - } - memset(res, 0, sizeof *res); - pw_res_set(this, res, free); - } - - return (pvt->res); -} - -static void -pw_res_set(struct irs_pw *this, struct __res_state *res, - void (*free_res)(void *)) { - struct pvt *pvt = (struct pvt *)this->private; - struct irs_rule *rule; - - if (pvt->res && pvt->free_res) { - res_nclose(pvt->res); - (*pvt->free_res)(pvt->res); - } - - pvt->res = res; - pvt->free_res = free_res; - - for (rule = pvt->rules; rule != NULL; rule = rule->next) { - struct irs_pw *pw = rule->inst->pw; - - if (pw->res_set) - (*pw->res_set)(pw, pvt->res, NULL); - } -} - -#endif /* WANT_IRS_PW */ diff --git a/src/kits/network/compat/libbind/irs/getgrent.c b/src/kits/network/compat/libbind/irs/getgrent.c deleted file mode 100644 index 32362c7632..0000000000 --- a/src/kits/network/compat/libbind/irs/getgrent.c +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if !defined(LINT) && !defined(CODECENTER) -static const char rcsid[] = "$Id$"; -#endif - -/* Imports */ - -#include "port_before.h" - -#if !defined(WANT_IRS_GR) || defined(__BIND_NOSTATIC) -static int __bind_irs_gr_unneeded; -#else - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include "port_after.h" - -#include "irs_data.h" - -/* Forward */ - -static struct net_data *init(void); -void endgrent(void); - -/* Public */ - -struct group * -getgrent() { - struct net_data *net_data = init(); - - return (getgrent_p(net_data)); -} - -struct group * -getgrnam(const char *name) { - struct net_data *net_data = init(); - - return (getgrnam_p(name, net_data)); -} - -struct group * -getgrgid(gid_t gid) { - struct net_data *net_data = init(); - - return (getgrgid_p(gid, net_data)); -} - -int -setgroupent(int stayopen) { - struct net_data *net_data = init(); - - return (setgroupent_p(stayopen, net_data)); -} - -#ifdef SETGRENT_VOID -void -setgrent(void) { - struct net_data *net_data = init(); - - setgrent_p(net_data); -} -#else -int -setgrent(void) { - struct net_data *net_data = init(); - - return (setgrent_p(net_data)); -} -#endif /* SETGRENT_VOID */ - -void -endgrent() { - struct net_data *net_data = init(); - - endgrent_p(net_data); -} - -int -getgrouplist(GETGROUPLIST_ARGS) { - struct net_data *net_data = init(); - - return (getgrouplist_p(name, basegid, groups, ngroups, net_data)); -} - -/* Shared private. */ - -struct group * -getgrent_p(struct net_data *net_data) { - struct irs_gr *gr; - - if (!net_data || !(gr = net_data->gr)) - return (NULL); - net_data->gr_last = (*gr->next)(gr); - return (net_data->gr_last); -} - -struct group * -getgrnam_p(const char *name, struct net_data *net_data) { - struct irs_gr *gr; - - if (!net_data || !(gr = net_data->gr)) - return (NULL); - if (net_data->gr_stayopen && net_data->gr_last && - !strcmp(net_data->gr_last->gr_name, name)) - return (net_data->gr_last); - net_data->gr_last = (*gr->byname)(gr, name); - if (!net_data->gr_stayopen) - endgrent(); - return (net_data->gr_last); -} - -struct group * -getgrgid_p(gid_t gid, struct net_data *net_data) { - struct irs_gr *gr; - - if (!net_data || !(gr = net_data->gr)) - return (NULL); - if (net_data->gr_stayopen && net_data->gr_last && - (gid_t)net_data->gr_last->gr_gid == gid) - return (net_data->gr_last); - net_data->gr_last = (*gr->bygid)(gr, gid); - if (!net_data->gr_stayopen) - endgrent(); - return (net_data->gr_last); -} - -int -setgroupent_p(int stayopen, struct net_data *net_data) { - struct irs_gr *gr; - - if (!net_data || !(gr = net_data->gr)) - return (0); - (*gr->rewind)(gr); - net_data->gr_stayopen = (stayopen != 0); - if (stayopen == 0) - net_data_minimize(net_data); - return (1); -} - -#ifdef SETGRENT_VOID -void -setgrent_p(struct net_data *net_data) { - (void)setgroupent_p(0, net_data); -} -#else -int -setgrent_p(struct net_data *net_data) { - return (setgroupent_p(0, net_data)); -} -#endif /* SETGRENT_VOID */ - -void -endgrent_p(struct net_data *net_data) { - struct irs_gr *gr; - - if ((net_data != NULL) && ((gr = net_data->gr) != NULL)) - (*gr->minimize)(gr); -} - -int -getgrouplist_p(const char *name, gid_t basegid, gid_t *groups, int *ngroups, - struct net_data *net_data) { - struct irs_gr *gr; - - if (!net_data || !(gr = net_data->gr)) { - *ngroups = 0; - return (-1); - } - return ((*gr->list)(gr, name, basegid, groups, ngroups)); -} - -/* Private */ - -static struct net_data * -init() { - struct net_data *net_data; - - if (!(net_data = net_data_init(NULL))) - goto error; - if (!net_data->gr) { - net_data->gr = (*net_data->irs->gr_map)(net_data->irs); - - if (!net_data->gr || !net_data->res) { - error: - errno = EIO; - return (NULL); - } - (*net_data->gr->res_set)(net_data->gr, net_data->res, - NULL); - } - - return (net_data); -} - -#endif /* WANT_IRS_GR */ diff --git a/src/kits/network/compat/libbind/irs/getgrent_r.c b/src/kits/network/compat/libbind/irs/getgrent_r.c deleted file mode 100644 index 5d9f9873a5..0000000000 --- a/src/kits/network/compat/libbind/irs/getgrent_r.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Copyright (c) 1998-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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif /* LIBC_SCCS and not lint */ - -#include -#if !defined(_REENTRANT) || !defined(DO_PTHREADS) || !defined(WANT_IRS_PW) - static int getgrent_r_not_required = 0; -#else -#include -#include -#include -#include -#if (defined(POSIX_GETGRNAM_R) || defined(POSIX_GETGRGID_R)) && \ - defined(_POSIX_PTHREAD_SEMANTICS) - /* turn off solaris remapping in */ -#define _UNIX95 -#undef _POSIX_PTHREAD_SEMANTICS -#include -#define _POSIX_PTHREAD_SEMANTICS 1 -#else -#include -#endif -#include -#include - -#ifdef GROUP_R_RETURN - -static int -copy_group(struct group *, struct group *, char *buf, int buflen); - -/* POSIX 1003.1c */ -#ifdef POSIX_GETGRNAM_R -int -__posix_getgrnam_r(const char *name, struct group *gptr, - char *buf, int buflen, struct group **result) { -#else -int -getgrnam_r(const char *name, struct group *gptr, - char *buf, size_t buflen, struct group **result) { -#endif - struct group *ge = getgrnam(name); - int res; - - if (ge == NULL) { - *result = NULL; - return (0); - } - - res = copy_group(ge, gptr, buf, buflen); - *result = res ? NULL : gptr; - return (res); -} - -#ifdef POSIX_GETGRNAM_R -struct group * -getgrnam_r(const char *name, struct group *gptr, - char *buf, int buflen) { - struct group *ge = getgrnam(name); - int res; - - if (ge == NULL) - return (NULL); - res = copy_group(ge, gptr, buf, buflen); - return (res ? NULL : gptr); -} -#endif /* POSIX_GETGRNAM_R */ - -/* POSIX 1003.1c */ -#ifdef POSIX_GETGRGID_R -int -__posix_getgrgid_r(gid_t gid, struct group *gptr, - char *buf, int buflen, struct group **result) { -#else /* POSIX_GETGRGID_R */ -int -getgrgid_r(gid_t gid, struct group *gptr, - char *buf, size_t buflen, struct group **result) { -#endif /* POSIX_GETGRGID_R */ - struct group *ge = getgrgid(gid); - int res; - - if (ge == NULL) { - *result = NULL; - return (0); - } - - res = copy_group(ge, gptr, buf, buflen); - *result = res ? NULL : gptr; - return (res); -} - -#ifdef POSIX_GETGRGID_R -struct group * -getgrgid_r(gid_t gid, struct group *gptr, - char *buf, int buflen) { - struct group *ge = getgrgid(gid); - int res; - - if (ge == NULL) - return (NULL); - - res = copy_group(ge, gptr, buf, buflen); - return (res ? NULL : gptr); -} -#endif - -/* - * These assume a single context is in operation per thread. - * If this is not the case we will need to call irs directly - * rather than through the base functions. - */ - -GROUP_R_RETURN -getgrent_r(struct group *gptr, GROUP_R_ARGS) { - struct group *ge = getgrent(); - int res; - - if (ge == NULL) { - return (GROUP_R_BAD); - } - - res = copy_group(ge, gptr, buf, buflen); - return (res ? GROUP_R_BAD : GROUP_R_OK); -} - -GROUP_R_SET_RETURN -setgrent_r(GROUP_R_ENT_ARGS) { - - setgrent(); -#ifdef GROUP_R_SET_RESULT - return (GROUP_R_SET_RESULT); -#endif -} - -GROUP_R_END_RETURN -endgrent_r(GROUP_R_ENT_ARGS) { - - endgrent(); - GROUP_R_END_RESULT(GROUP_R_OK); -} - - -#if 0 - /* XXX irs does not have a fgetgrent() */ -GROUP_R_RETURN -fgetgrent_r(FILE *f, struct group *gptr, GROUP_R_ARGS) { - struct group *ge = fgetgrent(f); - int res; - - if (ge == NULL) - return (GROUP_R_BAD); - - res = copy_group(ge, gptr, buf, buflen); - return (res ? GROUP_R_BAD : GROUP_R_OK); -} -#endif - -/* Private */ - -static int -copy_group(struct group *ge, struct group *gptr, char *buf, int buflen) { - char *cp; - int i, n; - int numptr, len; - - /* Find out the amount of space required to store the answer. */ - numptr = 1; /* NULL ptr */ - len = (char *)ALIGN(buf) - buf; - for (i = 0; ge->gr_mem[i]; i++, numptr++) { - len += strlen(ge->gr_mem[i]) + 1; - } - len += strlen(ge->gr_name) + 1; - len += strlen(ge->gr_passwd) + 1; - len += numptr * sizeof(char*); - - if (len > buflen) { - errno = ERANGE; - return (ERANGE); - } - - /* copy group id */ - gptr->gr_gid = ge->gr_gid; - - cp = (char *)ALIGN(buf) + numptr * sizeof(char *); - - /* copy official name */ - n = strlen(ge->gr_name) + 1; - strcpy(cp, ge->gr_name); - gptr->gr_name = cp; - cp += n; - - /* copy member list */ - gptr->gr_mem = (char **)ALIGN(buf); - for (i = 0 ; ge->gr_mem[i]; i++) { - n = strlen(ge->gr_mem[i]) + 1; - strcpy(cp, ge->gr_mem[i]); - gptr->gr_mem[i] = cp; - cp += n; - } - gptr->gr_mem[i] = NULL; - - /* copy password */ - n = strlen(ge->gr_passwd) + 1; - strcpy(cp, ge->gr_passwd); - gptr->gr_passwd = cp; - cp += n; - - return (0); -} -#else /* GROUP_R_RETURN */ - static int getgrent_r_unknown_system = 0; -#endif /* GROUP_R_RETURN */ -#endif /* !def(_REENTRANT) || !def(DO_PTHREADS) || !def(WANT_IRS_PW) */ diff --git a/src/kits/network/compat/libbind/irs/getpwent.c b/src/kits/network/compat/libbind/irs/getpwent.c deleted file mode 100644 index 8b85a30bb7..0000000000 --- a/src/kits/network/compat/libbind/irs/getpwent.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if !defined(LINT) && !defined(CODECENTER) -static const char rcsid[] = "$Id$"; -#endif - -/* Imports */ - -#include "port_before.h" - -#if !defined(WANT_IRS_PW) || defined(__BIND_NOSTATIC) -static int __bind_irs_pw_unneeded; -#else - -#include - -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include "port_after.h" - -#include "irs_data.h" - -/* Forward */ - -static struct net_data * init(void); - -/* Public */ - -struct passwd * -getpwent(void) { - struct net_data *net_data = init(); - - return (getpwent_p(net_data)); -} - -struct passwd * -getpwnam(const char *name) { - struct net_data *net_data = init(); - - return (getpwnam_p(name, net_data)); -} - -struct passwd * -getpwuid(uid_t uid) { - struct net_data *net_data = init(); - - return (getpwuid_p(uid, net_data)); -} - -int -setpassent(int stayopen) { - struct net_data *net_data = init(); - - return (setpassent_p(stayopen, net_data)); -} - -#ifdef SETPWENT_VOID -void -setpwent() { - struct net_data *net_data = init(); - - setpwent_p(net_data); -} -#else -int -setpwent() { - struct net_data *net_data = init(); - - return (setpwent_p(net_data)); -} -#endif - -void -endpwent() { - struct net_data *net_data = init(); - - endpwent_p(net_data); -} - -/* Shared private. */ - -struct passwd * -getpwent_p(struct net_data *net_data) { - struct irs_pw *pw; - - if (!net_data || !(pw = net_data->pw)) - return (NULL); - net_data->pw_last = (*pw->next)(pw); - return (net_data->pw_last); -} - -struct passwd * -getpwnam_p(const char *name, struct net_data *net_data) { - struct irs_pw *pw; - - if (!net_data || !(pw = net_data->pw)) - return (NULL); - if (net_data->pw_stayopen && net_data->pw_last && - !strcmp(net_data->pw_last->pw_name, name)) - return (net_data->pw_last); - net_data->pw_last = (*pw->byname)(pw, name); - if (!net_data->pw_stayopen) - endpwent(); - return (net_data->pw_last); -} - -struct passwd * -getpwuid_p(uid_t uid, struct net_data *net_data) { - struct irs_pw *pw; - - if (!net_data || !(pw = net_data->pw)) - return (NULL); - if (net_data->pw_stayopen && net_data->pw_last && - net_data->pw_last->pw_uid == uid) - return (net_data->pw_last); - net_data->pw_last = (*pw->byuid)(pw, uid); - if (!net_data->pw_stayopen) - endpwent(); - return (net_data->pw_last); -} - -int -setpassent_p(int stayopen, struct net_data *net_data) { - struct irs_pw *pw; - - if (!net_data || !(pw = net_data->pw)) - return (0); - (*pw->rewind)(pw); - net_data->pw_stayopen = (stayopen != 0); - if (stayopen == 0) - net_data_minimize(net_data); - return (1); -} - -#ifdef SETPWENT_VOID -void -setpwent_p(struct net_data *net_data) { - (void) setpassent_p(0, net_data); -} -#else -int -setpwent_p(struct net_data *net_data) { - return (setpassent_p(0, net_data)); -} -#endif - -void -endpwent_p(struct net_data *net_data) { - struct irs_pw *pw; - - if ((net_data != NULL) && ((pw = net_data->pw) != NULL)) - (*pw->minimize)(pw); -} - -/* Private */ - -static struct net_data * -init() { - struct net_data *net_data; - if (!(net_data = net_data_init(NULL))) - goto error; - if (!net_data->pw) { - net_data->pw = (*net_data->irs->pw_map)(net_data->irs); - - if (!net_data->pw || !net_data->res) { - error: - errno = EIO; - return (NULL); - } - (*net_data->pw->res_set)(net_data->pw, net_data->res, NULL); - } - - return (net_data); -} - -#endif /* WANT_IRS_PW */ diff --git a/src/kits/network/compat/libbind/irs/getpwent_r.c b/src/kits/network/compat/libbind/irs/getpwent_r.c deleted file mode 100644 index 851dcb1f17..0000000000 --- a/src/kits/network/compat/libbind/irs/getpwent_r.c +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Copyright (c) 1998-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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif /* LIBC_SCCS and not lint */ - -#include -#if !defined(_REENTRANT) || !defined(DO_PTHREADS) || !defined(WANT_IRS_PW) - static int getpwent_r_not_required = 0; -#else -#include -#include -#include -#include -#if (defined(POSIX_GETPWNAM_R) || defined(POSIX_GETPWUID_R)) -#if defined(_POSIX_PTHREAD_SEMANTICS) - /* turn off solaris remapping in */ -#undef _POSIX_PTHREAD_SEMANTICS -#include -#define _POSIX_PTHREAD_SEMANTICS 1 -#else -#define _UNIX95 1 -#include -#endif -#else -#include -#endif -#include - -#ifdef PASS_R_RETURN - -static int -copy_passwd(struct passwd *, struct passwd *, char *buf, int buflen); - -/* POSIX 1003.1c */ -#ifdef POSIX_GETPWNAM_R -int -__posix_getpwnam_r(const char *login, struct passwd *pwptr, - char *buf, size_t buflen, struct passwd **result) { -#else -int -getpwnam_r(const char *login, struct passwd *pwptr, - char *buf, size_t buflen, struct passwd **result) { -#endif - struct passwd *pw = getpwnam(login); - int res; - - if (pw == NULL) { - *result = NULL; - return (0); - } - - res = copy_passwd(pw, pwptr, buf, buflen); - *result = res ? NULL : pwptr; - return (res); -} - -#ifdef POSIX_GETPWNAM_R -struct passwd * -getpwnam_r(const char *login, struct passwd *pwptr, char *buf, int buflen) { - struct passwd *pw = getpwnam(login); - int res; - - if (pw == NULL) - return (NULL); - - res = copy_passwd(pw, pwptr, buf, buflen); - return (res ? NULL : pwptr); -} -#endif - -/* POSIX 1003.1c */ -#ifdef POSIX_GETPWUID_R -int -__posix_getpwuid_r(uid_t uid, struct passwd *pwptr, - char *buf, int buflen, struct passwd **result) { -#else -int -getpwuid_r(uid_t uid, struct passwd *pwptr, - char *buf, size_t buflen, struct passwd **result) { -#endif - struct passwd *pw = getpwuid(uid); - int res; - - if (pw == NULL) { - *result = NULL; - return (0); - } - - res = copy_passwd(pw, pwptr, buf, buflen); - *result = res ? NULL : pwptr; - return (res); -} - -#ifdef POSIX_GETPWUID_R -struct passwd * -getpwuid_r(uid_t uid, struct passwd *pwptr, char *buf, int buflen) { - struct passwd *pw = getpwuid(uid); - int res; - - if (pw == NULL) - return (NULL); - - res = copy_passwd(pw, pwptr, buf, buflen); - return (res ? NULL : pwptr); -} -#endif - -/* - * These assume a single context is in operation per thread. - * If this is not the case we will need to call irs directly - * rather than through the base functions. - */ - -PASS_R_RETURN -getpwent_r(struct passwd *pwptr, PASS_R_ARGS) { - struct passwd *pw = getpwent(); - int res = 0; - - if (pw == NULL) - return (PASS_R_BAD); - - res = copy_passwd(pw, pwptr, buf, buflen); - return (res ? PASS_R_BAD : PASS_R_OK); -} - -PASS_R_SET_RETURN -#ifdef PASS_R_ENT_ARGS -setpassent_r(int stayopen, PASS_R_ENT_ARGS) -#else -setpassent_r(int stayopen) -#endif -{ - - setpassent(stayopen); -#ifdef PASS_R_SET_RESULT - return (PASS_R_SET_RESULT); -#endif -} - -PASS_R_SET_RETURN -#ifdef PASS_R_ENT_ARGS -setpwent_r(PASS_R_ENT_ARGS) -#else -setpwent_r(void) -#endif -{ - - setpwent(); -#ifdef PASS_R_SET_RESULT - return (PASS_R_SET_RESULT); -#endif -} - -PASS_R_END_RETURN -#ifdef PASS_R_ENT_ARGS -endpwent_r(PASS_R_ENT_ARGS) -#else -endpwent_r(void) -#endif -{ - - endpwent(); - PASS_R_END_RESULT(PASS_R_OK); -} - - -#ifdef HAS_FGETPWENT -PASS_R_RETURN -fgetpwent_r(FILE *f, struct passwd *pwptr, PASS_R_COPY_ARGS) { - struct passwd *pw = fgetpwent(f); - int res = 0; - - if (pw == NULL) - return (PASS_R_BAD); - - res = copy_passwd(pw, pwptr, PASS_R_COPY); - return (res ? PASS_R_BAD : PASS_R_OK ); -} -#endif - -/* Private */ - -static int -copy_passwd(struct passwd *pw, struct passwd *pwptr, char *buf, int buflen) { - char *cp; - int n; - int len; - - /* Find out the amount of space required to store the answer. */ - len = strlen(pw->pw_name) + 1; - len += strlen(pw->pw_passwd) + 1; -#ifdef HAVE_PW_CLASS - len += strlen(pw->pw_class) + 1; -#endif - len += strlen(pw->pw_gecos) + 1; - len += strlen(pw->pw_dir) + 1; - len += strlen(pw->pw_shell) + 1; - - if (len > buflen) { - errno = ERANGE; - return (ERANGE); - } - - /* copy fixed atomic values*/ - pwptr->pw_uid = pw->pw_uid; - pwptr->pw_gid = pw->pw_gid; -#ifdef HAVE_PW_CHANGE - pwptr->pw_change = pw->pw_change; -#endif -#ifdef HAVE_PW_EXPIRE - pwptr->pw_expire = pw->pw_expire; -#endif - - cp = buf; - - /* copy official name */ - n = strlen(pw->pw_name) + 1; - strcpy(cp, pw->pw_name); - pwptr->pw_name = cp; - cp += n; - - /* copy password */ - n = strlen(pw->pw_passwd) + 1; - strcpy(cp, pw->pw_passwd); - pwptr->pw_passwd = cp; - cp += n; - -#ifdef HAVE_PW_CLASS - /* copy class */ - n = strlen(pw->pw_class) + 1; - strcpy(cp, pw->pw_class); - pwptr->pw_class = cp; - cp += n; -#endif - - /* copy gecos */ - n = strlen(pw->pw_gecos) + 1; - strcpy(cp, pw->pw_gecos); - pwptr->pw_gecos = cp; - cp += n; - - /* copy directory */ - n = strlen(pw->pw_dir) + 1; - strcpy(cp, pw->pw_dir); - pwptr->pw_dir = cp; - cp += n; - - /* copy login shell */ - n = strlen(pw->pw_shell) + 1; - strcpy(cp, pw->pw_shell); - pwptr->pw_shell = cp; - cp += n; - - return (0); -} -#else /* PASS_R_RETURN */ - static int getpwent_r_unknown_system = 0; -#endif /* PASS_R_RETURN */ -#endif /* !def(_REENTRANT) || !def(DO_PTHREADS) || !def(WANT_IRS_PW) */ diff --git a/src/kits/network/compat/libbind/irs/irp_gr.c b/src/kits/network/compat/libbind/irs/irp_gr.c deleted file mode 100644 index f931846381..0000000000 --- a/src/kits/network/compat/libbind/irs/irp_gr.c +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Portions Copyright(c) 1996, 1998 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif /* LIBC_SCCS and not lint */ - -/* extern */ - -#include "port_before.h" - -#ifndef WANT_IRS_PW -static int __bind_irs_gr_unneeded; -#else - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "irs_p.h" -#include "lcl_p.h" -#include "irp_p.h" - -#include "port_after.h" - - -/* Types. */ - -/* - * Module for the getnetgrent(3) family to use when connected to a - * remote irp daemon. - * - * See irpd.c for justification of caching done here. - * - */ - -struct pvt { - struct irp_p *girpdata; /* global IRP data */ - int warned; - struct group group; -}; - -/* Forward. */ - -static void gr_close(struct irs_gr *); -static struct group * gr_next(struct irs_gr *); -static struct group * gr_byname(struct irs_gr *, const char *); -static struct group * gr_bygid(struct irs_gr *, gid_t); -static void gr_rewind(struct irs_gr *); -static void gr_minimize(struct irs_gr *); - -/* Private */ -static void free_group(struct group *gr); - - -/* Public. */ - - - - - -/* - * struct irs_gr * irs_irp_gr(struct irs_acc *this) - * - * Notes: - * - * Initialize the group sub-module. - * - * Notes: - * - * Module data. - * - */ - -struct irs_gr * -irs_irp_gr(struct irs_acc *this) { - struct irs_gr *gr; - struct pvt *pvt; - - if (!(gr = memget(sizeof *gr))) { - errno = ENOMEM; - return (NULL); - } - memset(gr, 0x0, sizeof *gr); - - if (!(pvt = memget(sizeof *pvt))) { - memput(gr, sizeof *gr); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0x0, sizeof *pvt); - pvt->girpdata = this->private; - - gr->private = pvt; - gr->close = gr_close; - gr->next = gr_next; - gr->byname = gr_byname; - gr->bygid = gr_bygid; - gr->rewind = gr_rewind; - gr->list = make_group_list; - gr->minimize = gr_minimize; - return (gr); -} - -/* Methods. */ - - - -/* - * void gr_close(struct irs_gr *this) - * - * Notes: - * - * Close the sub-module. - * - */ - -static void -gr_close(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - gr_minimize(this); - - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - - - - -/* - * struct group * gr_next(struct irs_gr *this) - * - * Notes: - * - * Gets the next group out of the cached data and returns it. - * - */ - -static struct group * -gr_next(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct group *gr = &pvt->group; - char *body; - size_t bodylen; - int code; - char text[256]; - - if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) { - return (NULL); - } - - if (irs_irp_send_command(pvt->girpdata, "getgrent") != 0) { - return (NULL); - } - - if (irs_irp_get_full_response(pvt->girpdata, &code, - text, sizeof text, - &body, &bodylen) != 0) { - if (irp_log_errors) { - syslog(LOG_WARNING, "getgrent failed: %s", text); - } - return (NULL); - } - - if (code == IRPD_GETGROUP_OK) { - free_group(gr); - if (irp_unmarshall_gr(gr, body) != 0) { - gr = NULL; - } - } else { - gr = NULL; - } - - if (body != NULL) { - memput(body, bodylen); - } - - return (gr); -} - - - - - -/* - * struct group * gr_byname(struct irs_gr *this, const char *name) - * - * Notes: - * - * Gets a group by name from irpd and returns it. - * - */ - -static struct group * -gr_byname(struct irs_gr *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - struct group *gr = &pvt->group; - char *body; - size_t bodylen; - int code; - char text[256]; - - - if (gr->gr_name != NULL && strcmp(name, gr->gr_name) == 0) { - return (gr); - } - - if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) { - return (NULL); - } - - if (irs_irp_send_command(pvt->girpdata, "getgrnam %s", name) != 0) - return (NULL); - - if (irs_irp_get_full_response(pvt->girpdata, &code, - text, sizeof text, - &body, &bodylen) != 0) { - return (NULL); - } - - if (code == IRPD_GETGROUP_OK) { - free_group(gr); - if (irp_unmarshall_gr(gr, body) != 0) { - gr = NULL; - } - } else { - gr = NULL; - } - - if (body != NULL) { - memput(body, bodylen); - } - - return (gr); -} - - - - - -/* - * struct group * gr_bygid(struct irs_gr *this, gid_t gid) - * - * Notes: - * - * Gets a group by gid from irpd and returns it. - * - */ - -static struct group * -gr_bygid(struct irs_gr *this, gid_t gid) { - struct pvt *pvt = (struct pvt *)this->private; - struct group *gr = &pvt->group; - char *body; - size_t bodylen; - int code; - char text[256]; - - if (gr->gr_name != NULL && (gid_t)gr->gr_gid == gid) { - return (gr); - } - - if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) { - return (NULL); - } - - if (irs_irp_send_command(pvt->girpdata, "getgrgid %d", gid) != 0) - return (NULL); - - if (irs_irp_get_full_response(pvt->girpdata, &code, - text, sizeof text, - &body, &bodylen) != 0) { - return (NULL); - } - - if (code == IRPD_GETGROUP_OK) { - free_group(gr); - if (irp_unmarshall_gr(gr, body) != 0) { - gr = NULL; - } - } else { - gr = NULL; - } - - if (body != NULL) { - memput(body, bodylen); - } - - return (gr); -} - - - - -/* - * void gr_rewind(struct irs_gr *this) - * - */ - -static void -gr_rewind(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - char text[256]; - int code; - - if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) { - return; - } - - if (irs_irp_send_command(pvt->girpdata, "setgrent") != 0) { - return; - } - - code = irs_irp_read_response(pvt->girpdata, text, sizeof text); - if (code != IRPD_GETGROUP_SETOK) { - if (irp_log_errors) { - syslog(LOG_WARNING, "setgrent failed: %s", text); - } - } - - return; -} - - - - -/* - * void gr_minimize(struct irs_gr *this) - * - * Notes: - * - * Frees up cached data and disconnects(if necessary) from the remote. - * - */ - -static void -gr_minimize(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - free_group(&pvt->group); - irs_irp_disconnect(pvt->girpdata); -} - -/* Private. */ - - - -/* - * static void free_group(struct group *gr); - * - * Deallocate all the memory irp_unmarshall_gr allocated. - * - */ - -static void -free_group(struct group *gr) { - char **p; - - if (gr == NULL) - return; - - if (gr->gr_name != NULL) - free(gr->gr_name); - - if (gr->gr_passwd != NULL) - free(gr->gr_passwd); - - for (p = gr->gr_mem ; p != NULL && *p != NULL ; p++) - free(*p); - - if (gr->gr_mem) - free(gr->gr_mem); - - if (p != NULL) - free(p); -} - - -#endif /* WANT_IRS_GR */ diff --git a/src/kits/network/compat/libbind/irs/irp_pw.c b/src/kits/network/compat/libbind/irs/irp_pw.c deleted file mode 100644 index 72665cc4ce..0000000000 --- a/src/kits/network/compat/libbind/irs/irp_pw.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Portions Copyright (c) 1996 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif /* LIBC_SCCS and not lint */ - -/* Extern */ - -#include "port_before.h" - -#ifndef WANT_IRS_PW -static int __bind_irs_pw_unneeded; -#else - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "irp_p.h" - - -/* Types */ - -struct pvt { - struct irp_p *girpdata; /* global IRP data */ - int warned; - struct passwd passwd; /* password structure */ -}; - -/* Forward */ - -static void pw_close(struct irs_pw *); -static struct passwd * pw_next(struct irs_pw *); -static struct passwd * pw_byname(struct irs_pw *, const char *); -static struct passwd * pw_byuid(struct irs_pw *, uid_t); -static void pw_rewind(struct irs_pw *); -static void pw_minimize(struct irs_pw *); - -static void free_passwd(struct passwd *pw); - -/* Public */ -struct irs_pw * -irs_irp_pw(struct irs_acc *this) { - struct irs_pw *pw; - struct pvt *pvt; - - if (!(pw = memget(sizeof *pw))) { - errno = ENOMEM; - return (NULL); - } - memset(pw, 0, sizeof *pw); - - if (!(pvt = memget(sizeof *pvt))) { - memput(pw, sizeof *pw); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->girpdata = this->private; - - pw->private = pvt; - pw->close = pw_close; - pw->next = pw_next; - pw->byname = pw_byname; - pw->byuid = pw_byuid; - pw->rewind = pw_rewind; - pw->minimize = pw_minimize; - - return (pw); -} - -/* Methods */ - - - -/* - * void pw_close(struct irs_pw *this) - * - */ - -static void -pw_close(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - pw_minimize(this); - - free_passwd(&pvt->passwd); - - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - - - - -/* - * struct passwd * pw_next(struct irs_pw *this) - * - */ - -static struct passwd * -pw_next(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct passwd *pw = &pvt->passwd; - char *body; - size_t bodylen; - int code; - char text[256]; - - if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) { - return (NULL); - } - - if (irs_irp_send_command(pvt->girpdata, "getpwent") != 0) { - return (NULL); - } - - if (irs_irp_get_full_response(pvt->girpdata, &code, - text, sizeof text, - &body, &bodylen) != 0) { - return (NULL); - } - - if (code == IRPD_GETUSER_OK) { - free_passwd(pw); - if (irp_unmarshall_pw(pw, body) != 0) { - pw = NULL; - } - } else { - pw = NULL; - } - - if (body != NULL) { - memput(body, bodylen); - } - - return (pw); -} - - - - -/* - * struct passwd * pw_byname(struct irs_pw *this, const char *name) - * - */ - -static struct passwd * -pw_byname(struct irs_pw *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - struct passwd *pw = &pvt->passwd; - char *body = NULL; - char text[256]; - size_t bodylen; - int code; - - if (pw->pw_name != NULL && strcmp(name, pw->pw_name) == 0) { - return (pw); - } - - if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) { - return (NULL); - } - - if (irs_irp_send_command(pvt->girpdata, "getpwnam %s", name) != 0) { - return (NULL); - } - - if (irs_irp_get_full_response(pvt->girpdata, &code, - text, sizeof text, - &body, &bodylen) != 0) { - return (NULL); - } - - if (code == IRPD_GETUSER_OK) { - free_passwd(pw); - if (irp_unmarshall_pw(pw, body) != 0) { - pw = NULL; - } - } else { - pw = NULL; - } - - if (body != NULL) { - memput(body, bodylen); - } - - return (pw); -} - - - - -/* - * struct passwd * pw_byuid(struct irs_pw *this, uid_t uid) - * - */ - -static struct passwd * -pw_byuid(struct irs_pw *this, uid_t uid) { - struct pvt *pvt = (struct pvt *)this->private; - char *body; - char text[256]; - size_t bodylen; - int code; - struct passwd *pw = &pvt->passwd; - - if (pw->pw_name != NULL && pw->pw_uid == uid) { - return (pw); - } - - if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) { - return (NULL); - } - - if (irs_irp_send_command(pvt->girpdata, "getpwuid %d", uid) != 0) { - return (NULL); - } - - if (irs_irp_get_full_response(pvt->girpdata, &code, - text, sizeof text, - &body, &bodylen) != 0) { - return (NULL); - } - - if (code == IRPD_GETUSER_OK) { - free_passwd(pw); - if (irp_unmarshall_pw(pw, body) != 0) { - pw = NULL; - } - } else { - pw = NULL; - } - - if (body != NULL) { - memput(body, bodylen); - } - - return (pw); -} - - - - -/* - * void pw_rewind(struct irs_pw *this) - * - */ - -static void -pw_rewind(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - char text[256]; - int code; - - if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) { - return; - } - - if (irs_irp_send_command(pvt->girpdata, "setpwent") != 0) { - return; - } - - code = irs_irp_read_response(pvt->girpdata, text, sizeof text); - if (code != IRPD_GETUSER_SETOK) { - if (irp_log_errors) { - syslog(LOG_WARNING, "setpwent failed: %s", text); - } - } - - return; -} - - -/* - * void pw_minimize(struct irs_pw *this) - * - */ - -static void -pw_minimize(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - irs_irp_disconnect(pvt->girpdata); -} - - -/* Private. */ - - - -/* - * static void free_passwd(struct passwd *pw); - * - * Deallocate all the memory irp_unmarshall_pw allocated. - * - */ - -static void -free_passwd(struct passwd *pw) { - if (pw == NULL) - return; - - if (pw->pw_name != NULL) - free(pw->pw_name); - - if (pw->pw_passwd != NULL) - free(pw->pw_passwd); - -#ifdef HAVE_PW_CLASS - if (pw->pw_class != NULL) - free(pw->pw_class); -#endif - - if (pw->pw_gecos != NULL) - free(pw->pw_gecos); - - if (pw->pw_dir != NULL) - free(pw->pw_dir); - - if (pw->pw_shell != NULL) - free(pw->pw_shell); -} - -#endif /* WANT_IRS_PW */ diff --git a/src/kits/network/compat/libbind/irs/irs_data.c b/src/kits/network/compat/libbind/irs/irs_data.c index 97a7bcce90..22f70b19ac 100644 --- a/src/kits/network/compat/libbind/irs/irs_data.c +++ b/src/kits/network/compat/libbind/irs/irs_data.c @@ -52,8 +52,7 @@ extern int h_errno; extern struct __res_state _res; #ifdef DO_PTHREADS -static pthread_key_t key; -static int once = 0; +pthread_key_t gIRSInitKey; #else static struct net_data *net_data; #endif @@ -124,31 +123,21 @@ net_data_init(const char *conf_file) { #ifndef LIBBIND_MUTEX_INITIALIZER #define LIBBIND_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER #endif - static pthread_mutex_t keylock; struct net_data *net_data; - - if (!once) { - /* XXX: Haiku has non-constant mutex initializer! Must init here. */ - keylock = LIBBIND_MUTEX_INITIALIZER; - - pthread_mutex_lock(&keylock); - if (!once++) - key = tls_allocate(); - pthread_mutex_unlock(&keylock); - } - net_data = tls_get(key); + + net_data = tls_get(gIRSInitKey); #endif - + if (net_data == NULL) { net_data = net_data_create(conf_file); if (net_data == NULL) return (NULL); #ifdef DO_PTHREADS on_exit_thread(net_data_destroy, net_data); - tls_set(key, net_data); + tls_set(gIRSInitKey, net_data); #endif } - + return (net_data); } diff --git a/src/kits/network/compat/libbind/irs/lcl_gr.c b/src/kits/network/compat/libbind/irs/lcl_gr.c deleted file mode 100644 index c85e7d37fe..0000000000 --- a/src/kits/network/compat/libbind/irs/lcl_gr.c +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Copyright (c) 1989, 1993, 1995 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Portions 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -/* from getgrent.c 8.2 (Berkeley) 3/21/94"; */ -/* from BSDI Id: getgrent.c,v 2.8 1996/05/28 18:15:14 bostic Exp $ */ -#endif /* LIBC_SCCS and not lint */ - -/* extern */ - -#include "port_before.h" - -#ifndef WANT_IRS_PW -static int __bind_irs_gr_unneeded; -#else - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "irs_p.h" -#include "lcl_p.h" -#include "irp_p.h" - -#include "port_after.h" - - -/* Types. */ - -struct pvt { - FILE * fp; - /* - * Need space to store the entries read from the group file. - * The members list also needs space per member, and the - * strings making up the user names must be allocated - * somewhere. Rather than doing lots of small allocations, - * we keep one buffer and resize it as needed. - */ - struct group group; - size_t nmemb; /* Malloc'd max index of gr_mem[]. */ - char * membuf; - size_t membufsize; -}; - -/* Forward. */ - -static void gr_close(struct irs_gr *); -static struct group * gr_next(struct irs_gr *); -static struct group * gr_byname(struct irs_gr *, const char *); -static struct group * gr_bygid(struct irs_gr *, gid_t); -static void gr_rewind(struct irs_gr *); -static void gr_minimize(struct irs_gr *); - -static int grstart(struct pvt *); -static char * grnext(struct pvt *); -static struct group * grscan(struct irs_gr *, int, gid_t, const char *); - -/* Portability. */ - -#ifndef SEEK_SET -# define SEEK_SET 0 -#endif - -/* Public. */ - -struct irs_gr * -irs_lcl_gr(struct irs_acc *this) { - struct irs_gr *gr; - struct pvt *pvt; - - UNUSED(this); - - if (!(gr = memget(sizeof *gr))) { - errno = ENOMEM; - return (NULL); - } - memset(gr, 0x5e, sizeof *gr); - if (!(pvt = memget(sizeof *pvt))) { - memput(gr, sizeof *gr); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - gr->private = pvt; - gr->close = gr_close; - gr->next = gr_next; - gr->byname = gr_byname; - gr->bygid = gr_bygid; - gr->rewind = gr_rewind; - gr->list = make_group_list; - gr->minimize = gr_minimize; - gr->res_get = NULL; - gr->res_set = NULL; - return (gr); -} - -/* Methods. */ - -static void -gr_close(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->fp) - (void)fclose(pvt->fp); - if (pvt->group.gr_mem) - free(pvt->group.gr_mem); - if (pvt->membuf) - free(pvt->membuf); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct group * -gr_next(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (!pvt->fp && !grstart(pvt)) - return (NULL); - return (grscan(this, 0, 0, NULL)); -} - -static struct group * -gr_byname(struct irs_gr *this, const char *name) { - if (!grstart((struct pvt *)this->private)) - return (NULL); - return (grscan(this, 1, 0, name)); -} - -static struct group * -gr_bygid(struct irs_gr *this, gid_t gid) { - if (!grstart((struct pvt *)this->private)) - return (NULL); - return (grscan(this, 1, gid, NULL)); -} - -static void -gr_rewind(struct irs_gr *this) { - (void) grstart((struct pvt *)this->private); -} - -static void -gr_minimize(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->fp != NULL) { - (void)fclose(pvt->fp); - pvt->fp = NULL; - } -} - -/* Private. */ - -static int -grstart(struct pvt *pvt) { - if (pvt->fp) { - if (fseek(pvt->fp, 0L, SEEK_SET) == 0) - return (1); - (void)fclose(pvt->fp); - } - if (!(pvt->fp = fopen(_PATH_GROUP, "r"))) - return (0); - if (fcntl(fileno(pvt->fp), F_SETFD, 1) < 0) { - fclose(pvt->fp); - return (0); - } - return (1); -} - -#define INITIAL_NMEMB 30 /* about 120 bytes */ -#define INITIAL_BUFSIZ (INITIAL_NMEMB * 8) /* about 240 bytes */ - -static char * -grnext(struct pvt *pvt) { - char *w, *e; - int ch; - - /* Make sure we have a buffer. */ - if (pvt->membuf == NULL) { - pvt->membuf = malloc(INITIAL_BUFSIZ); - if (pvt->membuf == NULL) { - enomem: - errno = ENOMEM; - return (NULL); - } - pvt->membufsize = INITIAL_BUFSIZ; - } - - /* Read until EOF or EOL. */ - w = pvt->membuf; - e = pvt->membuf + pvt->membufsize; - while ((ch = fgetc(pvt->fp)) != EOF && ch != '\n') { - /* Make sure we have room for this character and a \0. */ - if (w + 1 == e) { - size_t o = w - pvt->membuf; - size_t n = pvt->membufsize * 2; - char *t = realloc(pvt->membuf, n); - - if (t == NULL) - goto enomem; - pvt->membuf = t; - pvt->membufsize = n; - w = pvt->membuf + o; - e = pvt->membuf + pvt->membufsize; - } - /* Store it. */ - *w++ = (char)ch; - } - - /* Hitting EOF on the first character really does mean EOF. */ - if (w == pvt->membuf && ch == EOF) { - errno = ENOENT; - return (NULL); - } - - /* Last line of /etc/group need not end with \n; we don't care. */ - *w = '\0'; - return (pvt->membuf); -} - -static struct group * -grscan(struct irs_gr *this, int search, gid_t gid, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - size_t n; - char *bp, **m, *p; - - /* Read lines until we find one that matches our search criteria. */ - for (;;) { - if ((bp = grnext(pvt)) == NULL) - return (NULL); - - /* Optimize the usual case of searching for a name. */ - pvt->group.gr_name = strsep(&bp, ":"); - if (search && name != NULL && - strcmp(pvt->group.gr_name, name) != 0) - continue; - if (bp == NULL || *bp == '\0') - goto corrupt; - - /* Skip past the password field. */ - pvt->group.gr_passwd = strsep(&bp, ":"); - if (bp == NULL || *bp == '\0') - goto corrupt; - - /* Checking for a gid. */ - if ((p = strsep(&bp, ":")) == NULL) - continue; - /* - * Unlike the tests above, the test below is supposed to be - * testing 'p' and not 'bp', in case you think it's a typo. - */ - if (p == NULL || *p == '\0') { - corrupt: - /* warning: corrupted %s file!", _PATH_GROUP */ - continue; - } - pvt->group.gr_gid = atoi(p); - if (search && name == NULL && (gid_t)pvt->group.gr_gid != gid) - continue; - - /* We want this record. */ - break; - } - - /* - * Count commas to find out how many members there might be. - * Note that commas separate, so if there is one comma there - * can be two members (group:*:id:user1,user2). Add another - * to account for the NULL terminator. As above, allocate - * largest of INITIAL_NMEMB, or 2*n. - */ - n = 1; - if (bp != NULL) - for (n = 2, p = bp; (p = strpbrk(p, ", ")) != NULL; ++n) - p += strspn(p, ", "); - if (n > pvt->nmemb || pvt->group.gr_mem == NULL) { - if ((n *= 2) < INITIAL_NMEMB) - n = INITIAL_NMEMB; - if ((m = realloc(pvt->group.gr_mem, n * sizeof *m)) == NULL) - return (NULL); - pvt->group.gr_mem = m; - pvt->nmemb = n; - } - - /* Set the name pointers. */ - for (m = pvt->group.gr_mem; (p = strsep(&bp, ", ")) != NULL;) - if (p[0] != '\0') - *m++ = p; - *m = NULL; - - return (&pvt->group); -} - -#endif /* WANT_IRS_GR */ diff --git a/src/kits/network/compat/libbind/irs/lcl_pw.c b/src/kits/network/compat/libbind/irs/lcl_pw.c deleted file mode 100644 index b2ac27889d..0000000000 --- a/src/kits/network/compat/libbind/irs/lcl_pw.c +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (c) 1989, 1993, 1995 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Portions 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif /* LIBC_SCCS and not lint */ - -/* Extern */ - -#include "port_before.h" - -#ifndef WANT_IRS_PW -static int __bind_irs_pw_unneeded; -#else - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "lcl_p.h" - -/* - * The lookup techniques and data extraction code here must be kept - * in sync with that in `pwd_mkdb'. - */ - - -/* Types */ - -struct pvt { - struct passwd passwd; /* password structure */ - DB *pw_db; /* password database */ - int pw_keynum; /* key counter */ - int warned; - u_int max; - char * line; -}; - -/* Forward */ - -static void pw_close(struct irs_pw *); -static struct passwd * pw_next(struct irs_pw *); -static struct passwd * pw_byname(struct irs_pw *, const char *); -static struct passwd * pw_byuid(struct irs_pw *, uid_t); -static void pw_rewind(struct irs_pw *); -static void pw_minimize(struct irs_pw *); - -static int initdb(struct pvt *); -static int hashpw(struct irs_pw *, DBT *); - -/* Public */ -struct irs_pw * -irs_lcl_pw(struct irs_acc *this) { - struct irs_pw *pw; - struct pvt *pvt; - - UNUSED(this); - - if (!(pw = memget(sizeof *pw))) { - errno = ENOMEM; - return (NULL); - } - memset(pw, 0x5e, sizeof *pw); - if (!(pvt = memget(sizeof *pvt))) { - free(pw); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pw->private = pvt; - pw->close = pw_close; - pw->next = pw_next; - pw->byname = pw_byname; - pw->byuid = pw_byuid; - pw->rewind = pw_rewind; - pw->minimize = pw_minimize; - pw->res_get = NULL; - pw->res_set = NULL; - return (pw); -} - -/* Methods */ - -static void -pw_close(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->pw_db) { - (void)(pvt->pw_db->close)(pvt->pw_db); - pvt->pw_db = NULL; - } - if (pvt->line) - memput(pvt->line, pvt->max); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct passwd * -pw_next(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - DBT key; - char bf[sizeof(pvt->pw_keynum) + 1]; - - if (!initdb(pvt)) - return (NULL); - - ++pvt->pw_keynum; - bf[0] = _PW_KEYBYNUM; - memcpy(bf + 1, (char *)&pvt->pw_keynum, sizeof(pvt->pw_keynum)); - key.data = (u_char *)bf; - key.size = sizeof(pvt->pw_keynum) + 1; - return (hashpw(this, &key) ? &pvt->passwd : NULL); -} - -static struct passwd * -pw_byname(struct irs_pw *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - DBT key; - int len, rval; - char bf[UT_NAMESIZE + 1]; - - if (!initdb(pvt)) - return (NULL); - - bf[0] = _PW_KEYBYNAME; - len = strlen(name); - memcpy(bf + 1, name, MIN(len, UT_NAMESIZE)); - key.data = (u_char *)bf; - key.size = len + 1; - rval = hashpw(this, &key); - - return (rval ? &pvt->passwd : NULL); -} - - -static struct passwd * -pw_byuid(struct irs_pw *this, uid_t uid) { - struct pvt *pvt = (struct pvt *)this->private; - DBT key; - int keyuid, rval; - char bf[sizeof(keyuid) + 1]; - - if (!initdb(pvt)) - return (NULL); - - bf[0] = _PW_KEYBYUID; - keyuid = uid; - memcpy(bf + 1, &keyuid, sizeof(keyuid)); - key.data = (u_char *)bf; - key.size = sizeof(keyuid) + 1; - rval = hashpw(this, &key); - - return (rval ? &pvt->passwd : NULL); -} - -static void -pw_rewind(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - pvt->pw_keynum = 0; -} - -static void -pw_minimize(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->pw_db != NULL) { - (void) (*pvt->pw_db->close)(pvt->pw_db); - pvt->pw_db = NULL; - } -} - -/* Private. */ - -static int -initdb(struct pvt *pvt) { - const char *p; - - if (pvt->pw_db) { - if (lseek((*pvt->pw_db->fd)(pvt->pw_db), 0L, SEEK_CUR) >= 0L) - return (1); - else - (void) (*pvt->pw_db->close)(pvt->pw_db); - } - pvt->pw_db = dbopen((p = _PATH_SMP_DB), O_RDONLY, 0, DB_HASH, NULL); - if (!pvt->pw_db) - pvt->pw_db = dbopen((p =_PATH_MP_DB), O_RDONLY, - 0, DB_HASH, NULL); - if (pvt->pw_db) - return (1); - if (!pvt->warned) { - syslog(LOG_ERR, "%s: %m", p); - pvt->warned++; - } - return (0); -} - -static int -hashpw(struct irs_pw *this, DBT *key) { - struct pvt *pvt = (struct pvt *)this->private; - char *p, *t, *l; - DBT data; - - if ((pvt->pw_db->get)(pvt->pw_db, key, &data, 0)) - return (0); - p = (char *)data.data; - if (data.size > pvt->max) { - size_t newlen = pvt->max + 1024; - char *p = memget(newlen); - if (p == NULL) { - return (0); - } - if (pvt->line != NULL) { - memcpy(p, pvt->line, pvt->max); - memput(pvt->line, pvt->max); - } - pvt->max = newlen; - pvt->line = p; - } - - /* THIS CODE MUST MATCH THAT IN pwd_mkdb. */ - t = pvt->line; - l = pvt->line + pvt->max; -#define EXPAND(e) if ((e = t) == NULL) return (0); else \ - do if (t >= l) return (0); while ((*t++ = *p++) != '\0') -#define SCALAR(v) if (t + sizeof v >= l) return (0); else \ - (memmove(&(v), p, sizeof v), p += sizeof v) - EXPAND(pvt->passwd.pw_name); - EXPAND(pvt->passwd.pw_passwd); - SCALAR(pvt->passwd.pw_uid); - SCALAR(pvt->passwd.pw_gid); - SCALAR(pvt->passwd.pw_change); - EXPAND(pvt->passwd.pw_class); - EXPAND(pvt->passwd.pw_gecos); - EXPAND(pvt->passwd.pw_dir); - EXPAND(pvt->passwd.pw_shell); - SCALAR(pvt->passwd.pw_expire); - return (1); -} - -#endif /* WANT_IRS_PW */ diff --git a/src/kits/network/compat/libbind/irs/nis_gr.c b/src/kits/network/compat/libbind/irs/nis_gr.c deleted file mode 100644 index 84320e0582..0000000000 --- a/src/kits/network/compat/libbind/irs/nis_gr.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Copyright (c) 1989, 1993, 1995 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Portions 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -/* from getgrent.c 8.2 (Berkeley) 3/21/94"; */ -/* from BSDI Id: getgrent.c,v 2.8 1996/05/28 18:15:14 bostic Exp $ */ -#endif /* LIBC_SCCS and not lint */ - -/* Imports */ - -#include "port_before.h" - -#if !defined(WANT_IRS_GR) || !defined(WANT_IRS_NIS) -static int __bind_irs_gr_unneeded; -#else - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "nis_p.h" - -/* Definitions */ - -struct pvt { - int needrewind; - char * nis_domain; - char * curkey_data; - int curkey_len; - char * curval_data; - int curval_len; - /* - * Need space to store the entries read from the group file. - * The members list also needs space per member, and the - * strings making up the user names must be allocated - * somewhere. Rather than doing lots of small allocations, - * we keep one buffer and resize it as needed. - */ - struct group group; - size_t nmemb; /* Malloc'd max index of gr_mem[]. */ - char * membuf; - size_t membufsize; -}; - -enum do_what { do_none = 0x0, do_key = 0x1, do_val = 0x2, do_all = 0x3 }; - -static /*const*/ char group_bygid[] = "group.bygid"; -static /*const*/ char group_byname[] = "group.byname"; - -/* Forward */ - -static void gr_close(struct irs_gr *); -static struct group * gr_next(struct irs_gr *); -static struct group * gr_byname(struct irs_gr *, const char *); -static struct group * gr_bygid(struct irs_gr *, gid_t); -static void gr_rewind(struct irs_gr *); -static void gr_minimize(struct irs_gr *); - -static struct group * makegroupent(struct irs_gr *); -static void nisfree(struct pvt *, enum do_what); - -/* Public */ - -struct irs_gr * -irs_nis_gr(struct irs_acc *this) { - struct irs_gr *gr; - struct pvt *pvt; - - if (!(gr = memget(sizeof *gr))) { - errno = ENOMEM; - return (NULL); - } - memset(gr, 0x5e, sizeof *gr); - if (!(pvt = memget(sizeof *pvt))) { - memput(gr, sizeof *gr); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->needrewind = 1; - pvt->nis_domain = ((struct nis_p *)this->private)->domain; - gr->private = pvt; - gr->close = gr_close; - gr->next = gr_next; - gr->byname = gr_byname; - gr->bygid = gr_bygid; - gr->rewind = gr_rewind; - gr->list = make_group_list; - gr->minimize = gr_minimize; - gr->res_get = NULL; - gr->res_set = NULL; - return (gr); -} - -/* Methods */ - -static void -gr_close(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->group.gr_mem) - free(pvt->group.gr_mem); - if (pvt->membuf) - free(pvt->membuf); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct group * -gr_next(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct group *rval; - int r; - - do { - if (pvt->needrewind) { - nisfree(pvt, do_all); - r = yp_first(pvt->nis_domain, group_byname, - &pvt->curkey_data, &pvt->curkey_len, - &pvt->curval_data, &pvt->curval_len); - pvt->needrewind = 0; - } else { - char *newkey_data; - int newkey_len; - - nisfree(pvt, do_val); - r = yp_next(pvt->nis_domain, group_byname, - pvt->curkey_data, pvt->curkey_len, - &newkey_data, &newkey_len, - &pvt->curval_data, &pvt->curval_len); - nisfree(pvt, do_key); - pvt->curkey_data = newkey_data; - pvt->curkey_len = newkey_len; - } - if (r != 0) { - errno = ENOENT; - return (NULL); - } - rval = makegroupent(this); - } while (rval == NULL); - return (rval); -} - -static struct group * -gr_byname(struct irs_gr *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - int r; - - nisfree(pvt, do_val); - r = yp_match(pvt->nis_domain, group_byname, name, strlen(name), - &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - errno = ENOENT; - return (NULL); - } - return (makegroupent(this)); -} - -static struct group * -gr_bygid(struct irs_gr *this, gid_t gid) { - struct pvt *pvt = (struct pvt *)this->private; - char tmp[sizeof "4294967295"]; - int r; - - nisfree(pvt, do_val); - (void) sprintf(tmp, "%u", (unsigned int)gid); - r = yp_match(pvt->nis_domain, group_bygid, tmp, strlen(tmp), - &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - errno = ENOENT; - return (NULL); - } - return (makegroupent(this)); -} - -static void -gr_rewind(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - pvt->needrewind = 1; -} - -static void -gr_minimize(struct irs_gr *this) { - UNUSED(this); - /* NOOP */ -} - -/* Private */ - -static struct group * -makegroupent(struct irs_gr *this) { - struct pvt *pvt = (struct pvt *)this->private; - unsigned int num_members = 0; - char *cp, **new; - u_long t; - - if (pvt->group.gr_mem) { - free(pvt->group.gr_mem); - pvt->group.gr_mem = NULL; - pvt->nmemb = 0; - } - if (pvt->membuf) - free(pvt->membuf); - pvt->membuf = pvt->curval_data; - pvt->curval_data = NULL; - - cp = pvt->membuf; - pvt->group.gr_name = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->group.gr_passwd = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - errno = 0; - t = strtoul(cp, NULL, 10); - if (errno == ERANGE) - goto cleanup; - pvt->group.gr_gid = (gid_t) t; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - cp++; - - if (*cp && cp[strlen(cp)-1] == '\n') - cp[strlen(cp)-1] = '\0'; - - /* - * Parse the members out. - */ - while (*cp) { - if (num_members+1 >= pvt->nmemb || pvt->group.gr_mem == NULL) { - pvt->nmemb += 10; - new = realloc(pvt->group.gr_mem, - pvt->nmemb * sizeof(char *)); - if (new == NULL) - goto cleanup; - pvt->group.gr_mem = new; - } - pvt->group.gr_mem[num_members++] = cp; - if (!(cp = strchr(cp, ','))) - break; - *cp++ = '\0'; - } - if (pvt->group.gr_mem == NULL) { - pvt->group.gr_mem = malloc(sizeof(char*)); - if (!pvt->group.gr_mem) - goto cleanup; - pvt->nmemb = 1; - } - pvt->group.gr_mem[num_members] = NULL; - - return (&pvt->group); - - cleanup: - if (pvt->group.gr_mem) { - free(pvt->group.gr_mem); - pvt->group.gr_mem = NULL; - pvt->nmemb = 0; - } - if (pvt->membuf) { - free(pvt->membuf); - pvt->membuf = NULL; - } - return (NULL); -} - -static void -nisfree(struct pvt *pvt, enum do_what do_what) { - if ((do_what & do_key) && pvt->curkey_data) { - free(pvt->curkey_data); - pvt->curkey_data = NULL; - } - if ((do_what & do_val) && pvt->curval_data) { - free(pvt->curval_data); - pvt->curval_data = NULL; - } -} - -#endif /* WANT_IRS_GR && WANT_IRS_NIS */ diff --git a/src/kits/network/compat/libbind/irs/nis_ho.c b/src/kits/network/compat/libbind/irs/nis_ho.c deleted file mode 100644 index 8dbc55f6e6..0000000000 --- a/src/kits/network/compat/libbind/irs/nis_ho.c +++ /dev/null @@ -1,533 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif /* LIBC_SCCS and not lint */ - -/* Imports */ - -#include "port_before.h" - -#ifndef WANT_IRS_NIS -static int __bind_irs_nis_unneeded; -#else - -#include -#include -#include -#include -#include -#include -#ifdef T_NULL -#undef T_NULL /* Silence re-definition warning of T_NULL. */ -#endif -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "nis_p.h" - -/* Definitions */ - -#define MAXALIASES 35 -#define MAXADDRS 35 - -#if PACKETSZ > 1024 -#define MAXPACKET PACKETSZ -#else -#define MAXPACKET 1024 -#endif - -struct pvt { - int needrewind; - char * nis_domain; - char * curkey_data; - int curkey_len; - char * curval_data; - int curval_len; - struct hostent host; - char * h_addr_ptrs[MAXADDRS + 1]; - char * host_aliases[MAXALIASES + 1]; - char hostbuf[8*1024]; - u_char host_addr[16]; /* IPv4 or IPv6 */ - struct __res_state *res; - void (*free_res)(void *); -}; - -enum do_what { do_none = 0x0, do_key = 0x1, do_val = 0x2, do_all = 0x3 }; - -static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff }; -static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 }; -static /*const*/ char hosts_byname[] = "hosts.byname"; -static /*const*/ char hosts_byaddr[] = "hosts.byaddr"; -static /*const*/ char ipnode_byname[] = "ipnode.byname"; -static /*const*/ char ipnode_byaddr[] = "ipnode.byaddr"; -static /*const*/ char yp_multi[] = "YP_MULTI_"; - -/* Forwards */ - -static void ho_close(struct irs_ho *this); -static struct hostent * ho_byname(struct irs_ho *this, const char *name); -static struct hostent * ho_byname2(struct irs_ho *this, const char *name, - int af); -static struct hostent * ho_byaddr(struct irs_ho *this, const void *addr, - int len, int af); -static struct hostent * ho_next(struct irs_ho *this); -static void ho_rewind(struct irs_ho *this); -static void ho_minimize(struct irs_ho *this); -static struct __res_state * ho_res_get(struct irs_ho *this); -static void ho_res_set(struct irs_ho *this, - struct __res_state *res, - void (*free_res)(void *)); -static struct addrinfo * ho_addrinfo(struct irs_ho *this, const char *name, - const struct addrinfo *pai); - -static struct hostent * makehostent(struct irs_ho *this); -static void nisfree(struct pvt *, enum do_what); -static int init(struct irs_ho *this); - -/* Public */ - -struct irs_ho * -irs_nis_ho(struct irs_acc *this) { - struct irs_ho *ho; - struct pvt *pvt; - - if (!(pvt = memget(sizeof *pvt))) { - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - if (!(ho = memget(sizeof *ho))) { - memput(pvt, sizeof *pvt); - errno = ENOMEM; - return (NULL); - } - memset(ho, 0x5e, sizeof *ho); - pvt->needrewind = 1; - pvt->nis_domain = ((struct nis_p *)this->private)->domain; - ho->private = pvt; - ho->close = ho_close; - ho->byname = ho_byname; - ho->byname2 = ho_byname2; - ho->byaddr = ho_byaddr; - ho->next = ho_next; - ho->rewind = ho_rewind; - ho->minimize = ho_minimize; - ho->res_set = ho_res_set; - ho->res_get = ho_res_get; - ho->addrinfo = ho_addrinfo; - return (ho); -} - -/* Methods */ - -static void -ho_close(struct irs_ho *this) { - struct pvt *pvt = (struct pvt *)this->private; - - ho_minimize(this); - nisfree(pvt, do_all); - if (pvt->res && pvt->free_res) - (*pvt->free_res)(pvt->res); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct hostent * -ho_byname(struct irs_ho *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - struct hostent *hp; - - if (init(this) == -1) - return (NULL); - - if (pvt->res->options & RES_USE_INET6) { - hp = ho_byname2(this, name, AF_INET6); - if (hp) - return (hp); - } - return (ho_byname2(this, name, AF_INET)); -} - -static struct hostent * -ho_byname2(struct irs_ho *this, const char *name, int af) { - struct pvt *pvt = (struct pvt *)this->private; - int r; - char *tmp; - - UNUSED(af); - - if (init(this) == -1) - return (NULL); - - nisfree(pvt, do_val); - - strcpy(pvt->hostbuf, yp_multi); - strncat(pvt->hostbuf, name, sizeof(pvt->hostbuf) - sizeof(yp_multi)); - pvt->hostbuf[sizeof(pvt->hostbuf) - 1] = '\0'; - for (r = sizeof(yp_multi) - 1; pvt->hostbuf[r] != '\0'; r++) - if (isupper((unsigned char)pvt->hostbuf[r])) - tolower(pvt->hostbuf[r]); - - tmp = pvt->hostbuf; - r = yp_match(pvt->nis_domain, ipnode_byname, tmp, - strlen(tmp), &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - tmp = pvt->hostbuf + sizeof(yp_multi) - 1; - r = yp_match(pvt->nis_domain, ipnode_byname, tmp, - strlen(tmp), &pvt->curval_data, &pvt->curval_len); - } - if (r != 0) { - tmp = pvt->hostbuf; - r = yp_match(pvt->nis_domain, hosts_byname, tmp, - strlen(tmp), &pvt->curval_data, &pvt->curval_len); - } - if (r != 0) { - tmp = pvt->hostbuf + sizeof(yp_multi) - 1; - r = yp_match(pvt->nis_domain, hosts_byname, tmp, - strlen(tmp), &pvt->curval_data, &pvt->curval_len); - } - if (r != 0) { - RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND); - return (NULL); - } - return (makehostent(this)); -} - -static struct hostent * -ho_byaddr(struct irs_ho *this, const void *addr, int len, int af) { - struct pvt *pvt = (struct pvt *)this->private; - char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"]; - const u_char *uaddr = addr; - int r; - - if (init(this) == -1) - return (NULL); - - if (af == AF_INET6 && len == IN6ADDRSZ && - (!memcmp(uaddr, mapped, sizeof mapped) || - !memcmp(uaddr, tunnelled, sizeof tunnelled))) { - /* Unmap. */ - addr = (const u_char *)addr + sizeof mapped; - uaddr += sizeof mapped; - af = AF_INET; - len = INADDRSZ; - } - if (inet_ntop(af, uaddr, tmp, sizeof tmp) == NULL) { - RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL); - return (NULL); - } - nisfree(pvt, do_val); - r = yp_match(pvt->nis_domain, ipnode_byaddr, tmp, strlen(tmp), - &pvt->curval_data, &pvt->curval_len); - if (r != 0) - r = yp_match(pvt->nis_domain, hosts_byaddr, tmp, strlen(tmp), - &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND); - return (NULL); - } - return (makehostent(this)); -} - -static struct hostent * -ho_next(struct irs_ho *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct hostent *rval; - int r; - - if (init(this) == -1) - return (NULL); - - do { - if (pvt->needrewind) { - nisfree(pvt, do_all); - r = yp_first(pvt->nis_domain, hosts_byaddr, - &pvt->curkey_data, &pvt->curkey_len, - &pvt->curval_data, &pvt->curval_len); - pvt->needrewind = 0; - } else { - char *newkey_data; - int newkey_len; - - nisfree(pvt, do_val); - r = yp_next(pvt->nis_domain, hosts_byaddr, - pvt->curkey_data, pvt->curkey_len, - &newkey_data, &newkey_len, - &pvt->curval_data, &pvt->curval_len); - nisfree(pvt, do_key); - pvt->curkey_data = newkey_data; - pvt->curkey_len = newkey_len; - } - if (r != 0) { - RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND); - return (NULL); - } - rval = makehostent(this); - } while (rval == NULL); - return (rval); -} - -static void -ho_rewind(struct irs_ho *this) { - struct pvt *pvt = (struct pvt *)this->private; - - pvt->needrewind = 1; -} - -static void -ho_minimize(struct irs_ho *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->res) - res_nclose(pvt->res); -} - -static struct __res_state * -ho_res_get(struct irs_ho *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (!pvt->res) { - struct __res_state *res; - res = (struct __res_state *)malloc(sizeof *res); - if (!res) { - errno = ENOMEM; - return (NULL); - } - memset(res, 0, sizeof *res); - ho_res_set(this, res, free); - } - - return (pvt->res); -} - -static void -ho_res_set(struct irs_ho *this, struct __res_state *res, - void (*free_res)(void *)) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->res && pvt->free_res) { - res_nclose(pvt->res); - (*pvt->free_res)(pvt->res); - } - - pvt->res = res; - pvt->free_res = free_res; -} - -struct nis_res_target { - struct nis_res_target *next; - int family; -}; - -/* XXX */ -extern struct addrinfo *hostent2addrinfo __P((struct hostent *, - const struct addrinfo *pai)); - -static struct addrinfo * -ho_addrinfo(struct irs_ho *this, const char *name, const struct addrinfo *pai) -{ - struct pvt *pvt = (struct pvt *)this->private; - struct hostent *hp; - struct nis_res_target q, q2, *p; - struct addrinfo sentinel, *cur; - - memset(&q, 0, sizeof(q2)); - memset(&q2, 0, sizeof(q2)); - memset(&sentinel, 0, sizeof(sentinel)); - cur = &sentinel; - - switch(pai->ai_family) { - case AF_UNSPEC: /* INET6 then INET4 */ - q.family = AF_INET6; - q.next = &q2; - q2.family = AF_INET; - break; - case AF_INET6: - q.family = AF_INET6; - break; - case AF_INET: - q.family = AF_INET; - break; - default: - RES_SET_H_ERRNO(pvt->res, NO_RECOVERY); /* ??? */ - return(NULL); - } - - for (p = &q; p; p = p->next) { - struct addrinfo *ai; - - hp = (*this->byname2)(this, name, p->family); - if (hp == NULL) { - /* byname2 should've set an appropriate error */ - continue; - } - if ((hp->h_name == NULL) || (hp->h_name[0] == 0) || - (hp->h_addr_list[0] == NULL)) { - RES_SET_H_ERRNO(pvt->res, NO_RECOVERY); - continue; - } - ai = hostent2addrinfo(hp, pai); - if (ai) { - cur->ai_next = ai; - while (cur && cur->ai_next) - cur = cur->ai_next; - } - } - - if (sentinel.ai_next == NULL) - RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND); - - return(sentinel.ai_next); -} - -/* Private */ - -/* -ipnodes: -::1 localhost -127.0.0.1 localhost -1.2.3.4 FOO bar -1.2.6.4 FOO bar -1.2.6.5 host - -ipnodes.byname: -YP_MULTI_localhost ::1,127.0.0.1 localhost -YP_MULTI_foo 1.2.3.4,1.2.6.4 FOO bar -YP_MULTI_bar 1.2.3.4,1.2.6.4 FOO bar -host 1.2.6.5 host - -hosts.byname: -localhost 127.0.0.1 localhost -host 1.2.6.5 host -YP_MULTI_foo 1.2.3.4,1.2.6.4 FOO bar -YP_MULTI_bar 1.2.3.4,1.2.6.4 FOO bar -*/ - -static struct hostent * -makehostent(struct irs_ho *this) { - struct pvt *pvt = (struct pvt *)this->private; - static const char spaces[] = " \t"; - char *cp, **q, *p, *comma, *ap; - int af = 0, len = 0; - int multi = 0; - int addr = 0; - - p = pvt->curval_data; - if ((cp = strpbrk(p, "#\n")) != NULL) - *cp = '\0'; - if (!(cp = strpbrk(p, spaces))) - return (NULL); - *cp++ = '\0'; - ap = pvt->hostbuf; - do { - if ((comma = strchr(p, ',')) != NULL) { - *comma++ = '\0'; - multi = 1; - } - if ((ap + IN6ADDRSZ) > (pvt->hostbuf + sizeof(pvt->hostbuf))) - break; - if ((pvt->res->options & RES_USE_INET6) && - inet_pton(AF_INET6, p, ap) > 0) { - af = AF_INET6; - len = IN6ADDRSZ; - } else if (inet_pton(AF_INET, p, pvt->host_addr) > 0) { - if (pvt->res->options & RES_USE_INET6) { - map_v4v6_address((char*)pvt->host_addr, ap); - af = AF_INET6; - len = IN6ADDRSZ; - } else { - af = AF_INET; - len = INADDRSZ; - } - } else { - if (!multi) - return (NULL); - continue; - } - if (addr < MAXADDRS) { - pvt->h_addr_ptrs[addr++] = ap; - pvt->h_addr_ptrs[addr] = NULL; - ap += len; - } - } while ((p = comma) != NULL); - if (ap == pvt->hostbuf) - return (NULL); - pvt->host.h_addr_list = pvt->h_addr_ptrs; - pvt->host.h_length = len; - pvt->host.h_addrtype = af; - cp += strspn(cp, spaces); - pvt->host.h_name = cp; - q = pvt->host.h_aliases = pvt->host_aliases; - if ((cp = strpbrk(cp, spaces)) != NULL) - *cp++ = '\0'; - while (cp && *cp) { - if (*cp == ' ' || *cp == '\t') { - cp++; - continue; - } - if (q < &pvt->host_aliases[MAXALIASES]) - *q++ = cp; - if ((cp = strpbrk(cp, spaces)) != NULL) - *cp++ = '\0'; - } - *q = NULL; - RES_SET_H_ERRNO(pvt->res, NETDB_SUCCESS); - return (&pvt->host); -} - -static void -nisfree(struct pvt *pvt, enum do_what do_what) { - if ((do_what & do_key) && pvt->curkey_data) { - free(pvt->curkey_data); - pvt->curkey_data = NULL; - } - if ((do_what & do_val) && pvt->curval_data) { - free(pvt->curval_data); - pvt->curval_data = NULL; - } -} - -static int -init(struct irs_ho *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (!pvt->res && !ho_res_get(this)) - return (-1); - if (((pvt->res->options & RES_INIT) == 0) && - res_ninit(pvt->res) == -1) - return (-1); - return (0); -} -#endif /*WANT_IRS_NIS*/ diff --git a/src/kits/network/compat/libbind/irs/nis_ng.c b/src/kits/network/compat/libbind/irs/nis_ng.c deleted file mode 100644 index 5b7cef2b36..0000000000 --- a/src/kits/network/compat/libbind/irs/nis_ng.c +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif - -/* Imports */ - -#include "port_before.h" - -#ifndef WANT_IRS_NIS -static int __bind_irs_nis_unneeded; -#else - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#ifdef T_NULL -#undef T_NULL /* Silence re-definition warning of T_NULL. */ -#endif -#include -#include - -#include -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "nis_p.h" - -/* Definitions */ - -struct tmpgrp { - const char * name; - const char * host; - const char * user; - const char * domain; - struct tmpgrp * next; -}; - -struct pvt { - char * nis_domain; - struct tmpgrp * tmp; - struct tmpgrp * cur; - char * tmpgroup; -}; - -enum do_what { do_none = 0x0, do_key = 0x1, do_val = 0x2, do_all = 0x3 }; - -static /*const*/ char netgroup_map[] = "netgroup"; - -/* Forward */ - -static void ng_close(struct irs_ng *); -static int ng_next(struct irs_ng *, const char **, - const char **, const char **); -static int ng_test(struct irs_ng *, - const char *, const char *, - const char *, const char *); -static void ng_rewind(struct irs_ng *, const char *); -static void ng_minimize(struct irs_ng *); - -static void add_group_to_list(struct pvt *, const char *, int); -static void add_tuple_to_list(struct pvt *, const char *, char *); -static void tmpfree(struct pvt *); - -/* Public */ - -struct irs_ng * -irs_nis_ng(struct irs_acc *this) { - struct irs_ng *ng; - struct pvt *pvt; - - if (!(ng = memget(sizeof *ng))) { - errno = ENOMEM; - return (NULL); - } - memset(ng, 0x5e, sizeof *ng); - if (!(pvt = memget(sizeof *pvt))) { - memput(ng, sizeof *ng); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->nis_domain = ((struct nis_p *)this->private)->domain; - ng->private = pvt; - ng->close = ng_close; - ng->next = ng_next; - ng->test = ng_test; - ng->rewind = ng_rewind; - ng->minimize = ng_minimize; - return (ng); -} - -/* Methods */ - -static void -ng_close(struct irs_ng *this) { - struct pvt *pvt = (struct pvt *)this->private; - - tmpfree(pvt); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static int -ng_next(struct irs_ng *this, const char **host, const char **user, const char **domain) { - struct pvt *pvt = (struct pvt *)this->private; - - if (!pvt->cur) - return (0); - *host = pvt->cur->host; - *user = pvt->cur->user; - *domain = pvt->cur->domain; - pvt->cur = pvt->cur->next; - return (1); -} - -static int -ng_test(struct irs_ng *this, const char *name, - const char *host, const char *user, const char *domain) -{ - struct pvt *pvt = (struct pvt *)this->private; - struct tmpgrp *cur; - - tmpfree(pvt); - add_group_to_list(pvt, name, strlen(name)); - for (cur = pvt->tmp; cur; cur = cur->next) { - if ((!host || !cur->host || !strcmp(host, cur->host)) && - (!user || !cur->user || !strcmp(user, cur->user)) && - (!domain || !cur->domain || !strcmp(domain, cur->domain))) - break; - } - tmpfree(pvt); - return ((cur == NULL) ? 0 : 1); -} - -static void -ng_rewind(struct irs_ng *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - - /* Either hand back or free the existing list. */ - if (pvt->tmpgroup) { - if (pvt->tmp && !strcmp(pvt->tmpgroup, name)) - goto reset; - tmpfree(pvt); - } - pvt->tmpgroup = strdup(name); - add_group_to_list(pvt, name, strlen(name)); - reset: - pvt->cur = pvt->tmp; -} - -static void -ng_minimize(struct irs_ng *this) { - UNUSED(this); - /* NOOP */ -} - -/* Private */ - -static void -add_group_to_list(struct pvt *pvt, const char *name, int len) { - char *vdata, *cp, *np; - struct tmpgrp *tmp; - int vlen, r; - char *nametmp; - - /* Don't add the same group to the list more than once. */ - for (tmp = pvt->tmp; tmp; tmp = tmp->next) - if (!strcmp(tmp->name, name)) - return; - - DE_CONST(name, nametmp); - r = yp_match(pvt->nis_domain, netgroup_map, nametmp, len, - &vdata, &vlen); - if (r == 0) { - cp = vdata; - if (*cp && cp[strlen(cp)-1] == '\n') - cp[strlen(cp)-1] = '\0'; - for ( ; cp; cp = np) { - np = strchr(cp, ' '); - if (np) - *np++ = '\0'; - if (*cp == '(') - add_tuple_to_list(pvt, name, cp); - else - add_group_to_list(pvt, cp, strlen(cp)); - } - free(vdata); - } -} - -static void -add_tuple_to_list(struct pvt *pvt, const char *name, char *cp) { - struct tmpgrp *tmp; - char *tp, *np; - - INSIST(*cp++ == '('); - - tmp = malloc(sizeof *tmp + strlen(name) + sizeof '\0' + - strlen(cp) - sizeof ')'); - if (!tmp) - return; - memset(tmp, 0, sizeof *tmp); - tp = ((char *)tmp) + sizeof *tmp; - - /* Name */ - strcpy(tp, name); - tmp->name = tp; - tp += strlen(tp) + 1; - - /* Host */ - if (!(np = strchr(cp, ','))) - goto cleanup; - *np++ = '\0'; - strcpy(tp, cp); - tmp->host = tp; - tp += strlen(tp) + 1; - cp = np; - - /* User */ - if (!(np = strchr(cp, ','))) - goto cleanup; - *np++ = '\0'; - strcpy(tp, cp); - tmp->user = tp; - tp += strlen(tp) + 1; - cp = np; - - /* Domain */ - if (!(np = strchr(cp, ')'))) - goto cleanup; - *np++ = '\0'; - strcpy(tp, cp); - tmp->domain = tp; - - /* - * Empty string in file means wildcard, but - * NULL string in return value means wildcard. - */ - if (!*tmp->host) - tmp->host = NULL; - if (!*tmp->user) - tmp->user = NULL; - if (!*tmp->domain) - tmp->domain = NULL; - - /* Add to list (LIFO). */ - tmp->next = pvt->tmp; - pvt->tmp = tmp; - return; - - cleanup: - free(tmp); -} - -static void -tmpfree(struct pvt *pvt) { - struct tmpgrp *cur, *next; - - if (pvt->tmpgroup) { - free(pvt->tmpgroup); - pvt->tmpgroup = NULL; - } - for (cur = pvt->tmp; cur; cur = next) { - next = cur->next; - free(cur); - } - pvt->tmp = NULL; -} - -#endif /*WANT_IRS_NIS*/ diff --git a/src/kits/network/compat/libbind/irs/nis_nw.c b/src/kits/network/compat/libbind/irs/nis_nw.c deleted file mode 100644 index dd8a57b31b..0000000000 --- a/src/kits/network/compat/libbind/irs/nis_nw.c +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif /* LIBC_SCCS and not lint */ - -/* Imports */ - -#include "port_before.h" - -#ifndef WANT_IRS_NIS -static int __bind_irs_nis_unneeded; -#else - -#include -#include - -#include -#include -#include -#ifdef T_NULL -#undef T_NULL /* Silence re-definition warning of T_NULL. */ -#endif -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "nis_p.h" - -/* Definitions */ - -#define MAXALIASES 35 -#define MAXADDRSIZE 4 - -struct pvt { - int needrewind; - char * nis_domain; - char * curkey_data; - int curkey_len; - char * curval_data; - int curval_len; - - struct nwent nwent; - char * nwbuf; - - char * aliases[MAXALIASES + 1]; - u_char addr[MAXADDRSIZE]; - - struct __res_state * res; - void (*free_res)(void *); -}; - -enum do_what { do_none = 0x0, do_key = 0x1, do_val = 0x2, do_all = 0x3 }; - -static /*const*/ char networks_byname[] = "networks.byname"; -static /*const*/ char networks_byaddr[] = "networks.byaddr"; - -/* Forward */ - -static void nw_close(struct irs_nw *); -static struct nwent * nw_byname(struct irs_nw *, const char *, int); -static struct nwent * nw_byaddr(struct irs_nw *, void *, int, int); -static struct nwent * nw_next(struct irs_nw *); -static void nw_rewind(struct irs_nw *); -static void nw_minimize(struct irs_nw *); -static struct __res_state * nw_res_get(struct irs_nw *this); -static void nw_res_set(struct irs_nw *this, - struct __res_state *res, - void (*free_res)(void *)); - -static struct nwent * makenwent(struct irs_nw *this); -static void nisfree(struct pvt *, enum do_what); -static int init(struct irs_nw *this); - -/* Public */ - -struct irs_nw * -irs_nis_nw(struct irs_acc *this) { - struct irs_nw *nw; - struct pvt *pvt; - - if (!(pvt = memget(sizeof *pvt))) { - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - if (!(nw = memget(sizeof *nw))) { - memput(pvt, sizeof *pvt); - errno = ENOMEM; - return (NULL); - } - memset(nw, 0x5e, sizeof *nw); - pvt->needrewind = 1; - pvt->nis_domain = ((struct nis_p *)this->private)->domain; - nw->private = pvt; - nw->close = nw_close; - nw->byname = nw_byname; - nw->byaddr = nw_byaddr; - nw->next = nw_next; - nw->rewind = nw_rewind; - nw->minimize = nw_minimize; - nw->res_get = nw_res_get; - nw->res_set = nw_res_set; - return (nw); -} - -/* Methods */ - -static void -nw_close(struct irs_nw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - nw_minimize(this); - if (pvt->res && pvt->free_res) - (*pvt->free_res)(pvt->res); - if (pvt->nwbuf) - free(pvt->nwbuf); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct nwent * -nw_byaddr(struct irs_nw *this, void *net, int length, int af) { - struct pvt *pvt = (struct pvt *)this->private; - char tmp[sizeof "255.255.255.255/32"], *t; - int r; - - if (init(this) == -1) - return (NULL); - - if (af != AF_INET) { - RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL); - errno = EAFNOSUPPORT; - return (NULL); - } - nisfree(pvt, do_val); - /* Try it with /CIDR first. */ - if (inet_net_ntop(AF_INET, net, length, tmp, sizeof tmp) == NULL) { - RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL); - return (NULL); - } - r = yp_match(pvt->nis_domain, networks_byaddr, tmp, strlen(tmp), - &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - /* Give it a shot without the /CIDR. */ - if ((t = strchr(tmp, '/')) != NULL) { - *t = '\0'; - r = yp_match(pvt->nis_domain, networks_byaddr, - tmp, strlen(tmp), - &pvt->curval_data, &pvt->curval_len); - } - if (r != 0) { - RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND); - return (NULL); - } - } - return (makenwent(this)); -} - -static struct nwent * -nw_byname(struct irs_nw *this, const char *name, int af) { - struct pvt *pvt = (struct pvt *)this->private; - int r; - char *tmp; - - if (init(this) == -1) - return (NULL); - - if (af != AF_INET) { - RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL); - errno = EAFNOSUPPORT; - return (NULL); - } - nisfree(pvt, do_val); - DE_CONST(name, tmp); - r = yp_match(pvt->nis_domain, networks_byname, tmp, - strlen(tmp), &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND); - return (NULL); - } - return (makenwent(this)); -} - -static void -nw_rewind(struct irs_nw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - pvt->needrewind = 1; -} - -static struct nwent * -nw_next(struct irs_nw *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct nwent *rval; - int r; - - if (init(this) == -1) - return (NULL); - - do { - if (pvt->needrewind) { - nisfree(pvt, do_all); - r = yp_first(pvt->nis_domain, networks_byaddr, - &pvt->curkey_data, &pvt->curkey_len, - &pvt->curval_data, &pvt->curval_len); - pvt->needrewind = 0; - } else { - char *newkey_data; - int newkey_len; - - nisfree(pvt, do_val); - r = yp_next(pvt->nis_domain, networks_byaddr, - pvt->curkey_data, pvt->curkey_len, - &newkey_data, &newkey_len, - &pvt->curval_data, &pvt->curval_len); - nisfree(pvt, do_key); - pvt->curkey_data = newkey_data; - pvt->curkey_len = newkey_len; - } - if (r != 0) { - RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND); - return (NULL); - } - rval = makenwent(this); - } while (rval == NULL); - return (rval); -} - -static void -nw_minimize(struct irs_nw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->res) - res_nclose(pvt->res); -} - -static struct __res_state * -nw_res_get(struct irs_nw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (!pvt->res) { - struct __res_state *res; - res = (struct __res_state *)malloc(sizeof *res); - if (!res) { - errno = ENOMEM; - return (NULL); - } - memset(res, 0, sizeof *res); - nw_res_set(this, res, free); - } - - return (pvt->res); -} - -static void -nw_res_set(struct irs_nw *this, struct __res_state *res, - void (*free_res)(void *)) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->res && pvt->free_res) { - res_nclose(pvt->res); - (*pvt->free_res)(pvt->res); - } - - pvt->res = res; - pvt->free_res = free_res; -} - -/* Private */ - -static struct nwent * -makenwent(struct irs_nw *this) { - struct pvt *pvt = (struct pvt *)this->private; - static const char spaces[] = " \t"; - char *t, *cp, **ap; - - if (pvt->nwbuf) - free(pvt->nwbuf); - pvt->nwbuf = pvt->curval_data; - pvt->curval_data = NULL; - - if ((cp = strpbrk(pvt->nwbuf, "#\n")) != NULL) - *cp = '\0'; - cp = pvt->nwbuf; - - /* Name */ - pvt->nwent.n_name = cp; - cp += strcspn(cp, spaces); - if (!*cp) - goto cleanup; - *cp++ = '\0'; - cp += strspn(cp, spaces); - - /* Network */ - pvt->nwent.n_addrtype = AF_INET; - t = cp + strcspn(cp, spaces); - if (*t) - *t++ = '\0'; - pvt->nwent.n_length = inet_net_pton(AF_INET, cp, - pvt->addr, sizeof pvt->addr); - if (pvt->nwent.n_length < 0) - goto cleanup; - pvt->nwent.n_addr = pvt->addr; - cp = t; - - /* Aliases */ - ap = pvt->nwent.n_aliases = pvt->aliases; - while (*cp) { - if (ap >= &pvt->aliases[MAXALIASES]) - break; - *ap++ = cp; - cp += strcspn(cp, spaces); - if (!*cp) - break; - *cp++ = '\0'; - cp += strspn(cp, spaces); - } - *ap = NULL; - - return (&pvt->nwent); - - cleanup: - if (pvt->nwbuf) { - free(pvt->nwbuf); - pvt->nwbuf = NULL; - } - return (NULL); -} - -static void -nisfree(struct pvt *pvt, enum do_what do_what) { - if ((do_what & do_key) && pvt->curkey_data) { - free(pvt->curkey_data); - pvt->curkey_data = NULL; - } - if ((do_what & do_val) && pvt->curval_data) { - free(pvt->curval_data); - pvt->curval_data = NULL; - } -} - -static int -init(struct irs_nw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (!pvt->res && !nw_res_get(this)) - return (-1); - if (((pvt->res->options & RES_INIT) == 0) && - res_ninit(pvt->res) == -1) - return (-1); - return (0); -} - -#endif /*WANT_IRS_NIS*/ diff --git a/src/kits/network/compat/libbind/irs/nis_pr.c b/src/kits/network/compat/libbind/irs/nis_pr.c deleted file mode 100644 index 4f12969f92..0000000000 --- a/src/kits/network/compat/libbind/irs/nis_pr.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif - -/* Imports */ - -#include "port_before.h" - -#ifndef WANT_IRS_NIS -static int __bind_irs_nis_unneeded; -#else - -#include -#include -#include -#include -#ifdef T_NULL -#undef T_NULL /* Silence re-definition warning of T_NULL. */ -#endif -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "nis_p.h" - -/* Definitions */ - -struct pvt { - int needrewind; - char * nis_domain; - char * curkey_data; - int curkey_len; - char * curval_data; - int curval_len; - struct protoent proto; - char * prbuf; -}; - -enum do_what { do_none = 0x0, do_key = 0x1, do_val = 0x2, do_all = 0x3 }; - -static /*const*/ char protocols_byname[] = "protocols.byname"; -static /*const*/ char protocols_bynumber[] = "protocols.bynumber"; - -/* Forward */ - -static void pr_close(struct irs_pr *); -static struct protoent * pr_byname(struct irs_pr *, const char *); -static struct protoent * pr_bynumber(struct irs_pr *, int); -static struct protoent * pr_next(struct irs_pr *); -static void pr_rewind(struct irs_pr *); -static void pr_minimize(struct irs_pr *); - -static struct protoent * makeprotoent(struct irs_pr *this); -static void nisfree(struct pvt *, enum do_what); - -/* Public */ - -struct irs_pr * -irs_nis_pr(struct irs_acc *this) { - struct irs_pr *pr; - struct pvt *pvt; - - if (!(pr = memget(sizeof *pr))) { - errno = ENOMEM; - return (NULL); - } - memset(pr, 0x5e, sizeof *pr); - if (!(pvt = memget(sizeof *pvt))) { - memput(pr, sizeof *pr); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->needrewind = 1; - pvt->nis_domain = ((struct nis_p *)this->private)->domain; - pr->private = pvt; - pr->byname = pr_byname; - pr->bynumber = pr_bynumber; - pr->next = pr_next; - pr->rewind = pr_rewind; - pr->close = pr_close; - pr->minimize = pr_minimize; - pr->res_get = NULL; - pr->res_set = NULL; - return (pr); -} - -/* Methods. */ - -static void -pr_close(struct irs_pr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - nisfree(pvt, do_all); - if (pvt->proto.p_aliases) - free(pvt->proto.p_aliases); - if (pvt->prbuf) - free(pvt->prbuf); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct protoent * -pr_byname(struct irs_pr *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - int r; - char *tmp; - - nisfree(pvt, do_val); - DE_CONST(name, tmp); - r = yp_match(pvt->nis_domain, protocols_byname, tmp, - strlen(tmp), &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - errno = ENOENT; - return (NULL); - } - return (makeprotoent(this)); -} - -static struct protoent * -pr_bynumber(struct irs_pr *this, int num) { - struct pvt *pvt = (struct pvt *)this->private; - char tmp[sizeof "-4294967295"]; - int r; - - nisfree(pvt, do_val); - (void) sprintf(tmp, "%d", num); - r = yp_match(pvt->nis_domain, protocols_bynumber, tmp, strlen(tmp), - &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - errno = ENOENT; - return (NULL); - } - return (makeprotoent(this)); -} - -static struct protoent * -pr_next(struct irs_pr *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct protoent *rval; - int r; - - do { - if (pvt->needrewind) { - nisfree(pvt, do_all); - r = yp_first(pvt->nis_domain, protocols_bynumber, - &pvt->curkey_data, &pvt->curkey_len, - &pvt->curval_data, &pvt->curval_len); - pvt->needrewind = 0; - } else { - char *newkey_data; - int newkey_len; - - nisfree(pvt, do_val); - r = yp_next(pvt->nis_domain, protocols_bynumber, - pvt->curkey_data, pvt->curkey_len, - &newkey_data, &newkey_len, - &pvt->curval_data, &pvt->curval_len); - nisfree(pvt, do_key); - pvt->curkey_data = newkey_data; - pvt->curkey_len = newkey_len; - } - if (r != 0) { - errno = ENOENT; - return (NULL); - } - rval = makeprotoent(this); - } while (rval == NULL); - return (rval); -} - -static void -pr_rewind(struct irs_pr *this) { - struct pvt *pvt = (struct pvt *)this->private; - - pvt->needrewind = 1; -} - -static void -pr_minimize(struct irs_pr *this) { - UNUSED(this); - /* NOOP */ -} - -/* Private */ - -static struct protoent * -makeprotoent(struct irs_pr *this) { - struct pvt *pvt = (struct pvt *)this->private; - char *p, **t; - int n, m; - - if (pvt->prbuf) - free(pvt->prbuf); - pvt->prbuf = pvt->curval_data; - pvt->curval_data = NULL; - - for (p = pvt->prbuf; *p && *p != '#';) - p++; - while (p > pvt->prbuf && isspace((unsigned char)(p[-1]))) - p--; - *p = '\0'; - - p = pvt->prbuf; - n = m = 0; - - pvt->proto.p_name = p; - while (*p && !isspace((unsigned char)*p)) - p++; - if (!*p) - return (NULL); - *p++ = '\0'; - - while (*p && isspace((unsigned char)*p)) - p++; - pvt->proto.p_proto = atoi(p); - while (*p && !isspace((unsigned char)*p)) - p++; - *p++ = '\0'; - - while (*p) { - if ((n + 1) >= m || !pvt->proto.p_aliases) { - m += 10; - t = realloc(pvt->proto.p_aliases, - m * sizeof(char *)); - if (!t) { - errno = ENOMEM; - goto cleanup; - } - pvt->proto.p_aliases = t; - } - pvt->proto.p_aliases[n++] = p; - while (*p && !isspace((unsigned char)*p)) - p++; - if (*p) - *p++ = '\0'; - } - if (!pvt->proto.p_aliases) - pvt->proto.p_aliases = malloc(sizeof(char *)); - if (!pvt->proto.p_aliases) - goto cleanup; - pvt->proto.p_aliases[n] = NULL; - return (&pvt->proto); - - cleanup: - if (pvt->proto.p_aliases) { - free(pvt->proto.p_aliases); - pvt->proto.p_aliases = NULL; - } - if (pvt->prbuf) { - free(pvt->prbuf); - pvt->prbuf = NULL; - } - return (NULL); -} - -static void -nisfree(struct pvt *pvt, enum do_what do_what) { - if ((do_what & do_key) && pvt->curkey_data) { - free(pvt->curkey_data); - pvt->curkey_data = NULL; - } - if ((do_what & do_val) && pvt->curval_data) { - free(pvt->curval_data); - pvt->curval_data = NULL; - } -} - -#endif /*WANT_IRS_NIS*/ diff --git a/src/kits/network/compat/libbind/irs/nis_pw.c b/src/kits/network/compat/libbind/irs/nis_pw.c deleted file mode 100644 index 88a364a6b4..0000000000 --- a/src/kits/network/compat/libbind/irs/nis_pw.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif /* LIBC_SCCS and not lint */ - -/* Imports */ - -#include "port_before.h" - -#if !defined(WANT_IRS_PW) || !defined(WANT_IRS_NIS) -static int __bind_irs_pw_unneeded; -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "nis_p.h" - -/* Definitions */ - -struct pvt { - int needrewind; - char * nis_domain; - char * curkey_data; - int curkey_len; - char * curval_data; - int curval_len; - struct passwd passwd; - char * pwbuf; -}; - -enum do_what { do_none = 0x0, do_key = 0x1, do_val = 0x2, do_all = 0x3 }; - -static /*const*/ char passwd_byname[] = "passwd.byname"; -static /*const*/ char passwd_byuid[] = "passwd.byuid"; - -/* Forward */ - -static void pw_close(struct irs_pw *); -static struct passwd * pw_next(struct irs_pw *); -static struct passwd * pw_byname(struct irs_pw *, const char *); -static struct passwd * pw_byuid(struct irs_pw *, uid_t); -static void pw_rewind(struct irs_pw *); -static void pw_minimize(struct irs_pw *); - -static struct passwd * makepasswdent(struct irs_pw *); -static void nisfree(struct pvt *, enum do_what); - -/* Public */ - -struct irs_pw * -irs_nis_pw(struct irs_acc *this) { - struct irs_pw *pw; - struct pvt *pvt; - - if (!(pw = memget(sizeof *pw))) { - errno = ENOMEM; - return (NULL); - } - memset(pw, 0x5e, sizeof *pw); - if (!(pvt = memget(sizeof *pvt))) { - memput(pw, sizeof *pw); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->needrewind = 1; - pvt->nis_domain = ((struct nis_p *)this->private)->domain; - pw->private = pvt; - pw->close = pw_close; - pw->next = pw_next; - pw->byname = pw_byname; - pw->byuid = pw_byuid; - pw->rewind = pw_rewind; - pw->minimize = pw_minimize; - pw->res_get = NULL; - pw->res_set = NULL; - return (pw); -} - -/* Methods */ - -static void -pw_close(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - if (pvt->pwbuf) - free(pvt->pwbuf); - nisfree(pvt, do_all); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct passwd * -pw_next(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct passwd *rval; - int r; - - do { - if (pvt->needrewind) { - nisfree(pvt, do_all); - r = yp_first(pvt->nis_domain, passwd_byname, - &pvt->curkey_data, &pvt->curkey_len, - &pvt->curval_data, &pvt->curval_len); - pvt->needrewind = 0; - } else { - char *newkey_data; - int newkey_len; - - nisfree(pvt, do_val); - r = yp_next(pvt->nis_domain, passwd_byname, - pvt->curkey_data, pvt->curkey_len, - &newkey_data, &newkey_len, - &pvt->curval_data, &pvt->curval_len); - nisfree(pvt, do_key); - pvt->curkey_data = newkey_data; - pvt->curkey_len = newkey_len; - } - if (r != 0) { - errno = ENOENT; - return (NULL); - } - rval = makepasswdent(this); - } while (rval == NULL); - return (rval); -} - -static struct passwd * -pw_byname(struct irs_pw *this, const char *name) { - struct pvt *pvt = (struct pvt *)this->private; - int r; - char *tmp; - - nisfree(pvt, do_val); - DE_CONST(name, tmp); - r = yp_match(pvt->nis_domain, passwd_byname, tmp, strlen(tmp), - &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - errno = ENOENT; - return (NULL); - } - return (makepasswdent(this)); -} - -static struct passwd * -pw_byuid(struct irs_pw *this, uid_t uid) { - struct pvt *pvt = (struct pvt *)this->private; - char tmp[sizeof "4294967295"]; - int r; - - nisfree(pvt, do_val); - (void) sprintf(tmp, "%u", (unsigned int)uid); - r = yp_match(pvt->nis_domain, passwd_byuid, tmp, strlen(tmp), - &pvt->curval_data, &pvt->curval_len); - if (r != 0) { - errno = ENOENT; - return (NULL); - } - return (makepasswdent(this)); -} - -static void -pw_rewind(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - - pvt->needrewind = 1; -} - -static void -pw_minimize(struct irs_pw *this) { - UNUSED(this); - /* NOOP */ -} - -/* Private */ - -static struct passwd * -makepasswdent(struct irs_pw *this) { - struct pvt *pvt = (struct pvt *)this->private; - char *cp; - - memset(&pvt->passwd, 0, sizeof pvt->passwd); - if (pvt->pwbuf) - free(pvt->pwbuf); - pvt->pwbuf = pvt->curval_data; - pvt->curval_data = NULL; - - cp = pvt->pwbuf; - pvt->passwd.pw_name = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; -#ifdef HAS_PW_CLASS - pvt->passwd.pw_class = cp; /* Needs to point at a \0. */ -#endif - *cp++ = '\0'; - - pvt->passwd.pw_passwd = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_uid = atoi(cp); - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_gid = atoi(cp); - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_gecos = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_dir = cp; - if (!(cp = strchr(cp, ':'))) - goto cleanup; - *cp++ = '\0'; - - pvt->passwd.pw_shell = cp; - - if ((cp = strchr(cp, '\n')) != NULL) - *cp = '\0'; - - return (&pvt->passwd); - - cleanup: - free(pvt->pwbuf); - pvt->pwbuf = NULL; - return (NULL); -} - -static void -nisfree(struct pvt *pvt, enum do_what do_what) { - if ((do_what & do_key) && pvt->curkey_data) { - free(pvt->curkey_data); - pvt->curkey_data = NULL; - } - if ((do_what & do_val) && pvt->curval_data) { - free(pvt->curval_data); - pvt->curval_data = NULL; - } -} - -#endif /* WANT_IRS_PW && WANT_IRS_NIS */ diff --git a/src/kits/network/compat/libbind/irs/nis_sv.c b/src/kits/network/compat/libbind/irs/nis_sv.c deleted file mode 100644 index ccf30c9ad3..0000000000 --- a/src/kits/network/compat/libbind/irs/nis_sv.c +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * 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 - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id$"; -#endif /* LIBC_SCCS and not lint */ - -/* Imports */ - -#include "port_before.h" - -#ifndef WANT_IRS_NIS -static int __bind_irs_nis_unneeded; -#else - -#include -#include -#include -#include -#include -#ifdef T_NULL -#undef T_NULL /* Silence re-definition warning of T_NULL. */ -#endif -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include "port_after.h" - -#include "irs_p.h" -#include "nis_p.h" - -/* Definitions */ - -struct pvt { - int needrewind; - char * nis_domain; - char * curkey_data; - int curkey_len; - char * curval_data; - int curval_len; - char line[BUFSIZ+1]; - struct servent serv; - char * svbuf; -}; - -enum do_what { do_none = 0x0, do_key = 0x1, do_val = 0x2, do_all = 0x3 }; - -static /*const*/ char services_byname[] = "services.byname"; - -/* Forward */ - -static void sv_close(struct irs_sv*); -static struct servent * sv_next(struct irs_sv *); -static struct servent * sv_byname(struct irs_sv *, const char *, - const char *); -static struct servent * sv_byport(struct irs_sv *, int, const char *); -static void sv_rewind(struct irs_sv *); -static void sv_minimize(struct irs_sv *); - -static struct servent * makeservent(struct irs_sv *this); -static void nisfree(struct pvt *, enum do_what); - -/* Public */ - -struct irs_sv * -irs_nis_sv(struct irs_acc *this) { - struct irs_sv *sv; - struct pvt *pvt; - - if (!(sv = memget(sizeof *sv))) { - errno = ENOMEM; - return (NULL); - } - memset(sv, 0x5e, sizeof *sv); - if (!(pvt = memget(sizeof *pvt))) { - memput(sv, sizeof *sv); - errno = ENOMEM; - return (NULL); - } - memset(pvt, 0, sizeof *pvt); - pvt->needrewind = 1; - pvt->nis_domain = ((struct nis_p *)this->private)->domain; - sv->private = pvt; - sv->close = sv_close; - sv->next = sv_next; - sv->byname = sv_byname; - sv->byport = sv_byport; - sv->rewind = sv_rewind; - sv->minimize = sv_minimize; - sv->res_get = NULL; - sv->res_set = NULL; - return (sv); -} - -/* Methods */ - -static void -sv_close(struct irs_sv *this) { - struct pvt *pvt = (struct pvt *)this->private; - - nisfree(pvt, do_all); - if (pvt->serv.s_aliases) - free(pvt->serv.s_aliases); - if (pvt->svbuf) - free(pvt->svbuf); - memput(pvt, sizeof *pvt); - memput(this, sizeof *this); -} - -static struct servent * -sv_byname(struct irs_sv *this, const char *name, const char *proto) { - struct servent *serv; - char **sap; - - sv_rewind(this); - while ((serv = sv_next(this)) != NULL) { - if (proto != NULL && strcmp(proto, serv->s_proto)) - continue; - if (!strcmp(name, serv->s_name)) - break; - for (sap = serv->s_aliases; sap && *sap; sap++) - if (!strcmp(name, *sap)) - break; - } - return (serv); -} - -static struct servent * -sv_byport(struct irs_sv *this, int port, const char *proto) { - struct servent *serv; - - sv_rewind(this); - while ((serv = sv_next(this)) != NULL) { - if (proto != NULL && strcmp(proto, serv->s_proto)) - continue; - if (serv->s_port == port) - break; - } - return (serv); -} - -static void -sv_rewind(struct irs_sv *this) { - struct pvt *pvt = (struct pvt *)this->private; - - pvt->needrewind = 1; -} - -static struct servent * -sv_next(struct irs_sv *this) { - struct pvt *pvt = (struct pvt *)this->private; - struct servent *rval; - int r; - - do { - if (pvt->needrewind) { - nisfree(pvt, do_all); - r = yp_first(pvt->nis_domain, services_byname, - &pvt->curkey_data, &pvt->curkey_len, - &pvt->curval_data, &pvt->curval_len); - pvt->needrewind = 0; - } else { - char *newkey_data; - int newkey_len; - - nisfree(pvt, do_val); - r = yp_next(pvt->nis_domain, services_byname, - pvt->curkey_data, pvt->curkey_len, - &newkey_data, &newkey_len, - &pvt->curval_data, &pvt->curval_len); - nisfree(pvt, do_key); - pvt->curkey_data = newkey_data; - pvt->curkey_len = newkey_len; - } - if (r != 0) { - errno = ENOENT; - return (NULL); - } - rval = makeservent(this); - } while (rval == NULL); - return (rval); -} - -static void -sv_minimize(struct irs_sv *this) { - UNUSED(this); - /* NOOP */ -} - -/* Private */ - -static struct servent * -makeservent(struct irs_sv *this) { - struct pvt *pvt = (struct pvt *)this->private; - static const char spaces[] = " \t"; - char *p, **t; - int n, m; - - if (pvt->svbuf) - free(pvt->svbuf); - pvt->svbuf = pvt->curval_data; - pvt->curval_data = NULL; - - if (pvt->serv.s_aliases) { - free(pvt->serv.s_aliases); - pvt->serv.s_aliases = NULL; - } - - if ((p = strpbrk(pvt->svbuf, "#\n"))) - *p = '\0'; - - p = pvt->svbuf; - - pvt->serv.s_name = p; - p += strcspn(p, spaces); - if (!*p) - goto cleanup; - *p++ = '\0'; - p += strspn(p, spaces); - - pvt->serv.s_port = htons((u_short) atoi(p)); - pvt->serv.s_proto = NULL; - - while (*p && !isspace((unsigned char)*p)) - if (*p++ == '/') - pvt->serv.s_proto = p; - if (!pvt->serv.s_proto) - goto cleanup; - if (*p) { - *p++ = '\0'; - p += strspn(p, spaces); - } - - n = m = 0; - while (*p) { - if ((n + 1) >= m || !pvt->serv.s_aliases) { - m += 10; - t = realloc(pvt->serv.s_aliases, m * sizeof(char *)); - if (!t) { - errno = ENOMEM; - goto cleanup; - } - pvt->serv.s_aliases = t; - } - pvt->serv.s_aliases[n++] = p; - p += strcspn(p, spaces); - if (!*p) - break; - *p++ = '\0'; - p += strspn(p, spaces); - } - if (!pvt->serv.s_aliases) - pvt->serv.s_aliases = malloc(sizeof(char *)); - if (!pvt->serv.s_aliases) - goto cleanup; - pvt->serv.s_aliases[n] = NULL; - return (&pvt->serv); - - cleanup: - if (pvt->serv.s_aliases) { - free(pvt->serv.s_aliases); - pvt->serv.s_aliases = NULL; - } - if (pvt->svbuf) { - free(pvt->svbuf); - pvt->svbuf = NULL; - } - return (NULL); -} - -static void -nisfree(struct pvt *pvt, enum do_what do_what) { - if ((do_what & do_key) && pvt->curkey_data) { - free(pvt->curkey_data); - pvt->curkey_data = NULL; - } - if ((do_what & do_val) && pvt->curval_data) { - free(pvt->curval_data); - pvt->curval_data = NULL; - } -} - -#endif /*WANT_IRS_NIS*/ diff --git a/src/kits/network/compat/libbind/src/TLSInit.cpp b/src/kits/network/compat/libbind/src/TLSInit.cpp new file mode 100644 index 0000000000..b7b4606ff5 --- /dev/null +++ b/src/kits/network/compat/libbind/src/TLSInit.cpp @@ -0,0 +1,19 @@ +#include + +// XXX: this is an ugly hack because we don't support mutexes +extern pthread_key_t gIRSInitKey; +extern pthread_key_t gGaiStrerrorKey; + +class TLSInit { + public: + TLSInit(); +}; + +TLSInit::TLSInit() +{ + gIRSInitKey = tls_allocate(); + gGaiStrerrorKey = tls_allocate(); +} + + +static TLSInit __tlsinit_hack; diff --git a/src/kits/network/compat/libbind/src/pthread_emu.c b/src/kits/network/compat/libbind/src/pthread_emu.c deleted file mode 100644 index da35937ea6..0000000000 --- a/src/kits/network/compat/libbind/src/pthread_emu.c +++ /dev/null @@ -1,44 +0,0 @@ -#include - - -pthread_mutex_t -pthread_mutex_static_initializer(void) -{ - return _pthread_mutex_static_initializer(); -} - -/* -Does not work because the destructor function must be called for _every_ thread. -Solution: maybe run a thread in the background that watches for dying threads -and calls the key's destructor function. - -Does tls_allocate() set the key's value to NULL? - -int -pthread_key_create(pthread_key_t *key, void (*destructor)(void *)) -{ - if(!key) - return B_ERROR; - - *key = tls_allocate(); - if(destructor) - return on_exit_thread(destructor, tls_address(*key)); - - return B_OK; -} - - -int -pthread_setspecific(pthread_key_t key, void *value) -{ - tls_set(key, value); - return B_OK; -} - - -void* -pthread_getspecific(pthread_key_t key) -{ - return tls_get(key); -} -*/