summaryrefslogtreecommitdiffstats
path: root/contrib/bind/lib/irs
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bind/lib/irs')
-rw-r--r--contrib/bind/lib/irs/Makefile119
-rw-r--r--contrib/bind/lib/irs/Makefile.BSD25
-rw-r--r--contrib/bind/lib/irs/README56
-rw-r--r--contrib/bind/lib/irs/dns.c153
-rw-r--r--contrib/bind/lib/irs/dns_gr.c293
-rw-r--r--contrib/bind/lib/irs/dns_ho.c1156
-rw-r--r--contrib/bind/lib/irs/dns_nw.c594
-rw-r--r--contrib/bind/lib/irs/dns_p.h50
-rw-r--r--contrib/bind/lib/irs/dns_pr.c266
-rw-r--r--contrib/bind/lib/irs/dns_pw.c231
-rw-r--r--contrib/bind/lib/irs/dns_sv.c298
-rw-r--r--contrib/bind/lib/irs/gai_strerror.c86
-rw-r--r--contrib/bind/lib/irs/gen.c430
-rw-r--r--contrib/bind/lib/irs/gen_gr.c482
-rw-r--r--contrib/bind/lib/irs/gen_ho.c391
-rw-r--r--contrib/bind/lib/irs/gen_ng.c172
-rw-r--r--contrib/bind/lib/irs/gen_nw.c262
-rw-r--r--contrib/bind/lib/irs/gen_p.h113
-rw-r--r--contrib/bind/lib/irs/gen_pr.c226
-rw-r--r--contrib/bind/lib/irs/gen_pw.c233
-rw-r--r--contrib/bind/lib/irs/gen_sv.c227
-rw-r--r--contrib/bind/lib/irs/getaddrinfo.c1229
-rw-r--r--contrib/bind/lib/irs/getgrent.c223
-rw-r--r--contrib/bind/lib/irs/getgrent_r.c229
-rw-r--r--contrib/bind/lib/irs/gethostent.c1069
-rw-r--r--contrib/bind/lib/irs/gethostent_r.c264
-rw-r--r--contrib/bind/lib/irs/getnameinfo.c322
-rw-r--r--contrib/bind/lib/irs/getnetent.c343
-rw-r--r--contrib/bind/lib/irs/getnetent_r.c227
-rw-r--r--contrib/bind/lib/irs/getnetgrent.c156
-rw-r--r--contrib/bind/lib/irs/getnetgrent_r.c165
-rw-r--r--contrib/bind/lib/irs/getprotoent.c174
-rw-r--r--contrib/bind/lib/irs/getprotoent_r.c216
-rw-r--r--contrib/bind/lib/irs/getpwent.c199
-rw-r--r--contrib/bind/lib/irs/getpwent_r.c275
-rw-r--r--contrib/bind/lib/irs/getservent.c177
-rw-r--r--contrib/bind/lib/irs/getservent_r.c237
-rw-r--r--contrib/bind/lib/irs/hesiod.c524
-rw-r--r--contrib/bind/lib/irs/hesiod_p.h48
-rw-r--r--contrib/bind/lib/irs/irp.c592
-rw-r--r--contrib/bind/lib/irs/irp_gr.c408
-rw-r--r--contrib/bind/lib/irs/irp_ho.c429
-rw-r--r--contrib/bind/lib/irs/irp_ng.c272
-rw-r--r--contrib/bind/lib/irs/irp_nw.c375
-rw-r--r--contrib/bind/lib/irs/irp_p.h59
-rw-r--r--contrib/bind/lib/irs/irp_pr.c353
-rw-r--r--contrib/bind/lib/irs/irp_pw.c358
-rw-r--r--contrib/bind/lib/irs/irp_sv.c369
-rw-r--r--contrib/bind/lib/irs/irpmarshall.c2344
-rw-r--r--contrib/bind/lib/irs/irs_data.c214
-rw-r--r--contrib/bind/lib/irs/irs_data.h62
-rw-r--r--contrib/bind/lib/irs/irs_p.h49
-rw-r--r--contrib/bind/lib/irs/lcl.c140
-rw-r--r--contrib/bind/lib/irs/lcl_gr.c354
-rw-r--r--contrib/bind/lib/irs/lcl_ho.c576
-rw-r--r--contrib/bind/lib/irs/lcl_ng.c444
-rw-r--r--contrib/bind/lib/irs/lcl_nw.c371
-rw-r--r--contrib/bind/lib/irs/lcl_p.h50
-rw-r--r--contrib/bind/lib/irs/lcl_pr.c284
-rw-r--r--contrib/bind/lib/irs/lcl_pw.c308
-rw-r--r--contrib/bind/lib/irs/lcl_sv.c431
-rw-r--r--contrib/bind/lib/irs/nis.c151
-rw-r--r--contrib/bind/lib/irs/nis_gr.c353
-rw-r--r--contrib/bind/lib/irs/nis_ho.c530
-rw-r--r--contrib/bind/lib/irs/nis_ng.c299
-rw-r--r--contrib/bind/lib/irs/nis_nw.c381
-rw-r--r--contrib/bind/lib/irs/nis_p.h46
-rw-r--r--contrib/bind/lib/irs/nis_pr.c297
-rw-r--r--contrib/bind/lib/irs/nis_pw.c287
-rw-r--r--contrib/bind/lib/irs/nis_sv.c305
-rw-r--r--contrib/bind/lib/irs/nul_ng.c126
-rw-r--r--contrib/bind/lib/irs/pathnames.h50
-rw-r--r--contrib/bind/lib/irs/util.c107
73 files changed, 0 insertions, 23714 deletions
diff --git a/contrib/bind/lib/irs/Makefile b/contrib/bind/lib/irs/Makefile
deleted file mode 100644
index 0c4e46d..0000000
--- a/contrib/bind/lib/irs/Makefile
+++ /dev/null
@@ -1,119 +0,0 @@
-# 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.
-
-# $Id: Makefile,v 8.24 2001/08/14 05:58:07 marka Exp $
-
-# these are only appropriate for BSD 4.4 or derivatives, and are used in
-# development. normal builds will be done in the top level directory and
-# this Makefile will be invoked with a lot of overrides for the following:
-SYSTYPE= freebsd
-DESTDIR =
-DESTLIB = /usr/local/lib
-O=o
-A=a
-CC= cc
-LD= ld
-SHELL= /bin/sh
-CDEBUG= -g -Wall
-TOP= ../..
-INCL = ${TOP}/include
-PORTINCL = ${TOP}/port/${SYSTYPE}/include
-LIBBIND = ${TOP}/lib/libbind.${A}
-LIBBINDR = ../${TOP}/lib/libbind_r.${A}
-CFLAGS= ${CDEBUG}
-CPPFLAGS= -I${PORTINCL} -I${INCL}
-# -D__BIND_NOSTATIC -Wimplicit
-LD_LIBFLAGS= -x -r
-AR= ar cru
-RANLIB= ranlib
-INSTALL= install
-INSTALL_EXEC=
-INSTALL_LIB=-o bin -g bin
-THREADED= threaded
-
-SRCS= 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 getnetent.c getnetent_r.c \
- getnetgrent.c getnetgrent_r.c getprotoent.c \
- getprotoent_r.c getpwent.c getpwent_r.c getservent.c \
- getservent_r.c hesiod.c irs_data.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 \
- 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
-
-OBJS= dns.${O} dns_gr.${O} dns_ho.${O} dns_nw.${O} dns_pr.${O} dns_pw.${O} \
- dns_sv.${O} gai_strerror.${O} gen.${O} gen_gr.${O} gen_ho.${O} \
- gen_ng.${O} gen_nw.${O} gen_pr.${O} gen_pw.${O} gen_sv.${O} \
- getaddrinfo.${O} getgrent.${O} getgrent_r.${O} gethostent.${O} \
- gethostent_r.${O} getnameinfo.${O} getnetent.${O} getnetent_r.${O} \
- getnetgrent.${O} getnetgrent_r.${O} getprotoent.${O} \
- getprotoent_r.${O} getpwent.${O} getpwent_r.${O} getservent.${O} \
- getservent_r.${O} hesiod.${O} irs_data.${O} \
- irp.${O} irp_gr.${O} irp_ho.${O} irp_ng.${O} irp_nw.${O} \
- irp_pr.${O} irp_pw.${O} irp_sv.${O} irpmarshall.${O} \
- lcl.${O} lcl_gr.${O} \
- lcl_ho.${O} lcl_ng.${O} lcl_nw.${O} lcl_pr.${O} lcl_pw.${O} \
- lcl_sv.${O} nis.${O} nis_gr.${O} nis_ho.${O} nis_ng.${O} nis_nw.${O} \
- nis_pr.${O} nis_pw.${O} nis_sv.${O} nul_ng.${O} util.${O}
-
-all: ${LIBBIND}
-
-${LIBBIND}: ${OBJS}
- -( cd ${THREADED} ; \
- ${AR} ${LIBBINDR} ${ARPREF} ${OBJS} ${ARSUFF} ; \
- ${RANLIB} ${LIBBINDR} )
- ${AR} ${LIBBIND} ${ARPREF} ${OBJS} ${ARSUFF}
- ${RANLIB} ${LIBBIND}
-
-.c.${O}:
- mkdir ${THREADED} 2> /dev/null || test -d ${THREADED} -a -w ${THREADED}
- -(${CC} ${CPPFLAGS} ${CFLAGS} ${BOUNDS} ${REENTRANT} -c $*.c \
- -o ${THREADED}/$*.${O} ; \
- ${LDS} ${LD} ${LD_LIBFLAGS} ${THREADED}/$*.${O} \
- -o ${THREADED}/$*.out && \
- ${LDS} mv ${THREADED}/$*.out ${THREADED}/$*.${O})
- ${CC} ${CPPFLAGS} ${CFLAGS} ${BOUNDS} -c $*.c
- -${LDS} ${LD} ${LD_LIBFLAGS} $*.${O} -o $*.out && \
- ${LDS} mv $*.out $*.${O}
-
-distclean: clean
-
-clean: FRC
- rm -f .depend a.out core ${LIB} tags
- rm -f *.${O} *.BAK *.CKP *~
- rm -f ${THREADED}/*.${O}
- -if test -d ${THREADED} ; then rmdir ${THREADED}; else true; fi
-
-depend: FRC
- mkdep -I${INCL} -I${PORTINCL} ${CPPFLAGS} ${SRCS}
-
-links: FRC
- @set -e; ln -s SRC/*.[ch] .
-
-testirpd: testirpd.o ${LIBBIND}
- ${CC} ${CDEBUG} ${LDFLAGS} -o testirpd testirpd.o ${LIBBIND} ${SYSLIBS}
-
-
-install:
-
-FRC:
-
-# DO NOT DELETE THIS LINE -- mkdep uses it.
-# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
diff --git a/contrib/bind/lib/irs/Makefile.BSD b/contrib/bind/lib/irs/Makefile.BSD
deleted file mode 100644
index d30c417..0000000
--- a/contrib/bind/lib/irs/Makefile.BSD
+++ /dev/null
@@ -1,25 +0,0 @@
-# BSDI $Id: Makefile.BSD,v 1.5 1999/01/18 07:46:47 vixie Exp $
-#
-# @(#)Makefile 5.12 (Berkeley) 7/15/92
-
-CFLAGS= -g
-
-CC= gcc2
-CFLAGS+= -Wall -Wno-unused
-
-LIB= irs
-CFLAGS+= -I${.CURDIR}/..
-SRCS= lcl.c lcl_gr.c lcl_pw.c lcl_sv.c lcl_pr.c lcl_ho.c lcl_nw.c lcl_ng.c \
- dns.c dns_gr.c dns_pw.c dns_sv.c dns_pr.c dns_ho.c dns_nw.c \
- nis.c nis_gr.c nis_pw.c nis_sv.c nis_pr.c nis_ho.c nis_nw.c nis_ng.c \
- gen.c gen_gr.c gen_pw.c gen_sv.c gen_pr.c gen_ho.c gen_nw.c gen_ng.c \
- getgrent.c getpwent.c getservent.c getprotoent.c gethostent.c \
- getnetent.c getnetgrent.c \
- nul_ng.c irs_data.c irp.c irp_gr.c irp_ho.c irp_ng.c irp_nw.c \
- irp_pr.c irp_pw.c irp_sv.c irpd.c irpmarshall.c \
- hesiod.c util.c bitncmp.c
-NOMAN=
-
-all: libirs.a
-
-.include <bsd.lib.mk>
diff --git a/contrib/bind/lib/irs/README b/contrib/bind/lib/irs/README
deleted file mode 100644
index cb81a9a..0000000
--- a/contrib/bind/lib/irs/README
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-
-This is the Information Retrieval Service (IRS).
-Designed by Paul Vixie (ISC) and Ted T'so (MIT), 1995.
-Written by Paul Vixie, Ted T'so and Sam Stoller, 1996.
-$Id: README,v 1.5 1999/01/08 19:23:52 vixie Exp $
-
-Introduction:
-
- The /etc/irs.conf file defines access methods (like DNS or NIS or
-LOCAL) for each map (like PASSWD or GROUP or HOSTS). One of the access
-methods is "generic" in that it uses the rules from /etc/irs.conf to decide
-which of potentially several different access methods to use for any given
-map. Stubs have been written for all of the system getXbyY() functions so
-that old programs can get this new "multiple access method" capability without
-any source code changes.
-
-Thread Safety:
-
- It is possible for a thread safe program to be altered to call the
-underlying interface (rather than the standard getXbyY() stubs) and get some
-reentrance capabilities. Note that the underlying libraries (which we call)
-are not all thread-safe, for example, the YP and DNS resolvers. A lot more
-work will need to be done before we have full thread safety. But we believe
-that the native API for this system does not impose any reentrancy problems.
-We don't use global or static variables anywhere except in the getXbyY() stubs.
-
-Apologies:
-
- We did cheap object orientation without using C++. This stuff is
-standard C, and it suffers from some of the defects shared by all object
-systems implemented in C. Even so, this is the smallest design we could
-think of that would be extensible to more access methods, more map types,
-and more map operations (like BYNAME or BYGID or whatever) in the future.
-
- There's a fair amount of duplicated code between the different
-access methods for a given map. For example, the code that parses the
-passwd entries is almost identical between the DNS and NIS map objects. To
-clean this up, the almost-identical functions need to be split into similar
-and dissimilar parts, and some parts of the "struct pvt"'s need to be made
-shared via substructures.
diff --git a/contrib/bind/lib/irs/dns.c b/contrib/bind/lib/irs/dns.c
deleted file mode 100644
index 3feed26..0000000
--- a/contrib/bind/lib/irs/dns.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns.c,v 1.16 2001/05/29 05:48:26 marka Exp $";
-#endif
-
-/*
- * dns.c --- this is the top-level accessor function for the dns
- */
-
-#include "port_before.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <resolv.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "hesiod.h"
-#include "dns_p.h"
-
-/* forward */
-
-static void dns_close(struct irs_acc *);
-static struct __res_state * dns_res_get(struct irs_acc *);
-static void dns_res_set(struct irs_acc *, struct __res_state *,
- void (*)(void *));
-
-/* public */
-
-struct irs_acc *
-irs_dns_acc(const char *options) {
- struct irs_acc *acc;
- struct dns_p *dns;
-
- UNUSED(options);
-
- if (!(acc = memget(sizeof *acc))) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(acc, 0x5e, sizeof *acc);
- if (!(dns = memget(sizeof *dns))) {
- errno = ENOMEM;
- memput(acc, sizeof *acc);
- return (NULL);
- }
- memset(dns, 0x5e, sizeof *dns);
- dns->res = NULL;
- dns->free_res = NULL;
- if (hesiod_init(&dns->hes_ctx) < 0) {
- /*
- * We allow the dns accessor class to initialize
- * despite hesiod failing to initialize correctly,
- * since dns host queries don't depend on hesiod.
- */
- dns->hes_ctx = NULL;
- }
- acc->private = dns;
-#ifdef WANT_IRS_GR
- acc->gr_map = irs_dns_gr;
-#else
- acc->gr_map = NULL;
-#endif
-#ifdef WANT_IRS_PW
- acc->pw_map = irs_dns_pw;
-#else
- acc->pw_map = NULL;
-#endif
- acc->sv_map = irs_dns_sv;
- acc->pr_map = irs_dns_pr;
- acc->ho_map = irs_dns_ho;
- acc->nw_map = irs_dns_nw;
- acc->ng_map = irs_nul_ng;
- acc->res_get = dns_res_get;
- acc->res_set = dns_res_set;
- acc->close = dns_close;
- return (acc);
-}
-
-/* methods */
-static struct __res_state *
-dns_res_get(struct irs_acc *this) {
- struct dns_p *dns = (struct dns_p *)this->private;
-
- if (dns->res == NULL) {
- struct __res_state *res;
- res = (struct __res_state *)malloc(sizeof *res);
- if (res == NULL)
- return (NULL);
- memset(dns->res, 0, sizeof *dns->res);
- dns_res_set(this, res, free);
- }
-
- if ((dns->res->options & RES_INIT) == 0 &&
- res_ninit(dns->res) < 0)
- return (NULL);
-
- return (dns->res);
-}
-
-static void
-dns_res_set(struct irs_acc *this, struct __res_state *res,
- void (*free_res)(void *)) {
- struct dns_p *dns = (struct dns_p *)this->private;
-
- if (dns->res && dns->free_res) {
- res_nclose(dns->res);
- (*dns->free_res)(dns->res);
- }
- dns->res = res;
- dns->free_res = free_res;
-}
-
-static void
-dns_close(struct irs_acc *this) {
- struct dns_p *dns;
-
- dns = (struct dns_p *)this->private;
- if (dns->res && dns->free_res)
- (*dns->free_res)(dns->res);
- if (dns->hes_ctx)
- hesiod_end(dns->hes_ctx);
- memput(dns, sizeof *dns);
- memput(this, sizeof *this);
-}
-
diff --git a/contrib/bind/lib/irs/dns_gr.c b/contrib/bind/lib/irs/dns_gr.c
deleted file mode 100644
index b314f11..0000000
--- a/contrib/bind/lib/irs/dns_gr.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns_gr.c,v 1.21 2002/07/08 06:26:09 marka Exp $";
-#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 <sys/param.h>
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <isc/memcluster.h>
-
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/dns_ho.c b/contrib/bind/lib/irs/dns_ho.c
deleted file mode 100644
index 1b37e3d..0000000
--- a/contrib/bind/lib/irs/dns_ho.c
+++ /dev/null
@@ -1,1156 +0,0 @@
-/*
- * Copyright (c) 1985, 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) 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.
- */
-
-/* from gethostnamadr.c 8.1 (Berkeley) 6/4/93 */
-/* BIND Id: gethnamaddr.c,v 8.15 1996/05/22 04:56:30 vixie Exp $ */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns_ho.c,v 1.42.6.1 2003/06/02 09:24:40 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Imports. */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-#include <syslog.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "dns_p.h"
-
-#ifdef SPRINTF_CHAR
-# define SPRINTF(x) strlen(sprintf/**/x)
-#else
-# define SPRINTF(x) sprintf x
-#endif
-
-/* Definitions. */
-
-#define MAXALIASES 35
-#define MAXADDRS 35
-
-#define MAXPACKET (65535) /* Maximum TCP message size */
-
-#define BOUNDS_CHECK(ptr, count) \
- if ((ptr) + (count) > eom) { \
- had_error++; \
- continue; \
- } else (void)0
-
-typedef union {
- HEADER hdr;
- u_char buf[MAXPACKET];
-} querybuf;
-
-struct dns_res_target {
- struct dns_res_target *next;
- querybuf qbuf; /* query buffer */
- u_char *answer; /* buffer to put answer */
- int anslen; /* size of answer buffer */
- int qclass, qtype; /* class and type of query */
- int action; /* condition whether query is really issued */
- char qname[MAXDNAME +1]; /* domain name */
-#if 0
- int n; /* result length */
-#endif
-};
-enum {RESTGT_DOALWAYS, RESTGT_AFTERFAILURE, RESTGT_IGNORE};
-enum {RESQRY_SUCCESS, RESQRY_FAIL};
-
-struct pvt {
- struct hostent host;
- char * h_addr_ptrs[MAXADDRS + 1];
- char * host_aliases[MAXALIASES];
- char hostbuf[8*1024];
- u_char host_addr[16]; /* IPv4 or IPv6 */
- struct __res_state *res;
- void (*free_res)(void *);
-};
-
-typedef union {
- int32_t al;
- char ac;
-} align;
-
-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 };
-/* Note: the IPv6 loopback address is in the "tunnel" space */
-static const u_char v6local[] = { 0,0, 0,1 }; /* last 4 bytes of IPv6 addr */
-
-/* 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 void map_v4v6_hostent(struct hostent *hp, char **bp,
- char *ep);
-static void addrsort(res_state, char **, int);
-static struct hostent * gethostans(struct irs_ho *this,
- const u_char *ansbuf, int anslen,
- const char *qname, int qtype,
- int af, int size,
- struct addrinfo **ret_aip,
- const struct addrinfo *pai);
-static int add_hostent(struct pvt *pvt, char *bp, char **hap,
- struct addrinfo *ai);
-static int init(struct irs_ho *this);
-
-/* Exports. */
-
-struct irs_ho *
-irs_dns_ho(struct irs_acc *this) {
- struct irs_ho *ho;
- struct pvt *pvt;
-
- UNUSED(this);
-
- 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);
- 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_get = ho_res_get;
- ho->res_set = ho_res_set;
- 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);
- if (pvt->res && pvt->free_res)
- (*pvt->free_res)(pvt->res);
- if (pvt)
- 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;
- struct hostent *hp = NULL;
- int n, size;
- char tmp[NS_MAXDNAME];
- const char *cp;
- struct addrinfo ai;
- struct dns_res_target *q, *p;
- int querystate = RESQRY_FAIL;
-
- if (init(this) == -1)
- return (NULL);
-
- q = memget(sizeof(*q));
- if (q == NULL) {
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = ENOMEM;
- goto cleanup;
- }
- memset(q, 0, sizeof(q));
-
- switch (af) {
- case AF_INET:
- size = INADDRSZ;
- q->qclass = C_IN;
- q->qtype = T_A;
- q->answer = q->qbuf.buf;
- q->anslen = sizeof(q->qbuf);
- q->action = RESTGT_DOALWAYS;
- break;
- case AF_INET6:
- size = IN6ADDRSZ;
- q->qclass = C_IN;
- q->qtype = T_AAAA;
- q->answer = q->qbuf.buf;
- q->anslen = sizeof(q->qbuf);
- q->action = RESTGT_DOALWAYS;
- break;
- default:
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = EAFNOSUPPORT;
- hp = NULL;
- goto cleanup;
- }
-
- /*
- * if there aren't any dots, it could be a user-level alias.
- * this is also done in res_nquery() since we are not the only
- * function that looks up host names.
- */
- if (!strchr(name, '.') && (cp = res_hostalias(pvt->res, name,
- tmp, sizeof tmp)))
- name = cp;
-
- for (p = q; p; p = p->next) {
- switch(p->action) {
- case RESTGT_DOALWAYS:
- break;
- case RESTGT_AFTERFAILURE:
- if (querystate == RESQRY_SUCCESS)
- continue;
- break;
- case RESTGT_IGNORE:
- continue;
- }
-
- if ((n = res_nsearch(pvt->res, name, p->qclass, p->qtype,
- p->answer, p->anslen)) < 0) {
- querystate = RESQRY_FAIL;
- continue;
- }
-
- memset(&ai, 0, sizeof(ai));
- ai.ai_family = af;
- if ((hp = gethostans(this, p->answer, n, name, p->qtype,
- af, size, NULL,
- (const struct addrinfo *)&ai)) != NULL)
- goto cleanup; /* no more loop is necessary */
-
- querystate = RESQRY_FAIL;
- continue;
- }
-
- cleanup:
- if (q != NULL)
- memput(q, sizeof(*q));
- return(hp);
-}
-
-static struct hostent *
-ho_byaddr(struct irs_ho *this, const void *addr, int len, int af)
-{
- struct pvt *pvt = (struct pvt *)this->private;
- const u_char *uaddr = addr;
- char *qp;
- struct hostent *hp = NULL;
- struct addrinfo ai;
- struct dns_res_target *q, *q2, *p;
- int n, size, i;
- int querystate = RESQRY_FAIL;
-
- if (init(this) == -1)
- return (NULL);
-
- q = memget(sizeof(*q));
- q2 = memget(sizeof(*q2));
- if (q == NULL || q2 == NULL) {
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = ENOMEM;
- goto cleanup;
- }
- memset(q, 0, sizeof(q));
- memset(q2, 0, sizeof(q2));
-
- if (af == AF_INET6 && len == IN6ADDRSZ &&
- (!memcmp(uaddr, mapped, sizeof mapped) ||
- (!memcmp(uaddr, tunnelled, sizeof tunnelled) &&
- memcmp(&uaddr[sizeof tunnelled], v6local, sizeof(v6local))))) {
- /* Unmap. */
- addr = (const char *)addr + sizeof mapped;
- uaddr += sizeof mapped;
- af = AF_INET;
- len = INADDRSZ;
- }
- switch (af) {
- case AF_INET:
- size = INADDRSZ;
- q->qclass = C_IN;
- q->qtype = T_PTR;
- q->answer = q->qbuf.buf;
- q->anslen = sizeof(q->qbuf);
- q->action = RESTGT_DOALWAYS;
- break;
- case AF_INET6:
- size = IN6ADDRSZ;
- q->qclass = C_IN;
- q->qtype = T_PTR;
- q->answer = q->qbuf.buf;
- q->anslen = sizeof(q->qbuf);
- q->next = q2;
- q->action = RESTGT_DOALWAYS;
- q2->qclass = C_IN;
- q2->qtype = T_PTR;
- q2->answer = q2->qbuf.buf;
- q2->anslen = sizeof(q2->qbuf);
- if ((pvt->res->options & RES_NO_NIBBLE2) != 0)
- q2->action = RESTGT_IGNORE;
- else
- q2->action = RESTGT_AFTERFAILURE;
- break;
- default:
- errno = EAFNOSUPPORT;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- hp = NULL;
- goto cleanup;
- }
- if (size > len) {
- errno = EINVAL;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- hp = NULL;
- goto cleanup;
- }
- switch (af) {
- case AF_INET:
- qp = q->qname;
- (void) sprintf(qp, "%u.%u.%u.%u.in-addr.arpa",
- (uaddr[3] & 0xff),
- (uaddr[2] & 0xff),
- (uaddr[1] & 0xff),
- (uaddr[0] & 0xff));
- break;
- case AF_INET6:
- if (q->action != RESTGT_IGNORE) {
- qp = q->qname;
- for (n = IN6ADDRSZ - 1; n >= 0; n--) {
- i = SPRINTF((qp, "%x.%x.",
- uaddr[n] & 0xf,
- (uaddr[n] >> 4) & 0xf));
- if (i < 0)
- abort();
- qp += i;
- }
-#ifdef HAVE_STRLCAT
- strlcat(q->qname, res_get_nibblesuffix(pvt->res),
- sizeof(q->qname));
-#else
- strcpy(qp, res_get_nibblesuffix(pvt->res));
-#endif
- }
- if (q2->action != RESTGT_IGNORE) {
- qp = q2->qname;
- for (n = IN6ADDRSZ - 1; n >= 0; n--) {
- i = SPRINTF((qp, "%x.%x.",
- uaddr[n] & 0xf,
- (uaddr[n] >> 4) & 0xf));
- if (i < 0)
- abort();
- qp += i;
- }
-#ifdef HAVE_STRLCAT
- strlcat(q->qname, res_get_nibblesuffix2(pvt->res),
- sizeof(q->qname));
-#else
- strcpy(qp, res_get_nibblesuffix2(pvt->res));
-#endif
- }
- break;
- default:
- abort();
- }
-
- for (p = q; p; p = p->next) {
- switch(p->action) {
- case RESTGT_DOALWAYS:
- break;
- case RESTGT_AFTERFAILURE:
- if (querystate == RESQRY_SUCCESS)
- continue;
- break;
- case RESTGT_IGNORE:
- continue;
- }
-
- if ((n = res_nquery(pvt->res, p->qname, p->qclass, p->qtype,
- p->answer, p->anslen)) < 0) {
- querystate = RESQRY_FAIL;
- continue;
- }
-
- memset(&ai, 0, sizeof(ai));
- ai.ai_family = af;
- hp = gethostans(this, p->answer, n, p->qname, T_PTR, af, size,
- NULL, (const struct addrinfo *)&ai);
- if (!hp) {
- querystate = RESQRY_FAIL;
- continue;
- }
-
- memcpy(pvt->host_addr, addr, len);
- pvt->h_addr_ptrs[0] = (char *)pvt->host_addr;
- pvt->h_addr_ptrs[1] = NULL;
- if (af == AF_INET && (pvt->res->options & RES_USE_INET6)) {
- map_v4v6_address((char*)pvt->host_addr,
- (char*)pvt->host_addr);
- pvt->host.h_addrtype = AF_INET6;
- pvt->host.h_length = IN6ADDRSZ;
- }
-
- RES_SET_H_ERRNO(pvt->res, NETDB_SUCCESS);
- goto cleanup; /* no more loop is necessary. */
- }
- hp = NULL; /* H_ERRNO was set by subroutines */
-
- cleanup:
- if (q != NULL)
- memput(q, sizeof(*q));
- if (q2 != NULL)
- memput(q2, sizeof(*q2));
- return(hp);
-}
-
-static struct hostent *
-ho_next(struct irs_ho *this) {
-
- UNUSED(this);
-
- return (NULL);
-}
-
-static void
-ho_rewind(struct irs_ho *this) {
-
- UNUSED(this);
-
- /* NOOP */
-}
-
-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);
-}
-
-/* XXX */
-extern struct addrinfo *addr2addrinfo __P((const struct addrinfo *,
- const char *));
-
-static struct addrinfo *
-ho_addrinfo(struct irs_ho *this, const char *name, const struct addrinfo *pai)
-{
- struct pvt *pvt = (struct pvt *)this->private;
- int n;
- char tmp[NS_MAXDNAME];
- const char *cp;
- struct dns_res_target *q, *q2, *p;
- struct addrinfo sentinel, *cur;
- int querystate = RESQRY_FAIL;
-
- if (init(this) == -1)
- return (NULL);
-
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
-
- q = memget(sizeof(*q));
- q2 = memget(sizeof(*q2));
- if (q == NULL || q2 == NULL) {
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = ENOMEM;
- goto cleanup;
- }
- memset(q, 0, sizeof(q2));
- memset(q2, 0, sizeof(q2));
-
- switch (pai->ai_family) {
- case AF_UNSPEC:
- /* prefer IPv6 */
- q->qclass = C_IN;
- q->qtype = T_AAAA;
- q->answer = q->qbuf.buf;
- q->anslen = sizeof(q->qbuf);
- q->next = q2;
- q->action = RESTGT_DOALWAYS;
- q2->qclass = C_IN;
- q2->qtype = T_A;
- q2->answer = q2->qbuf.buf;
- q2->anslen = sizeof(q2->qbuf);
- q2->action = RESTGT_DOALWAYS;
- break;
- case AF_INET:
- q->qclass = C_IN;
- q->qtype = T_A;
- q->answer = q->qbuf.buf;
- q->anslen = sizeof(q->qbuf);
- q->action = RESTGT_DOALWAYS;
- break;
- case AF_INET6:
- q->qclass = C_IN;
- q->qtype = T_AAAA;
- q->answer = q->qbuf.buf;
- q->anslen = sizeof(q->qbuf);
- q->action = RESTGT_DOALWAYS;
- break;
- default:
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY); /* better error? */
- goto cleanup;
- }
-
- /*
- * if there aren't any dots, it could be a user-level alias.
- * this is also done in res_nquery() since we are not the only
- * function that looks up host names.
- */
- if (!strchr(name, '.') && (cp = res_hostalias(pvt->res, name,
- tmp, sizeof tmp)))
- name = cp;
-
- for (p = q; p; p = p->next) {
- struct addrinfo *ai;
-
- switch(p->action) {
- case RESTGT_DOALWAYS:
- break;
- case RESTGT_AFTERFAILURE:
- if (querystate == RESQRY_SUCCESS)
- continue;
- break;
- case RESTGT_IGNORE:
- continue;
- }
-
- if ((n = res_nsearch(pvt->res, name, p->qclass, p->qtype,
- p->answer, p->anslen)) < 0) {
- querystate = RESQRY_FAIL;
- continue;
- }
- (void)gethostans(this, p->answer, n, name, p->qtype,
- pai->ai_family, /* XXX: meaningless */
- 0, &ai, pai);
- if (ai) {
- querystate = RESQRY_SUCCESS;
- cur->ai_next = ai;
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- }
- else
- querystate = RESQRY_FAIL;
- }
-
- cleanup:
- if (q != NULL)
- memput(q, sizeof(*q));
- if (q2 != NULL)
- memput(q2, sizeof(*q2));
- return(sentinel.ai_next);
-}
-
-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;
-}
-
-/* Private. */
-
-static struct hostent *
-gethostans(struct irs_ho *this,
- const u_char *ansbuf, int anslen, const char *qname, int qtype,
- int af, int size, /* meaningless for addrinfo cases */
- struct addrinfo **ret_aip, const struct addrinfo *pai)
-{
- struct pvt *pvt = (struct pvt *)this->private;
- int type, class, ancount, qdcount, n, haveanswer, had_error;
- int error = NETDB_SUCCESS, arcount;
- int (*name_ok)(const char *);
- const HEADER *hp;
- const u_char *eom;
- const u_char *eor;
- const u_char *cp;
- const char *tname;
- const char *hname;
- char *bp, *ep, **ap, **hap;
- char tbuf[MAXDNAME+1];
- struct addrinfo sentinel, *cur, ai;
-
- if (pai == NULL) abort();
- if (ret_aip != NULL)
- *ret_aip = NULL;
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
-
- tname = qname;
- eom = ansbuf + anslen;
- switch (qtype) {
- case T_A:
- case T_AAAA:
- case T_ANY: /* use T_ANY only for T_A/T_AAAA lookup */
- name_ok = res_hnok;
- break;
- case T_PTR:
- name_ok = res_dnok;
- break;
- default:
- abort();
- }
-
- pvt->host.h_addrtype = af;
- pvt->host.h_length = size;
- hname = pvt->host.h_name = NULL;
-
- /*
- * Find first satisfactory answer.
- */
- if (ansbuf + HFIXEDSZ > eom) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- hp = (const HEADER *)ansbuf;
- ancount = ntohs(hp->ancount);
- qdcount = ntohs(hp->qdcount);
- arcount = ntohs(hp->arcount);
- bp = pvt->hostbuf;
- ep = pvt->hostbuf + sizeof(pvt->hostbuf);
- cp = ansbuf + HFIXEDSZ;
- if (qdcount != 1) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- n = dn_expand(ansbuf, eom, cp, bp, ep - bp);
- if (n < 0 || !maybe_ok(pvt->res, bp, name_ok)) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- cp += n + QFIXEDSZ;
- if (cp > eom) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- if (qtype == T_A || qtype == T_AAAA || qtype == T_ANY) {
- /* res_nsend() has already verified that the query name is the
- * same as the one we sent; this just gets the expanded name
- * (i.e., with the succeeding search-domain tacked on).
- */
- n = strlen(bp) + 1; /* for the \0 */
- if (n > MAXHOSTNAMELEN) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- pvt->host.h_name = bp;
- hname = bp;
- bp += n;
- /* The qname can be abbreviated, but hname is now absolute. */
- qname = pvt->host.h_name;
- }
- ap = pvt->host_aliases;
- *ap = NULL;
- pvt->host.h_aliases = pvt->host_aliases;
- hap = pvt->h_addr_ptrs;
- *hap = NULL;
- pvt->host.h_addr_list = pvt->h_addr_ptrs;
- haveanswer = 0;
- had_error = 0;
- while (ancount-- > 0 && cp < eom && !had_error) {
- n = dn_expand(ansbuf, eom, cp, bp, ep - bp);
- if (n < 0 || !maybe_ok(pvt->res, bp, name_ok)) {
- had_error++;
- continue;
- }
- cp += n; /* name */
- BOUNDS_CHECK(cp, 3 * INT16SZ + INT32SZ);
- type = ns_get16(cp);
- cp += INT16SZ; /* type */
- class = ns_get16(cp);
- cp += INT16SZ + INT32SZ; /* class, TTL */
- n = ns_get16(cp);
- cp += INT16SZ; /* len */
- BOUNDS_CHECK(cp, n);
- if (class != C_IN) {
- cp += n;
- continue;
- }
- eor = cp + n;
- if ((qtype == T_A || qtype == T_AAAA || qtype == T_ANY) &&
- type == T_CNAME) {
- if (haveanswer) {
- int level = LOG_CRIT;
-#ifdef LOG_SECURITY
- level |= LOG_SECURITY;
-#endif
- syslog(level,
- "gethostans: possible attempt to exploit buffer overflow while looking up %s",
- *qname ? qname : ".");
- }
- n = dn_expand(ansbuf, eor, cp, tbuf, sizeof tbuf);
- if (n < 0 || !maybe_ok(pvt->res, tbuf, name_ok)) {
- had_error++;
- continue;
- }
- cp += n;
- /* Store alias. */
- if (ap >= &pvt->host_aliases[MAXALIASES-1])
- continue;
- *ap++ = bp;
- n = strlen(bp) + 1; /* for the \0 */
- bp += n;
- /* Get canonical name. */
- n = strlen(tbuf) + 1; /* for the \0 */
- if (n > (ep - bp) || n > MAXHOSTNAMELEN) {
- had_error++;
- continue;
- }
-#ifdef HAVE_STRLCPY
- strlcpy(bp, tbuf, ep - bp);
-#else
- strcpy(bp, tbuf);
-#endif
- pvt->host.h_name = bp;
- hname = bp;
- bp += n;
- continue;
- }
- if (qtype == T_PTR && type == T_CNAME) {
- n = dn_expand(ansbuf, eor, cp, tbuf, sizeof tbuf);
- if (n < 0 || !maybe_dnok(pvt->res, tbuf)) {
- had_error++;
- continue;
- }
- cp += n;
-#ifdef RES_USE_DNAME
- if ((pvt->res->options & RES_USE_DNAME) != 0)
-#endif
- {
- /*
- * We may be able to check this regardless
- * of the USE_DNAME bit, but we add the check
- * for now since the DNAME support is
- * experimental.
- */
- if (ns_samename(tname, bp) != 1)
- continue;
- }
- /* Get canonical name. */
- n = strlen(tbuf) + 1; /* for the \0 */
- if (n > (ep - bp)) {
- had_error++;
- continue;
- }
-#ifdef HAVE_STRLCPY
- strlcpy(bp, tbuf, ep - bp);
-#else
- strcpy(bp, tbuf);
-#endif
- tname = bp;
- bp += n;
- continue;
- }
- if (qtype == T_ANY) {
- if (!(type == T_A || type == T_AAAA)) {
- cp += n;
- continue;
- }
- } else if (type != qtype) {
- cp += n;
- continue;
- }
- switch (type) {
- case T_PTR:
- if (ret_aip != NULL) {
- /* addrinfo never needs T_PTR */
- cp += n;
- continue;
- }
- if (ns_samename(tname, bp) != 1) {
- cp += n;
- continue;
- }
- n = dn_expand(ansbuf, eor, cp, bp, ep - bp);
- if (n < 0 || !maybe_hnok(pvt->res, bp) ||
- n >= MAXHOSTNAMELEN) {
- had_error++;
- break;
- }
- cp += n;
- if (!haveanswer) {
- pvt->host.h_name = bp;
- hname = bp;
- }
- else if (ap < &pvt->host_aliases[MAXALIASES-1])
- *ap++ = bp;
- else
- n = -1;
- if (n != -1) {
- n = strlen(bp) + 1; /* for the \0 */
- bp += n;
- }
- break;
- case T_A:
- case T_AAAA:
- if (ns_samename(hname, bp) != 1) {
- cp += n;
- continue;
- }
- if (type == T_A && n != INADDRSZ) {
- cp += n;
- continue;
- }
- if (type == T_AAAA && n != IN6ADDRSZ) {
- cp += n;
- continue;
- }
-
- /* make addrinfo. don't overwrite constant PAI */
- ai = *pai;
- ai.ai_family = (type == T_AAAA) ? AF_INET6 : AF_INET;
- cur->ai_next = addr2addrinfo(
- (const struct addrinfo *)&ai,
- (const char *)cp);
- if (cur->ai_next == NULL)
- had_error++;
-
- if (!haveanswer) {
- int nn;
-
- nn = strlen(bp) + 1; /* for the \0 */
- if (nn >= MAXHOSTNAMELEN) {
- cp += n;
- had_error++;
- continue;
- }
- pvt->host.h_name = bp;
- hname = bp;
- bp += nn;
- }
- /* Ensure alignment. */
- bp = (char *)(((u_long)bp + (sizeof(align) - 1)) &
- ~(sizeof(align) - 1));
- /* Avoid overflows. */
- if (bp + n >= &pvt->hostbuf[sizeof pvt->hostbuf]) {
- had_error++;
- continue;
- }
- if (ret_aip) { /* need addrinfo. keep it. */
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- } else if (cur->ai_next) { /* need hostent */
- struct addrinfo *aip = cur->ai_next;
-
- for (aip = cur->ai_next; aip;
- aip = aip->ai_next) {
- int m;
-
- m = add_hostent(pvt, bp, hap, aip);
- if (m < 0) {
- had_error++;
- break;
- }
- if (m == 0)
- continue;
- if (hap < &pvt->h_addr_ptrs[MAXADDRS-1])
- hap++;
- *hap = NULL;
- bp += m;
- }
-
- freeaddrinfo(cur->ai_next);
- cur->ai_next = NULL;
- }
- cp += n;
- break;
- default:
- abort();
- }
- if (!had_error)
- haveanswer++;
- }
- if (haveanswer) {
- if (ret_aip == NULL) {
- *ap = NULL;
- *hap = NULL;
-
- if (pvt->res->nsort && haveanswer > 1 && qtype == T_A)
- addrsort(pvt->res, pvt->h_addr_ptrs,
- haveanswer);
- if (pvt->host.h_name == NULL) {
- n = strlen(qname) + 1; /* for the \0 */
- if (n > (ep - bp) || n >= MAXHOSTNAMELEN)
- goto no_recovery;
-#ifdef HAVE_STRLCPY
- strlcpy(bp, qname, ep - bp);
-#else
- strcpy(bp, qname);
-#endif
- pvt->host.h_name = bp;
- bp += n;
- }
- if (pvt->res->options & RES_USE_INET6)
- map_v4v6_hostent(&pvt->host, &bp, ep);
- RES_SET_H_ERRNO(pvt->res, NETDB_SUCCESS);
- return (&pvt->host);
- } else {
- if ((pai->ai_flags & AI_CANONNAME) != 0) {
- if (pvt->host.h_name == NULL) {
- sentinel.ai_next->ai_canonname =
- strdup(qname);
- }
- else {
- sentinel.ai_next->ai_canonname =
- strdup(pvt->host.h_name);
- }
- }
- *ret_aip = sentinel.ai_next;
- return(NULL);
- }
- }
- no_recovery:
- if (sentinel.ai_next) {
- /* this should be impossible, but check it for safety */
- freeaddrinfo(sentinel.ai_next);
- }
- if (error == NETDB_SUCCESS)
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- else
- RES_SET_H_ERRNO(pvt->res, error);
- return(NULL);
-}
-
-static int
-add_hostent(struct pvt *pvt, char *bp, char **hap, struct addrinfo *ai)
-{
- int addrlen;
- char *addrp;
- const char **tap;
- char *obp = bp;
-
- switch(ai->ai_addr->sa_family) {
- case AF_INET6:
- addrlen = IN6ADDRSZ;
- addrp = (char *)&((struct sockaddr_in6 *)ai->ai_addr)->sin6_addr;
- break;
- case AF_INET:
- addrlen = INADDRSZ;
- addrp = (char *)&((struct sockaddr_in *)ai->ai_addr)->sin_addr;
- break;
- default:
- return(-1); /* abort? */
- }
-
- /* Ensure alignment. */
- bp = (char *)(((u_long)bp + (sizeof(align) - 1)) &
- ~(sizeof(align) - 1));
- /* Avoid overflows. */
- if (bp + addrlen >= &pvt->hostbuf[sizeof pvt->hostbuf])
- return(-1);
- if (hap >= &pvt->h_addr_ptrs[MAXADDRS-1])
- return(0); /* fail, but not treat it as an error. */
-
- /* Suppress duplicates. */
- for (tap = (const char **)pvt->h_addr_ptrs;
- *tap != NULL;
- tap++)
- if (memcmp(*tap, addrp, addrlen) == 0)
- break;
- if (*tap != NULL)
- return (0);
-
- memcpy(*hap = bp, addrp, addrlen);
- return((bp + addrlen) - obp);
-}
-
-static void
-map_v4v6_hostent(struct hostent *hp, char **bpp, char *ep) {
- char **ap;
-
- if (hp->h_addrtype != AF_INET || hp->h_length != INADDRSZ)
- return;
- hp->h_addrtype = AF_INET6;
- hp->h_length = IN6ADDRSZ;
- for (ap = hp->h_addr_list; *ap; ap++) {
- int i = (u_long)*bpp % sizeof(align);
-
- if (i != 0)
- i = sizeof(align) - i;
-
- if ((ep - *bpp) < (i + IN6ADDRSZ)) {
- /* Out of memory. Truncate address list here. */
- *ap = NULL;
- return;
- }
- *bpp += i;
- map_v4v6_address(*ap, *bpp);
- *ap = *bpp;
- *bpp += IN6ADDRSZ;
- }
-}
-
-static void
-addrsort(res_state statp, char **ap, int num) {
- int i, j, needsort = 0, aval[MAXADDRS];
- char **p;
-
- p = ap;
- for (i = 0; i < num; i++, p++) {
- for (j = 0 ; (unsigned)j < statp->nsort; j++)
- if (statp->sort_list[j].addr.s_addr ==
- (((struct in_addr *)(*p))->s_addr &
- statp->sort_list[j].mask))
- break;
- aval[i] = j;
- if (needsort == 0 && i > 0 && j < aval[i-1])
- needsort = i;
- }
- if (!needsort)
- return;
-
- while (needsort < num) {
- for (j = needsort - 1; j >= 0; j--) {
- if (aval[j] > aval[j+1]) {
- char *hp;
-
- i = aval[j];
- aval[j] = aval[j+1];
- aval[j+1] = i;
-
- hp = ap[j];
- ap[j] = ap[j+1];
- ap[j+1] = hp;
-
- } else
- break;
- }
- needsort++;
- }
-}
-
-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);
-}
diff --git a/contrib/bind/lib/irs/dns_nw.c b/contrib/bind/lib/irs/dns_nw.c
deleted file mode 100644
index a322f449..0000000
--- a/contrib/bind/lib/irs/dns_nw.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns_nw.c,v 1.25 2002/07/18 02:07:43 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Imports. */
-
-#include "port_before.h"
-
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "dns_p.h"
-
-#ifdef SPRINTF_CHAR
-# define SPRINTF(x) strlen(sprintf/**/x)
-#else
-# define SPRINTF(x) sprintf x
-#endif
-
-/* Definitions. */
-
-#define MAXALIASES 35
-
-#define MAXPACKET (64*1024)
-
-struct pvt {
- struct nwent net;
- char * ali[MAXALIASES];
- char buf[BUFSIZ+1];
- struct __res_state * res;
- void (*free_res)(void *);
-};
-
-typedef union {
- long al;
- char ac;
-} align;
-
-enum by_what { by_addr, by_name };
-
-/* Forwards. */
-
-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 * get1101byaddr(struct irs_nw *, u_char *, int);
-static struct nwent * get1101byname(struct irs_nw *, const char *);
-static struct nwent * get1101answer(struct irs_nw *,
- u_char *ansbuf, int anslen,
- enum by_what by_what,
- int af, const char *name,
- const u_char *addr, int addrlen);
-static struct nwent * get1101mask(struct irs_nw *this, struct nwent *);
-static int make1101inaddr(const u_char *, int, char *, int);
-static void normalize_name(char *name);
-static int init(struct irs_nw *this);
-
-/* Exports. */
-
-struct irs_nw *
-irs_dns_nw(struct irs_acc *this) {
- struct irs_nw *nw;
- struct pvt *pvt;
-
- UNUSED(this);
-
- 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);
- 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);
-
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-static struct nwent *
-nw_byname(struct irs_nw *this, const char *name, int af) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (init(this) == -1)
- return (NULL);
-
- switch (af) {
- case AF_INET:
- return (get1101byname(this, name));
- default:
- (void)NULL;
- }
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = EAFNOSUPPORT;
- return (NULL);
-}
-
-static struct nwent *
-nw_byaddr(struct irs_nw *this, void *net, int len, int af) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (init(this) == -1)
- return (NULL);
-
- switch (af) {
- case AF_INET:
- return (get1101byaddr(this, net, len));
- default:
- (void)NULL;
- }
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = EAFNOSUPPORT;
- return (NULL);
-}
-
-static struct nwent *
-nw_next(struct irs_nw *this) {
-
- UNUSED(this);
-
- return (NULL);
-}
-
-static void
-nw_rewind(struct irs_nw *this) {
- UNUSED(this);
- /* NOOP */
-}
-
-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 *
-get1101byname(struct irs_nw *this, const char *name) {
- struct pvt *pvt = (struct pvt *)this->private;
- u_char *ansbuf;
- int anslen;
- struct nwent *result;
-
- ansbuf = memget(MAXPACKET);
- if (ansbuf == NULL) {
- errno = ENOMEM;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- return (NULL);
- }
- anslen = res_nsearch(pvt->res, name, C_IN, T_PTR, ansbuf, MAXPACKET);
- if (anslen < 0) {
- memput(ansbuf, MAXPACKET);
- return (NULL);
- }
- result = get1101mask(this, get1101answer(this, ansbuf, anslen, by_name,
- AF_INET, name, NULL, 0));
- memput(ansbuf, MAXPACKET);
- return (result);
-}
-
-static struct nwent *
-get1101byaddr(struct irs_nw *this, u_char *net, int len) {
- struct pvt *pvt = (struct pvt *)this->private;
- char qbuf[sizeof "255.255.255.255.in-addr.arpa"];
- struct nwent *result;
- u_char *ansbuf;
- int anslen;
-
- if (len < 1 || len > 32) {
- errno = EINVAL;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- return (NULL);
- }
- if (make1101inaddr(net, len, qbuf, sizeof qbuf) < 0)
- return (NULL);
- ansbuf = memget(MAXPACKET);
- if (ansbuf == NULL) {
- errno = ENOMEM;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- return (NULL);
- }
- anslen = res_nquery(pvt->res, qbuf, C_IN, T_PTR, ansbuf, MAXPACKET);
- if (anslen < 0) {
- memput(ansbuf, MAXPACKET);
- return (NULL);
- }
- result = get1101mask(this, get1101answer(this, ansbuf, anslen, by_addr,
- AF_INET, NULL, net, len));
- memput(ansbuf, MAXPACKET);
- return (result);
-}
-
-static struct nwent *
-get1101answer(struct irs_nw *this,
- u_char *ansbuf, int anslen, enum by_what by_what,
- int af, const char *name, const u_char *addr, int addrlen)
-{
- struct pvt *pvt = (struct pvt *)this->private;
- int type, class, ancount, qdcount, haveanswer;
- char *bp, *ep, **ap;
- u_char *cp, *eom;
- HEADER *hp;
-
- /* Initialize, and parse header. */
- eom = ansbuf + anslen;
- if (ansbuf + HFIXEDSZ > eom) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- hp = (HEADER *)ansbuf;
- cp = ansbuf + HFIXEDSZ;
- qdcount = ntohs(hp->qdcount);
- while (qdcount-- > 0) {
- int n = dn_skipname(cp, eom);
- cp += n + QFIXEDSZ;
- if (n < 0 || cp > eom) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- }
- ancount = ntohs(hp->ancount);
- if (!ancount) {
- if (hp->aa)
- RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND);
- else
- RES_SET_H_ERRNO(pvt->res, TRY_AGAIN);
- return (NULL);
- }
-
- /* Prepare a return structure. */
- bp = pvt->buf;
- ep = pvt->buf + sizeof(pvt->buf);
- pvt->net.n_name = NULL;
- pvt->net.n_aliases = pvt->ali;
- pvt->net.n_addrtype = af;
- pvt->net.n_addr = NULL;
- pvt->net.n_length = addrlen;
-
- /* Save input key if given. */
- switch (by_what) {
- case by_name:
- if (name != NULL) {
- int n = strlen(name) + 1;
-
- if (n > (ep - bp)) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
-#ifdef HAVE_STRLCPY
- strlcpy(bp, name, ep - bp);
- pvt->net.n_name = bp;
-#else
- pvt->net.n_name = strcpy(bp, name);
-#endif
- bp += n;
- }
- break;
- case by_addr:
- if (addr != NULL && addrlen != 0) {
- int n = addrlen / 8 + ((addrlen % 8) != 0);
-
- if (INADDRSZ > (ep - bp)) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- memset(bp, 0, INADDRSZ);
- memcpy(bp, addr, n);
- pvt->net.n_addr = bp;
- bp += INADDRSZ;
- }
- break;
- default:
- abort();
- }
-
- /* Parse the answer, collect aliases. */
- ap = pvt->ali;
- haveanswer = 0;
- while (--ancount >= 0 && cp < eom) {
- int n = dn_expand(ansbuf, eom, cp, bp, ep - bp);
-
- cp += n; /* Owner */
- if (n < 0 || !maybe_dnok(pvt->res, bp) ||
- cp + 3 * INT16SZ + INT32SZ > eom) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- GETSHORT(type, cp); /* Type */
- GETSHORT(class, cp); /* Class */
- cp += INT32SZ; /* TTL */
- GETSHORT(n, cp); /* RDLENGTH */
- if (class == C_IN && type == T_PTR) {
- int nn;
-
- nn = dn_expand(ansbuf, eom, cp, bp, ep - bp);
- if (nn < 0 || !maybe_hnok(pvt->res, bp) || nn != n) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- normalize_name(bp);
- switch (by_what) {
- case by_addr: {
- if (pvt->net.n_name == NULL)
- pvt->net.n_name = bp;
- else if (ns_samename(pvt->net.n_name, bp) == 1)
- break;
- else
- *ap++ = bp;
- nn = strlen(bp) + 1;
- bp += nn;
- haveanswer++;
- break;
- }
- case by_name: {
- u_int b1, b2, b3, b4;
-
- if (pvt->net.n_addr != NULL ||
- sscanf(bp, "%u.%u.%u.%u.in-addr.arpa",
- &b1, &b2, &b3, &b4) != 4)
- break;
- if ((ep - bp) < INADDRSZ) {
- RES_SET_H_ERRNO(pvt->res, NO_RECOVERY);
- return (NULL);
- }
- pvt->net.n_addr = bp;
- *bp++ = b4;
- *bp++ = b3;
- *bp++ = b2;
- *bp++ = b1;
- pvt->net.n_length = INADDRSZ * 8;
- haveanswer++;
- }
- }
- }
- cp += n; /* RDATA */
- }
- if (!haveanswer) {
- RES_SET_H_ERRNO(pvt->res, TRY_AGAIN);
- return (NULL);
- }
- *ap = NULL;
-
- return (&pvt->net);
-}
-
-static struct nwent *
-get1101mask(struct irs_nw *this, struct nwent *nwent) {
- struct pvt *pvt = (struct pvt *)this->private;
- char qbuf[sizeof "255.255.255.255.in-addr.arpa"], owner[MAXDNAME];
- int anslen, type, class, ancount, qdcount;
- u_char *ansbuf, *cp, *eom;
- HEADER *hp;
-
- if (!nwent)
- return (NULL);
- if (make1101inaddr(nwent->n_addr, nwent->n_length, qbuf, sizeof qbuf)
- < 0) {
- /* "First, do no harm." */
- return (nwent);
- }
-
- ansbuf = memget(MAXPACKET);
- if (ansbuf == NULL) {
- errno = ENOMEM;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- return (NULL);
- }
- /* Query for the A RR that would hold this network's mask. */
- anslen = res_nquery(pvt->res, qbuf, C_IN, T_A, ansbuf, MAXPACKET);
- if (anslen < HFIXEDSZ) {
- memput(ansbuf, MAXPACKET);
- return (nwent);
- }
-
- /* Initialize, and parse header. */
- hp = (HEADER *)ansbuf;
- cp = ansbuf + HFIXEDSZ;
- eom = ansbuf + anslen;
- qdcount = ntohs(hp->qdcount);
- while (qdcount-- > 0) {
- int n = dn_skipname(cp, eom);
- cp += n + QFIXEDSZ;
- if (n < 0 || cp > eom) {
- memput(ansbuf, MAXPACKET);
- return (nwent);
- }
- }
- ancount = ntohs(hp->ancount);
-
- /* Parse the answer, collect aliases. */
- while (--ancount >= 0 && cp < eom) {
- int n = dn_expand(ansbuf, eom, cp, owner, sizeof owner);
-
- if (n < 0 || !maybe_dnok(pvt->res, owner))
- break;
- cp += n; /* Owner */
- if (cp + 3 * INT16SZ + INT32SZ > eom)
- break;
- GETSHORT(type, cp); /* Type */
- GETSHORT(class, cp); /* Class */
- cp += INT32SZ; /* TTL */
- GETSHORT(n, cp); /* RDLENGTH */
- if (cp + n > eom)
- break;
- if (n == INADDRSZ && class == C_IN && type == T_A &&
- ns_samename(qbuf, owner) == 1) {
- /* This A RR indicates the actual netmask. */
- int nn, mm;
-
- nwent->n_length = 0;
- for (nn = 0; nn < INADDRSZ; nn++)
- for (mm = 7; mm >= 0; mm--)
- if (cp[nn] & (1 << mm))
- nwent->n_length++;
- else
- break;
- }
- cp += n; /* RDATA */
- }
- memput(ansbuf, MAXPACKET);
- return (nwent);
-}
-
-static int
-make1101inaddr(const u_char *net, int bits, char *name, int size) {
- int n, m;
- char *ep;
-
- ep = name + size;
-
- /* Zero fill any whole bytes left out of the prefix. */
- for (n = (32 - bits) / 8; n > 0; n--) {
- if (ep - name < (int)(sizeof "0."))
- goto emsgsize;
- m = SPRINTF((name, "0."));
- name += m;
- }
-
- /* Format the partial byte, if any, within the prefix. */
- if ((n = bits % 8) != 0) {
- if (ep - name < (int)(sizeof "255."))
- goto emsgsize;
- m = SPRINTF((name, "%u.",
- net[bits / 8] & ~((1 << (8 - n)) - 1)));
- name += m;
- }
-
- /* Format the whole bytes within the prefix. */
- for (n = bits / 8; n > 0; n--) {
- if (ep - name < (int)(sizeof "255."))
- goto emsgsize;
- m = SPRINTF((name, "%u.", net[n - 1]));
- name += m;
- }
-
- /* Add the static text. */
- if (ep - name < (int)(sizeof "in-addr.arpa"))
- goto emsgsize;
- (void) SPRINTF((name, "in-addr.arpa"));
- return (0);
-
- emsgsize:
- errno = EMSGSIZE;
- return (-1);
-}
-
-static void
-normalize_name(char *name) {
- char *t;
-
- /* Make lower case. */
- for (t = name; *t; t++)
- if (isascii((unsigned char)*t) && isupper((unsigned char)*t))
- *t = tolower(*t);
-
- /* Remove trailing dots. */
- while (t > name && t[-1] == '.')
- *--t = '\0';
-}
-
-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);
-}
diff --git a/contrib/bind/lib/irs/dns_p.h b/contrib/bind/lib/irs/dns_p.h
deleted file mode 100644
index 6b5fe11..0000000
--- a/contrib/bind/lib/irs/dns_p.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * $Id: dns_p.h,v 1.11 1999/06/03 20:50:36 vixie Exp $
- */
-
-#ifndef _DNS_P_H_INCLUDED
-#define _DNS_P_H_INCLUDED
-
-#define maybe_ok(res, nm, ok) (((res)->options & RES_NOCHECKNAME) != 0 || \
- (ok)(nm) != 0)
-#define maybe_hnok(res, hn) maybe_ok((res), (hn), res_hnok)
-#define maybe_dnok(res, dn) maybe_ok((res), (dn), res_dnok)
-
-/*
- * Object state.
- */
-struct dns_p {
- void *hes_ctx;
- struct __res_state *res;
- void (*free_res) __P((void *));
-};
-
-/*
- * Methods.
- */
-
-extern struct irs_gr * irs_dns_gr __P((struct irs_acc *));
-extern struct irs_pw * irs_dns_pw __P((struct irs_acc *));
-extern struct irs_sv * irs_dns_sv __P((struct irs_acc *));
-extern struct irs_pr * irs_dns_pr __P((struct irs_acc *));
-extern struct irs_ho * irs_dns_ho __P((struct irs_acc *));
-extern struct irs_nw * irs_dns_nw __P((struct irs_acc *));
-
-#endif /*_DNS_P_H_INCLUDED*/
diff --git a/contrib/bind/lib/irs/dns_pr.c b/contrib/bind/lib/irs/dns_pr.c
deleted file mode 100644
index 64de35a..0000000
--- a/contrib/bind/lib/irs/dns_pr.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns_pr.c,v 1.15 2001/05/29 05:48:31 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <netdb.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "hesiod.h"
-#include "dns_p.h"
-
-/* Types. */
-
-struct pvt {
- struct dns_p * dns;
- struct protoent proto;
- char * prbuf;
-};
-
-/* 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 __res_state * pr_res_get(struct irs_pr *);
-static void pr_res_set(struct irs_pr *,
- struct __res_state *,
- void (*)(void *));
-
-static struct protoent * parse_hes_list(struct irs_pr *, char **);
-
-/* Public. */
-
-struct irs_pr *
-irs_dns_pr(struct irs_acc *this) {
- struct dns_p *dns = (struct dns_p *)this->private;
- struct pvt *pvt;
- struct irs_pr *pr;
-
- if (!dns->hes_ctx) {
- errno = ENODEV;
- return (NULL);
- }
- if (!(pvt = memget(sizeof *pvt))) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(pvt, 0, sizeof *pvt);
- if (!(pr = memget(sizeof *pr))) {
- memput(pvt, sizeof *pvt);
- errno = ENOMEM;
- return (NULL);
- }
- memset(pr, 0x5e, sizeof *pr);
- pvt->dns = dns;
- 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 = pr_res_get;
- pr->res_set = pr_res_set;
- return (pr);
-}
-
-/* Methods. */
-
-static void
-pr_close(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- 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;
- struct dns_p *dns = pvt->dns;
- struct protoent *proto;
- char **hes_list;
-
- if (!(hes_list = hesiod_resolve(dns->hes_ctx, name, "protocol")))
- return (NULL);
-
- proto = parse_hes_list(this, hes_list);
- hesiod_free_list(dns->hes_ctx, hes_list);
- return (proto);
-}
-
-static struct protoent *
-pr_bynumber(struct irs_pr *this, int num) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct dns_p *dns = pvt->dns;
- struct protoent *proto;
- char numstr[16];
- char **hes_list;
-
- sprintf(numstr, "%d", num);
- if (!(hes_list = hesiod_resolve(dns->hes_ctx, numstr, "protonum")))
- return (NULL);
-
- proto = parse_hes_list(this, hes_list);
- hesiod_free_list(dns->hes_ctx, hes_list);
- return (proto);
-}
-
-static struct protoent *
-pr_next(struct irs_pr *this) {
- UNUSED(this);
- errno = ENODEV;
- return (NULL);
-}
-
-static void
-pr_rewind(struct irs_pr *this) {
- UNUSED(this);
- /* NOOP */
-}
-
-static void
-pr_minimize(struct irs_pr *this) {
- UNUSED(this);
- /* NOOP */
-}
-
-static struct __res_state *
-pr_res_get(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct dns_p *dns = pvt->dns;
-
- return (__hesiod_res_get(dns->hes_ctx));
-}
-
-static void
-pr_res_set(struct irs_pr *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 protoent *
-parse_hes_list(struct irs_pr *this, char **hes_list) {
- struct pvt *pvt = (struct pvt *)this->private;
- char *p, *cp, **cpp, **new;
- int num = 0;
- int max = 0;
-
- for (cpp = hes_list; *cpp; cpp++) {
- cp = *cpp;
-
- /* Strip away comments, if any. */
- if ((p = strchr(cp, '#')))
- *p = 0;
-
- /* Skip blank lines. */
- p = cp;
- while (*p && !isspace((unsigned char)*p))
- p++;
- if (!*p)
- continue;
-
- /* OK, we've got a live one. Let's parse it for real. */
- if (pvt->prbuf)
- free(pvt->prbuf);
- pvt->prbuf = strdup(cp);
-
- p = pvt->prbuf;
- pvt->proto.p_name = p;
- while (*p && !isspace((unsigned char)*p))
- p++;
- if (!*p)
- continue;
- *p++ = '\0';
-
- pvt->proto.p_proto = atoi(p);
- while (*p && !isspace((unsigned char)*p))
- p++;
- if (*p)
- *p++ = '\0';
-
- while (*p) {
- if ((num + 1) >= max || !pvt->proto.p_aliases) {
- max += 10;
- new = realloc(pvt->proto.p_aliases,
- max * sizeof(char *));
- if (!new) {
- errno = ENOMEM;
- goto cleanup;
- }
- pvt->proto.p_aliases = new;
- }
- pvt->proto.p_aliases[num++] = 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[num] = 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);
-}
diff --git a/contrib/bind/lib/irs/dns_pw.c b/contrib/bind/lib/irs/dns_pw.c
deleted file mode 100644
index b3f7e05..0000000
--- a/contrib/bind/lib/irs/dns_pw.c
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns_pw.c,v 1.19 2001/05/29 05:48:32 marka Exp $";
-#endif
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_PW
-static int __bind_irs_pw_unneeded;
-#else
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <isc/memcluster.h>
-
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/dns_sv.c b/contrib/bind/lib/irs/dns_sv.c
deleted file mode 100644
index b3244a7..0000000
--- a/contrib/bind/lib/irs/dns_sv.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: dns_sv.c,v 1.20 2001/05/29 05:48:33 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <netinet/in.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <netdb.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "hesiod.h"
-#include "dns_p.h"
-
-/* Definitions */
-
-struct pvt {
- struct dns_p * dns;
- struct servent serv;
- char * svbuf;
- struct __res_state * res;
- void (*free_res)(void *);
-};
-
-/* Forward. */
-
-static void sv_close(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 struct servent * sv_next(struct irs_sv *);
-static void sv_rewind(struct irs_sv *);
-static void sv_minimize(struct irs_sv *);
-#ifdef SV_RES_SETGET
-static struct __res_state * sv_res_get(struct irs_sv *);
-static void sv_res_set(struct irs_sv *,
- struct __res_state *,
- void (*)(void *));
-#endif
-
-static struct servent * parse_hes_list(struct irs_sv *,
- char **, const char *);
-
-/* Public */
-
-struct irs_sv *
-irs_dns_sv(struct irs_acc *this) {
- struct dns_p *dns = (struct dns_p *)this->private;
- struct irs_sv *sv;
- 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 (!(sv = memget(sizeof *sv))) {
- memput(pvt, sizeof *pvt);
- errno = ENOMEM;
- return (NULL);
- }
- memset(sv, 0x5e, sizeof *sv);
- sv->private = pvt;
- sv->byname = sv_byname;
- sv->byport = sv_byport;
- sv->next = sv_next;
- sv->rewind = sv_rewind;
- sv->close = sv_close;
- sv->minimize = sv_minimize;
-#ifdef SV_RES_SETGET
- sv->res_get = sv_res_get;
- sv->res_set = sv_res_set;
-#else
- sv->res_get = NULL; /* sv_res_get; */
- sv->res_set = NULL; /* sv_res_set; */
-#endif
- return (sv);
-}
-
-/* Methods */
-
-static void
-sv_close(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->serv.s_aliases)
- free(pvt->serv.s_aliases);
- if (pvt->svbuf)
- free(pvt->svbuf);
-
- if (pvt->res && pvt->free_res)
- (*pvt->free_res)(pvt->res);
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-static struct servent *
-sv_byname(struct irs_sv *this, const char *name, const char *proto) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct dns_p *dns = pvt->dns;
- struct servent *s;
- char **hes_list;
-
- if (!(hes_list = hesiod_resolve(dns->hes_ctx, name, "service")))
- return (NULL);
-
- s = parse_hes_list(this, hes_list, proto);
- hesiod_free_list(dns->hes_ctx, hes_list);
- return (s);
-}
-
-static struct servent *
-sv_byport(struct irs_sv *this, int port, const char *proto) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct dns_p *dns = pvt->dns;
- struct servent *s;
- char portstr[16];
- char **hes_list;
-
- sprintf(portstr, "%d", ntohs(port));
- if (!(hes_list = hesiod_resolve(dns->hes_ctx, portstr, "port")))
- return (NULL);
-
- s = parse_hes_list(this, hes_list, proto);
- hesiod_free_list(dns->hes_ctx, hes_list);
- return (s);
-}
-
-static struct servent *
-sv_next(struct irs_sv *this) {
- UNUSED(this);
- errno = ENODEV;
- return (NULL);
-}
-
-static void
-sv_rewind(struct irs_sv *this) {
- UNUSED(this);
- /* NOOP */
-}
-
-/* Private */
-
-static struct servent *
-parse_hes_list(struct irs_sv *this, char **hes_list, const char *proto) {
- struct pvt *pvt = (struct pvt *)this->private;
- char *p, *cp, **cpp, **new;
- int proto_len;
- int num = 0;
- int max = 0;
-
- for (cpp = hes_list; *cpp; cpp++) {
- cp = *cpp;
-
- /* Strip away comments, if any. */
- if ((p = strchr(cp, '#')))
- *p = 0;
-
- /* Check to make sure the protocol matches. */
- p = cp;
- while (*p && !isspace((unsigned char)*p))
- p++;
- if (!*p)
- continue;
- if (proto) {
- proto_len = strlen(proto);
- if (strncasecmp(++p, proto, proto_len) != 0)
- continue;
- if (p[proto_len] && !isspace(p[proto_len]&0xff))
- continue;
- }
- /* OK, we've got a live one. Let's parse it for real. */
- if (pvt->svbuf)
- free(pvt->svbuf);
- pvt->svbuf = strdup(cp);
-
- p = pvt->svbuf;
- pvt->serv.s_name = p;
- while (*p && !isspace(*p&0xff))
- p++;
- if (!*p)
- continue;
- *p++ = '\0';
-
- pvt->serv.s_proto = p;
- while (*p && !isspace(*p&0xff))
- p++;
- if (!*p)
- continue;
- *p++ = '\0';
-
- pvt->serv.s_port = htons((u_short) atoi(p));
- while (*p && !isspace(*p&0xff))
- p++;
- if (*p)
- *p++ = '\0';
-
- while (*p) {
- if ((num + 1) >= max || !pvt->serv.s_aliases) {
- max += 10;
- new = realloc(pvt->serv.s_aliases,
- max * sizeof(char *));
- if (!new) {
- errno = ENOMEM;
- goto cleanup;
- }
- pvt->serv.s_aliases = new;
- }
- pvt->serv.s_aliases[num++] = p;
- while (*p && !isspace(*p&0xff))
- p++;
- if (*p)
- *p++ = '\0';
- }
- if (!pvt->serv.s_aliases)
- pvt->serv.s_aliases = malloc(sizeof(char *));
- if (!pvt->serv.s_aliases)
- goto cleanup;
- pvt->serv.s_aliases[num] = 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
-sv_minimize(struct irs_sv *this) {
- UNUSED(this);
- /* NOOP */
-}
-
-#ifdef SV_RES_SETGET
-static struct __res_state *
-sv_res_get(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct dns_p *dns = pvt->dns;
-
- return (__hesiod_res_get(dns->hes_ctx));
-}
-
-static void
-sv_res_set(struct irs_sv *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
diff --git a/contrib/bind/lib/irs/gai_strerror.c b/contrib/bind/lib/irs/gai_strerror.c
deleted file mode 100644
index c487e68..0000000
--- a/contrib/bind/lib/irs/gai_strerror.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2001 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.
- */
-
-#include <port_before.h>
-#include <netdb.h>
-#include <port_after.h>
-
-#ifdef DO_PTHREADS
-#include <pthread.h>
-#include <stdlib.h>
-#endif
-
-static const char *gai_errlist[] = {
- "no error",
- "address family not supported for name",/* EAI_ADDRFAMILY */
- "temporary failure", /* EAI_AGAIN */
- "invalid flags", /* EAI_BADFLAGS */
- "permanent failure", /* EAI_FAIL */
- "address family not supported", /* EAI_FAMILY */
- "memory failure", /* EAI_MEMORY */
- "no address", /* EAI_NODATA */
- "unknown name or service", /* EAI_NONAME */
- "service not supported for socktype", /* EAI_SERVICE */
- "socktype not supported", /* EAI_SOCKTYPE */
- "system failure", /* EAI_SYSTEM */
- "bad hints", /* EAI_BADHINTS */
- "bad protocol", /* EAI_PROTOCOL */
-
- "unknown error" /* Must be last. */
-};
-
-static const int gai_nerr = (sizeof(gai_errlist)/sizeof(*gai_errlist));
-
-#define EAI_BUFSIZE 128
-
-const char *
-gai_strerror(int ecode) {
-#ifndef DO_PTHREADS
- static char buf[EAI_BUFSIZE];
-#else /* DO_PTHREADS */
- static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
- 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) {
- pthread_mutex_lock(&lock);
- if (!once++)
- pthread_key_create(&key, free);
- pthread_mutex_unlock(&lock);
- }
-
- buf = pthread_getspecific(key);
- if (buf == NULL) {
- buf = malloc(EAI_BUFSIZE);
- if (buf == NULL)
- return ("unknown error");
- pthread_setspecific(key, buf);
- }
-#endif
- /*
- * XXX This really should be snprintf(buf, EAI_BUFSIZE, ...).
- * It is safe until message catalogs are used.
- */
- sprintf(buf, "%s: %d", gai_errlist[gai_nerr - 1], ecode);
- return (buf);
-}
diff --git a/contrib/bind/lib/irs/gen.c b/contrib/bind/lib/irs/gen.c
deleted file mode 100644
index 5ba7d52..0000000
--- a/contrib/bind/lib/irs/gen.c
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gen.c,v 1.26 2001/05/29 05:48:35 marka Exp $";
-#endif
-
-/*
- * this is the top level dispatcher
- *
- * The dispatcher is implemented as an accessor class; it is an
- * accessor class that calls other accessor classes, as controlled by a
- * configuration file.
- *
- * A big difference between this accessor class and others is that the
- * map class initializers are NULL, and the map classes are already
- * filled in with method functions that will do the right thing.
- */
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <isc/assertions.h>
-#include <ctype.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "gen_p.h"
-
-/* Definitions */
-
-struct nameval {
- const char * name;
- int val;
-};
-
-static const struct nameval acc_names[irs_nacc+1] = {
- { "local", irs_lcl },
- { "dns", irs_dns },
- { "nis", irs_nis },
- { "irp", irs_irp },
- { NULL, irs_nacc }
-};
-
-typedef struct irs_acc *(*accinit) __P((const char *options));
-
-static const accinit accs[irs_nacc+1] = {
- irs_lcl_acc,
- irs_dns_acc,
-#ifdef WANT_IRS_NIS
- irs_nis_acc,
-#else
- NULL,
-#endif
- irs_irp_acc,
- NULL
-};
-
-static const struct nameval map_names[irs_nmap+1] = {
- { "group", irs_gr },
- { "passwd", irs_pw },
- { "services", irs_sv },
- { "protocols", irs_pr },
- { "hosts", irs_ho },
- { "networks", irs_nw },
- { "netgroup", irs_ng },
- { NULL, irs_nmap }
-};
-
-static const struct nameval option_names[] = {
- { "merge", IRS_MERGE },
- { "continue", IRS_CONTINUE },
- { NULL, 0 }
-};
-
-/* Forward */
-
-static void gen_close(struct irs_acc *);
-static struct __res_state * gen_res_get(struct irs_acc *);
-static void gen_res_set(struct irs_acc *, struct __res_state *,
- void (*)(void *));
-static int find_name(const char *, const struct nameval nv[]);
-static void init_map_rules(struct gen_p *, const char *conf_file);
-static struct irs_rule *release_rule(struct irs_rule *);
-static int add_rule(struct gen_p *,
- enum irs_map_id, enum irs_acc_id,
- const char *);
-
-/* Public */
-
-struct irs_acc *
-irs_gen_acc(const char *options, const char *conf_file) {
- struct irs_acc *acc;
- struct gen_p *irs;
-
- if (!(acc = memget(sizeof *acc))) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(acc, 0x5e, sizeof *acc);
- if (!(irs = memget(sizeof *irs))) {
- errno = ENOMEM;
- memput(acc, sizeof *acc);
- return (NULL);
- }
- memset(irs, 0x5e, sizeof *irs);
- irs->options = strdup(options);
- irs->res = NULL;
- irs->free_res = NULL;
- memset(irs->accessors, 0, sizeof irs->accessors);
- memset(irs->map_rules, 0, sizeof irs->map_rules);
- init_map_rules(irs, conf_file);
- acc->private = irs;
-#ifdef WANT_IRS_GR
- acc->gr_map = irs_gen_gr;
-#else
- acc->gr_map = NULL;
-#endif
-#ifdef WANT_IRS_PW
- acc->pw_map = irs_gen_pw;
-#else
- acc->pw_map = NULL;
-#endif
- acc->sv_map = irs_gen_sv;
- acc->pr_map = irs_gen_pr;
- acc->ho_map = irs_gen_ho;
- acc->nw_map = irs_gen_nw;
- acc->ng_map = irs_gen_ng;
- acc->res_get = gen_res_get;
- acc->res_set = gen_res_set;
- acc->close = gen_close;
- return (acc);
-}
-
-/* Methods */
-
-static struct __res_state *
-gen_res_get(struct irs_acc *this) {
- struct gen_p *irs = (struct gen_p *)this->private;
-
- if (irs->res == NULL) {
- struct __res_state *res;
- res = (struct __res_state *)malloc(sizeof *res);
- if (res == NULL)
- return (NULL);
- memset(res, 0, sizeof *res);
- gen_res_set(this, res, free);
- }
-
- if (((irs->res->options & RES_INIT) == 0) && res_ninit(irs->res) < 0)
- return (NULL);
-
- return (irs->res);
-}
-
-static void
-gen_res_set(struct irs_acc *this, struct __res_state *res,
- void (*free_res)(void *)) {
- struct gen_p *irs = (struct gen_p *)this->private;
-#if 0
- struct irs_rule *rule;
- struct irs_ho *ho;
- struct irs_nw *nw;
-#endif
-
- if (irs->res && irs->free_res) {
- res_nclose(irs->res);
- (*irs->free_res)(irs->res);
- }
-
- irs->res = res;
- irs->free_res = free_res;
-
-#if 0
- for (rule = irs->map_rules[irs_ho]; rule; rule = rule->next) {
- ho = rule->inst->ho;
-
- (*ho->res_set)(ho, res, NULL);
- }
- for (rule = irs->map_rules[irs_nw]; rule; rule = rule->next) {
- nw = rule->inst->nw;
-
- (*nw->res_set)(nw, res, NULL);
- }
-#endif
-}
-
-static void
-gen_close(struct irs_acc *this) {
- struct gen_p *irs = (struct gen_p *)this->private;
- int n;
-
- /* Search rules. */
- for (n = 0; n < irs_nmap; n++)
- while (irs->map_rules[n] != NULL)
- irs->map_rules[n] = release_rule(irs->map_rules[n]);
-
- /* Access methods. */
- for (n = 0; n < irs_nacc; n++) {
- /* Map objects. */
- if (irs->accessors[n].gr != NULL)
- (*irs->accessors[n].gr->close)(irs->accessors[n].gr);
- if (irs->accessors[n].pw != NULL)
- (*irs->accessors[n].pw->close)(irs->accessors[n].pw);
- if (irs->accessors[n].sv != NULL)
- (*irs->accessors[n].sv->close)(irs->accessors[n].sv);
- if (irs->accessors[n].pr != NULL)
- (*irs->accessors[n].pr->close)(irs->accessors[n].pr);
- if (irs->accessors[n].ho != NULL)
- (*irs->accessors[n].ho->close)(irs->accessors[n].ho);
- if (irs->accessors[n].nw != NULL)
- (*irs->accessors[n].nw->close)(irs->accessors[n].nw);
- if (irs->accessors[n].ng != NULL)
- (*irs->accessors[n].ng->close)(irs->accessors[n].ng);
- /* Enclosing accessor. */
- if (irs->accessors[n].acc != NULL)
- (*irs->accessors[n].acc->close)(irs->accessors[n].acc);
- }
-
- /* The options string was strdup'd. */
- free((void*)irs->options);
-
- if (irs->res && irs->free_res)
- (*irs->free_res)(irs->res);
-
- /* The private data container. */
- memput(irs, sizeof *irs);
-
- /* The object. */
- memput(this, sizeof *this);
-}
-
-/* Private */
-
-static int
-find_name(const char *name, const struct nameval names[]) {
- int n;
-
- for (n = 0; names[n].name != NULL; n++)
- if (strcmp(name, names[n].name) == 0)
- return (names[n].val);
- return (-1);
-}
-
-static struct irs_rule *
-release_rule(struct irs_rule *rule) {
- struct irs_rule *next = rule->next;
-
- memput(rule, sizeof *rule);
- return (next);
-}
-
-static int
-add_rule(struct gen_p *irs,
- enum irs_map_id map, enum irs_acc_id acc,
- const char *options)
-{
- struct irs_rule **rules, *last, *tmp, *new;
- struct irs_inst *inst;
- const char *cp;
- int n;
-
-#ifndef WANT_IRS_GR
- if (map == irs_gr)
- return (-1);
-#endif
-#ifndef WANT_IRS_PW
- if (map == irs_pw)
- return (-1);
-#endif
-#ifndef WANT_IRS_NIS
- if (acc == irs_nis)
- return (-1);
-#endif
- new = memget(sizeof *new);
- if (new == NULL)
- return (-1);
- memset(new, 0x5e, sizeof *new);
- new->next = NULL;
-
- new->inst = &irs->accessors[acc];
-
- new->flags = 0;
- cp = options;
- while (cp && *cp) {
- char option[50], *next;
-
- next = strchr(cp, ',');
- if (next)
- n = next++ - cp;
- else
- n = strlen(cp);
- if ((size_t)n > sizeof option - 1)
- n = sizeof option - 1;
- strncpy(option, cp, n);
- option[n] = '\0';
-
- n = find_name(option, option_names);
- if (n >= 0)
- new->flags |= n;
-
- cp = next;
- }
-
- rules = &irs->map_rules[map];
- for (last = NULL, tmp = *rules;
- tmp != NULL;
- last = tmp, tmp = tmp->next)
- (void)NULL;
- if (last == NULL)
- *rules = new;
- else
- last->next = new;
-
- /* Try to instantiate map accessors for this if necessary & approp. */
- inst = &irs->accessors[acc];
- if (inst->acc == NULL && accs[acc] != NULL)
- inst->acc = (*accs[acc])(irs->options);
- if (inst->acc != NULL) {
- if (inst->gr == NULL && inst->acc->gr_map != NULL)
- inst->gr = (*inst->acc->gr_map)(inst->acc);
- if (inst->pw == NULL && inst->acc->pw_map != NULL)
- inst->pw = (*inst->acc->pw_map)(inst->acc);
- if (inst->sv == NULL && inst->acc->sv_map != NULL)
- inst->sv = (*inst->acc->sv_map)(inst->acc);
- if (inst->pr == NULL && inst->acc->pr_map != NULL)
- inst->pr = (*inst->acc->pr_map)(inst->acc);
- if (inst->ho == NULL && inst->acc->ho_map != NULL)
- inst->ho = (*inst->acc->ho_map)(inst->acc);
- if (inst->nw == NULL && inst->acc->nw_map != NULL)
- inst->nw = (*inst->acc->nw_map)(inst->acc);
- if (inst->ng == NULL && inst->acc->ng_map != NULL)
- inst->ng = (*inst->acc->ng_map)(inst->acc);
- }
-
- return (0);
-}
-
-static void
-default_map_rules(struct gen_p *irs) {
- /* Install time honoured and proved BSD style rules as default. */
- add_rule(irs, irs_gr, irs_lcl, "");
- add_rule(irs, irs_pw, irs_lcl, "");
- add_rule(irs, irs_sv, irs_lcl, "");
- add_rule(irs, irs_pr, irs_lcl, "");
- add_rule(irs, irs_ho, irs_dns, "continue");
- add_rule(irs, irs_ho, irs_lcl, "");
- add_rule(irs, irs_nw, irs_dns, "continue");
- add_rule(irs, irs_nw, irs_lcl, "");
- add_rule(irs, irs_ng, irs_lcl, "");
-}
-
-static void
-init_map_rules(struct gen_p *irs, const char *conf_file) {
- char line[1024], pattern[40], mapname[20], accname[20], options[100];
- FILE *conf;
-
- if (conf_file == NULL)
- conf_file = _PATH_IRS_CONF ;
-
- /* A conf file of "" means compiled in defaults. Irpd wants this */
- if (conf_file[0] == '\0' || (conf = fopen(conf_file, "r")) == NULL) {
- default_map_rules(irs);
- return;
- }
- (void) sprintf(pattern, "%%%ds %%%ds %%%ds\n",
- sizeof mapname, sizeof accname, sizeof options);
- while (fgets(line, sizeof line, conf)) {
- enum irs_map_id map;
- enum irs_acc_id acc;
- char *tmp;
- int n;
-
- for (tmp = line;
- isascii((unsigned char)*tmp) &&
- isspace((unsigned char)*tmp);
- tmp++)
- (void)NULL;
- if (*tmp == '#' || *tmp == '\n' || *tmp == '\0')
- continue;
- n = sscanf(tmp, pattern, mapname, accname, options);
- if (n < 2)
- continue;
- if (n < 3)
- options[0] = '\0';
-
- n = find_name(mapname, map_names);
- INSIST(n < irs_nmap);
- if (n < 0)
- continue;
- map = (enum irs_map_id) n;
-
- n = find_name(accname, acc_names);
- INSIST(n < irs_nacc);
- if (n < 0)
- continue;
- acc = (enum irs_acc_id) n;
-
- add_rule(irs, map, acc, options);
- }
- fclose(conf);
-}
diff --git a/contrib/bind/lib/irs/gen_gr.c b/contrib/bind/lib/irs/gen_gr.c
deleted file mode 100644
index 9a7af3d..0000000
--- a/contrib/bind/lib/irs/gen_gr.c
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gen_gr.c,v 1.26 2002/07/18 02:07:44 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_GR
-static int __bind_irs_gr_unneeded;
-#else
-
-#include <sys/types.h>
-
-#include <isc/assertions.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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 void 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);
-
-/* 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) {
- grmerge(this, tval, dirty++);
- 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) {
- grmerge(this, tval, dirty++);
- 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 void
-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) {
- /* No harm done, no work done. */
- return;
- }
- 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) {
- /* No harm done, no work done. */
- return;
- }
- 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;
- }
- used = preserve ? pvt->membufsize : 0;
- cp = malloc(used + n);
- if (!cp) {
- /* No harm done, no work done. */
- return;
- }
- 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;
-#ifdef HAVE_STRLCPY
- strlcpy(cp, *m, ep - cp);
-#else
- strcpy(cp, *m);
-#endif
- cp += strlen(cp) + 1;
- }
- 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;
-#ifdef HAVE_STRLCPY
- strlcpy(cp, src->gr_name, ep - cp);
-#else
- strcpy(cp, src->gr_name);
-#endif
- cp += strlen(src->gr_name) + 1;
- pvt->group.gr_passwd = cp;
-#ifdef HAVE_STRLCPY
- strlcpy(cp, src->gr_passwd, ep - cp);
-#else
- strcpy(cp, src->gr_passwd);
-#endif
- cp += strlen(src->gr_passwd) + 1;
- }
- if (oldmembuf != NULL)
- free(oldmembuf);
- INSIST(cp >= pvt->membuf && cp <= &pvt->membuf[pvt->membufsize]);
-}
-
-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/contrib/bind/lib/irs/gen_ho.c b/contrib/bind/lib/irs/gen_ho.c
deleted file mode 100644
index 12ed7cd..0000000
--- a/contrib/bind/lib/irs/gen_ho.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: gen_ho.c,v 1.16 2001/05/29 05:48:36 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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_ho * ho;
- struct __res_state * res;
- void (*free_res)(void *);
-};
-
-/* 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 int init(struct irs_ho *this);
-
-/* Exports */
-
-struct irs_ho *
-irs_gen_ho(struct irs_acc *this) {
- struct gen_p *accpvt = (struct gen_p *)this->private;
- 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->rules = accpvt->map_rules[irs_ho];
- pvt->rule = pvt->rules;
- 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_get = ho_res_get;
- ho->res_set = ho_res_set;
- 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);
- 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 irs_rule *rule;
- struct hostent *rval;
- struct irs_ho *ho;
- int therrno = NETDB_INTERNAL;
- int softerror = 0;
-
- if (init(this) == -1)
- return (NULL);
-
- for (rule = pvt->rules; rule; rule = rule->next) {
- ho = rule->inst->ho;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = 0;
- rval = (*ho->byname)(ho, name);
- if (rval != NULL)
- return (rval);
- if (softerror == 0 &&
- pvt->res->res_h_errno != HOST_NOT_FOUND &&
- pvt->res->res_h_errno != NETDB_INTERNAL) {
- softerror = 1;
- therrno = pvt->res->res_h_errno;
- }
- if (rule->flags & IRS_CONTINUE)
- continue;
- /*
- * The value TRY_AGAIN can mean that the service
- * is not available, or just that this particular name
- * cannot be resolved now. We use the errno ECONNREFUSED
- * to distinguish. If a lookup sets that errno when
- * H_ERRNO is TRY_AGAIN, we continue to try other lookup
- * functions, otherwise we return the TRY_AGAIN error.
- */
- if (pvt->res->res_h_errno != TRY_AGAIN || errno != ECONNREFUSED)
- break;
- }
- if (softerror != 0 && pvt->res->res_h_errno == HOST_NOT_FOUND)
- RES_SET_H_ERRNO(pvt->res, therrno);
- return (NULL);
-}
-
-static struct hostent *
-ho_byname2(struct irs_ho *this, const char *name, int af) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct hostent *rval;
- struct irs_ho *ho;
- int therrno = NETDB_INTERNAL;
- int softerror = 0;
-
- if (init(this) == -1)
- return (NULL);
-
- for (rule = pvt->rules; rule; rule = rule->next) {
- ho = rule->inst->ho;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = 0;
- rval = (*ho->byname2)(ho, name, af);
- if (rval != NULL)
- return (rval);
- if (softerror == 0 &&
- pvt->res->res_h_errno != HOST_NOT_FOUND &&
- pvt->res->res_h_errno != NETDB_INTERNAL) {
- softerror = 1;
- therrno = pvt->res->res_h_errno;
- }
- if (rule->flags & IRS_CONTINUE)
- continue;
- /*
- * See the comments in ho_byname() explaining
- * the interpretation of TRY_AGAIN and ECONNREFUSED.
- */
- if (pvt->res->res_h_errno != TRY_AGAIN || errno != ECONNREFUSED)
- break;
- }
- if (softerror != 0 && pvt->res->res_h_errno == HOST_NOT_FOUND)
- RES_SET_H_ERRNO(pvt->res, therrno);
- return (NULL);
-}
-
-static struct hostent *
-ho_byaddr(struct irs_ho *this, const void *addr, int len, int af) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct hostent *rval;
- struct irs_ho *ho;
- int therrno = NETDB_INTERNAL;
- int softerror = 0;
-
-
- if (init(this) == -1)
- return (NULL);
-
- for (rule = pvt->rules; rule; rule = rule->next) {
- ho = rule->inst->ho;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = 0;
- rval = (*ho->byaddr)(ho, addr, len, af);
- if (rval != NULL)
- return (rval);
- if (softerror == 0 &&
- pvt->res->res_h_errno != HOST_NOT_FOUND &&
- pvt->res->res_h_errno != NETDB_INTERNAL) {
- softerror = 1;
- therrno = pvt->res->res_h_errno;
- }
-
- if (rule->flags & IRS_CONTINUE)
- continue;
- /*
- * See the comments in ho_byname() explaining
- * the interpretation of TRY_AGAIN and ECONNREFUSED.
- */
- if (pvt->res->res_h_errno != TRY_AGAIN || errno != ECONNREFUSED)
- break;
- }
- if (softerror != 0 && pvt->res->res_h_errno == HOST_NOT_FOUND)
- RES_SET_H_ERRNO(pvt->res, therrno);
- return (NULL);
-}
-
-static struct hostent *
-ho_next(struct irs_ho *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct hostent *rval;
- struct irs_ho *ho;
-
- while (pvt->rule) {
- ho = pvt->rule->inst->ho;
- rval = (*ho->next)(ho);
- if (rval)
- return (rval);
- if (!(pvt->rule->flags & IRS_CONTINUE))
- break;
- pvt->rule = pvt->rule->next;
- if (pvt->rule) {
- ho = pvt->rule->inst->ho;
- (*ho->rewind)(ho);
- }
- }
- return (NULL);
-}
-
-static void
-ho_rewind(struct irs_ho *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_ho *ho;
-
- pvt->rule = pvt->rules;
- if (pvt->rule) {
- ho = pvt->rule->inst->ho;
- (*ho->rewind)(ho);
- }
-}
-
-static void
-ho_minimize(struct irs_ho *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
-
- if (pvt->res)
- res_nclose(pvt->res);
- for (rule = pvt->rules; rule != NULL; rule = rule->next) {
- struct irs_ho *ho = rule->inst->ho;
-
- (*ho->minimize)(ho);
- }
-}
-
-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;
- 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_ho *ho = rule->inst->ho;
-
- (*ho->res_set)(ho, pvt->res, NULL);
- }
-}
-
-static struct addrinfo *
-ho_addrinfo(struct irs_ho *this, const char *name, const struct addrinfo *pai)
-{
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct addrinfo *rval = NULL;
- struct irs_ho *ho;
- int therrno = NETDB_INTERNAL;
- int softerror = 0;
-
- if (init(this) == -1)
- return (NULL);
-
- for (rule = pvt->rules; rule; rule = rule->next) {
- ho = rule->inst->ho;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- errno = 0;
- if (ho->addrinfo == NULL) /* for safety */
- continue;
- rval = (*ho->addrinfo)(ho, name, pai);
- if (rval != NULL)
- return (rval);
- if (softerror == 0 &&
- pvt->res->res_h_errno != HOST_NOT_FOUND &&
- pvt->res->res_h_errno != NETDB_INTERNAL) {
- softerror = 1;
- therrno = pvt->res->res_h_errno;
- }
- if (rule->flags & IRS_CONTINUE)
- continue;
- /*
- * See the comments in ho_byname() explaining
- * the interpretation of TRY_AGAIN and ECONNREFUSED.
- */
- if (pvt->res->res_h_errno != TRY_AGAIN ||
- errno != ECONNREFUSED)
- break;
- }
- if (softerror != 0 && pvt->res->res_h_errno == HOST_NOT_FOUND)
- RES_SET_H_ERRNO(pvt->res, therrno);
- if (rval)
- freeaddrinfo(rval);
- return (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);
-}
diff --git a/contrib/bind/lib/irs/gen_ng.c b/contrib/bind/lib/irs/gen_ng.c
deleted file mode 100644
index c28b510..0000000
--- a/contrib/bind/lib/irs/gen_ng.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gen_ng.c,v 1.15 2001/05/29 05:48:38 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "gen_p.h"
-
-/* Types */
-
-struct pvt {
- struct irs_rule * rules;
- struct irs_rule * rule;
- char * curgroup;
-};
-
-/* 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 *);
-
-/* Public */
-
-struct irs_ng *
-irs_gen_ng(struct irs_acc *this) {
- struct gen_p *accpvt = (struct gen_p *)this->private;
- 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->rules = accpvt->map_rules[irs_ng];
- pvt->rule = pvt->rules;
- 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;
-
- ng_minimize(this);
- if (pvt->curgroup)
- free(pvt->curgroup);
- 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;
- struct irs_ng *ng;
-
- while (pvt->rule) {
- ng = pvt->rule->inst->ng;
- if ((*ng->next)(ng, host, user, domain) == 1)
- return (1);
- if (!(pvt->rule->flags & IRS_CONTINUE))
- break;
- pvt->rule = pvt->rule->next;
- if (pvt->rule) {
- ng = pvt->rule->inst->ng;
- (*ng->rewind)(ng, pvt->curgroup);
- }
- }
- return (0);
-}
-
-static int
-ng_test(struct irs_ng *this, const char *name,
- const char *user, const char *host, const char *domain)
-{
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct irs_ng *ng;
- int rval;
-
- rval = 0;
- for (rule = pvt->rules; rule; rule = rule->next) {
- ng = rule->inst->ng;
- rval = (*ng->test)(ng, name, user, host, domain);
- if (rval || !(rule->flags & IRS_CONTINUE))
- break;
- }
- return (rval);
-}
-
-static void
-ng_rewind(struct irs_ng *this, const char *group) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_ng *ng;
-
- pvt->rule = pvt->rules;
- if (pvt->rule) {
- if (pvt->curgroup)
- free(pvt->curgroup);
- pvt->curgroup = strdup(group);
- ng = pvt->rule->inst->ng;
- (*ng->rewind)(ng, pvt->curgroup);
- }
-}
-
-static void
-ng_minimize(struct irs_ng *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
-
- for (rule = pvt->rules; rule != NULL; rule = rule->next) {
- struct irs_ng *ng = rule->inst->ng;
-
- (*ng->minimize)(ng);
- }
-}
diff --git a/contrib/bind/lib/irs/gen_nw.c b/contrib/bind/lib/irs/gen_nw.c
deleted file mode 100644
index fad436c..0000000
--- a/contrib/bind/lib/irs/gen_nw.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gen_nw.c,v 1.13 1999/10/13 16:39:29 vixie Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <resolv.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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 nw_close(struct irs_nw*);
-static struct nwent * nw_next(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 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 int init(struct irs_nw *this);
-
-/* Public */
-
-struct irs_nw *
-irs_gen_nw(struct irs_acc *this) {
- struct gen_p *accpvt = (struct gen_p *)this->private;
- 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->rules = accpvt->map_rules[irs_nw];
- pvt->rule = pvt->rules;
- nw->private = pvt;
- nw->close = nw_close;
- nw->next = nw_next;
- nw->byname = nw_byname;
- nw->byaddr = nw_byaddr;
- 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);
-
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-static struct nwent *
-nw_next(struct irs_nw *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct nwent *rval;
- struct irs_nw *nw;
-
- if (init(this) == -1)
- return(NULL);
-
- while (pvt->rule) {
- nw = pvt->rule->inst->nw;
- rval = (*nw->next)(nw);
- if (rval)
- return (rval);
- if (!(pvt->rules->flags & IRS_CONTINUE))
- break;
- pvt->rule = pvt->rule->next;
- if (pvt->rule) {
- nw = pvt->rule->inst->nw;
- (*nw->rewind)(nw);
- }
- }
- return (NULL);
-}
-
-static struct nwent *
-nw_byname(struct irs_nw *this, const char *name, int type) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct nwent *rval;
- struct irs_nw *nw;
-
- if (init(this) == -1)
- return(NULL);
-
- for (rule = pvt->rules; rule; rule = rule->next) {
- nw = rule->inst->nw;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- rval = (*nw->byname)(nw, name, type);
- if (rval != NULL)
- return (rval);
- if (pvt->res->res_h_errno != TRY_AGAIN &&
- !(rule->flags & IRS_CONTINUE))
- break;
- }
- return (NULL);
-}
-
-static struct nwent *
-nw_byaddr(struct irs_nw *this, void *net, int length, int type) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct nwent *rval;
- struct irs_nw *nw;
-
- if (init(this) == -1)
- return(NULL);
-
- for (rule = pvt->rules; rule; rule = rule->next) {
- nw = rule->inst->nw;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- rval = (*nw->byaddr)(nw, net, length, type);
- if (rval != NULL)
- return (rval);
- if (pvt->res->res_h_errno != TRY_AGAIN &&
- !(rule->flags & IRS_CONTINUE))
- break;
- }
- return (NULL);
-}
-
-static void
-nw_rewind(struct irs_nw *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_nw *nw;
-
- pvt->rule = pvt->rules;
- if (pvt->rule) {
- nw = pvt->rule->inst->nw;
- (*nw->rewind)(nw);
- }
-}
-
-static void
-nw_minimize(struct irs_nw *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
-
- if (pvt->res)
- res_nclose(pvt->res);
- for (rule = pvt->rules; rule != NULL; rule = rule->next) {
- struct irs_nw *nw = rule->inst->nw;
-
- (*nw->minimize)(nw);
- }
-}
-
-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;
- 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_nw *nw = rule->inst->nw;
-
- (*nw->res_set)(nw, pvt->res, 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);
-}
diff --git a/contrib/bind/lib/irs/gen_p.h b/contrib/bind/lib/irs/gen_p.h
deleted file mode 100644
index 35ef439..0000000
--- a/contrib/bind/lib/irs/gen_p.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * $Id: gen_p.h,v 1.11 2001/05/29 05:48:39 marka Exp $
- */
-
-/* Notes:
- * We hope to create a complete set of thread-safe entry points someday,
- * which will mean a set of getXbyY() functions that take as an argument
- * a pointer to the map class, which will have a pointer to the private
- * data, which will be used preferentially to the static variables that
- * are necessary to support the "classic" interface. This "classic"
- * interface will then be reimplemented as stubs on top of the thread
- * safe modules, and will keep the map class pointers as their only
- * static data. HOWEVER, we are not there yet. So while we will call
- * the just-barely-converted map class methods with map class pointers,
- * right now they probably all still use statics. We're not fooling
- * anybody, and we're not trying to (yet).
- */
-
-#ifndef _GEN_P_H_INCLUDED
-#define _GEN_P_H_INCLUDED
-
-/*
- * These are the access methods.
- */
-enum irs_acc_id {
- irs_lcl, /* Local. */
- irs_dns, /* DNS or Hesiod. */
- irs_nis, /* Sun NIS ("YP"). */
- irs_irp, /* IR protocol. */
- irs_nacc
-};
-
-/*
- * These are the map types.
- */
-enum irs_map_id {
- irs_gr, /* "group" */
- irs_pw, /* "passwd" */
- irs_sv, /* "services" */
- irs_pr, /* "protocols" */
- irs_ho, /* "hosts" */
- irs_nw, /* "networks" */
- irs_ng, /* "netgroup" */
- irs_nmap
-};
-
-/*
- * This is an accessor instance.
- */
-struct irs_inst {
- struct irs_acc *acc;
- struct irs_gr * gr;
- struct irs_pw * pw;
- struct irs_sv * sv;
- struct irs_pr * pr;
- struct irs_ho * ho;
- struct irs_nw * nw;
- struct irs_ng * ng;
-};
-
-/*
- * This is a search rule for some map type.
- */
-struct irs_rule {
- struct irs_rule * next;
- struct irs_inst * inst;
- int flags;
-};
-#define IRS_MERGE 0x0001 /* Don't stop if acc. has data? */
-#define IRS_CONTINUE 0x0002 /* Don't stop if acc. has no data? */
-
-/*
- * This is the private data for a search access class.
- */
-struct gen_p {
- char * options;
- struct irs_rule * map_rules[(int)irs_nmap];
- struct irs_inst accessors[(int)irs_nacc];
- struct __res_state * res;
- void (*free_res) __P((void *));
-};
-
-/*
- * Externs.
- */
-
-extern struct irs_acc * irs_gen_acc __P((const char *, const char *conf_file));
-extern struct irs_gr * irs_gen_gr __P((struct irs_acc *));
-extern struct irs_pw * irs_gen_pw __P((struct irs_acc *));
-extern struct irs_sv * irs_gen_sv __P((struct irs_acc *));
-extern struct irs_pr * irs_gen_pr __P((struct irs_acc *));
-extern struct irs_ho * irs_gen_ho __P((struct irs_acc *));
-extern struct irs_nw * irs_gen_nw __P((struct irs_acc *));
-extern struct irs_ng * irs_gen_ng __P((struct irs_acc *));
-
-#endif /*_IRS_P_H_INCLUDED*/
diff --git a/contrib/bind/lib/irs/gen_pr.c b/contrib/bind/lib/irs/gen_pr.c
deleted file mode 100644
index de09571..0000000
--- a/contrib/bind/lib/irs/gen_pr.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gen_pr.c,v 1.12 1999/10/13 16:39:30 vixie Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <resolv.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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 pr_close(struct irs_pr*);
-static struct protoent * pr_next(struct irs_pr *);
-static struct protoent * pr_byname(struct irs_pr *, const char *);
-static struct protoent * pr_bynumber(struct irs_pr *, int);
-static void pr_rewind(struct irs_pr *);
-static void pr_minimize(struct irs_pr *);
-static struct __res_state * pr_res_get(struct irs_pr *);
-static void pr_res_set(struct irs_pr *,
- struct __res_state *,
- void (*)(void *));
-
-/* Public */
-
-struct irs_pr *
-irs_gen_pr(struct irs_acc *this) {
- struct gen_p *accpvt = (struct gen_p *)this->private;
- 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->rules = accpvt->map_rules[irs_pr];
- pvt->rule = pvt->rules;
- pr->private = pvt;
- pr->close = pr_close;
- pr->next = pr_next;
- pr->byname = pr_byname;
- pr->bynumber = pr_bynumber;
- pr->rewind = pr_rewind;
- pr->minimize = pr_minimize;
- pr->res_get = pr_res_get;
- pr->res_set = pr_res_set;
- return (pr);
-}
-
-/* Methods */
-
-static void
-pr_close(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-static struct protoent *
-pr_next(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct protoent *rval;
- struct irs_pr *pr;
-
- while (pvt->rule) {
- pr = pvt->rule->inst->pr;
- rval = (*pr->next)(pr);
- if (rval)
- return (rval);
- if (!(pvt->rules->flags & IRS_CONTINUE))
- break;
- pvt->rule = pvt->rule->next;
- if (pvt->rule) {
- pr = pvt->rule->inst->pr;
- (*pr->rewind)(pr);
- }
- }
- return (NULL);
-}
-
-static struct protoent *
-pr_byname(struct irs_pr *this, const char *name) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct protoent *rval;
- struct irs_pr *pr;
-
- rval = NULL;
- for (rule = pvt->rules; rule; rule = rule->next) {
- pr = rule->inst->pr;
- rval = (*pr->byname)(pr, name);
- if (rval || !(rule->flags & IRS_CONTINUE))
- break;
- }
- return (rval);
-}
-
-static struct protoent *
-pr_bynumber(struct irs_pr *this, int proto) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct protoent *rval;
- struct irs_pr *pr;
-
- rval = NULL;
- for (rule = pvt->rules; rule; rule = rule->next) {
- pr = rule->inst->pr;
- rval = (*pr->bynumber)(pr, proto);
- if (rval || !(rule->flags & IRS_CONTINUE))
- break;
- }
- return (rval);
-}
-
-static void
-pr_rewind(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_pr *pr;
-
- pvt->rule = pvt->rules;
- if (pvt->rule) {
- pr = pvt->rule->inst->pr;
- (*pr->rewind)(pr);
- }
-}
-
-static void
-pr_minimize(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
-
- for (rule = pvt->rules; rule != NULL; rule = rule->next) {
- struct irs_pr *pr = rule->inst->pr;
-
- (*pr->minimize)(pr);
- }
-}
-
-static struct __res_state *
-pr_res_get(struct irs_pr *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);
- pr_res_set(this, res, free);
- }
-
- return (pvt->res);
-}
-
-static void
-pr_res_set(struct irs_pr *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_pr *pr = rule->inst->pr;
-
- if (pr->res_set)
- (*pr->res_set)(pr, pvt->res, NULL);
- }
-}
diff --git a/contrib/bind/lib/irs/gen_pw.c b/contrib/bind/lib/irs/gen_pw.c
deleted file mode 100644
index d80a64b..0000000
--- a/contrib/bind/lib/irs/gen_pw.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gen_pw.c,v 1.14 1999/10/13 16:39:30 vixie Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_PW
-static int __bind_irs_pw_unneeded;
-#else
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <errno.h>
-#include <pwd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/gen_sv.c b/contrib/bind/lib/irs/gen_sv.c
deleted file mode 100644
index e0c1cb6..0000000
--- a/contrib/bind/lib/irs/gen_sv.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gen_sv.c,v 1.12 1999/10/13 16:39:30 vixie Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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 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 __res_state * sv_res_get(struct irs_sv *);
-static void sv_res_set(struct irs_sv *,
- struct __res_state *,
- void (*)(void *));
-
-/* Public */
-
-struct irs_sv *
-irs_gen_sv(struct irs_acc *this) {
- struct gen_p *accpvt = (struct gen_p *)this->private;
- 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->rules = accpvt->map_rules[irs_sv];
- pvt->rule = pvt->rules;
- 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 = sv_res_get;
- sv->res_set = sv_res_set;
- return (sv);
-}
-
-/* Methods */
-
-static void
-sv_close(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-static struct servent *
-sv_next(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct servent *rval;
- struct irs_sv *sv;
-
- while (pvt->rule) {
- sv = pvt->rule->inst->sv;
- rval = (*sv->next)(sv);
- if (rval)
- return (rval);
- if (!(pvt->rule->flags & IRS_CONTINUE))
- break;
- pvt->rule = pvt->rule->next;
- if (pvt->rule) {
- sv = pvt->rule->inst->sv;
- (*sv->rewind)(sv);
- }
- }
- return (NULL);
-}
-
-static struct servent *
-sv_byname(struct irs_sv *this, const char *name, const char *proto) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct servent *rval;
- struct irs_sv *sv;
-
- rval = NULL;
- for (rule = pvt->rules; rule; rule = rule->next) {
- sv = rule->inst->sv;
- rval = (*sv->byname)(sv, name, proto);
- if (rval || !(rule->flags & IRS_CONTINUE))
- break;
- }
- return (rval);
-}
-
-static struct servent *
-sv_byport(struct irs_sv *this, int port, const char *proto) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
- struct servent *rval;
- struct irs_sv *sv;
-
- rval = NULL;
- for (rule = pvt->rules; rule; rule = rule->next) {
- sv = rule->inst->sv;
- rval = (*sv->byport)(sv, port, proto);
- if (rval || !(rule->flags & IRS_CONTINUE))
- break;
- }
- return (rval);
-}
-
-static void
-sv_rewind(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_sv *sv;
-
- pvt->rule = pvt->rules;
- if (pvt->rule) {
- sv = pvt->rule->inst->sv;
- (*sv->rewind)(sv);
- }
-}
-
-static void
-sv_minimize(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct irs_rule *rule;
-
- for (rule = pvt->rules; rule != NULL; rule = rule->next) {
- struct irs_sv *sv = rule->inst->sv;
-
- (*sv->minimize)(sv);
- }
-}
-
-static struct __res_state *
-sv_res_get(struct irs_sv *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);
- sv_res_set(this, res, free);
- }
-
- return (pvt->res);
-}
-
-static void
-sv_res_set(struct irs_sv *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_sv *sv = rule->inst->sv;
-
- if (sv->res_set)
- (*sv->res_set)(sv, pvt->res, NULL);
- }
-}
diff --git a/contrib/bind/lib/irs/getaddrinfo.c b/contrib/bind/lib/irs/getaddrinfo.c
deleted file mode 100644
index 89db519..0000000
--- a/contrib/bind/lib/irs/getaddrinfo.c
+++ /dev/null
@@ -1,1229 +0,0 @@
-/* $KAME: getaddrinfo.c,v 1.14 2001/01/06 09:41:15 jinmei Exp $ */
-
-/*
- * 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. 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.
- */
-
-/*
- * Issues to be discussed:
- * - Thread safe-ness must be checked.
- * - Return values. There are nonstandard return values defined and used
- * in the source code. This is because RFC2553 is silent about which error
- * code must be returned for which situation.
- * - IPv4 classful (shortened) form. RFC2553 is silent about it. XNET 5.2
- * says to use inet_aton() to convert IPv4 numeric to binary (allows
- * classful form as a result).
- * current code - disallow classful form for IPv4 (due to use of inet_pton).
- * - freeaddrinfo(NULL). RFC2553 is silent about it. XNET 5.2 says it is
- * invalid.
- * current code - SEGV on freeaddrinfo(NULL)
- * Note:
- * - We use getipnodebyname() just for thread-safeness. There's no intent
- * to let it do PF_UNSPEC (actually we never pass PF_UNSPEC to
- * getipnodebyname().
- * - The code filters out AFs that are not supported by the kernel,
- * when globbing NULL hostname (to loopback, or wildcard). Is it the right
- * thing to do? What is the relationship with post-RFC2553 AI_ADDRCONFIG
- * in ai_flags?
- * - (post-2553) semantics of AI_ADDRCONFIG itself is too vague.
- * (1) what should we do against numeric hostname (2) what should we do
- * against NULL hostname (3) what is AI_ADDRCONFIG itself. AF not ready?
- * non-loopback address configured? global address configured?
- * - To avoid search order issue, we have a big amount of code duplicate
- * from gethnamaddr.c and some other places. The issues that there's no
- * lower layer function to lookup "IPv4 or IPv6" record. Calling
- * gethostbyname2 from getaddrinfo will end up in wrong search order, as
- * follows:
- * - The code makes use of following calls when asked to resolver with
- * ai_family = PF_UNSPEC:
- * getipnodebyname(host, AF_INET6);
- * getipnodebyname(host, AF_INET);
- * This will result in the following queries if the node is configure to
- * prefer /etc/hosts than DNS:
- * lookup /etc/hosts for IPv6 address
- * lookup DNS for IPv6 address
- * lookup /etc/hosts for IPv4 address
- * lookup DNS for IPv4 address
- * which may not meet people's requirement.
- * The right thing to happen is to have underlying layer which does
- * PF_UNSPEC lookup (lookup both) and return chain of addrinfos.
- * This would result in a bit of code duplicate with _dns_ghbyname() and
- * friends.
- */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <net/if.h>
-#include <netinet/in.h>
-
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <netdb.h>
-#include <resolv.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <errno.h>
-
-#include <stdarg.h>
-
-#include <irs.h>
-#include <isc/assertions.h>
-
-#include "port_after.h"
-
-#include "irs_data.h"
-
-#define SUCCESS 0
-#define ANY 0
-#define YES 1
-#define NO 0
-
-static const char in_addrany[] = { 0, 0, 0, 0 };
-static const char in6_addrany[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-static const char in_loopback[] = { 127, 0, 0, 1 };
-static const char in6_loopback[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
-};
-
-static const struct afd {
- int a_af;
- int a_addrlen;
- int a_socklen;
- int a_off;
- const char *a_addrany;
- const char *a_loopback;
- int a_scoped;
-} afdl [] = {
- {PF_INET6, sizeof(struct in6_addr),
- sizeof(struct sockaddr_in6),
- offsetof(struct sockaddr_in6, sin6_addr),
- in6_addrany, in6_loopback, 1},
- {PF_INET, sizeof(struct in_addr),
- sizeof(struct sockaddr_in),
- offsetof(struct sockaddr_in, sin_addr),
- in_addrany, in_loopback, 0},
- {0, 0, 0, 0, NULL, NULL, 0},
-};
-
-struct explore {
- int e_af;
- int e_socktype;
- int e_protocol;
- const char *e_protostr;
- int e_wild;
-#define WILD_AF(ex) ((ex)->e_wild & 0x01)
-#define WILD_SOCKTYPE(ex) ((ex)->e_wild & 0x02)
-#define WILD_PROTOCOL(ex) ((ex)->e_wild & 0x04)
-};
-
-static const struct explore explore[] = {
-#if 0
- { PF_LOCAL, 0, ANY, ANY, NULL, 0x01 },
-#endif
- { PF_INET6, SOCK_DGRAM, IPPROTO_UDP, "udp", 0x07 },
- { PF_INET6, SOCK_STREAM, IPPROTO_TCP, "tcp", 0x07 },
- { PF_INET6, SOCK_RAW, ANY, NULL, 0x05 },
- { PF_INET, SOCK_DGRAM, IPPROTO_UDP, "udp", 0x07 },
- { PF_INET, SOCK_STREAM, IPPROTO_TCP, "tcp", 0x07 },
- { PF_INET, SOCK_RAW, ANY, NULL, 0x05 },
- { -1, 0, 0, NULL, 0 },
-};
-
-#define PTON_MAX 16
-
-static int str_isnumber __P((const char *));
-static int explore_fqdn __P((const struct addrinfo *, const char *,
- const char *, struct addrinfo **));
-static int explore_copy __P((const struct addrinfo *, const struct addrinfo *,
- struct addrinfo **));
-static int explore_null __P((const struct addrinfo *,
- const char *, struct addrinfo **));
-static int explore_numeric __P((const struct addrinfo *, const char *,
- const char *, struct addrinfo **));
-static int explore_numeric_scope __P((const struct addrinfo *, const char *,
- const char *, struct addrinfo **));
-static int get_canonname __P((const struct addrinfo *,
- struct addrinfo *, const char *));
-static struct addrinfo *get_ai __P((const struct addrinfo *,
- const struct afd *, const char *));
-static struct addrinfo *copy_ai __P((const struct addrinfo *));
-static int get_portmatch __P((const struct addrinfo *, const char *));
-static int get_port __P((const struct addrinfo *, const char *, int));
-static const struct afd *find_afd __P((int));
-static int addrconfig __P((int));
-static int ip6_str2scopeid __P((char *, struct sockaddr_in6 *,
- u_int32_t *scopeidp));
-static struct net_data *init __P((void));
-
-struct addrinfo *hostent2addrinfo __P((struct hostent *,
- const struct addrinfo *));
-struct addrinfo *addr2addrinfo __P((const struct addrinfo *,
- const char *));
-
-#if 0
-static const char *ai_errlist[] = {
- "Success",
- "Address family for hostname not supported", /* EAI_ADDRFAMILY */
- "Temporary failure in name resolution", /* EAI_AGAIN */
- "Invalid value for ai_flags", /* EAI_BADFLAGS */
- "Non-recoverable failure in name resolution", /* EAI_FAIL */
- "ai_family not supported", /* EAI_FAMILY */
- "Memory allocation failure", /* EAI_MEMORY */
- "No address associated with hostname", /* EAI_NODATA */
- "hostname nor servname provided, or not known", /* EAI_NONAME */
- "servname not supported for ai_socktype", /* EAI_SERVICE */
- "ai_socktype not supported", /* EAI_SOCKTYPE */
- "System error returned in errno", /* EAI_SYSTEM */
- "Invalid value for hints", /* EAI_BADHINTS */
- "Resolved protocol is unknown", /* EAI_PROTOCOL */
- "Unknown error", /* EAI_MAX */
-};
-#endif
-
-/* XXX macros that make external reference is BAD. */
-
-#define GET_AI(ai, afd, addr) \
-do { \
- /* external reference: pai, error, and label free */ \
- (ai) = get_ai(pai, (afd), (addr)); \
- if ((ai) == NULL) { \
- error = EAI_MEMORY; \
- goto free; \
- } \
-} while (/*CONSTCOND*/0)
-
-#define GET_PORT(ai, serv) \
-do { \
- /* external reference: error and label free */ \
- error = get_port((ai), (serv), 0); \
- if (error != 0) \
- goto free; \
-} while (/*CONSTCOND*/0)
-
-#define GET_CANONNAME(ai, str) \
-do { \
- /* external reference: pai, error and label free */ \
- error = get_canonname(pai, (ai), (str)); \
- if (error != 0) \
- goto free; \
-} while (/*CONSTCOND*/0)
-
-#define ERR(err) \
-do { \
- /* external reference: error, and label bad */ \
- error = (err); \
- goto bad; \
- /*NOTREACHED*/ \
-} while (/*CONSTCOND*/0)
-
-#define MATCH_FAMILY(x, y, w) \
- ((x) == (y) || (/*CONSTCOND*/(w) && ((x) == PF_UNSPEC || (y) == PF_UNSPEC)))
-#define MATCH(x, y, w) \
- ((x) == (y) || (/*CONSTCOND*/(w) && ((x) == ANY || (y) == ANY)))
-
-#if 0 /* bind8 has its own version */
-char *
-gai_strerror(ecode)
- int ecode;
-{
- if (ecode < 0 || ecode > EAI_MAX)
- ecode = EAI_MAX;
- return ai_errlist[ecode];
-}
-#endif
-
-void
-freeaddrinfo(ai)
- struct addrinfo *ai;
-{
- struct addrinfo *next;
-
- do {
- next = ai->ai_next;
- if (ai->ai_canonname)
- free(ai->ai_canonname);
- /* no need to free(ai->ai_addr) */
- free(ai);
- ai = next;
- } while (ai);
-}
-
-static int
-str_isnumber(p)
- const char *p;
-{
- char *ep;
-
- if (*p == '\0')
- return NO;
- ep = NULL;
- errno = 0;
- (void)strtoul(p, &ep, 10);
- if (errno == 0 && ep && *ep == '\0')
- return YES;
- else
- return NO;
-}
-
-int
-getaddrinfo(hostname, servname, hints, res)
- const char *hostname, *servname;
- const struct addrinfo *hints;
- struct addrinfo **res;
-{
- struct addrinfo sentinel;
- struct addrinfo *cur;
- int error = 0;
- struct addrinfo ai, ai0, *afai = NULL;
- struct addrinfo *pai;
- const struct explore *ex;
-
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
- pai = &ai;
- pai->ai_flags = 0;
- pai->ai_family = PF_UNSPEC;
- pai->ai_socktype = ANY;
- pai->ai_protocol = ANY;
- pai->ai_addrlen = 0;
- pai->ai_canonname = NULL;
- pai->ai_addr = NULL;
- pai->ai_next = NULL;
-
- if (hostname == NULL && servname == NULL)
- return EAI_NONAME;
- if (hints) {
- /* error check for hints */
- if (hints->ai_addrlen || hints->ai_canonname ||
- hints->ai_addr || hints->ai_next)
- ERR(EAI_BADHINTS); /* xxx */
- if (hints->ai_flags & ~AI_MASK)
- ERR(EAI_BADFLAGS);
- switch (hints->ai_family) {
- case PF_UNSPEC:
- case PF_INET:
- case PF_INET6:
- break;
- default:
- ERR(EAI_FAMILY);
- }
- memcpy(pai, hints, sizeof(*pai));
-
- /*
- * if both socktype/protocol are specified, check if they
- * are meaningful combination.
- */
- if (pai->ai_socktype != ANY && pai->ai_protocol != ANY) {
- for (ex = explore; ex->e_af >= 0; ex++) {
- if (pai->ai_family != ex->e_af)
- continue;
- if (ex->e_socktype == ANY)
- continue;
- if (ex->e_protocol == ANY)
- continue;
- if (pai->ai_socktype == ex->e_socktype &&
- pai->ai_protocol != ex->e_protocol) {
- ERR(EAI_BADHINTS);
- }
- }
- }
- }
-
- /*
- * post-2553: AI_ALL and AI_V4MAPPED are effective only against
- * AF_INET6 query. They needs to be ignored if specified in other
- * occassions.
- */
- switch (pai->ai_flags & (AI_ALL | AI_V4MAPPED)) {
- case AI_V4MAPPED:
- case AI_ALL | AI_V4MAPPED:
- if (pai->ai_family != AF_INET6)
- pai->ai_flags &= ~(AI_ALL | AI_V4MAPPED);
- break;
- case AI_ALL:
-#if 1
- /* illegal */
- ERR(EAI_BADFLAGS);
-#else
- pai->ai_flags &= ~(AI_ALL | AI_V4MAPPED);
- break;
-#endif
- }
-
- /*
- * check for special cases. (1) numeric servname is disallowed if
- * socktype/protocol are left unspecified. (2) servname is disallowed
- * for raw and other inet{,6} sockets.
- */
- if (MATCH_FAMILY(pai->ai_family, PF_INET, 1)
-#ifdef PF_INET6
- || MATCH_FAMILY(pai->ai_family, PF_INET6, 1)
-#endif
- ) {
- ai0 = *pai; /* backup *pai */
-
- if (pai->ai_family == PF_UNSPEC) {
-#ifdef PF_INET6
- pai->ai_family = PF_INET6;
-#else
- pai->ai_family = PF_INET;
-#endif
- }
- error = get_portmatch(pai, servname);
- if (error)
- ERR(error);
-
- *pai = ai0;
- }
-
- ai0 = *pai;
-
- /* NULL hostname, or numeric hostname */
- for (ex = explore; ex->e_af >= 0; ex++) {
- *pai = ai0;
-
- if (!MATCH_FAMILY(pai->ai_family, ex->e_af, WILD_AF(ex)))
- continue;
- if (!MATCH(pai->ai_socktype, ex->e_socktype, WILD_SOCKTYPE(ex)))
- continue;
- if (!MATCH(pai->ai_protocol, ex->e_protocol, WILD_PROTOCOL(ex)))
- continue;
-
- if (pai->ai_family == PF_UNSPEC)
- pai->ai_family = ex->e_af;
- if (pai->ai_socktype == ANY && ex->e_socktype != ANY)
- pai->ai_socktype = ex->e_socktype;
- if (pai->ai_protocol == ANY && ex->e_protocol != ANY)
- pai->ai_protocol = ex->e_protocol;
-
- /*
- * if the servname does not match socktype/protocol, ignore it.
- */
- if (get_portmatch(pai, servname) != 0)
- continue;
-
- if (hostname == NULL) {
- /*
- * filter out AFs that are not supported by the kernel
- * XXX errno?
- */
- if (!addrconfig(pai->ai_family))
- continue;
- error = explore_null(pai, servname, &cur->ai_next);
- } else
- error = explore_numeric_scope(pai, hostname, servname,
- &cur->ai_next);
-
- if (error)
- goto free;
-
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- }
-
- /*
- * XXX
- * If numreic representation of AF1 can be interpreted as FQDN
- * representation of AF2, we need to think again about the code below.
- */
- if (sentinel.ai_next)
- goto good;
-
- if (pai->ai_flags & AI_NUMERICHOST)
- ERR(EAI_NONAME);
- if (hostname == NULL)
- ERR(EAI_NONAME);
-
- /*
- * hostname as alphabetical name.
- * We'll make sure that
- * - if returning addrinfo list is empty, return non-zero error
- * value (already known one or EAI_NONAME).
- * - otherwise,
- * + if we haven't had any errors, return 0 (i.e. success).
- * + if we've had an error, free the list and return the error.
- * without any assumption on the behavior of explore_fqdn().
- */
-
- /* first, try to query DNS for all possible address families. */
- *pai = ai0;
- error = explore_fqdn(pai, hostname, servname, &afai);
- if (error) {
- if (afai != NULL)
- freeaddrinfo(afai);
- goto free;
- }
- if (afai == NULL) {
- error = EAI_NONAME; /* we've had no errors. */
- goto free;
- }
-
- /*
- * we would like to prefer AF_INET6 than AF_INET, so we'll make an
- * outer loop by AFs.
- */
- for (ex = explore; ex->e_af >= 0; ex++) {
- *pai = ai0;
-
- if (pai->ai_family == PF_UNSPEC)
- pai->ai_family = ex->e_af;
-
- if (!MATCH_FAMILY(pai->ai_family, ex->e_af, WILD_AF(ex)))
- continue;
- if (!MATCH(pai->ai_socktype, ex->e_socktype,
- WILD_SOCKTYPE(ex))) {
- continue;
- }
- if (!MATCH(pai->ai_protocol, ex->e_protocol,
- WILD_PROTOCOL(ex))) {
- continue;
- }
-
-#ifdef AI_ADDRCONFIG
- /*
- * If AI_ADDRCONFIG is specified, check if we are
- * expected to return the address family or not.
- */
- if ((pai->ai_flags & AI_ADDRCONFIG) != 0 &&
- !addrconfig(pai->ai_family))
- continue;
-#endif
-
- if (pai->ai_family == PF_UNSPEC)
- pai->ai_family = ex->e_af;
- if (pai->ai_socktype == ANY && ex->e_socktype != ANY)
- pai->ai_socktype = ex->e_socktype;
- if (pai->ai_protocol == ANY && ex->e_protocol != ANY)
- pai->ai_protocol = ex->e_protocol;
-
- /*
- * if the servname does not match socktype/protocol, ignore it.
- */
- if (get_portmatch(pai, servname) != 0)
- continue;
-
- if ((error = explore_copy(pai, afai, &cur->ai_next)) != 0) {
- freeaddrinfo(afai);
- goto free;
- }
-
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- }
-
- freeaddrinfo(afai); /* afai must not be NULL at this point. */
-
- /* we must not have got any errors. */
- if (error != 0) /* just for diagnosis */
- abort();
-
- if (sentinel.ai_next) {
-good:
- *res = sentinel.ai_next;
- return(SUCCESS);
- } else {
- /*
- * All the process succeeded, but we've had an empty list.
- * This can happen if the given hints do not match our
- * candidates.
- */
- error = EAI_NONAME;
- }
-
-free:
-bad:
- if (sentinel.ai_next)
- freeaddrinfo(sentinel.ai_next);
- *res = NULL;
- return(error);
-}
-
-/*
- * FQDN hostname, DNS lookup
- */
-static int
-explore_fqdn(pai, hostname, servname, res)
- const struct addrinfo *pai;
- const char *hostname;
- const char *servname;
- struct addrinfo **res;
-{
- struct addrinfo *result;
- struct addrinfo *cur;
- struct net_data *net_data = init();
- struct irs_ho *ho;
- int error = 0;
- char tmp[NS_MAXDNAME];
- const char *cp;
-
- INSIST(res != NULL && *res == NULL);
-
- /*
- * if the servname does not match socktype/protocol, ignore it.
- */
- if (get_portmatch(pai, servname) != 0)
- return(0);
-
- if (!net_data || !(ho = net_data->ho))
- return(0);
-#if 0 /* XXX (notyet) */
- if (net_data->ho_stayopen && net_data->ho_last &&
- net_data->ho_last->h_addrtype == af) {
- if (ns_samename(name, net_data->ho_last->h_name) == 1)
- return (net_data->ho_last);
- for (hap = net_data->ho_last->h_aliases; hap && *hap; hap++)
- if (ns_samename(name, *hap) == 1)
- return (net_data->ho_last);
- }
-#endif
- if (!strchr(hostname, '.') &&
- (cp = res_hostalias(net_data->res, hostname,
- tmp, sizeof(tmp))))
- hostname = cp;
- result = (*ho->addrinfo)(ho, hostname, pai);
- if (!net_data->ho_stayopen) {
- (*ho->minimize)(ho);
- }
- if (result == NULL) {
- int e = h_errno;
-
- switch(e) {
- case NETDB_INTERNAL:
- error = EAI_SYSTEM;
- break;
- case TRY_AGAIN:
- error = EAI_AGAIN;
- break;
- case NO_RECOVERY:
- error = EAI_FAIL;
- break;
- case HOST_NOT_FOUND:
- case NO_DATA:
- error = EAI_NONAME;
- break;
- default:
- case NETDB_SUCCESS: /* should be impossible... */
- error = EAI_NONAME;
- break;
- }
- goto free;
- }
-
- for (cur = result; cur; cur = cur->ai_next) {
- GET_PORT(cur, servname); /* XXX: redundant lookups... */
- /* canonname should already be filled. */
- }
-
- *res = result;
-
- return(0);
-
-free:
- if (result)
- freeaddrinfo(result);
- return error;
-}
-
-static int
-explore_copy(pai, src0, res)
- const struct addrinfo *pai; /* seed */
- const struct addrinfo *src0; /* source */
- struct addrinfo **res;
-{
- int error;
- struct addrinfo sentinel, *cur;
- const struct addrinfo *src;
-
- error = 0;
- sentinel.ai_next = NULL;
- cur = &sentinel;
-
- for (src = src0; src != NULL; src = src->ai_next) {
- if (src->ai_family != pai->ai_family)
- continue;
-
- cur->ai_next = copy_ai(src);
- if (!cur->ai_next) {
- error = EAI_MEMORY;
- goto fail;
- }
-
- cur->ai_next->ai_socktype = pai->ai_socktype;
- cur->ai_next->ai_protocol = pai->ai_protocol;
- cur = cur->ai_next;
- }
-
- *res = sentinel.ai_next;
- return 0;
-
-fail:
- freeaddrinfo(sentinel.ai_next);
- return error;
-}
-
-/*
- * hostname == NULL.
- * passive socket -> anyaddr (0.0.0.0 or ::)
- * non-passive socket -> localhost (127.0.0.1 or ::1)
- */
-static int
-explore_null(pai, servname, res)
- const struct addrinfo *pai;
- const char *servname;
- struct addrinfo **res;
-{
- const struct afd *afd;
- struct addrinfo *cur;
- struct addrinfo sentinel;
- int error;
-
- *res = NULL;
- sentinel.ai_next = NULL;
- cur = &sentinel;
-
- afd = find_afd(pai->ai_family);
- if (afd == NULL)
- return 0;
-
- if (pai->ai_flags & AI_PASSIVE) {
- GET_AI(cur->ai_next, afd, afd->a_addrany);
- /* xxx meaningless?
- * GET_CANONNAME(cur->ai_next, "anyaddr");
- */
- GET_PORT(cur->ai_next, servname);
- } else {
- GET_AI(cur->ai_next, afd, afd->a_loopback);
- /* xxx meaningless?
- * GET_CANONNAME(cur->ai_next, "localhost");
- */
- GET_PORT(cur->ai_next, servname);
- }
- cur = cur->ai_next;
-
- *res = sentinel.ai_next;
- return 0;
-
-free:
- if (sentinel.ai_next)
- freeaddrinfo(sentinel.ai_next);
- return error;
-}
-
-/*
- * numeric hostname
- */
-static int
-explore_numeric(pai, hostname, servname, res)
- const struct addrinfo *pai;
- const char *hostname;
- const char *servname;
- struct addrinfo **res;
-{
- const struct afd *afd;
- struct addrinfo *cur;
- struct addrinfo sentinel;
- int error;
- char pton[PTON_MAX];
-
- *res = NULL;
- sentinel.ai_next = NULL;
- cur = &sentinel;
-
- afd = find_afd(pai->ai_family);
- if (afd == NULL)
- return 0;
-
- switch (afd->a_af) {
-#if 0 /*X/Open spec*/
- case AF_INET:
- if (inet_aton(hostname, (struct in_addr *)pton) == 1) {
- if (pai->ai_family == afd->a_af ||
- pai->ai_family == PF_UNSPEC /*?*/) {
- GET_AI(cur->ai_next, afd, pton);
- GET_PORT(cur->ai_next, servname);
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- } else
- ERR(EAI_FAMILY); /*xxx*/
- }
- break;
-#endif
- default:
- if (inet_pton(afd->a_af, hostname, pton) == 1) {
- if (pai->ai_family == afd->a_af ||
- pai->ai_family == PF_UNSPEC /*?*/) {
- GET_AI(cur->ai_next, afd, pton);
- GET_PORT(cur->ai_next, servname);
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- } else
- ERR(EAI_FAMILY); /*xxx*/
- }
- break;
- }
-
- *res = sentinel.ai_next;
- return 0;
-
-free:
-bad:
- if (sentinel.ai_next)
- freeaddrinfo(sentinel.ai_next);
- return error;
-}
-
-/*
- * numeric hostname with scope
- */
-static int
-explore_numeric_scope(pai, hostname, servname, res)
- const struct addrinfo *pai;
- const char *hostname;
- const char *servname;
- struct addrinfo **res;
-{
-#ifndef SCOPE_DELIMITER
- return explore_numeric(pai, hostname, servname, res);
-#else
- const struct afd *afd;
- struct addrinfo *cur;
- int error;
- char *cp, *hostname2 = NULL, *scope, *addr;
- struct sockaddr_in6 *sin6;
-
- afd = find_afd(pai->ai_family);
- if (afd == NULL)
- return 0;
-
- if (!afd->a_scoped)
- return explore_numeric(pai, hostname, servname, res);
-
- cp = strchr(hostname, SCOPE_DELIMITER);
- if (cp == NULL)
- return explore_numeric(pai, hostname, servname, res);
-
- /*
- * Handle special case of <scoped_address><delimiter><scope id>
- */
- hostname2 = strdup(hostname);
- if (hostname2 == NULL)
- return EAI_MEMORY;
- /* terminate at the delimiter */
- hostname2[cp - hostname] = '\0';
- addr = hostname2;
- scope = cp + 1;
-
- error = explore_numeric(pai, addr, servname, res);
- if (error == 0) {
- u_int32_t scopeid = 0;
-
- for (cur = *res; cur; cur = cur->ai_next) {
- if (cur->ai_family != AF_INET6)
- continue;
- sin6 = (struct sockaddr_in6 *)(void *)cur->ai_addr;
- if (!ip6_str2scopeid(scope, sin6, &scopeid)) {
- free(hostname2);
- return(EAI_NONAME); /* XXX: is return OK? */
- }
-#ifdef HAVE_SIN6_SCOPE_ID
- sin6->sin6_scope_id = scopeid;
-#endif
- }
- }
-
- free(hostname2);
-
- return error;
-#endif
-}
-
-static int
-get_canonname(pai, ai, str)
- const struct addrinfo *pai;
- struct addrinfo *ai;
- const char *str;
-{
- if ((pai->ai_flags & AI_CANONNAME) != 0) {
- ai->ai_canonname = (char *)malloc(strlen(str) + 1);
- if (ai->ai_canonname == NULL)
- return EAI_MEMORY;
- strcpy(ai->ai_canonname, str);
- }
- return 0;
-}
-
-static struct addrinfo *
-get_ai(pai, afd, addr)
- const struct addrinfo *pai;
- const struct afd *afd;
- const char *addr;
-{
- char *p;
- struct addrinfo *ai;
-
- ai = (struct addrinfo *)malloc(sizeof(struct addrinfo)
- + (afd->a_socklen));
- if (ai == NULL)
- return NULL;
-
- memcpy(ai, pai, sizeof(struct addrinfo));
- ai->ai_addr = (struct sockaddr *)(void *)(ai + 1);
- memset(ai->ai_addr, 0, (size_t)afd->a_socklen);
-#ifdef HAVE_SA_LEN
- ai->ai_addr->sa_len = afd->a_socklen;
-#endif
- ai->ai_addrlen = afd->a_socklen;
- ai->ai_addr->sa_family = ai->ai_family = afd->a_af;
- p = (char *)(void *)(ai->ai_addr);
- memcpy(p + afd->a_off, addr, (size_t)afd->a_addrlen);
- return ai;
-}
-
-/* XXX need to malloc() the same way we do from other functions! */
-static struct addrinfo *
-copy_ai(pai)
- const struct addrinfo *pai;
-{
- struct addrinfo *ai;
- size_t l;
-
- l = sizeof(*ai) + pai->ai_addrlen;
- if ((ai = (struct addrinfo *)malloc(l)) == NULL)
- return NULL;
- memset(ai, 0, l);
- memcpy(ai, pai, sizeof(*ai));
- ai->ai_addr = (struct sockaddr *)(void *)(ai + 1);
- memcpy(ai->ai_addr, pai->ai_addr, pai->ai_addrlen);
-
- if (pai->ai_canonname) {
- l = strlen(pai->ai_canonname) + 1;
- if ((ai->ai_canonname = malloc(l)) == NULL) {
- free(ai);
- return NULL;
- }
-#ifdef HAVE_STRLCPY
- strlcpy(ai->ai_canonname, pai->ai_canonname, l);
-#else
- strncpy(ai->ai_canonname, pai->ai_canonname, l);
-#endif
- } else {
- /* just to make sure */
- ai->ai_canonname = NULL;
- }
-
- ai->ai_next = NULL;
-
- return ai;
-}
-
-static int
-get_portmatch(const struct addrinfo *ai, const char *servname) {
-
- /* get_port does not touch first argument. when matchonly == 1. */
- /* LINTED const cast */
- return get_port((const struct addrinfo *)ai, servname, 1);
-}
-
-static int
-get_port(const struct addrinfo *ai, const char *servname, int matchonly) {
- const char *proto;
- struct servent *sp;
- int port;
- int allownumeric;
-
- if (servname == NULL)
- return 0;
- switch (ai->ai_family) {
- case AF_INET:
-#ifdef AF_INET6
- case AF_INET6:
-#endif
- break;
- default:
- return 0;
- }
-
- switch (ai->ai_socktype) {
- case SOCK_RAW:
- return EAI_SERVICE;
- case SOCK_DGRAM:
- case SOCK_STREAM:
- allownumeric = 1;
- break;
- case ANY:
- switch (ai->ai_family) {
- case AF_INET:
-#ifdef AF_INET6
- case AF_INET6:
-#endif
- allownumeric = 1;
- break;
- default:
- allownumeric = 0;
- break;
- }
- break;
- default:
- return EAI_SOCKTYPE;
- }
-
- if (str_isnumber(servname)) {
- if (!allownumeric)
- return EAI_SERVICE;
- port = atoi(servname);
- if (port < 0 || port > 65535)
- return EAI_SERVICE;
- port = htons(port);
- } else {
- switch (ai->ai_socktype) {
- case SOCK_DGRAM:
- proto = "udp";
- break;
- case SOCK_STREAM:
- proto = "tcp";
- break;
- default:
- proto = NULL;
- break;
- }
-
- if ((sp = getservbyname(servname, proto)) == NULL)
- return EAI_SERVICE;
- port = sp->s_port;
- }
-
- if (!matchonly) {
- switch (ai->ai_family) {
- case AF_INET:
- ((struct sockaddr_in *)(void *)
- ai->ai_addr)->sin_port = port;
- break;
- case AF_INET6:
- ((struct sockaddr_in6 *)(void *)
- ai->ai_addr)->sin6_port = port;
- break;
- }
- }
-
- return 0;
-}
-
-static const struct afd *
-find_afd(af)
- int af;
-{
- const struct afd *afd;
-
- if (af == PF_UNSPEC)
- return NULL;
- for (afd = afdl; afd->a_af; afd++) {
- if (afd->a_af == af)
- return afd;
- }
- return NULL;
-}
-
-/*
- * post-2553: AI_ADDRCONFIG check. if we use getipnodeby* as backend, backend
- * will take care of it.
- * the semantics of AI_ADDRCONFIG is not defined well. we are not sure
- * if the code is right or not.
- */
-static int
-addrconfig(af)
- int af;
-{
- int s;
-
- /* XXX errno */
- s = socket(af, SOCK_DGRAM, 0);
- if (s < 0) {
- if (errno != EMFILE)
- return 0;
- } else
- close(s);
- return 1;
-}
-
-/* convert a string to a scope identifier. XXX: IPv6 specific */
-static int
-ip6_str2scopeid(char *scope, struct sockaddr_in6 *sin6,
- u_int32_t *scopeidp)
-{
- u_int32_t scopeid;
- u_long lscopeid;
- struct in6_addr *a6 = &sin6->sin6_addr;
- char *ep;
-
- /* empty scopeid portion is invalid */
- if (*scope == '\0')
- return (0);
-
-#ifdef USE_IFNAMELINKID
- if (IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6)) {
- /*
- * Using interface names as link indices can be allowed
- * only when we can assume a one-to-one mappings between
- * links and interfaces. See comments in getnameinfo.c.
- */
- scopeid = if_nametoindex(scope);
- if (scopeid == 0)
- *scopeidp = scopeid;
- return (1);
- }
-#endif
-
- /* still unclear about literal, allow numeric only - placeholder */
- if (IN6_IS_ADDR_SITELOCAL(a6) || IN6_IS_ADDR_MC_SITELOCAL(a6))
- goto trynumeric;
- if (IN6_IS_ADDR_MC_ORGLOCAL(a6))
- goto trynumeric;
- else
- goto trynumeric; /* global */
-
- /* try to convert to a numeric id as a last resort */
-trynumeric:
- errno = 0;
- lscopeid = strtoul(scope, &ep, 10);
- scopeid = lscopeid & 0xffffffff;
- if (errno == 0 && ep && *ep == '\0' && scopeid == lscopeid) {
- *scopeidp = scopeid;
- return (1);
- } else
- return (0);
-}
-
-struct addrinfo *
-hostent2addrinfo(hp, pai)
- struct hostent *hp;
- const struct addrinfo *pai;
-{
- int i, af, error = 0;
- char **aplist = NULL, *ap;
- struct addrinfo sentinel, *cur;
- const struct afd *afd;
-
- af = hp->h_addrtype;
- if (pai->ai_family != AF_UNSPEC && af != pai->ai_family)
- return(NULL);
-
- afd = find_afd(af);
- if (afd == NULL)
- return(NULL);
-
- aplist = hp->h_addr_list;
-
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
-
- for (i = 0; (ap = aplist[i]) != NULL; i++) {
-#if 0 /* the trick seems too much */
- af = hp->h_addr_list;
- if (af == AF_INET6 &&
- IN6_IS_ADDR_V4MAPPED((struct in6_addr *)ap)) {
- af = AF_INET;
- ap = ap + sizeof(struct in6_addr)
- - sizeof(struct in_addr);
- }
- afd = find_afd(af);
- if (afd == NULL)
- continue;
-#endif /* 0 */
-
- GET_AI(cur->ai_next, afd, ap);
-
- /* GET_PORT(cur->ai_next, servname); */
- if ((pai->ai_flags & AI_CANONNAME) != 0) {
- /*
- * RFC2553 says that ai_canonname will be set only for
- * the first element. we do it for all the elements,
- * just for convenience.
- */
- GET_CANONNAME(cur->ai_next, hp->h_name);
- }
- while (cur && cur->ai_next) /* no need to loop, actually. */
- cur = cur->ai_next;
- continue;
-
- free:
- if (cur->ai_next)
- freeaddrinfo(cur->ai_next);
- cur->ai_next = NULL;
- /* continue, without tht pointer CUR advanced. */
- }
-
- return(sentinel.ai_next);
-}
-
-struct addrinfo *
-addr2addrinfo(pai, cp)
- const struct addrinfo *pai;
- const char *cp;
-{
- const struct afd *afd;
-
- afd = find_afd(pai->ai_family);
- if (afd == NULL)
- return(NULL);
-
- return(get_ai(pai, afd, cp));
-}
-
-static struct net_data *
-init()
-{
- struct net_data *net_data;
-
- if (!(net_data = net_data_init(NULL)))
- goto error;
- if (!net_data->ho) {
- net_data->ho = (*net_data->irs->ho_map)(net_data->irs);
- if (!net_data->ho || !net_data->res) {
-error:
- errno = EIO;
- if (net_data && net_data->res)
- RES_SET_H_ERRNO(net_data->res, NETDB_INTERNAL);
- return (NULL);
- }
-
- (*net_data->ho->res_set)(net_data->ho, net_data->res, NULL);
- }
-
- return (net_data);
-}
diff --git a/contrib/bind/lib/irs/getgrent.c b/contrib/bind/lib/irs/getgrent.c
deleted file mode 100644
index f6eea13..0000000
--- a/contrib/bind/lib/irs/getgrent.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: getgrent.c,v 1.20 2001/05/29 05:48:41 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#if !defined(WANT_IRS_GR) || defined(__BIND_NOSTATIC)
-static int __bind_irs_gr_unneeded;
-#else
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <grp.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/getgrent_r.c b/contrib/bind/lib/irs/getgrent_r.c
deleted file mode 100644
index 641a2b2..0000000
--- a/contrib/bind/lib/irs/getgrent_r.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getgrent_r.c,v 8.7 2001/11/01 08:02:08 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <port_before.h>
-#if !defined(_REENTRANT) || !defined(DO_PTHREADS) || !defined(WANT_IRS_PW)
- static int getgrent_r_not_required = 0;
-#else
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/types.h>
-#if (defined(POSIX_GETGRNAM_R) || defined(POSIX_GETGRGID_R)) && \
- defined(_POSIX_PTHREAD_SEMANTICS)
- /* turn off solaris remapping in <grp.h> */
-#define _UNIX95
-#undef _POSIX_PTHREAD_SEMANTICS
-#include <grp.h>
-#define _POSIX_PTHREAD_SEMANTICS 1
-#else
-#include <grp.h>
-#endif
-#include <sys/param.h>
-#include <port_after.h>
-
-#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/contrib/bind/lib/irs/gethostent.c b/contrib/bind/lib/irs/gethostent.c
deleted file mode 100644
index 3964b5f..0000000
--- a/contrib/bind/lib/irs/gethostent.c
+++ /dev/null
@@ -1,1069 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: gethostent.c,v 1.32.10.2 2003/06/04 01:09:43 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#if !defined(__BIND_NOSTATIC)
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <netinet/in.h>
-#include <net/if.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <irs.h>
-#include <isc/memcluster.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "irs_data.h"
-
-/* Definitions */
-
-struct pvt {
- char * aliases[1];
- char * addrs[2];
- char addr[NS_IN6ADDRSZ];
- char name[NS_MAXDNAME + 1];
- struct hostent host;
-};
-
-/* Forward */
-
-static struct net_data *init(void);
-static void freepvt(struct net_data *);
-static struct hostent *fakeaddr(const char *, int, struct net_data *);
-
-
-/* Public */
-
-struct hostent *
-gethostbyname(const char *name) {
- struct net_data *net_data = init();
-
- return (gethostbyname_p(name, net_data));
-}
-
-struct hostent *
-gethostbyname2(const char *name, int af) {
- struct net_data *net_data = init();
-
- return (gethostbyname2_p(name, af, net_data));
-}
-
-struct hostent *
-gethostbyaddr(const char *addr, int len, int af) {
- struct net_data *net_data = init();
-
- return (gethostbyaddr_p(addr, len, af, net_data));
-}
-
-struct hostent *
-gethostent() {
- struct net_data *net_data = init();
-
- return (gethostent_p(net_data));
-}
-
-void
-sethostent(int stayopen) {
- struct net_data *net_data = init();
- sethostent_p(stayopen, net_data);
-}
-
-
-void
-endhostent() {
- struct net_data *net_data = init();
- endhostent_p(net_data);
-}
-
-/* Shared private. */
-
-struct hostent *
-gethostbyname_p(const char *name, struct net_data *net_data) {
- struct hostent *hp;
-
- if (!net_data)
- return (NULL);
-
- if (net_data->res->options & RES_USE_INET6) {
- hp = gethostbyname2_p(name, AF_INET6, net_data);
- if (hp)
- return (hp);
- }
- return (gethostbyname2_p(name, AF_INET, net_data));
-}
-
-struct hostent *
-gethostbyname2_p(const char *name, int af, struct net_data *net_data) {
- struct irs_ho *ho;
- char tmp[NS_MAXDNAME];
- struct hostent *hp;
- const char *cp;
- char **hap;
-
- if (!net_data || !(ho = net_data->ho))
- return (NULL);
- if (net_data->ho_stayopen && net_data->ho_last &&
- net_data->ho_last->h_addrtype == af) {
- if (ns_samename(name, net_data->ho_last->h_name) == 1)
- return (net_data->ho_last);
- for (hap = net_data->ho_last->h_aliases; hap && *hap; hap++)
- if (ns_samename(name, *hap) == 1)
- return (net_data->ho_last);
- }
- if (!strchr(name, '.') && (cp = res_hostalias(net_data->res, name,
- tmp, sizeof tmp)))
- name = cp;
- if ((hp = fakeaddr(name, af, net_data)) != NULL)
- return (hp);
- net_data->ho_last = (*ho->byname2)(ho, name, af);
- if (!net_data->ho_stayopen)
- endhostent();
- return (net_data->ho_last);
-}
-
-struct hostent *
-gethostbyaddr_p(const char *addr, int len, int af, struct net_data *net_data) {
- struct irs_ho *ho;
- char **hap;
-
- if (!net_data || !(ho = net_data->ho))
- return (NULL);
- if (net_data->ho_stayopen && net_data->ho_last &&
- net_data->ho_last->h_length == len)
- for (hap = net_data->ho_last->h_addr_list;
- hap && *hap;
- hap++)
- if (!memcmp(addr, *hap, len))
- return (net_data->ho_last);
- net_data->ho_last = (*ho->byaddr)(ho, addr, len, af);
- if (!net_data->ho_stayopen)
- endhostent();
- return (net_data->ho_last);
-}
-
-
-struct hostent *
-gethostent_p(struct net_data *net_data) {
- struct irs_ho *ho;
- struct hostent *hp;
-
- if (!net_data || !(ho = net_data->ho))
- return (NULL);
- while ((hp = (*ho->next)(ho)) != NULL &&
- hp->h_addrtype == AF_INET6 &&
- (net_data->res->options & RES_USE_INET6) == 0)
- continue;
- net_data->ho_last = hp;
- return (net_data->ho_last);
-}
-
-
-void
-sethostent_p(int stayopen, struct net_data *net_data) {
- struct irs_ho *ho;
-
- if (!net_data || !(ho = net_data->ho))
- return;
- freepvt(net_data);
- (*ho->rewind)(ho);
- net_data->ho_stayopen = (stayopen != 0);
- if (stayopen == 0)
- net_data_minimize(net_data);
-}
-
-void
-endhostent_p(struct net_data *net_data) {
- struct irs_ho *ho;
-
- if ((net_data != NULL) && ((ho = net_data->ho) != NULL))
- (*ho->minimize)(ho);
-}
-
-#ifndef IN6_IS_ADDR_V4COMPAT
-static const unsigned char in6addr_compat[12] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-#define IN6_IS_ADDR_V4COMPAT(x) (!memcmp((x)->s6_addr, in6addr_compat, 12) && \
- ((x)->s6_addr[12] != 0 || \
- (x)->s6_addr[13] != 0 || \
- (x)->s6_addr[14] != 0 || \
- ((x)->s6_addr[15] != 0 && \
- (x)->s6_addr[15] != 1)))
-#endif
-#ifndef IN6_IS_ADDR_V4MAPPED
-#define IN6_IS_ADDR_V4MAPPED(x) (!memcmp((x)->s6_addr, in6addr_mapped, 12))
-#endif
-
-static const unsigned char in6addr_mapped[12] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff };
-
-static int scan_interfaces(int *, int *);
-static struct hostent *copyandmerge(struct hostent *, struct hostent *, int, int *);
-
-/*
- * Public functions
- */
-
-/*
- * AI_V4MAPPED + AF_INET6
- * If no IPv6 address then a query for IPv4 and map returned values.
- *
- * AI_ALL + AI_V4MAPPED + AF_INET6
- * Return IPv6 and IPv4 mapped.
- *
- * AI_ADDRCONFIG
- * Only return IPv6 / IPv4 address if there is an interface of that
- * type active.
- */
-
-struct hostent *
-getipnodebyname(const char *name, int af, int flags, int *error_num) {
- int have_v4 = 1, have_v6 = 1;
- struct in_addr in4;
- struct in6_addr in6;
- struct hostent he, *he1 = NULL, *he2 = NULL, *he3;
- int v4 = 0, v6 = 0;
- struct net_data *net_data = init();
- u_long options;
- int tmp_err;
-
- if (net_data == NULL) {
- *error_num = NO_RECOVERY;
- return (NULL);
- }
-
- /* If we care about active interfaces then check. */
- if ((flags & AI_ADDRCONFIG) != 0)
- if (scan_interfaces(&have_v4, &have_v6) == -1) {
- *error_num = NO_RECOVERY;
- return (NULL);
- }
-
- /* Check for literal address. */
- if ((v4 = inet_pton(AF_INET, name, &in4)) != 1)
- v6 = inet_pton(AF_INET6, name, &in6);
-
- /* Impossible combination? */
-
- if ((af == AF_INET6 && (flags & AI_V4MAPPED) == 0 && v4 == 1) ||
- (af == AF_INET && v6 == 1) ||
- (have_v4 == 0 && v4 == 1) ||
- (have_v6 == 0 && v6 == 1) ||
- (have_v4 == 0 && af == AF_INET) ||
- (have_v6 == 0 && af == AF_INET6)) {
- *error_num = HOST_NOT_FOUND;
- return (NULL);
- }
-
- /* Literal address? */
- if (v4 == 1 || v6 == 1) {
- char *addr_list[2];
- char *aliases[1];
-
- DE_CONST(name, he.h_name);
- he.h_addr_list = addr_list;
- he.h_addr_list[0] = (v4 == 1) ? (char *)&in4 : (char *)&in6;
- he.h_addr_list[1] = NULL;
- he.h_aliases = aliases;
- he.h_aliases[0] = NULL;
- he.h_length = (v4 == 1) ? INADDRSZ : IN6ADDRSZ;
- he.h_addrtype = (v4 == 1) ? AF_INET : AF_INET6;
- return (copyandmerge(&he, NULL, af, error_num));
- }
-
- options = net_data->res->options;
- net_data->res->options &= ~RES_USE_INET6;
-
- tmp_err = NO_RECOVERY;
- if (have_v6 && af == AF_INET6) {
- he2 = gethostbyname2_p(name, AF_INET6, net_data);
- if (he2 != NULL) {
- he1 = copyandmerge(he2, NULL, af, error_num);
- if (he1 == NULL)
- return (NULL);
- he2 = NULL;
- } else {
- tmp_err = net_data->res->res_h_errno;
- }
- }
-
- if (have_v4 &&
- ((af == AF_INET) ||
- (af == AF_INET6 && (flags & AI_V4MAPPED) != 0 &&
- (he1 == NULL || (flags & AI_ALL) != 0)))) {
- he2 = gethostbyname2_p(name, AF_INET, net_data);
- if (he1 == NULL && he2 == NULL) {
- *error_num = net_data->res->res_h_errno;
- return (NULL);
- }
- } else
- *error_num = tmp_err;
-
- net_data->res->options = options;
-
- he3 = copyandmerge(he1, he2, af, error_num);
-
- if (he1 != NULL)
- freehostent(he1);
- return (he3);
-}
-
-struct hostent *
-getipnodebyaddr(const void *src, size_t len, int af, int *error_num) {
- struct hostent *he1, *he2;
- struct net_data *net_data = init();
-
- /* Sanity Checks. */
- if (src == NULL) {
- *error_num = NO_RECOVERY;
- return (NULL);
- }
-
- switch (af) {
- case AF_INET:
- if (len != INADDRSZ) {
- *error_num = NO_RECOVERY;
- return (NULL);
- }
- break;
- case AF_INET6:
- if (len != IN6ADDRSZ) {
- *error_num = NO_RECOVERY;
- return (NULL);
- }
- break;
- default:
- *error_num = NO_RECOVERY;
- return (NULL);
- }
-
- /*
- * Lookup IPv4 and IPv4 mapped/compatible addresses
- */
- if ((af == AF_INET6 &&
- IN6_IS_ADDR_V4COMPAT((const struct in6_addr *)src)) ||
- (af == AF_INET6 &&
- IN6_IS_ADDR_V4MAPPED((const struct in6_addr *)src)) ||
- (af == AF_INET)) {
- const char *cp = src;
-
- if (af == AF_INET6)
- cp += 12;
- he1 = gethostbyaddr_p(cp, 4, AF_INET, net_data);
- if (he1 == NULL) {
- *error_num = net_data->res->res_h_errno;
- return (NULL);
- }
- he2 = copyandmerge(he1, NULL, af, error_num);
- if (he2 == NULL)
- return (NULL);
- /*
- * Restore original address if mapped/compatible.
- */
- if (af == AF_INET6)
- memcpy(he1->h_addr, src, len);
- return (he2);
- }
-
- /*
- * Lookup IPv6 address.
- */
- if (memcmp((const struct in6_addr *)src, &in6addr_any, 16) == 0) {
- *error_num = HOST_NOT_FOUND;
- return (NULL);
- }
-
- he1 = gethostbyaddr_p(src, 16, AF_INET6, net_data);
- if (he1 == NULL) {
- *error_num = net_data->res->res_h_errno;
- return (NULL);
- }
- return (copyandmerge(he1, NULL, af, error_num));
-}
-
-void
-freehostent(struct hostent *he) {
- char **cpp;
- int names = 1;
- int addresses = 1;
-
- memput(he->h_name, strlen(he->h_name) + 1);
-
- cpp = he->h_addr_list;
- while (*cpp != NULL) {
- memput(*cpp, (he->h_addrtype == AF_INET) ?
- INADDRSZ : IN6ADDRSZ);
- *cpp = NULL;
- cpp++;
- addresses++;
- }
-
- cpp = he->h_aliases;
- while (*cpp != NULL) {
- memput(*cpp, strlen(*cpp) + 1);
- cpp++;
- names++;
- }
-
- memput(he->h_aliases, sizeof(char *) * (names));
- memput(he->h_addr_list, sizeof(char *) * (addresses));
- memput(he, sizeof *he);
-}
-
-/*
- * Private
- */
-
-/*
- * Scan the interface table and set have_v4 and have_v6 depending
- * upon whether there are IPv4 and IPv6 interface addresses.
- *
- * Returns:
- * 0 on success
- * -1 on failure.
- */
-
-#if defined(SIOCGLIFCONF) && defined(SIOCGLIFADDR) && \
- !defined(IRIX_EMUL_IOCTL_SIOCGIFCONF)
-
-#ifdef __hpux
-#define lifc_len iflc_len
-#define lifc_buf iflc_buf
-#define lifc_req iflc_req
-#define LIFCONF if_laddrconf
-#else
-#define SETFAMILYFLAGS
-#define LIFCONF lifconf
-#endif
-
-#ifdef __hpux
-#define lifr_addr iflr_addr
-#define lifr_name iflr_name
-#define lifr_dstaddr iflr_dstaddr
-#define lifr_flags iflr_flags
-#define ss_family sa_family
-#define LIFREQ if_laddrreq
-#else
-#define LIFREQ lifreq
-#endif
-
-static void
-scan_interfaces6(int *have_v4, int *have_v6) {
- struct LIFCONF lifc;
- struct LIFREQ lifreq;
- struct in_addr in4;
- struct in6_addr in6;
- char *buf = NULL, *cp, *cplim;
- static unsigned int bufsiz = 4095;
- int s, cpsize, n;
-
- /* Get interface list from system. */
- if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) == -1)
- goto cleanup;
-
- /*
- * Grow buffer until large enough to contain all interface
- * descriptions.
- */
- for (;;) {
- buf = memget(bufsiz);
- if (buf == NULL)
- goto cleanup;
-#ifdef SETFAMILYFLAGS
- lifc.lifc_family = AF_UNSPEC; /* request all families */
- lifc.lifc_flags = 0;
-#endif
- lifc.lifc_len = bufsiz;
- lifc.lifc_buf = buf;
- if ((n = ioctl(s, SIOCGLIFCONF, (char *)&lifc)) != -1) {
- /*
- * Some OS's just return what will fit rather
- * than set EINVAL if the buffer is too small
- * to fit all the interfaces in. If
- * lifc.lifc_len is too near to the end of the
- * buffer we will grow it just in case and
- * retry.
- */
- if (lifc.lifc_len + 2 * sizeof(lifreq) < bufsiz)
- break;
- }
- if ((n == -1) && errno != EINVAL)
- goto cleanup;
-
- if (bufsiz > 1000000)
- goto cleanup;
-
- memput(buf, bufsiz);
- bufsiz += 4096;
- }
-
- /* Parse system's interface list. */
- cplim = buf + lifc.lifc_len; /* skip over if's with big ifr_addr's */
- for (cp = buf;
- (*have_v4 == 0 || *have_v6 == 0) && cp < cplim;
- cp += cpsize) {
- memcpy(&lifreq, cp, sizeof lifreq);
-#ifdef HAVE_SA_LEN
-#ifdef FIX_ZERO_SA_LEN
- if (lifreq.lifr_addr.sa_len == 0)
- lifreq.lifr_addr.sa_len = 16;
-#endif
-#ifdef HAVE_MINIMUM_IFREQ
- cpsize = sizeof lifreq;
- if (lifreq.lifr_addr.sa_len > sizeof (struct sockaddr))
- cpsize += (int)lifreq.lifr_addr.sa_len -
- (int)(sizeof (struct sockaddr));
-#else
- cpsize = sizeof lifreq.lifr_name + lifreq.lifr_addr.sa_len;
-#endif /* HAVE_MINIMUM_IFREQ */
-#elif defined SIOCGIFCONF_ADDR
- cpsize = sizeof lifreq;
-#else
- cpsize = sizeof lifreq.lifr_name;
- /* XXX maybe this should be a hard error? */
- if (ioctl(s, SIOCGLIFADDR, (char *)&lifreq) < 0)
- continue;
-#endif
- switch (lifreq.lifr_addr.ss_family) {
- case AF_INET:
- if (*have_v4 == 0) {
- memcpy(&in4,
- &((struct sockaddr_in *)
- &lifreq.lifr_addr)->sin_addr,
- sizeof in4);
- if (in4.s_addr == INADDR_ANY)
- break;
- n = ioctl(s, SIOCGLIFFLAGS, (char *)&lifreq);
- if (n < 0)
- break;
- if ((lifreq.lifr_flags & IFF_UP) == 0)
- break;
- *have_v4 = 1;
- }
- break;
- case AF_INET6:
- if (*have_v6 == 0) {
- memcpy(&in6,
- &((struct sockaddr_in6 *)
- &lifreq.lifr_addr)->sin6_addr, sizeof in6);
- if (memcmp(&in6, &in6addr_any, sizeof in6) == 0)
- break;
- n = ioctl(s, SIOCGLIFFLAGS, (char *)&lifreq);
- if (n < 0)
- break;
- if ((lifreq.lifr_flags & IFF_UP) == 0)
- break;
- *have_v6 = 1;
- }
- break;
- }
- }
- if (buf != NULL)
- memput(buf, bufsiz);
- close(s);
- /* printf("scan interface -> 4=%d 6=%d\n", *have_v4, *have_v6); */
- return;
- cleanup:
- if (buf != NULL)
- memput(buf, bufsiz);
- if (s != -1)
- close(s);
- /* printf("scan interface -> 4=%d 6=%d\n", *have_v4, *have_v6); */
- return;
-}
-#endif
-
-#ifdef __linux
-#ifndef IF_NAMESIZE
-# ifdef IFNAMSIZ
-# define IF_NAMESIZE IFNAMSIZ
-# else
-# define IF_NAMESIZE 16
-# endif
-#endif
-static void
-scan_linux6(int *have_v6) {
- FILE *proc = NULL;
- char address[33];
- char name[IF_NAMESIZE+1];
- int ifindex, prefix, flag3, flag4;
-
- proc = fopen("/proc/net/if_inet6", "r");
- if (proc == NULL)
- return;
-
- if (fscanf(proc, "%32[a-f0-9] %x %x %x %x %16s\n",
- address, &ifindex, &prefix, &flag3, &flag4, name) == 6)
- *have_v6 = 1;
- fclose(proc);
- return;
-}
-#endif
-
-static int
-scan_interfaces(int *have_v4, int *have_v6) {
- struct ifconf ifc;
- union {
- char _pad[256]; /* leave space for IPv6 addresses */
- struct ifreq ifreq;
- } u;
- struct in_addr in4;
- struct in6_addr in6;
- char *buf = NULL, *cp, *cplim;
- static unsigned int bufsiz = 4095;
- int s, n;
- size_t cpsize;
-
- /* Set to zero. Used as loop terminators below. */
- *have_v4 = *have_v6 = 0;
-
-#if defined(SIOCGLIFCONF) && defined(SIOCGLIFADDR) && \
- !defined(IRIX_EMUL_IOCTL_SIOCGIFCONF)
- /*
- * Try to scan the interfaces using IPv6 ioctls().
- */
- scan_interfaces6(have_v4, have_v6);
- if (*have_v4 != 0 && *have_v6 != 0)
- return (0);
-#endif
-#ifdef __linux
- scan_linux6(have_v6);
-#endif
-
- /* Get interface list from system. */
- if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
- goto err_ret;
-
- /*
- * Grow buffer until large enough to contain all interface
- * descriptions.
- */
- for (;;) {
- buf = memget(bufsiz);
- if (buf == NULL)
- goto err_ret;
- ifc.ifc_len = bufsiz;
- ifc.ifc_buf = buf;
-#ifdef IRIX_EMUL_IOCTL_SIOCGIFCONF
- /*
- * This is a fix for IRIX OS in which the call to ioctl with
- * the flag SIOCGIFCONF may not return an entry for all the
- * interfaces like most flavors of Unix.
- */
- if (emul_ioctl(&ifc) >= 0)
- break;
-#else
- if ((n = ioctl(s, SIOCGIFCONF, (char *)&ifc)) != -1) {
- /*
- * Some OS's just return what will fit rather
- * than set EINVAL if the buffer is too small
- * to fit all the interfaces in. If
- * ifc.ifc_len is too near to the end of the
- * buffer we will grow it just in case and
- * retry.
- */
- if (ifc.ifc_len + 2 * sizeof(u.ifreq) < bufsiz)
- break;
- }
-#endif
- if ((n == -1) && errno != EINVAL)
- goto err_ret;
-
- if (bufsiz > 1000000)
- goto err_ret;
-
- memput(buf, bufsiz);
- bufsiz += 4096;
- }
-
- /* Parse system's interface list. */
- cplim = buf + ifc.ifc_len; /* skip over if's with big ifr_addr's */
- for (cp = buf;
- (*have_v4 == 0 || *have_v6 == 0) && cp < cplim;
- cp += cpsize) {
- memcpy(&u.ifreq, cp, sizeof u.ifreq);
-#ifdef HAVE_SA_LEN
-#ifdef FIX_ZERO_SA_LEN
- if (u.ifreq.ifr_addr.sa_len == 0)
- u.ifreq.ifr_addr.sa_len = 16;
-#endif
-#ifdef HAVE_MINIMUM_IFREQ
- cpsize = sizeof u.ifreq;
- if (u.ifreq.ifr_addr.sa_len > sizeof (struct sockaddr))
- cpsize += (int)u.ifreq.ifr_addr.sa_len -
- (int)(sizeof (struct sockaddr));
-#else
- cpsize = sizeof u.ifreq.ifr_name + u.ifreq.ifr_addr.sa_len;
-#endif /* HAVE_MINIMUM_IFREQ */
- if (cpsize > sizeof u.ifreq && cpsize <= sizeof u)
- memcpy(&u.ifreq, cp, cpsize);
-#elif defined SIOCGIFCONF_ADDR
- cpsize = sizeof u.ifreq;
-#else
- cpsize = sizeof u.ifreq.ifr_name;
- /* XXX maybe this should be a hard error? */
- if (ioctl(s, SIOCGIFADDR, (char *)&u.ifreq) < 0)
- continue;
-#endif
- switch (u.ifreq.ifr_addr.sa_family) {
- case AF_INET:
- if (*have_v4 == 0) {
- memcpy(&in4,
- &((struct sockaddr_in *)
- &u.ifreq.ifr_addr)->sin_addr,
- sizeof in4);
- if (in4.s_addr == INADDR_ANY)
- break;
- n = ioctl(s, SIOCGIFFLAGS, (char *)&u.ifreq);
- if (n < 0)
- break;
- if ((u.ifreq.ifr_flags & IFF_UP) == 0)
- break;
- *have_v4 = 1;
- }
- break;
- case AF_INET6:
- if (*have_v6 == 0) {
- memcpy(&in6,
- &((struct sockaddr_in6 *)
- &u.ifreq.ifr_addr)->sin6_addr,
- sizeof in6);
- if (memcmp(&in6, &in6addr_any, sizeof in6) == 0)
- break;
- n = ioctl(s, SIOCGIFFLAGS, (char *)&u.ifreq);
- if (n < 0)
- break;
- if ((u.ifreq.ifr_flags & IFF_UP) == 0)
- break;
- *have_v6 = 1;
- }
- break;
- }
- }
- if (buf != NULL)
- memput(buf, bufsiz);
- close(s);
- /* printf("scan interface -> 4=%d 6=%d\n", *have_v4, *have_v6); */
- return (0);
- err_ret:
- if (buf != NULL)
- memput(buf, bufsiz);
- if (s != -1)
- close(s);
- /* printf("scan interface -> 4=%d 6=%d\n", *have_v4, *have_v6); */
- return (-1);
-}
-
-static struct hostent *
-copyandmerge(struct hostent *he1, struct hostent *he2, int af, int *error_num) {
- struct hostent *he = NULL;
- int addresses = 1; /* NULL terminator */
- int names = 1; /* NULL terminator */
- int len = 0;
- char **cpp, **npp;
-
- /*
- * Work out array sizes;
- */
- if (he1 != NULL) {
- cpp = he1->h_addr_list;
- while (*cpp != NULL) {
- addresses++;
- cpp++;
- }
- cpp = he1->h_aliases;
- while (*cpp != NULL) {
- names++;
- cpp++;
- }
- }
-
- if (he2 != NULL) {
- cpp = he2->h_addr_list;
- while (*cpp != NULL) {
- addresses++;
- cpp++;
- }
- if (he1 == NULL) {
- cpp = he2->h_aliases;
- while (*cpp != NULL) {
- names++;
- cpp++;
- }
- }
- }
-
- if (addresses == 1) {
- *error_num = NO_ADDRESS;
- return (NULL);
- }
-
- he = memget(sizeof *he);
- if (he == NULL)
- goto no_recovery;
-
- he->h_addr_list = memget(sizeof(char *) * (addresses));
- if (he->h_addr_list == NULL)
- goto cleanup0;
- memset(he->h_addr_list, 0, sizeof(char *) * (addresses));
-
- /* copy addresses */
- npp = he->h_addr_list;
- if (he1 != NULL) {
- cpp = he1->h_addr_list;
- while (*cpp != NULL) {
- *npp = memget((af == AF_INET) ? INADDRSZ : IN6ADDRSZ);
- if (*npp == NULL)
- goto cleanup1;
- /* convert to mapped if required */
- if (af == AF_INET6 && he1->h_addrtype == AF_INET) {
- memcpy(*npp, in6addr_mapped,
- sizeof in6addr_mapped);
- memcpy(*npp + sizeof in6addr_mapped, *cpp,
- INADDRSZ);
- } else {
- memcpy(*npp, *cpp,
- (af == AF_INET) ? INADDRSZ : IN6ADDRSZ);
- }
- cpp++;
- npp++;
- }
- }
-
- if (he2 != NULL) {
- cpp = he2->h_addr_list;
- while (*cpp != NULL) {
- *npp = memget((af == AF_INET) ? INADDRSZ : IN6ADDRSZ);
- if (*npp == NULL)
- goto cleanup1;
- /* convert to mapped if required */
- if (af == AF_INET6 && he2->h_addrtype == AF_INET) {
- memcpy(*npp, in6addr_mapped,
- sizeof in6addr_mapped);
- memcpy(*npp + sizeof in6addr_mapped, *cpp,
- INADDRSZ);
- } else {
- memcpy(*npp, *cpp,
- (af == AF_INET) ? INADDRSZ : IN6ADDRSZ);
- }
- cpp++;
- npp++;
- }
- }
-
- he->h_aliases = memget(sizeof(char *) * (names));
- if (he->h_aliases == NULL)
- goto cleanup1;
- memset(he->h_aliases, 0, sizeof(char *) * (names));
-
- /* copy aliases */
- npp = he->h_aliases;
- cpp = (he1 != NULL) ? he1->h_aliases : he2->h_aliases;
- while (*cpp != NULL) {
- len = strlen (*cpp) + 1;
- *npp = memget(len);
- if (*npp == NULL)
- goto cleanup2;
- strcpy(*npp, *cpp);
- npp++;
- cpp++;
- }
-
- /* copy hostname */
- he->h_name = memget(strlen((he1 != NULL) ?
- he1->h_name : he2->h_name) + 1);
- if (he->h_name == NULL)
- goto cleanup2;
- strcpy(he->h_name, (he1 != NULL) ? he1->h_name : he2->h_name);
-
- /* set address type and length */
- he->h_addrtype = af;
- he->h_length = (af == AF_INET) ? INADDRSZ : IN6ADDRSZ;
- return(he);
-
- cleanup2:
- cpp = he->h_aliases;
- while (*cpp != NULL) {
- memput(*cpp, strlen(*cpp) + 1);
- cpp++;
- }
- memput(he->h_aliases, sizeof(char *) * (names));
-
- cleanup1:
- cpp = he->h_addr_list;
- while (*cpp != NULL) {
- memput(*cpp, (af == AF_INET) ? INADDRSZ : IN6ADDRSZ);
- *cpp = NULL;
- cpp++;
- }
- memput(he->h_addr_list, sizeof(char *) * (addresses));
-
- cleanup0:
- memput(he, sizeof *he);
-
- no_recovery:
- *error_num = NO_RECOVERY;
- return (NULL);
-}
-
-static struct net_data *
-init() {
- struct net_data *net_data;
-
- if (!(net_data = net_data_init(NULL)))
- goto error;
- if (!net_data->ho) {
- net_data->ho = (*net_data->irs->ho_map)(net_data->irs);
- if (!net_data->ho || !net_data->res) {
- error:
- errno = EIO;
- if (net_data && net_data->res)
- RES_SET_H_ERRNO(net_data->res, NETDB_INTERNAL);
- return (NULL);
- }
-
- (*net_data->ho->res_set)(net_data->ho, net_data->res, NULL);
- }
-
- return (net_data);
-}
-
-static void
-freepvt(struct net_data *net_data) {
- if (net_data->ho_data) {
- free(net_data->ho_data);
- net_data->ho_data = NULL;
- }
-}
-
-static struct hostent *
-fakeaddr(const char *name, int af, struct net_data *net_data) {
- struct pvt *pvt;
-
- freepvt(net_data);
- net_data->ho_data = malloc(sizeof (struct pvt));
- if (!net_data->ho_data) {
- errno = ENOMEM;
- RES_SET_H_ERRNO(net_data->res, NETDB_INTERNAL);
- return (NULL);
- }
- pvt = net_data->ho_data;
-#ifndef __bsdi__
- /*
- * Unlike its forebear(inet_aton), our friendly inet_pton() is strict
- * in its interpretation of its input, and it will only return "1" if
- * the input string is a formally valid(and thus unambiguous with
- * respect to host names) internet address specification for this AF.
- *
- * This means "telnet 0xdeadbeef" and "telnet 127.1" are dead now.
- */
- if (inet_pton(af, name, pvt->addr) != 1) {
-#else
- /* BSDI XXX
- * We put this back to inet_aton -- we really want the old behavior
- * Long live 127.1...
- */
- if ((af != AF_INET ||
- inet_aton(name, (struct in_addr *)pvt->addr) != 1) &&
- inet_pton(af, name, pvt->addr) != 1) {
-#endif
- RES_SET_H_ERRNO(net_data->res, HOST_NOT_FOUND);
- return (NULL);
- }
- strncpy(pvt->name, name, NS_MAXDNAME);
- pvt->name[NS_MAXDNAME] = '\0';
- if (af == AF_INET && (net_data->res->options & RES_USE_INET6) != 0) {
- map_v4v6_address(pvt->addr, pvt->addr);
- af = AF_INET6;
- }
- pvt->host.h_addrtype = af;
- switch(af) {
- case AF_INET:
- pvt->host.h_length = NS_INADDRSZ;
- break;
- case AF_INET6:
- pvt->host.h_length = NS_IN6ADDRSZ;
- break;
- default:
- errno = EAFNOSUPPORT;
- RES_SET_H_ERRNO(net_data->res, NETDB_INTERNAL);
- return (NULL);
- }
- pvt->host.h_name = pvt->name;
- pvt->host.h_aliases = pvt->aliases;
- pvt->aliases[0] = NULL;
- pvt->addrs[0] = (char *)pvt->addr;
- pvt->addrs[1] = NULL;
- pvt->host.h_addr_list = pvt->addrs;
- RES_SET_H_ERRNO(net_data->res, NETDB_SUCCESS);
- return (&pvt->host);
-}
-
-#ifdef grot /* for future use in gethostbyaddr(), for "SUNSECURITY" */
- struct hostent *rhp;
- char **haddr;
- u_long old_options;
- char hname2[MAXDNAME+1];
-
- if (af == AF_INET) {
- /*
- * turn off search as the name should be absolute,
- * 'localhost' should be matched by defnames
- */
- strncpy(hname2, hp->h_name, MAXDNAME);
- hname2[MAXDNAME] = '\0';
- old_options = net_data->res->options;
- net_data->res->options &= ~RES_DNSRCH;
- net_data->res->options |= RES_DEFNAMES;
- if (!(rhp = gethostbyname(hname2))) {
- net_data->res->options = old_options;
- RES_SET_H_ERRNO(net_data->res, HOST_NOT_FOUND);
- return (NULL);
- }
- net_data->res->options = old_options;
- for (haddr = rhp->h_addr_list; *haddr; haddr++)
- if (!memcmp(*haddr, addr, INADDRSZ))
- break;
- if (!*haddr) {
- RES_SET_H_ERRNO(net_data->res, HOST_NOT_FOUND);
- return (NULL);
- }
- }
-#endif /* grot */
-
-#endif /*__BIND_NOSTATIC*/
diff --git a/contrib/bind/lib/irs/gethostent_r.c b/contrib/bind/lib/irs/gethostent_r.c
deleted file mode 100644
index e8017ac..0000000
--- a/contrib/bind/lib/irs/gethostent_r.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: gethostent_r.c,v 8.7 2001/11/01 08:02:09 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <port_before.h>
-#if !defined(_REENTRANT) || !defined(DO_PTHREADS)
- static int gethostent_r_not_required = 0;
-#else
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <sys/param.h>
-#include <port_after.h>
-
-#ifdef HOST_R_RETURN
-
-static HOST_R_RETURN
-copy_hostent(struct hostent *, struct hostent *, HOST_R_COPY_ARGS);
-
-HOST_R_RETURN
-gethostbyname_r(const char *name, struct hostent *hptr, HOST_R_ARGS) {
- struct hostent *he = gethostbyname(name);
-#ifdef HOST_R_SETANSWER
- int n = 0;
-#endif
-
- HOST_R_ERRNO;
-
-#ifdef HOST_R_SETANSWER
- if (he == NULL || (n = copy_hostent(he, hptr, HOST_R_COPY)) == 0)
- *answerp = NULL;
- else
- *answerp = hptr;
-
- return (n);
-#else
- if (he == NULL)
- return (HOST_R_BAD);
-
- return (copy_hostent(he, hptr, HOST_R_COPY));
-#endif
-}
-
-HOST_R_RETURN
-gethostbyaddr_r(const char *addr, int len, int type,
- struct hostent *hptr, HOST_R_ARGS) {
- struct hostent *he = gethostbyaddr(addr, len, type);
-#ifdef HOST_R_SETANSWER
- int n = 0;
-#endif
-
- HOST_R_ERRNO;
-
-#ifdef HOST_R_SETANSWER
- if (he == NULL || (n = copy_hostent(he, hptr, HOST_R_COPY)) == 0)
- *answerp = NULL;
- else
- *answerp = hptr;
-
- return (n);
-#else
- if (he == NULL)
- return (HOST_R_BAD);
-
- return (copy_hostent(he, hptr, HOST_R_COPY));
-#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.
- */
-
-HOST_R_RETURN
-gethostent_r(struct hostent *hptr, HOST_R_ARGS) {
- struct hostent *he = gethostent();
-#ifdef HOST_R_SETANSWER
- int n = 0;
-#endif
-
- HOST_R_ERRNO;
-
-#ifdef HOST_R_SETANSWER
- if (he == NULL || (n = copy_hostent(he, hptr, HOST_R_COPY)) == 0)
- *answerp = NULL;
- else
- *answerp = hptr;
-
- return (n);
-#else
- if (he == NULL)
- return (HOST_R_BAD);
-
- return (copy_hostent(he, hptr, HOST_R_COPY));
-#endif
-}
-
-HOST_R_SET_RETURN
-#ifdef HOST_R_ENT_ARGS
-sethostent_r(int stay_open, HOST_R_ENT_ARGS)
-#else
-sethostent_r(int stay_open)
-#endif
-{
- sethostent(stay_open);
-#ifdef HOST_R_SET_RESULT
- return (HOST_R_SET_RESULT);
-#endif
-}
-
-HOST_R_END_RETURN
-#ifdef HOST_R_ENT_ARGS
-endhostent_r(HOST_R_ENT_ARGS)
-#else
-endhostent_r(void)
-#endif
-{
- endhostent();
- HOST_R_END_RESULT(HOST_R_OK);
-}
-
-/* Private */
-
-#ifndef HOSTENT_DATA
-static HOST_R_RETURN
-copy_hostent(struct hostent *he, struct hostent *hptr, HOST_R_COPY_ARGS) {
- char *cp;
- char **ptr;
- int i, n;
- int nptr, len;
-
- /* Find out the amount of space required to store the answer. */
- nptr = 2; /* NULL ptrs */
- len = (char *)ALIGN(buf) - buf;
- for (i = 0; he->h_addr_list[i]; i++, nptr++) {
- len += he->h_length;
- }
- for (i = 0; he->h_aliases[i]; i++, nptr++) {
- len += strlen(he->h_aliases[i]) + 1;
- }
- len += strlen(he->h_name) + 1;
- len += nptr * sizeof(char*);
-
- if (len > buflen) {
- errno = ERANGE;
- return (HOST_R_BAD);
- }
-
- /* copy address size and type */
- hptr->h_addrtype = he->h_addrtype;
- n = hptr->h_length = he->h_length;
-
- ptr = (char **)ALIGN(buf);
- cp = (char *)ALIGN(buf) + nptr * sizeof(char *);
-
- /* copy address list */
- hptr->h_addr_list = ptr;
- for (i = 0; he->h_addr_list[i]; i++ , ptr++) {
- memcpy(cp, he->h_addr_list[i], n);
- hptr->h_addr_list[i] = cp;
- cp += n;
- }
- hptr->h_addr_list[i] = NULL;
- ptr++;
-
- /* copy official name */
- n = strlen(he->h_name) + 1;
- strcpy(cp, he->h_name);
- hptr->h_name = cp;
- cp += n;
-
- /* copy aliases */
- hptr->h_aliases = ptr;
- for (i = 0 ; he->h_aliases[i]; i++) {
- n = strlen(he->h_aliases[i]) + 1;
- strcpy(cp, he->h_aliases[i]);
- hptr->h_aliases[i] = cp;
- cp += n;
- }
- hptr->h_aliases[i] = NULL;
-
- return (HOST_R_OK);
-}
-#else /* !HOSTENT_DATA */
-static int
-copy_hostent(struct hostent *he, struct hostent *hptr, HOST_R_COPY_ARGS) {
- char *cp, *eob;
- int i, n;
-
- /* copy address size and type */
- hptr->h_addrtype = he->h_addrtype;
- n = hptr->h_length = he->h_length;
-
- /* copy up to first 35 addresses */
- i = 0;
- cp = hdptr->hostaddr;
- eob = hdptr->hostaddr + sizeof(hdptr->hostaddr);
- hptr->h_addr_list = hdptr->h_addr_ptrs;
- while (he->h_addr_list[i] && i < (_MAXADDRS)) {
- if (n < (eob - cp)) {
- memcpy(cp, he->h_addr_list[i], n);
- hptr->h_addr_list[i] = cp;
- cp += n;
- } else {
- break;
- }
- i++;
- }
- hptr->h_addr_list[i] = NULL;
-
- /* copy official name */
- cp = hdptr->hostbuf;
- eob = hdptr->hostbuf + sizeof(hdptr->hostbuf);
- if ((n = strlen(he->h_name) + 1) < (eob - cp)) {
- strcpy(cp, he->h_name);
- hptr->h_name = cp;
- cp += n;
- } else {
- return (-1);
- }
-
- /* copy aliases */
- i = 0;
- hptr->h_aliases = hdptr->host_aliases;
- while (he->h_aliases[i] && i < (_MAXALIASES-1)) {
- if ((n = strlen(he->h_aliases[i]) + 1) < (eob - cp)) {
- strcpy(cp, he->h_aliases[i]);
- hptr->h_aliases[i] = cp;
- cp += n;
- } else {
- break;
- }
- i++;
- }
- hptr->h_aliases[i] = NULL;
-
- return (HOST_R_OK);
-}
-#endif /* !HOSTENT_DATA */
-#else /* HOST_R_RETURN */
- static int gethostent_r_unknown_system = 0;
-#endif /* HOST_R_RETURN */
-#endif /* !defined(_REENTRANT) || !defined(DO_PTHREADS) */
diff --git a/contrib/bind/lib/irs/getnameinfo.c b/contrib/bind/lib/irs/getnameinfo.c
deleted file mode 100644
index 702b932..0000000
--- a/contrib/bind/lib/irs/getnameinfo.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Issues to be discussed:
- * - Thread safe-ness must be checked
- */
-
-/*
- * 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.
- */
-
-#include <port_before.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <arpa/inet.h>
-#include <net/if.h>
-
-#include <netdb.h>
-#include <resolv.h>
-#include <string.h>
-#include <stddef.h>
-
-#include <port_after.h>
-
-/*
- * Note that a_off will be dynamically adjusted so that to be consistent
- * with the definition of sockaddr_in{,6}.
- * The value presented below is just a guess.
- */
-static struct afd {
- int a_af;
- int a_addrlen;
- size_t a_socklen;
- int a_off;
-} afdl [] = {
- /* first entry is linked last... */
- {PF_INET, sizeof(struct in_addr), sizeof(struct sockaddr_in),
- offsetof(struct sockaddr_in, sin_addr)},
- {PF_INET6, sizeof(struct in6_addr), sizeof(struct sockaddr_in6),
- offsetof(struct sockaddr_in6, sin6_addr)},
- {0, 0, 0, 0},
-};
-
-struct sockinet {
-#ifdef HAVE_SA_LEN
- u_char si_len;
-#endif
- u_char si_family;
- u_short si_port;
-};
-
-static int ip6_parsenumeric __P((const struct sockaddr *, const char *, char *,
- size_t, int));
-#ifdef HAVE_SIN6_SCOPE_ID
-static int ip6_sa2str __P((const struct sockaddr_in6 *, char *, size_t, int));
-#endif
-
-int
-getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
- const struct sockaddr *sa;
- size_t salen;
- char *host;
- size_t hostlen;
- char *serv;
- size_t servlen;
- int flags;
-{
- struct afd *afd;
- struct servent *sp;
- struct hostent *hp;
- u_short port;
-#ifdef HAVE_SA_LEN
- size_t len;
-#endif
- int family, i;
- const char *addr;
- char *p;
- char numserv[512];
- char numaddr[512];
- const struct sockaddr_in6 *sin6;
-
- if (sa == NULL)
- return EAI_FAIL;
-
-#ifdef HAVE_SA_LEN
- len = sa->sa_len;
- if (len != salen) return EAI_FAIL;
-#endif
-
- family = sa->sa_family;
- for (i = 0; afdl[i].a_af; i++)
- if (afdl[i].a_af == family) {
- afd = &afdl[i];
- goto found;
- }
- return EAI_FAMILY;
-
- found:
- if (salen != afd->a_socklen) return EAI_FAIL;
-
- port = ((const struct sockinet *)sa)->si_port; /* network byte order */
- addr = (const char *)sa + afd->a_off;
-
- if (serv == NULL || servlen == 0) {
- /*
- * rfc2553bis says that serv == NULL or servlen == 0 means that
- * the caller does not want the result.
- */
- } else if (flags & NI_NUMERICSERV) {
- sprintf(numserv, "%d", ntohs(port));
- if (strlen(numserv) > servlen)
- return EAI_MEMORY;
- strcpy(serv, numserv);
- } else {
- sp = getservbyport(port, (flags & NI_DGRAM) ? "udp" : "tcp");
- if (sp) {
- if (strlen(sp->s_name) + 1 > servlen)
- return EAI_MEMORY;
- strcpy(serv, sp->s_name);
- } else
- return EAI_NONAME;
- }
-
- switch (sa->sa_family) {
- case AF_INET:
- if (ntohl(*(const u_long *)addr) >> IN_CLASSA_NSHIFT == 0)
- flags |= NI_NUMERICHOST;
- break;
- case AF_INET6:
- sin6 = (const struct sockaddr_in6 *)sa;
- switch (sin6->sin6_addr.s6_addr[0]) {
- case 0x00:
- if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr))
- ;
- else if (IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr))
- ;
- else
- flags |= NI_NUMERICHOST;
- break;
- default:
- if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr))
- flags |= NI_NUMERICHOST;
- else if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))
- flags |= NI_NUMERICHOST;
- break;
- }
- break;
- }
- if (host == NULL || hostlen == 0) {
- /*
- * rfc2553bis says that host == NULL or hostlen == 0 means that
- * the caller does not want the result.
- */
- } else if (flags & NI_NUMERICHOST) {
- goto numeric;
- } else {
- hp = gethostbyaddr(addr, afd->a_addrlen, afd->a_af);
-
- if (hp) {
- if (flags & NI_NOFQDN) {
- p = strchr(hp->h_name, '.');
- if (p) *p = '\0';
- }
- if (strlen(hp->h_name) + 1 > hostlen)
- return EAI_MEMORY;
- strcpy(host, hp->h_name);
- } else {
- if (flags & NI_NAMEREQD)
- return EAI_NONAME;
- numeric:
- switch(afd->a_af) {
- case AF_INET6:
- {
- int error;
-
- if ((error = ip6_parsenumeric(sa, addr, host,
- hostlen,
- flags)) != 0)
- return(error);
- break;
- }
-
- default:
- if (inet_ntop(afd->a_af, addr, numaddr,
- sizeof(numaddr)) == NULL)
- return EAI_NONAME;
- if (strlen(numaddr) + 1 > hostlen)
- return EAI_MEMORY;
- strcpy(host, numaddr);
- }
- }
- }
- return(0);
-}
-
-static int
-ip6_parsenumeric(const struct sockaddr *sa, const char *addr, char *host,
- size_t hostlen, int flags)
-{
- size_t numaddrlen;
- char numaddr[512];
-
-#ifndef HAVE_SIN6_SCOPE_ID
- UNUSED(sa);
- UNUSED(flags);
-#endif
-
- if (inet_ntop(AF_INET6, addr, numaddr, sizeof(numaddr))
- == NULL)
- return EAI_SYSTEM;
-
- numaddrlen = strlen(numaddr);
- if (numaddrlen + 1 > hostlen) /* don't forget terminator */
- return EAI_MEMORY;
- strcpy(host, numaddr);
-
-#ifdef HAVE_SIN6_SCOPE_ID
- if (((const struct sockaddr_in6 *)sa)->sin6_scope_id) {
- char scopebuf[MAXHOSTNAMELEN]; /* XXX */
- int scopelen;
-
- /* ip6_sa2str never fails */
- scopelen = ip6_sa2str((const struct sockaddr_in6 *)sa,
- scopebuf, sizeof(scopebuf), flags);
-
- if (scopelen + 1 + numaddrlen + 1 > hostlen)
- return EAI_MEMORY;
-
- /* construct <numeric-addr><delim><scopeid> */
- memcpy(host + numaddrlen + 1, scopebuf,
- scopelen);
- host[numaddrlen] = SCOPE_DELIMITER;
- host[numaddrlen + 1 + scopelen] = '\0';
- }
-#endif
-
- return 0;
-}
-
-#ifdef HAVE_SIN6_SCOPE_ID
-/* ARGSUSED */
-static int
-ip6_sa2str(const struct sockaddr_in6 *sa6, char *buf,
- size_t bufsiz, int flags)
-{
-#ifdef USE_IFNAMELINKID
- unsigned int ifindex = (unsigned int)sa6->sin6_scope_id;
- const struct in6_addr *a6 = &sa6->sin6_addr;
-#endif
- char tmp[64];
-
-#ifdef NI_NUMERICSCOPE
- if (flags & NI_NUMERICSCOPE) {
- sprintf(tmp, "%u", sa6->sin6_scope_id);
- if (bufsiz != 0) {
- strncpy(buf, tmp, bufsiz - 1);
- buf[bufsiz - 1] = '\0';
- }
- return(strlen(tmp));
- }
-#endif
-
-#ifdef USE_IFNAMELINKID
- /*
- * For a link-local address, convert the index to an interface
- * name, assuming a one-to-one mapping between links and interfaces.
- * Note, however, that this assumption is stronger than the
- * specification of the scoped address architecture; the
- * specficication says that more than one interfaces can belong to
- * a single link.
- */
-
- /* if_indextoname() does not take buffer size. not a good api... */
- if ((IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6)) &&
- bufsiz >= IF_NAMESIZE) {
- char *p = if_indextoname(ifindex, buf);
- if (p) {
- return(strlen(p));
- }
- }
-#endif
-
- /* last resort */
- sprintf(tmp, "%u", sa6->sin6_scope_id);
- if (bufsiz != 0) {
- strncpy(buf, tmp, bufsiz - 1);
- buf[bufsiz - 1] = '\0';
- }
- return(strlen(tmp));
-}
-#endif
diff --git a/contrib/bind/lib/irs/getnetent.c b/contrib/bind/lib/irs/getnetent.c
deleted file mode 100644
index 49810b7..0000000
--- a/contrib/bind/lib/irs/getnetent.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: getnetent.c,v 1.19 2001/05/29 05:48:47 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#if !defined(__BIND_NOSTATIC)
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <arpa/inet.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "irs_data.h"
-
-/* Definitions */
-
-struct pvt {
- struct netent netent;
- char * aliases[1];
- char name[MAXDNAME + 1];
-};
-
-/* Forward */
-
-static struct net_data *init(void);
-static struct netent *nw_to_net(struct nwent *, struct net_data *);
-static void freepvt(struct net_data *);
-static struct netent *fakeaddr(const char *, int af, struct net_data *);
-
-/* Portability */
-
-#ifndef INADDR_NONE
-# define INADDR_NONE 0xffffffff
-#endif
-
-/* Public */
-
-struct netent *
-getnetent() {
- struct net_data *net_data = init();
-
- return (getnetent_p(net_data));
-}
-
-struct netent *
-getnetbyname(const char *name) {
- struct net_data *net_data = init();
-
- return (getnetbyname_p(name, net_data));
-}
-
-struct netent *
-getnetbyaddr(unsigned long net, int type) {
- struct net_data *net_data = init();
-
- return (getnetbyaddr_p(net, type, net_data));
-}
-
-void
-setnetent(int stayopen) {
- struct net_data *net_data = init();
-
- setnetent_p(stayopen, net_data);
-}
-
-
-void
-endnetent() {
- struct net_data *net_data = init();
-
- endnetent_p(net_data);
-}
-
-/* Shared private. */
-
-struct netent *
-getnetent_p(struct net_data *net_data) {
- struct irs_nw *nw;
-
- if (!net_data || !(nw = net_data->nw))
- return (NULL);
- net_data->nww_last = (*nw->next)(nw);
- net_data->nw_last = nw_to_net(net_data->nww_last, net_data);
- return (net_data->nw_last);
-}
-
-struct netent *
-getnetbyname_p(const char *name, struct net_data *net_data) {
- struct irs_nw *nw;
- struct netent *np;
- char **nap;
-
- if (!net_data || !(nw = net_data->nw))
- return (NULL);
- if (net_data->nw_stayopen && net_data->nw_last) {
- if (!strcmp(net_data->nw_last->n_name, name))
- return (net_data->nw_last);
- for (nap = net_data->nw_last->n_aliases; nap && *nap; nap++)
- if (!strcmp(name, *nap))
- return (net_data->nw_last);
- }
- if ((np = fakeaddr(name, AF_INET, net_data)) != NULL)
- return (np);
- net_data->nww_last = (*nw->byname)(nw, name, AF_INET);
- net_data->nw_last = nw_to_net(net_data->nww_last, net_data);
- if (!net_data->nw_stayopen)
- endnetent();
- return (net_data->nw_last);
-}
-
-struct netent *
-getnetbyaddr_p(unsigned long net, int type, struct net_data *net_data) {
- struct irs_nw *nw;
- u_char addr[4];
- int bits;
-
- if (!net_data || !(nw = net_data->nw))
- return (NULL);
- if (net_data->nw_stayopen && net_data->nw_last)
- if (type == net_data->nw_last->n_addrtype &&
- net == net_data->nw_last->n_net)
- return (net_data->nw_last);
-
- /* cannonize net(host order) */
- if (net < 256) {
- net <<= 24;
- bits = 8;
- } else if (net < 65536) {
- net <<= 16;
- bits = 16;
- } else if (net < 16777216) {
- net <<= 8;
- bits = 24;
- } else
- bits = 32;
-
- /* convert to net order */
- addr[0] = (0xFF000000 & net) >> 24;
- addr[1] = (0x00FF0000 & net) >> 16;
- addr[2] = (0x0000FF00 & net) >> 8;
- addr[3] = (0x000000FF & net);
-
- /* reduce bits to as close to natural number as possible */
- if ((bits == 32) && (addr[0] < 224) && (addr[3] == 0)) {
- if ((addr[0] < 192) && (addr[2] == 0)) {
- if ((addr[0] < 128) && (addr[1] == 0))
- bits = 8;
- else
- bits = 16;
- } else {
- bits = 24;
- }
- }
-
- net_data->nww_last = (*nw->byaddr)(nw, addr, bits, AF_INET);
- net_data->nw_last = nw_to_net(net_data->nww_last, net_data);
- if (!net_data->nw_stayopen)
- endnetent();
- return (net_data->nw_last);
-}
-
-
-
-
-void
-setnetent_p(int stayopen, struct net_data *net_data) {
- struct irs_nw *nw;
-
- if (!net_data || !(nw = net_data->nw))
- return;
- freepvt(net_data);
- (*nw->rewind)(nw);
- net_data->nw_stayopen = (stayopen != 0);
- if (stayopen == 0)
- net_data_minimize(net_data);
-}
-
-void
-endnetent_p(struct net_data *net_data) {
- struct irs_nw *nw;
-
- if ((net_data != NULL) && ((nw = net_data->nw) != NULL))
- (*nw->minimize)(nw);
-}
-
-/* Private */
-
-static struct net_data *
-init() {
- struct net_data *net_data;
-
- if (!(net_data = net_data_init(NULL)))
- goto error;
- if (!net_data->nw) {
- net_data->nw = (*net_data->irs->nw_map)(net_data->irs);
-
- if (!net_data->nw || !net_data->res) {
- error:
- errno = EIO;
- return (NULL);
- }
- (*net_data->nw->res_set)(net_data->nw, net_data->res, NULL);
- }
-
- return (net_data);
-}
-
-static void
-freepvt(struct net_data *net_data) {
- if (net_data->nw_data) {
- free(net_data->nw_data);
- net_data->nw_data = NULL;
- }
-}
-
-static struct netent *
-fakeaddr(const char *name, int af, struct net_data *net_data) {
- struct pvt *pvt;
- const char *cp;
- u_long tmp;
-
- if (af != AF_INET) {
- /* XXX should support IPv6 some day */
- errno = EAFNOSUPPORT;
- RES_SET_H_ERRNO(net_data->res, NETDB_INTERNAL);
- return (NULL);
- }
- if (!isascii((unsigned char)(name[0])) ||
- !isdigit((unsigned char)(name[0])))
- return (NULL);
- for (cp = name; *cp; ++cp)
- if (!isascii(*cp) || (!isdigit((unsigned char)*cp) && *cp != '.'))
- return (NULL);
- if (*--cp == '.')
- return (NULL);
-
- /* All-numeric, no dot at the end. */
-
- tmp = inet_network(name);
- if (tmp == INADDR_NONE) {
- RES_SET_H_ERRNO(net_data->res, HOST_NOT_FOUND);
- return (NULL);
- }
-
- /* Valid network number specified.
- * Fake up a netent as if we'd actually
- * done a lookup.
- */
- freepvt(net_data);
- net_data->nw_data = malloc(sizeof (struct pvt));
- if (!net_data->nw_data) {
- errno = ENOMEM;
- RES_SET_H_ERRNO(net_data->res, NETDB_INTERNAL);
- return (NULL);
- }
- pvt = net_data->nw_data;
-
- strncpy(pvt->name, name, MAXDNAME);
- pvt->name[MAXDNAME] = '\0';
- pvt->netent.n_name = pvt->name;
- pvt->netent.n_addrtype = AF_INET;
- pvt->netent.n_aliases = pvt->aliases;
- pvt->aliases[0] = NULL;
- pvt->netent.n_net = tmp;
-
- return (&pvt->netent);
-}
-
-static struct netent *
-nw_to_net(struct nwent *nwent, struct net_data *net_data) {
- struct pvt *pvt;
- u_long addr = 0;
- int i;
- int msbyte;
-
- if (!nwent || nwent->n_addrtype != AF_INET)
- return (NULL);
- freepvt(net_data);
- net_data->nw_data = malloc(sizeof (struct pvt));
- if (!net_data->nw_data) {
- errno = ENOMEM;
- RES_SET_H_ERRNO(net_data->res, NETDB_INTERNAL);
- return (NULL);
- }
- pvt = net_data->nw_data;
- pvt->netent.n_name = nwent->n_name;
- pvt->netent.n_aliases = nwent->n_aliases;
- pvt->netent.n_addrtype = nwent->n_addrtype;
-
-/*
- * What this code does: Converts net addresses from network to host form.
- *
- * msbyte: the index of the most significant byte in the n_addr array.
- *
- * Shift bytes in significant order into addr. When all signicant
- * bytes are in, zero out bits in the LSB that are not part of the network.
- */
- msbyte = nwent->n_length / 8 +
- ((nwent->n_length % 8) != 0 ? 1 : 0) - 1;
- for (i = 0; i <= msbyte; i++)
- addr = (addr << 8) | ((unsigned char *)nwent->n_addr)[i];
- i = (32 - nwent->n_length) % 8;
- if (i != 0)
- addr &= ~((1 << (i + 1)) - 1);
- pvt->netent.n_net = addr;
- return (&pvt->netent);
-}
-
-#endif /*__BIND_NOSTATIC*/
diff --git a/contrib/bind/lib/irs/getnetent_r.c b/contrib/bind/lib/irs/getnetent_r.c
deleted file mode 100644
index 1472eb5..0000000
--- a/contrib/bind/lib/irs/getnetent_r.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getnetent_r.c,v 8.6 2001/11/01 08:02:11 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <port_before.h>
-#if !defined(_REENTRANT) || !defined(DO_PTHREADS)
- static int getnetent_r_not_required = 0;
-#else
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <sys/param.h>
-#include <port_after.h>
-
-#ifdef NET_R_RETURN
-
-static NET_R_RETURN
-copy_netent(struct netent *, struct netent *, NET_R_COPY_ARGS);
-
-NET_R_RETURN
-getnetbyname_r(const char *name, struct netent *nptr, NET_R_ARGS) {
- struct netent *ne = getnetbyname(name);
-#ifdef NET_R_SETANSWER
- int n = 0;
-
- if (ne == NULL || (n = copy_netent(ne, nptr, NET_R_COPY)) != 0)
- *answerp = NULL;
- else
- *answerp = ne;
- if (ne == NULL)
- *h_errnop = h_errno;
- return (n);
-#else
- if (ne == NULL)
- return (NET_R_BAD);
-
- return (copy_netent(ne, nptr, NET_R_COPY));
-#endif
-}
-
-#ifndef GETNETBYADDR_ADDR_T
-#define GETNETBYADDR_ADDR_T long
-#endif
-NET_R_RETURN
-getnetbyaddr_r(GETNETBYADDR_ADDR_T addr, int type, struct netent *nptr, NET_R_ARGS) {
- struct netent *ne = getnetbyaddr(addr, type);
-#ifdef NET_R_SETANSWER
- int n = 0;
-
- if (ne == NULL || (n = copy_netent(ne, nptr, NET_R_COPY)) != 0)
- *answerp = NULL;
- else
- *answerp = ne;
- if (ne == NULL)
- *h_errnop = h_errno;
- return (n);
-#else
-
- if (ne == NULL)
- return (NET_R_BAD);
-
- return (copy_netent(ne, nptr, NET_R_COPY));
-#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.
- */
-
-NET_R_RETURN
-getnetent_r(struct netent *nptr, NET_R_ARGS) {
- struct netent *ne = getnetent();
-#ifdef NET_R_SETANSWER
- int n = 0;
-
- if (ne == NULL || (n = copy_netent(ne, nptr, NET_R_COPY)) != 0)
- *answerp = NULL;
- else
- *answerp = ne;
- if (ne == NULL)
- *h_errnop = h_errno;
- return (n);
-#else
-
- if (ne == NULL)
- return (NET_R_BAD);
-
- return (copy_netent(ne, nptr, NET_R_COPY));
-#endif
-}
-
-NET_R_SET_RETURN
-#ifdef NET_R_ENT_ARGS
-setnetent_r(int stay_open, NET_R_ENT_ARGS)
-#else
-setnetent_r(int stay_open)
-#endif
-{
- setnetent(stay_open);
-#ifdef NET_R_SET_RESULT
- return (NET_R_SET_RESULT);
-#endif
-}
-
-NET_R_END_RETURN
-#ifdef NET_R_ENT_ARGS
-endnetent_r(NET_R_ENT_ARGS)
-#else
-endnetent_r()
-#endif
-{
- endnetent();
- NET_R_END_RESULT(NET_R_OK);
-}
-
-/* Private */
-
-#ifndef NETENT_DATA
-static NET_R_RETURN
-copy_netent(struct netent *ne, struct netent *nptr, NET_R_COPY_ARGS) {
- 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; ne->n_aliases[i]; i++, numptr++) {
- len += strlen(ne->n_aliases[i]) + 1;
- }
- len += strlen(ne->n_name) + 1;
- len += numptr * sizeof(char*);
-
- if (len > (int)buflen) {
- errno = ERANGE;
- return (NET_R_BAD);
- }
-
- /* copy net value and type */
- nptr->n_addrtype = ne->n_addrtype;
- nptr->n_net = ne->n_net;
-
- cp = (char *)ALIGN(buf) + numptr * sizeof(char *);
-
- /* copy official name */
- n = strlen(ne->n_name) + 1;
- strcpy(cp, ne->n_name);
- nptr->n_name = cp;
- cp += n;
-
- /* copy aliases */
- nptr->n_aliases = (char **)ALIGN(buf);
- for (i = 0 ; ne->n_aliases[i]; i++) {
- n = strlen(ne->n_aliases[i]) + 1;
- strcpy(cp, ne->n_aliases[i]);
- nptr->n_aliases[i] = cp;
- cp += n;
- }
- nptr->n_aliases[i] = NULL;
-
- return (NET_R_OK);
-}
-#else /* !NETENT_DATA */
-static int
-copy_netent(struct netent *ne, struct netent *nptr, NET_R_COPY_ARGS) {
- char *cp, *eob;
- int i, n;
-
- /* copy net value and type */
- nptr->n_addrtype = ne->n_addrtype;
- nptr->n_net = ne->n_net;
-
- /* copy official name */
- cp = ndptr->line;
- eob = ndptr->line + sizeof(ndptr->line);
- if ((n = strlen(ne->n_name) + 1) < (eob - cp)) {
- strcpy(cp, ne->n_name);
- nptr->n_name = cp;
- cp += n;
- } else {
- return (-1);
- }
-
- /* copy aliases */
- i = 0;
- nptr->n_aliases = ndptr->net_aliases;
- while (ne->n_aliases[i] && i < (_MAXALIASES-1)) {
- if ((n = strlen(ne->n_aliases[i]) + 1) < (eob - cp)) {
- strcpy(cp, ne->n_aliases[i]);
- nptr->n_aliases[i] = cp;
- cp += n;
- } else {
- break;
- }
- i++;
- }
- nptr->n_aliases[i] = NULL;
-
- return (NET_R_OK);
-}
-#endif /* !NETENT_DATA */
-#else /* NET_R_RETURN */
- static int getnetent_r_unknown_system = 0;
-#endif /* NET_R_RETURN */
-#endif /* !defined(_REENTRANT) || !defined(DO_PTHREADS) */
diff --git a/contrib/bind/lib/irs/getnetgrent.c b/contrib/bind/lib/irs/getnetgrent.c
deleted file mode 100644
index 9c13b01..0000000
--- a/contrib/bind/lib/irs/getnetgrent.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getnetgrent.c,v 1.16.6.1 2003/06/02 06:06:58 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Imports */
-
-#include "port_before.h"
-
-#if !defined(__BIND_NOSTATIC)
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <resolv.h>
-#include <stdio.h>
-
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_data.h"
-
-/* Forward */
-
-static struct net_data *init(void);
-
-
-/* Public */
-
-#ifndef SETNETGRENT_ARGS
-#define SETNETGRENT_ARGS const char *netgroup
-#endif
-void
-setnetgrent(SETNETGRENT_ARGS) {
- struct net_data *net_data = init();
-
- setnetgrent_p(netgroup, net_data);
-}
-
-void
-endnetgrent(void) {
- struct net_data *net_data = init();
-
- endnetgrent_p(net_data);
-}
-
-#ifndef INNETGR_ARGS
-#define INNETGR_ARGS const char *netgroup, const char *host, \
- const char *user, const char *domain
-#endif
-int
-innetgr(INNETGR_ARGS) {
- struct net_data *net_data = init();
-
- return (innetgr_p(netgroup, host, user, domain, net_data));
-}
-
-int
-getnetgrent(char **host, char **user, char **domain) {
- struct net_data *net_data = init();
- const char *ch, *cu, *cd;
- int ret;
-
- ret = getnetgrent_p(&ch, &cu, &cd, net_data);
- if (ret != 1)
- return (ret);
-
- DE_CONST(ch, *host);
- DE_CONST(cu, *user);
- DE_CONST(cd, *domain);
- return (ret);
-}
-
-/* Shared private. */
-
-void
-setnetgrent_p(const char *netgroup, struct net_data *net_data) {
- struct irs_ng *ng;
-
- if ((net_data != NULL) && ((ng = net_data->ng) != NULL))
- (*ng->rewind)(ng, netgroup);
-}
-
-void
-endnetgrent_p(struct net_data *net_data) {
- struct irs_ng *ng;
-
- if (!net_data)
- return;
- if ((ng = net_data->ng) != NULL)
- (*ng->close)(ng);
- net_data->ng = NULL;
-}
-
-int
-innetgr_p(const char *netgroup, const char *host,
- const char *user, const char *domain,
- struct net_data *net_data) {
- struct irs_ng *ng;
-
- if (!net_data || !(ng = net_data->ng))
- return (0);
- return ((*ng->test)(ng, netgroup, host, user, domain));
-}
-
-int
-getnetgrent_p(const char **host, const char **user, const char **domain,
- struct net_data *net_data ) {
- struct irs_ng *ng;
-
- if (!net_data || !(ng = net_data->ng))
- return (0);
- return ((*ng->next)(ng, host, user, domain));
-}
-
-/* Private */
-
-static struct net_data *
-init(void) {
- struct net_data *net_data;
-
- if (!(net_data = net_data_init(NULL)))
- goto error;
- if (!net_data->ng) {
- net_data->ng = (*net_data->irs->ng_map)(net_data->irs);
- if (!net_data->ng) {
- error:
- errno = EIO;
- return (NULL);
- }
- }
-
- return (net_data);
-}
-
-#endif /*__BIND_NOSTATIC*/
diff --git a/contrib/bind/lib/irs/getnetgrent_r.c b/contrib/bind/lib/irs/getnetgrent_r.c
deleted file mode 100644
index 0a88ea4..0000000
--- a/contrib/bind/lib/irs/getnetgrent_r.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getnetgrent_r.c,v 8.6.10.1 2003/06/02 06:06:58 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <port_before.h>
-#if !defined(_REENTRANT) || !defined(DO_PTHREADS)
- static int getnetgrent_r_not_required = 0;
-#else
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <netgroup.h>
-#include <stdlib.h>
-#include <port_after.h>
-
-#ifdef NGR_R_RETURN
-
-static NGR_R_RETURN
-copy_protoent(char **, char **, char **, const char *, const char *,
- const char *, NGR_R_COPY_ARGS);
-
-NGR_R_RETURN
-innetgr_r(const char *netgroup, const char *host, const char *user,
- const char *domain) {
- char *ng, *ho, *us, *dom;
-
- DE_CONST(netgroup, ng);
- DE_CONST(host, ho);
- DE_CONST(user, us);
- DE_CONST(domain, dom);
-
- return (innetgr(ng, ho, us, dom));
-}
-
-/*
- * 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.
- */
-
-NGR_R_RETURN
-getnetgrent_r(char **machinep, char **userp, char **domainp, NGR_R_ARGS) {
- char *mp, *up, *dp;
- int res = getnetgrent(&mp, &up, &dp);
-
- if (res != 1)
- return (res);
-
- return (copy_protoent(machinep, userp, domainp,
- mp, up, dp, NGR_R_COPY));
-}
-
-NGR_R_SET_RETURN
-#ifdef NGR_R_ENT_ARGS
-setnetgrent_r(const char *netgroup, NGR_R_ENT_ARGS)
-#else
-setnetgrent_r(const char *netgroup)
-#endif
-{
- setnetgrent(netgroup);
-#ifdef NGR_R_PRIVATE
- *buf = NULL;
-#endif
-#ifdef NGR_R_SET_RESULT
- return (NGR_R_SET_RESULT);
-#endif
-}
-
-NGR_R_END_RETURN
-#ifdef NGR_R_ENT_ARGS
-endnetgrent_r(NGR_R_ENT_ARGS)
-#else
-endnetgrent_r(void)
-#endif
-{
- endnetgrent();
-#ifdef NGR_R_PRIVATE
- if (*buf != NULL)
- free(*buf);
- *buf = NULL;
-#endif
- NGR_R_END_RESULT(NGR_R_OK);
-}
-
-/* Private */
-
-static int
-copy_protoent(char **machinep, char **userp, char **domainp,
- const char *mp, const char *up, const char *dp,
- NGR_R_COPY_ARGS) {
- char *cp;
- int n;
- int len;
-
- /* Find out the amount of space required to store the answer. */
- len = 0;
- if (mp != NULL) len += strlen(mp) + 1;
- if (up != NULL) len += strlen(up) + 1;
- if (dp != NULL) len += strlen(dp) + 1;
-
-#ifdef NGR_R_PRIVATE
- free(*buf);
- *buf = malloc(len);
- if (*buf == NULL)
- return(NGR_R_BAD);
- cp = *buf;
-#else
- if (len > (int)buflen) {
- errno = ERANGE;
- return (NGR_R_BAD);
- }
- cp = buf;
-#endif
-
-
- if (mp != NULL) {
- n = strlen(mp) + 1;
- strcpy(cp, mp);
- *machinep = cp;
- cp += n;
- } else
- *machinep = NULL;
-
- if (up != NULL) {
- n = strlen(up) + 1;
- strcpy(cp, up);
- *userp = cp;
- cp += n;
- } else
- *userp = NULL;
-
- if (dp != NULL) {
- n = strlen(dp) + 1;
- strcpy(cp, dp);
- *domainp = cp;
- cp += n;
- } else
- *domainp = NULL;
-
- return (NGR_R_OK);
-}
-#else /* NGR_R_RETURN */
- static int getnetgrent_r_unknown_system = 0;
-#endif /* NGR_R_RETURN */
-#endif /* !defined(_REENTRANT) || !defined(DO_PTHREADS) */
diff --git a/contrib/bind/lib/irs/getprotoent.c b/contrib/bind/lib/irs/getprotoent.c
deleted file mode 100644
index 724b0ad..0000000
--- a/contrib/bind/lib/irs/getprotoent.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: getprotoent.c,v 1.16 2001/11/01 07:34:33 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#if !defined(__BIND_NOSTATIC)
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_data.h"
-
-/* Forward */
-
-static struct net_data *init(void);
-
-/* Public */
-
-struct protoent *
-getprotoent() {
- struct net_data *net_data = init();
-
- return (getprotoent_p(net_data));
-}
-
-struct protoent *
-getprotobyname(const char *name) {
- struct net_data *net_data = init();
-
- return (getprotobyname_p(name, net_data));
-}
-
-struct protoent *
-getprotobynumber(int proto) {
- struct net_data *net_data = init();
-
- return (getprotobynumber_p(proto, net_data));
-}
-
-void
-setprotoent(int stayopen) {
- struct net_data *net_data = init();
-
- setprotoent_p(stayopen, net_data);
-}
-
-void
-endprotoent() {
- struct net_data *net_data = init();
-
- endprotoent_p(net_data);
-}
-
-/* Shared private. */
-
-struct protoent *
-getprotoent_p(struct net_data *net_data) {
- struct irs_pr *pr;
-
- if (!net_data || !(pr = net_data->pr))
- return (NULL);
- net_data->pr_last = (*pr->next)(pr);
- return (net_data->pr_last);
-}
-
-struct protoent *
-getprotobyname_p(const char *name, struct net_data *net_data) {
- struct irs_pr *pr;
- char **pap;
-
- if (!net_data || !(pr = net_data->pr))
- return (NULL);
- if (net_data->pr_stayopen && net_data->pr_last) {
- if (!strcmp(net_data->pr_last->p_name, name))
- return (net_data->pr_last);
- for (pap = net_data->pr_last->p_aliases; pap && *pap; pap++)
- if (!strcmp(name, *pap))
- return (net_data->pr_last);
- }
- net_data->pr_last = (*pr->byname)(pr, name);
- if (!net_data->pr_stayopen)
- endprotoent();
- return (net_data->pr_last);
-}
-
-struct protoent *
-getprotobynumber_p(int proto, struct net_data *net_data) {
- struct irs_pr *pr;
-
- if (!net_data || !(pr = net_data->pr))
- return (NULL);
- if (net_data->pr_stayopen && net_data->pr_last)
- if (net_data->pr_last->p_proto == proto)
- return (net_data->pr_last);
- net_data->pr_last = (*pr->bynumber)(pr, proto);
- if (!net_data->pr_stayopen)
- endprotoent();
- return (net_data->pr_last);
-}
-
-void
-setprotoent_p(int stayopen, struct net_data *net_data) {
- struct irs_pr *pr;
-
- if (!net_data || !(pr = net_data->pr))
- return;
- (*pr->rewind)(pr);
- net_data->pr_stayopen = (stayopen != 0);
- if (stayopen == 0)
- net_data_minimize(net_data);
-}
-
-void
-endprotoent_p(struct net_data *net_data) {
- struct irs_pr *pr;
-
- if ((net_data != NULL) && ((pr = net_data->pr) != NULL))
- (*pr->minimize)(pr);
-}
-
-/* Private */
-
-static struct net_data *
-init() {
- struct net_data *net_data;
-
- if (!(net_data = net_data_init(NULL)))
- goto error;
- if (!net_data->pr) {
- net_data->pr = (*net_data->irs->pr_map)(net_data->irs);
-
- if (!net_data->pr || !net_data->res) {
- error:
- errno = EIO;
- return (NULL);
- }
- (*net_data->pr->res_set)(net_data->pr, net_data->res, NULL);
- }
-
- return (net_data);
-}
-
-#endif /*__BIND_NOSTATIC*/
diff --git a/contrib/bind/lib/irs/getprotoent_r.c b/contrib/bind/lib/irs/getprotoent_r.c
deleted file mode 100644
index fc3b17e..0000000
--- a/contrib/bind/lib/irs/getprotoent_r.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getprotoent_r.c,v 8.6 2001/11/01 08:02:14 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <port_before.h>
-#if !defined(_REENTRANT) || !defined(DO_PTHREADS)
- static int getprotoent_r_not_required = 0;
-#else
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <port_after.h>
-
-#ifdef PROTO_R_RETURN
-
-static PROTO_R_RETURN
-copy_protoent(struct protoent *, struct protoent *, PROTO_R_COPY_ARGS);
-
-PROTO_R_RETURN
-getprotobyname_r(const char *name, struct protoent *pptr, PROTO_R_ARGS) {
- struct protoent *pe = getprotobyname(name);
-#ifdef PROTO_R_SETANSWER
- int n = 0;
-
- if (pe == NULL || (n = copy_protoent(pe, pptr, PROTO_R_COPY)) != 0)
- *answerp = NULL;
- else
- *answerp = pptr;
-
- return (n);
-#else
- if (pe == NULL)
- return (PROTO_R_BAD);
-
- return (copy_protoent(pe, pptr, PROTO_R_COPY));
-#endif
-}
-
-PROTO_R_RETURN
-getprotobynumber_r(int proto, struct protoent *pptr, PROTO_R_ARGS) {
- struct protoent *pe = getprotobynumber(proto);
-#ifdef PROTO_R_SETANSWER
- int n = 0;
-
- if (pe == NULL || (n = copy_protoent(pe, pptr, PROTO_R_COPY)) != 0)
- *answerp = NULL;
- else
- *answerp = pptr;
-
- return (n);
-#else
- if (pe == NULL)
- return (PROTO_R_BAD);
-
- return (copy_protoent(pe, pptr, PROTO_R_COPY));
-#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.
- */
-
-PROTO_R_RETURN
-getprotoent_r(struct protoent *pptr, PROTO_R_ARGS) {
- struct protoent *pe = getprotoent();
-#ifdef PROTO_R_SETANSWER
- int n = 0;
-
- if (pe == NULL || (n = copy_protoent(pe, pptr, PROTO_R_COPY)) != 0)
- *answerp = NULL;
- else
- *answerp = pptr;
-
- return (n);
-#else
- if (pe == NULL)
- return (PROTO_R_BAD);
-
- return (copy_protoent(pe, pptr, PROTO_R_COPY));
-#endif
-}
-
-PROTO_R_SET_RETURN
-#ifdef PROTO_R_ENT_ARGS
-setprotoent_r(int stay_open, PROTO_R_ENT_ARGS)
-#else
-setprotoent_r(int stay_open)
-#endif
-{
- setprotoent(stay_open);
-#ifdef PROTO_R_SET_RESULT
- return (PROTO_R_SET_RESULT);
-#endif
-}
-
-PROTO_R_END_RETURN
-#ifdef PROTO_R_ENT_ARGS
-endprotoent_r(PROTO_R_ENT_ARGS)
-#else
-endprotoent_r()
-#endif
-{
- endprotoent();
- PROTO_R_END_RESULT(PROTO_R_OK);
-}
-
-/* Private */
-
-#ifndef PROTOENT_DATA
-static PROTO_R_RETURN
-copy_protoent(struct protoent *pe, struct protoent *pptr, PROTO_R_COPY_ARGS) {
- 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; pe->p_aliases[i]; i++, numptr++) {
- len += strlen(pe->p_aliases[i]) + 1;
- }
- len += strlen(pe->p_name) + 1;
- len += numptr * sizeof(char*);
-
- if (len > (int)buflen) {
- errno = ERANGE;
- return (PROTO_R_BAD);
- }
-
- /* copy protocol value*/
- pptr->p_proto = pe->p_proto;
-
- cp = (char *)ALIGN(buf) + numptr * sizeof(char *);
-
- /* copy official name */
- n = strlen(pe->p_name) + 1;
- strcpy(cp, pe->p_name);
- pptr->p_name = cp;
- cp += n;
-
- /* copy aliases */
- pptr->p_aliases = (char **)ALIGN(buf);
- for (i = 0 ; pe->p_aliases[i]; i++) {
- n = strlen(pe->p_aliases[i]) + 1;
- strcpy(cp, pe->p_aliases[i]);
- pptr->p_aliases[i] = cp;
- cp += n;
- }
- pptr->p_aliases[i] = NULL;
-
- return (PROTO_R_OK);
-}
-#else /* !PROTOENT_DATA */
-static int
-copy_protoent(struct protoent *pe, struct protoent *pptr, PROTO_R_COPY_ARGS) {
- char *cp, *eob;
- int i, n;
-
- /* copy protocol value */
- pptr->p_proto = pe->p_proto;
-
- /* copy official name */
- cp = pdptr->line;
- eob = pdptr->line + sizeof(pdptr->line);
- if ((n = strlen(pe->p_name) + 1) < (eob - cp)) {
- strcpy(cp, pe->p_name);
- pptr->p_name = cp;
- cp += n;
- } else {
- return (-1);
- }
-
- /* copy aliases */
- i = 0;
- pptr->p_aliases = pdptr->proto_aliases;
- while (pe->p_aliases[i] && i < (_MAXALIASES-1)) {
- if ((n = strlen(pe->p_aliases[i]) + 1) < (eob - cp)) {
- strcpy(cp, pe->p_aliases[i]);
- pptr->p_aliases[i] = cp;
- cp += n;
- } else {
- break;
- }
- i++;
- }
- pptr->p_aliases[i] = NULL;
-
- return (PROTO_R_OK);
-}
-#endif /* PROTOENT_DATA */
-#else /* PROTO_R_RETURN */
- static int getprotoent_r_unknown_system = 0;
-#endif /* PROTO_R_RETURN */
-#endif /* !defined(_REENTRANT) || !defined(DO_PTHREADS) */
diff --git a/contrib/bind/lib/irs/getpwent.c b/contrib/bind/lib/irs/getpwent.c
deleted file mode 100644
index 7f536a4..0000000
--- a/contrib/bind/lib/irs/getpwent.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: getpwent.c,v 1.21 2000/02/21 21:40:56 vixie Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#if !defined(WANT_IRS_PW) || defined(__BIND_NOSTATIC)
-static int __bind_irs_pw_unneeded;
-#else
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <pwd.h>
-#include <resolv.h>
-#include <stdio.h>
-
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/getpwent_r.c b/contrib/bind/lib/irs/getpwent_r.c
deleted file mode 100644
index ee2d8a7..0000000
--- a/contrib/bind/lib/irs/getpwent_r.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getpwent_r.c,v 8.6 2001/11/01 08:02:15 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <port_before.h>
-#if !defined(_REENTRANT) || !defined(DO_PTHREADS) || !defined(WANT_IRS_PW)
- static int getpwent_r_not_required = 0;
-#else
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/types.h>
-#if (defined(POSIX_GETPWNAM_R) || defined(POSIX_GETPWUID_R))
-#if defined(_POSIX_PTHREAD_SEMANTICS)
- /* turn off solaris remapping in <grp.h> */
-#undef _POSIX_PTHREAD_SEMANTICS
-#include <pwd.h>
-#define _POSIX_PTHREAD_SEMANTICS 1
-#else
-#define _UNIX95 1
-#include <pwd.h>
-#endif
-#else
-#include <pwd.h>
-#endif
-#include <port_after.h>
-
-#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;
-
- 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;
-
- 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/contrib/bind/lib/irs/getservent.c b/contrib/bind/lib/irs/getservent.c
deleted file mode 100644
index d63ae1d..0000000
--- a/contrib/bind/lib/irs/getservent.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: getservent.c,v 1.17 2001/11/01 07:33:16 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#if !defined(__BIND_NOSTATIC)
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_data.h"
-
-/* Forward */
-
-static struct net_data *init(void);
-
-/* Public */
-
-struct servent *
-getservent(void) {
- struct net_data *net_data = init();
-
- return (getservent_p(net_data));
-}
-
-struct servent *
-getservbyname(const char *name, const char *proto) {
- struct net_data *net_data = init();
-
- return (getservbyname_p(name, proto, net_data));
-}
-
-struct servent *
-getservbyport(int port, const char *proto) {
- struct net_data *net_data = init();
-
- return (getservbyport_p(port, proto, net_data));
-}
-
-void
-setservent(int stayopen) {
- struct net_data *net_data = init();
-
- setservent_p(stayopen, net_data);
-}
-
-void
-endservent() {
- struct net_data *net_data = init();
-
- endservent_p(net_data);
-}
-
-/* Shared private. */
-
-struct servent *
-getservent_p(struct net_data *net_data) {
- struct irs_sv *sv;
-
- if (!net_data || !(sv = net_data->sv))
- return (NULL);
- net_data->sv_last = (*sv->next)(sv);
- return (net_data->sv_last);
-}
-
-struct servent *
-getservbyname_p(const char *name, const char *proto,
- struct net_data *net_data) {
- struct irs_sv *sv;
- char **sap;
-
- if (!net_data || !(sv = net_data->sv))
- return (NULL);
- if (net_data->sv_stayopen && net_data->sv_last)
- if (!proto || !strcmp(net_data->sv_last->s_proto, proto)) {
- if (!strcmp(net_data->sv_last->s_name, name))
- return (net_data->sv_last);
- for (sap = net_data->sv_last->s_aliases;
- sap && *sap; sap++)
- if (!strcmp(name, *sap))
- return (net_data->sv_last);
- }
- net_data->sv_last = (*sv->byname)(sv, name, proto);
- if (!net_data->sv_stayopen)
- endservent();
- return (net_data->sv_last);
-}
-
-struct servent *
-getservbyport_p(int port, const char *proto, struct net_data *net_data) {
- struct irs_sv *sv;
-
- if (!net_data || !(sv = net_data->sv))
- return (NULL);
- if (net_data->sv_stayopen && net_data->sv_last)
- if (port == net_data->sv_last->s_port &&
- ( !proto ||
- !strcmp(net_data->sv_last->s_proto, proto)))
- return (net_data->sv_last);
- net_data->sv_last = (*sv->byport)(sv, port, proto);
- return (net_data->sv_last);
-}
-
-void
-setservent_p(int stayopen, struct net_data *net_data) {
- struct irs_sv *sv;
-
- if (!net_data || !(sv = net_data->sv))
- return;
- (*sv->rewind)(sv);
- net_data->sv_stayopen = (stayopen != 0);
- if (stayopen == 0)
- net_data_minimize(net_data);
-}
-
-void
-endservent_p(struct net_data *net_data) {
- struct irs_sv *sv;
-
- if ((net_data != NULL) && ((sv = net_data->sv) != NULL))
- (*sv->minimize)(sv);
-}
-
-/* Private */
-
-static struct net_data *
-init() {
- struct net_data *net_data;
-
- if (!(net_data = net_data_init(NULL)))
- goto error;
- if (!net_data->sv) {
- net_data->sv = (*net_data->irs->sv_map)(net_data->irs);
-
- if (!net_data->sv || !net_data->res) {
- error:
- errno = EIO;
- return (NULL);
- }
- (*net_data->sv->res_set)(net_data->sv, net_data->res, NULL);
- }
-
- return (net_data);
-}
-
-#endif /*__BIND_NOSTATIC*/
diff --git a/contrib/bind/lib/irs/getservent_r.c b/contrib/bind/lib/irs/getservent_r.c
deleted file mode 100644
index b4897ae..0000000
--- a/contrib/bind/lib/irs/getservent_r.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: getservent_r.c,v 8.5 2001/11/01 08:02:16 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <port_before.h>
-#if !defined(_REENTRANT) || !defined(DO_PTHREADS)
- static int getservent_r_not_required = 0;
-#else
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <sys/param.h>
-#include <port_after.h>
-
-#ifdef SERV_R_RETURN
-
-static SERV_R_RETURN
-copy_servent(struct servent *, struct servent *, SERV_R_COPY_ARGS);
-
-SERV_R_RETURN
-getservbyname_r(const char *name, const char *proto,
- struct servent *sptr, SERV_R_ARGS) {
- struct servent *se = getservbyname(name, proto);
-#ifdef SERV_R_SETANSWER
- int n = 0;
-
- if (se == NULL || (n = copy_servent(se, sptr, SERV_R_COPY)) != 0)
- *answerp = NULL;
- else
- *answerp = sptr;
-
- return (n);
-#else
- if (se == NULL)
- return (SERV_R_BAD);
-
- return (copy_servent(se, sptr, SERV_R_COPY));
-#endif
-}
-
-SERV_R_RETURN
-getservbyport_r(int port, const char *proto,
- struct servent *sptr, SERV_R_ARGS) {
- struct servent *se = getservbyport(port, proto);
-#ifdef SERV_R_SETANSWER
- int n = 0;
-
- if (se == NULL || (n = copy_servent(se, sptr, SERV_R_COPY)) != 0)
- *answerp = NULL;
- else
- *answerp = sptr;
-
- return (n);
-#else
- if (se == NULL)
- return (SERV_R_BAD);
-
- return (copy_servent(se, sptr, SERV_R_COPY));
-#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.
- */
-
-SERV_R_RETURN
-getservent_r(struct servent *sptr, SERV_R_ARGS) {
- struct servent *se = getservent();
-#ifdef SERV_R_SETANSWER
- int n = 0;
-
- if (se == NULL || (n = copy_servent(se, sptr, SERV_R_COPY)) != 0)
- *answerp = NULL;
- else
- *answerp = sptr;
-
- return (n);
-#else
- if (se == NULL)
- return (SERV_R_BAD);
-
- return (copy_servent(se, sptr, SERV_R_COPY));
-#endif
-}
-
-SERV_R_SET_RETURN
-#ifdef SERV_R_ENT_ARGS
-setservent_r(int stay_open, SERV_R_ENT_ARGS)
-#else
-setservent_r(int stay_open)
-#endif
-{
-
- setservent(stay_open);
-#ifdef SERV_R_SET_RESULT
- return (SERV_R_SET_RESULT);
-#endif
-}
-
-SERV_R_END_RETURN
-#ifdef SERV_R_ENT_ARGS
-endservent_r(SERV_R_ENT_ARGS)
-#else
-endservent_r()
-#endif
-{
-
- endservent();
- SERV_R_END_RESULT(SERV_R_OK);
-}
-
-/* Private */
-
-#ifndef SERVENT_DATA
-static SERV_R_RETURN
-copy_servent(struct servent *se, struct servent *sptr, SERV_R_COPY_ARGS) {
- 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; se->s_aliases[i]; i++, numptr++) {
- len += strlen(se->s_aliases[i]) + 1;
- }
- len += strlen(se->s_name) + 1;
- len += strlen(se->s_proto) + 1;
- len += numptr * sizeof(char*);
-
- if (len > (int)buflen) {
- errno = ERANGE;
- return (SERV_R_BAD);
- }
-
- /* copy port value */
- sptr->s_port = se->s_port;
-
- cp = (char *)ALIGN(buf) + numptr * sizeof(char *);
-
- /* copy official name */
- n = strlen(se->s_name) + 1;
- strcpy(cp, se->s_name);
- sptr->s_name = cp;
- cp += n;
-
- /* copy aliases */
- sptr->s_aliases = (char **)ALIGN(buf);
- for (i = 0 ; se->s_aliases[i]; i++) {
- n = strlen(se->s_aliases[i]) + 1;
- strcpy(cp, se->s_aliases[i]);
- sptr->s_aliases[i] = cp;
- cp += n;
- }
- sptr->s_aliases[i] = NULL;
-
- /* copy proto */
- n = strlen(se->s_proto) + 1;
- strcpy(cp, se->s_proto);
- sptr->s_proto = cp;
- cp += n;
-
- return (SERV_R_OK);
-}
-#else /* !SERVENT_DATA */
-static int
-copy_servent(struct servent *se, struct servent *sptr, SERV_R_COPY_ARGS) {
- char *cp, *eob;
- int i, n;
-
- /* copy port value */
- sptr->s_port = se->s_port;
-
- /* copy official name */
- cp = ndptr->line;
- eob = ndptr->line + sizeof(ndptr->line);
- if ((n = strlen(se->s_name) + 1) < (eob - cp)) {
- strcpy(cp, se->s_name);
- sptr->s_name = cp;
- cp += n;
- } else {
- return (-1);
- }
-
- /* copy aliases */
- i = 0;
- sptr->s_aliases = ndptr->serv_aliases;
- while (se->s_aliases[i] && i < (_MAXALIASES-1)) {
- if ((n = strlen(se->s_aliases[i]) + 1) < (eob - cp)) {
- strcpy(cp, se->s_aliases[i]);
- sptr->s_aliases[i] = cp;
- cp += n;
- } else {
- break;
- }
- i++;
- }
- sptr->s_aliases[i] = NULL;
-
- /* copy proto */
- if ((n = strlen(se->s_proto) + 1) < (eob - cp)) {
- strcpy(cp, se->s_proto);
- sptr->s_proto = cp;
- cp += n;
- } else {
- return (-1);
- }
-
- return (SERV_R_OK);
-}
-#endif /* !SERVENT_DATA */
-#else /*SERV_R_RETURN */
- static int getservent_r_unknown_system = 0;
-#endif /*SERV_R_RETURN */
-#endif /* !defined(_REENTRANT) || !defined(DO_PTHREADS) */
diff --git a/contrib/bind/lib/irs/hesiod.c b/contrib/bind/lib/irs/hesiod.c
deleted file mode 100644
index 5afe661..0000000
--- a/contrib/bind/lib/irs/hesiod.c
+++ /dev/null
@@ -1,524 +0,0 @@
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: hesiod.c,v 1.23 2002/07/18 02:07:45 marka Exp $";
-#endif
-
-/*
- * 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.
- */
-
-/*
- * This file is primarily maintained by <tytso@mit.edu> and <ghudson@mit.edu>.
- */
-
-/*
- * hesiod.c --- the core portion of the hesiod resolver.
- *
- * This file is derived from the hesiod library from Project Athena;
- * It has been extensively rewritten by Theodore Ts'o to have a more
- * thread-safe interface.
- */
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "port_after.h"
-
-#include "pathnames.h"
-#include "hesiod.h"
-#include "hesiod_p.h"
-
-/* Forward */
-
-int hesiod_init(void **context);
-void hesiod_end(void *context);
-char * hesiod_to_bind(void *context, const char *name,
- const char *type);
-char ** hesiod_resolve(void *context, const char *name,
- const char *type);
-void hesiod_free_list(void *context, char **list);
-
-static int parse_config_file(struct hesiod_p *ctx, const char *filename);
-static char ** get_txt_records(struct hesiod_p *ctx, int class,
- const char *name);
-static int init(struct hesiod_p *ctx);
-
-/* Public */
-
-/*
- * This function is called to initialize a hesiod_p.
- */
-int
-hesiod_init(void **context) {
- struct hesiod_p *ctx;
- char *cp;
-
- ctx = malloc(sizeof(struct hesiod_p));
- if (ctx == 0) {
- errno = ENOMEM;
- return (-1);
- }
-
- ctx->LHS = NULL;
- ctx->RHS = NULL;
- ctx->res = NULL;
-
- if (parse_config_file(ctx, _PATH_HESIOD_CONF) < 0) {
-#ifdef DEF_RHS
- /*
- * Use compiled in defaults.
- */
- ctx->LHS = malloc(strlen(DEF_LHS)+1);
- ctx->RHS = malloc(strlen(DEF_RHS)+1);
- if (ctx->LHS == 0 || ctx->RHS == 0) {
- errno = ENOMEM;
- goto cleanup;
- }
-#ifdef HAVE_STRLCPY
- strlcpy(ctx->LHS, DEF_LHS, strlen(DEF_LHS) + 1);
- strlcpy(ctx->RHS, DEF_RHS, strlen(DEF_RHS) + 1);
-#else
- strcpy(ctx->LHS, DEF_LHS);
- strcpy(ctx->RHS, DEF_RHS);
-#endif
-#else
- goto cleanup;
-#endif
- }
- /*
- * The default RHS can be overridden by an environment
- * variable.
- */
- if ((cp = getenv("HES_DOMAIN")) != NULL) {
- size_t RHSlen = strlen(cp) + 2;
- if (ctx->RHS)
- free(ctx->RHS);
- ctx->RHS = malloc(RHSlen);
- if (!ctx->RHS) {
- errno = ENOMEM;
- goto cleanup;
- }
- if (cp[0] == '.') {
-#ifdef HAVE_STRLCPY
- strlcpy(ctx->RHS, cp, RHSlen);
-#else
- strcpy(ctx->RHS, cp);
-#endif
- } else {
-#ifdef HAVE_STRLCPY
- strlcpy(ctx->RHS, ".", RHSlen);
-#else
- strcpy(ctx->RHS, ".");
-#endif
-#ifdef HAVE_STRLCAT
- strlcat(ctx->RHS, cp, RHSlen);
-#else
- strcat(ctx->RHS, cp);
-#endif
- }
- }
-
- /*
- * If there is no default hesiod realm set, we return an
- * error.
- */
- if (!ctx->RHS) {
- errno = ENOEXEC;
- goto cleanup;
- }
-
-#if 0
- if (res_ninit(ctx->res) < 0)
- goto cleanup;
-#endif
-
- *context = ctx;
- return (0);
-
- cleanup:
- hesiod_end(ctx);
- return (-1);
-}
-
-/*
- * This function deallocates the hesiod_p
- */
-void
-hesiod_end(void *context) {
- struct hesiod_p *ctx = (struct hesiod_p *) context;
- int save_errno = errno;
-
- if (ctx->res)
- res_nclose(ctx->res);
- if (ctx->RHS)
- free(ctx->RHS);
- if (ctx->LHS)
- free(ctx->LHS);
- if (ctx->res && ctx->free_res)
- (*ctx->free_res)(ctx->res);
- free(ctx);
- errno = save_errno;
-}
-
-/*
- * This function takes a hesiod (name, type) and returns a DNS
- * name which is to be resolved.
- */
-char *
-hesiod_to_bind(void *context, const char *name, const char *type) {
- struct hesiod_p *ctx = (struct hesiod_p *) context;
- char *bindname;
- char **rhs_list = NULL;
- const char *RHS, *cp;
-
- /* Decide what our RHS is, and set cp to the end of the actual name. */
- if ((cp = strchr(name, '@')) != NULL) {
- if (strchr(cp + 1, '.'))
- RHS = cp + 1;
- else if ((rhs_list = hesiod_resolve(context, cp + 1,
- "rhs-extension")) != NULL)
- RHS = *rhs_list;
- else {
- errno = ENOENT;
- return (NULL);
- }
- } else {
- RHS = ctx->RHS;
- cp = name + strlen(name);
- }
-
- /*
- * Allocate the space we need, including up to three periods and
- * the terminating NUL.
- */
- if ((bindname = malloc((cp - name) + strlen(type) + strlen(RHS) +
- (ctx->LHS ? strlen(ctx->LHS) : 0) + 4)) == NULL) {
- errno = ENOMEM;
- if (rhs_list)
- hesiod_free_list(context, rhs_list);
- return NULL;
- }
-
- /* Now put together the DNS name. */
- memcpy(bindname, name, cp - name);
- bindname[cp - name] = '\0';
- strcat(bindname, ".");
- strcat(bindname, type);
- if (ctx->LHS) {
- if (ctx->LHS[0] != '.')
- strcat(bindname, ".");
- strcat(bindname, ctx->LHS);
- }
- if (RHS[0] != '.')
- strcat(bindname, ".");
- strcat(bindname, RHS);
-
- if (rhs_list)
- hesiod_free_list(context, rhs_list);
-
- return (bindname);
-}
-
-/*
- * This is the core function. Given a hesiod (name, type), it
- * returns an array of strings returned by the resolver.
- */
-char **
-hesiod_resolve(void *context, const char *name, const char *type) {
- struct hesiod_p *ctx = (struct hesiod_p *) context;
- char *bindname = hesiod_to_bind(context, name, type);
- char **retvec;
-
- if (bindname == NULL)
- return (NULL);
- if (init(ctx) == -1) {
- free(bindname);
- return (NULL);
- }
-
- if ((retvec = get_txt_records(ctx, C_IN, bindname))) {
- free(bindname);
- return (retvec);
- }
-
- if (errno != ENOENT)
- return (NULL);
-
- retvec = get_txt_records(ctx, C_HS, bindname);
- free(bindname);
- return (retvec);
-}
-
-void
-hesiod_free_list(void *context, char **list) {
- char **p;
-
- UNUSED(context);
-
- for (p = list; *p; p++)
- free(*p);
- free(list);
-}
-
-/*
- * This function parses the /etc/hesiod.conf file
- */
-static int
-parse_config_file(struct hesiod_p *ctx, const char *filename) {
- char *key, *data, *cp, **cpp;
- char buf[MAXDNAME+7];
- FILE *fp;
-
- /*
- * Clear the existing configuration variable, just in case
- * they're set.
- */
- if (ctx->RHS)
- free(ctx->RHS);
- if (ctx->LHS)
- free(ctx->LHS);
- ctx->RHS = ctx->LHS = 0;
-
- /*
- * Now open and parse the file...
- */
- if (!(fp = fopen(filename, "r")))
- return (-1);
-
- while (fgets(buf, sizeof(buf), fp) != NULL) {
- cp = buf;
- if (*cp == '#' || *cp == '\n' || *cp == '\r')
- continue;
- while(*cp == ' ' || *cp == '\t')
- cp++;
- key = cp;
- while(*cp != ' ' && *cp != '\t' && *cp != '=')
- cp++;
- *cp++ = '\0';
-
- while(*cp == ' ' || *cp == '\t' || *cp == '=')
- cp++;
- data = cp;
- while(*cp != ' ' && *cp != '\n' && *cp != '\r')
- cp++;
- *cp++ = '\0';
-
- if (strcmp(key, "lhs") == 0)
- cpp = &ctx->LHS;
- else if (strcmp(key, "rhs") == 0)
- cpp = &ctx->RHS;
- else
- continue;
-
- *cpp = malloc(strlen(data) + 1);
- if (!*cpp) {
- errno = ENOMEM;
- goto cleanup;
- }
- strcpy(*cpp, data);
- }
- fclose(fp);
- return (0);
-
- cleanup:
- fclose(fp);
- if (ctx->RHS)
- free(ctx->RHS);
- if (ctx->LHS)
- free(ctx->LHS);
- ctx->RHS = ctx->LHS = 0;
- return (-1);
-}
-
-/*
- * Given a DNS class and a DNS name, do a lookup for TXT records, and
- * return a list of them.
- */
-static char **
-get_txt_records(struct hesiod_p *ctx, int class, const char *name) {
- struct {
- int type; /* RR type */
- int class; /* RR class */
- int dlen; /* len of data section */
- u_char *data; /* pointer to data */
- } rr;
- HEADER *hp;
- u_char qbuf[MAX_HESRESP], abuf[MAX_HESRESP];
- u_char *cp, *erdata, *eom;
- char *dst, *edst, **list;
- int ancount, qdcount;
- int i, j, n, skip;
-
- /*
- * Construct the query and send it.
- */
- n = res_nmkquery(ctx->res, QUERY, name, class, T_TXT, NULL, 0,
- NULL, qbuf, MAX_HESRESP);
- if (n < 0) {
- errno = EMSGSIZE;
- return (NULL);
- }
- n = res_nsend(ctx->res, qbuf, n, abuf, MAX_HESRESP);
- if (n < 0) {
- errno = ECONNREFUSED;
- return (NULL);
- }
- if (n < HFIXEDSZ) {
- errno = EMSGSIZE;
- return (NULL);
- }
-
- /*
- * OK, parse the result.
- */
- hp = (HEADER *) abuf;
- ancount = ntohs(hp->ancount);
- qdcount = ntohs(hp->qdcount);
- cp = abuf + sizeof(HEADER);
- eom = abuf + n;
-
- /* Skip query, trying to get to the answer section which follows. */
- for (i = 0; i < qdcount; i++) {
- skip = dn_skipname(cp, eom);
- if (skip < 0 || cp + skip + QFIXEDSZ > eom) {
- errno = EMSGSIZE;
- return (NULL);
- }
- cp += skip + QFIXEDSZ;
- }
-
- list = malloc((ancount + 1) * sizeof(char *));
- if (!list) {
- errno = ENOMEM;
- return (NULL);
- }
- j = 0;
- for (i = 0; i < ancount; i++) {
- skip = dn_skipname(cp, eom);
- if (skip < 0) {
- errno = EMSGSIZE;
- goto cleanup;
- }
- cp += skip;
- if (cp + 3 * INT16SZ + INT32SZ > eom) {
- errno = EMSGSIZE;
- goto cleanup;
- }
- rr.type = ns_get16(cp);
- cp += INT16SZ;
- rr.class = ns_get16(cp);
- cp += INT16SZ + INT32SZ; /* skip the ttl, too */
- rr.dlen = ns_get16(cp);
- cp += INT16SZ;
- if (cp + rr.dlen > eom) {
- errno = EMSGSIZE;
- goto cleanup;
- }
- rr.data = cp;
- cp += rr.dlen;
- if (rr.class != class || rr.type != T_TXT)
- continue;
- if (!(list[j] = malloc(rr.dlen)))
- goto cleanup;
- dst = list[j++];
- edst = dst + rr.dlen;
- erdata = rr.data + rr.dlen;
- cp = rr.data;
- while (cp < erdata) {
- n = (unsigned char) *cp++;
- if (cp + n > eom || dst + n > edst) {
- errno = EMSGSIZE;
- goto cleanup;
- }
- memcpy(dst, cp, n);
- cp += n;
- dst += n;
- }
- if (cp != erdata) {
- errno = EMSGSIZE;
- goto cleanup;
- }
- *dst = '\0';
- }
- list[j] = NULL;
- if (j == 0) {
- errno = ENOENT;
- goto cleanup;
- }
- return (list);
-
- cleanup:
- for (i = 0; i < j; i++)
- free(list[i]);
- free(list);
- return (NULL);
-}
-
-struct __res_state *
-__hesiod_res_get(void *context) {
- struct hesiod_p *ctx = context;
-
- if (!ctx->res) {
- struct __res_state *res;
- res = (struct __res_state *)malloc(sizeof *res);
- if (res == NULL) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(res, 0, sizeof *res);
- __hesiod_res_set(ctx, res, free);
- }
-
- return (ctx->res);
-}
-
-void
-__hesiod_res_set(void *context, struct __res_state *res,
- void (*free_res)(void *)) {
- struct hesiod_p *ctx = context;
-
- if (ctx->res && ctx->free_res) {
- res_nclose(ctx->res);
- (*ctx->free_res)(ctx->res);
- }
-
- ctx->res = res;
- ctx->free_res = free_res;
-}
-
-static int
-init(struct hesiod_p *ctx) {
-
- if (!ctx->res && !__hesiod_res_get(ctx))
- return (-1);
-
- if (((ctx->res->options & RES_INIT) == 0) &&
- (res_ninit(ctx->res) == -1))
- return (-1);
-
- return (0);
-}
diff --git a/contrib/bind/lib/irs/hesiod_p.h b/contrib/bind/lib/irs/hesiod_p.h
deleted file mode 100644
index eb32166..0000000
--- a/contrib/bind/lib/irs/hesiod_p.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * This file is primarily maintained by <tytso@mit.edu> and <ghudson@mit.edu>.
- */
-
-/*
- * $Id: hesiod_p.h,v 1.9 1999/01/08 19:24:39 vixie Exp $
- */
-
-/*
- * hesiod_p.h -- private definitions for the hesiod library
- */
-
-#ifndef _HESIOD_P_H_INCLUDED
-#define _HESIOD_P_H_INCLUDED
-
-#define DEF_RHS ".Athena.MIT.EDU" /* Defaults if HESIOD_CONF */
-#define DEF_LHS ".ns" /* file is not */
- /* present. */
-struct hesiod_p {
- char * LHS; /* normally ".ns" */
- char * RHS; /* AKA the default hesiod domain */
- struct __res_state * res; /* resolver context */
- void (*free_res)(void *);
- void (*res_set)(struct hesiod_p *, struct __res_state *,
- void (*)(void *));
- struct __res_state * (*res_get)(struct hesiod_p *);
-};
-
-#define MAX_HESRESP 1024
-
-#endif /*_HESIOD_P_H_INCLUDED*/
diff --git a/contrib/bind/lib/irs/irp.c b/contrib/bind/lib/irs/irp.c
deleted file mode 100644
index fa28b3f..0000000
--- a/contrib/bind/lib/irs/irp.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- * 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 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: irp.c,v 8.8 2001/09/25 04:50:29 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <syslog.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <stdarg.h>
-#include <fcntl.h>
-#include <syslog.h>
-#include <ctype.h>
-#include <unistd.h>
-
-#include <isc/memcluster.h>
-
-#include <irs.h>
-#include <irp.h>
-
-#include "irs_p.h"
-#include "irp_p.h"
-
-#include "port_after.h"
-
-/* Forward. */
-
-static void irp_close(struct irs_acc *);
-
-#define LINEINCR 128
-
-#if !defined(SUN_LEN)
-#define SUN_LEN(su) \
- (sizeof (*(su)) - sizeof ((su)->sun_path) + strlen((su)->sun_path))
-#endif
-
-
-/* Public */
-
-
-/* send errors to syslog if true. */
-int irp_log_errors = 1;
-
-/*
- * This module handles the irp module connection to irpd.
- *
- * The client expects a synchronous interface to functions like
- * getpwnam(3), so we can't use the ctl_* i/o library on this end of
- * the wire (it's used in the server).
- */
-
-/*
- * irs_acc *irs_irp_acc(const char *options);
- *
- * Initialize the irp module.
- */
-struct irs_acc *
-irs_irp_acc(const char *options) {
- struct irs_acc *acc;
- struct irp_p *irp;
-
- UNUSED(options);
-
- if (!(acc = memget(sizeof *acc))) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(acc, 0x5e, sizeof *acc);
- if (!(irp = memget(sizeof *irp))) {
- errno = ENOMEM;
- free(acc);
- return (NULL);
- }
- irp->inlast = 0;
- irp->incurr = 0;
- irp->fdCxn = -1;
- acc->private = irp;
-
-#ifdef WANT_IRS_GR
- acc->gr_map = irs_irp_gr;
-#else
- acc->gr_map = NULL;
-#endif
-#ifdef WANT_IRS_PW
- acc->pw_map = irs_irp_pw;
-#else
- acc->pw_map = NULL;
-#endif
- acc->sv_map = irs_irp_sv;
- acc->pr_map = irs_irp_pr;
- acc->ho_map = irs_irp_ho;
- acc->nw_map = irs_irp_nw;
- acc->ng_map = irs_irp_ng;
- acc->close = irp_close;
- return (acc);
-}
-
-
-int
-irs_irp_connection_setup(struct irp_p *cxndata, int *warned) {
- if (irs_irp_is_connected(cxndata)) {
- return (0);
- } else if (irs_irp_connect(cxndata) != 0) {
- if (warned != NULL && !*warned) {
- syslog(LOG_ERR, "irpd connection failed: %m\n");
- (*warned)++;
- }
-
- return (-1);
- }
-
- return (0);
-}
-
-
-/*
- * int irs_irp_connect(void);
- *
- * Sets up the connection to the remote irpd server.
- *
- * Returns:
- *
- * 0 on success, -1 on failure.
- *
- */
-int
-irs_irp_connect(struct irp_p *pvt) {
- int flags;
- struct sockaddr *addr;
- struct sockaddr_in iaddr;
-#ifndef NO_SOCKADDR_UN
- struct sockaddr_un uaddr;
-#endif
- long ipaddr;
- const char *irphost;
- int code;
- char text[256];
- int socklen = 0;
-
- if (pvt->fdCxn != -1) {
- perror("fd != 1");
- return (-1);
- }
-
-#ifndef NO_SOCKADDR_UN
- memset(&uaddr, 0, sizeof uaddr);
-#endif
- memset(&iaddr, 0, sizeof iaddr);
-
- irphost = getenv(IRPD_HOST_ENV);
- if (irphost == NULL) {
- irphost = "127.0.0.1";
- }
-
-#ifndef NO_SOCKADDR_UN
- if (irphost[0] == '/') {
- addr = (struct sockaddr *)&uaddr;
- strncpy(uaddr.sun_path, irphost, sizeof uaddr.sun_path);
- uaddr.sun_family = AF_UNIX;
- socklen = SUN_LEN(&uaddr);
-#ifdef HAVE_SA_LEN
- uaddr.sun_len = socklen;
-#endif
- } else
-#endif
- {
- if (inet_pton(AF_INET, irphost, &ipaddr) != 1) {
- errno = EADDRNOTAVAIL;
- perror("inet_pton");
- return (-1);
- }
-
- addr = (struct sockaddr *)&iaddr;
- socklen = sizeof iaddr;
-#ifdef HAVE_SA_LEN
- iaddr.sin_len = socklen;
-#endif
- iaddr.sin_family = AF_INET;
- iaddr.sin_port = htons(IRPD_PORT);
- iaddr.sin_addr.s_addr = ipaddr;
- }
-
-
- pvt->fdCxn = socket(addr->sa_family, SOCK_STREAM, PF_UNSPEC);
- if (pvt->fdCxn < 0) {
- perror("socket");
- return (-1);
- }
-
- if (connect(pvt->fdCxn, addr, socklen) != 0) {
- perror("connect");
- return (-1);
- }
-
- flags = fcntl(pvt->fdCxn, F_GETFL, 0);
- if (flags < 0) {
- close(pvt->fdCxn);
- perror("close");
- return (-1);
- }
-
-#if 0
- flags |= O_NONBLOCK;
- if (fcntl(pvt->fdCxn, F_SETFL, flags) < 0) {
- close(pvt->fdCxn);
- perror("fcntl");
- return (-1);
- }
-#endif
-
- code = irs_irp_read_response(pvt, text, sizeof text);
- if (code != IRPD_WELCOME_CODE) {
- if (irp_log_errors) {
- syslog(LOG_WARNING, "Connection failed: %s", text);
- }
- irs_irp_disconnect(pvt);
- return (-1);
- }
-
- return (0);
-}
-
-
-
-/*
- * int irs_irp_is_connected(struct irp_p *pvt);
- *
- * Returns:
- *
- * Non-zero if streams are setup to remote.
- *
- */
-
-int
-irs_irp_is_connected(struct irp_p *pvt) {
- return (pvt->fdCxn >= 0);
-}
-
-
-
-/*
- * void
- * irs_irp_disconnect(struct irp_p *pvt);
- *
- * Closes streams to remote.
- */
-
-void
-irs_irp_disconnect(struct irp_p *pvt) {
- if (pvt->fdCxn != -1) {
- close(pvt->fdCxn);
- pvt->fdCxn = -1;
- }
-}
-
-
-
-int
-irs_irp_read_line(struct irp_p *pvt, char *buffer, int len) {
- char *realstart = &pvt->inbuffer[0];
- char *p, *start, *end;
- int spare;
- int i;
- int buffpos = 0;
- int left = len - 1;
-
- while (left > 0) {
- start = p = &pvt->inbuffer[pvt->incurr];
- end = &pvt->inbuffer[pvt->inlast];
-
- while (p != end && *p != '\n')
- p++;
-
- if (p == end) {
- /* Found no newline so shift data down if necessary
- * and append new data to buffer
- */
- if (start > realstart) {
- memmove(realstart, start, end - start);
- pvt->inlast = end - start;
- start = realstart;
- pvt->incurr = 0;
- end = &pvt->inbuffer[pvt->inlast];
- }
-
- spare = sizeof (pvt->inbuffer) - pvt->inlast;
-
- p = end;
- i = read(pvt->fdCxn, end, spare);
- if (i < 0) {
- close(pvt->fdCxn);
- pvt->fdCxn = -1;
- return (buffpos > 0 ? buffpos : -1);
- } else if (i == 0) {
- return (buffpos);
- }
-
- end += i;
- pvt->inlast += i;
-
- while (p != end && *p != '\n')
- p++;
- }
-
- if (p == end) {
- /* full buffer and still no newline */
- i = sizeof pvt->inbuffer;
- } else {
- /* include newline */
- i = p - start + 1;
- }
-
- if (i > left)
- i = left;
- memcpy(buffer + buffpos, start, i);
- pvt->incurr += i;
- buffpos += i;
- buffer[buffpos] = '\0';
-
- if (p != end) {
- left = 0;
- } else {
- left -= i;
- }
- }
-
-#if 0
- fprintf(stderr, "read line: %s\n", buffer);
-#endif
- return (buffpos);
-}
-
-
-
-
-
-/*
- * int irp_read_response(struct irp_p *pvt);
- *
- * Returns:
- *
- * The number found at the beginning of the line read from
- * FP. 0 on failure(0 is not a legal response code). The
- * rest of the line is discarded.
- *
- */
-
-int
-irs_irp_read_response(struct irp_p *pvt, char *text, size_t textlen) {
- char line[1024];
- int code;
- char *p;
-
- if (irs_irp_read_line(pvt, line, sizeof line) <= 0) {
- return (0);
- }
-
- p = strchr(line, '\n');
- if (p == NULL) {
- return (0);
- }
-
- if (sscanf(line, "%d", &code) != 1) {
- code = 0;
- } else if (text != NULL && textlen > 0) {
- p = line;
- while (isspace((unsigned char)*p)) p++;
- while (isdigit((unsigned char)*p)) p++;
- while (isspace((unsigned char)*p)) p++;
- strncpy(text, p, textlen - 1);
- p[textlen - 1] = '\0';
- }
-
- return (code);
-}
-
-
-
-/*
- * char *irp_read_body(struct irp_p *pvt, size_t *size);
- *
- * Read in the body of a response. Terminated by a line with
- * just a dot on it. Lines should be terminated with a CR-LF
- * sequence, but we're nt piccky if the CR is missing.
- * No leading dot escaping is done as the protcol doesn't
- * use leading dots anywhere.
- *
- * Returns:
- *
- * Pointer to null-terminated buffer allocated by memget.
- * *SIZE is set to the length of the buffer.
- *
- */
-
-char *
-irs_irp_read_body(struct irp_p *pvt, size_t *size) {
- char line[1024];
- u_int linelen;
- size_t len = LINEINCR;
- char *buffer = memget(len);
- int idx = 0;
-
- for (;;) {
- if (irs_irp_read_line(pvt, line, sizeof line) <= 0 ||
- strchr(line, '\n') == NULL)
- goto death;
-
- linelen = strlen(line);
-
- if (line[linelen - 1] != '\n')
- goto death;
-
- /* We're not strict about missing \r. Should we be?? */
- if (linelen > 2 && line[linelen - 2] == '\r') {
- line[linelen - 2] = '\n';
- line[linelen - 1] = '\0';
- linelen--;
- }
-
- if (linelen == 2 && line[0] == '.') {
- *size = len;
- buffer[idx] = '\0';
-
- return (buffer);
- }
-
- if (linelen > (len - (idx + 1))) {
- char *p = memget(len + LINEINCR);
-
- if (p == NULL)
- goto death;
- memcpy(p, buffer, len);
- memput(buffer, len);
- buffer = p;
- len += LINEINCR;
- }
-
- memcpy(buffer + idx, line, linelen);
- idx += linelen;
- }
- death:
- memput(buffer, len);
- return (NULL);
-}
-
-
-/*
- * int irs_irp_get_full_response(struct irp_p *pvt, int *code,
- * char **body, size_t *bodylen);
- *
- * Gets the response to a command. If the response indicates
- * there's a body to follow(code % 10 == 1), then the
- * body buffer is allcoated with memget and stored in
- * *BODY. The length of the allocated body buffer is stored
- * in *BODY. The caller must give the body buffer back to
- * memput when done. The results code is stored in *CODE.
- *
- * Returns:
- *
- * 0 if a result was read. -1 on some sort of failure.
- *
- */
-
-int
-irs_irp_get_full_response(struct irp_p *pvt, int *code, char *text,
- size_t textlen, char **body, size_t *bodylen) {
- int result = irs_irp_read_response(pvt, text, textlen);
-
- *body = NULL;
-
- if (result == 0) {
- return (-1);
- }
-
- *code = result;
-
- /* Code that matches 2xx is a good result code.
- * Code that matches xx1 means there's a response body coming.
- */
- if ((result / 100) == 2 && (result % 10) == 1) {
- *body = irs_irp_read_body(pvt, bodylen);
- if (*body == NULL) {
- return (-1);
- }
- }
-
- return (0);
-}
-
-
-/*
- * int irs_irp_send_command(struct irp_p *pvt, const char *fmt, ...);
- *
- * Sends command to remote connected via the PVT
- * struture. FMT and args after it are fprintf-like
- * arguments for formatting.
- *
- * Returns:
- *
- * 0 on success, -1 on failure.
- */
-
-int
-irs_irp_send_command(struct irp_p *pvt, const char *fmt, ...) {
- va_list ap;
- char buffer[1024];
- int pos = 0;
- int i, todo;
-
-
- if (pvt->fdCxn < 0) {
- return (-1);
- }
-
- va_start(ap, fmt);
- todo = vsprintf(buffer, fmt, ap);
- va_end(ap);
- if (todo > (int)sizeof(buffer) - 3) {
- syslog(LOG_CRIT, "memory overrun in irs_irp_send_command()");
- exit(1);
- }
- strcat(buffer, "\r\n");
- todo = strlen(buffer);
-
- while (todo > 0) {
- i = write(pvt->fdCxn, buffer + pos, todo);
-#if 0
- /* XXX brister */
- fprintf(stderr, "Wrote: \"");
- fwrite(buffer + pos, sizeof (char), todo, stderr);
- fprintf(stderr, "\"\n");
-#endif
- if (i < 0) {
- close(pvt->fdCxn);
- pvt->fdCxn = -1;
- return (-1);
- }
- todo -= i;
- }
-
- return (0);
-}
-
-
-/* Methods */
-
-
-
-/*
- * void irp_close(struct irs_acc *this)
- *
- */
-
-static void
-irp_close(struct irs_acc *this) {
- struct irp_p *irp = (struct irp_p *)this->private;
-
- if (irp != NULL) {
- irs_irp_disconnect(irp);
- memput(irp, sizeof *irp);
- }
-
- memput(this, sizeof *this);
-}
-
-
-
diff --git a/contrib/bind/lib/irs/irp_gr.c b/contrib/bind/lib/irs/irp_gr.c
deleted file mode 100644
index c235e19..0000000
--- a/contrib/bind/lib/irs/irp_gr.c
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: irp_gr.c,v 8.3 2001/05/29 05:48:57 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* extern */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_PW
-static int __bind_irs_gr_unneeded;
-#else
-
-#include <syslog.h>
-#include <sys/param.h>
-#include <sys/types.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <syslog.h>
-
-#include <irs.h>
-#include <irp.h>
-#include <isc/memcluster.h>
-#include <isc/irpmarshall.h>
-
-#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/contrib/bind/lib/irs/irp_ho.c b/contrib/bind/lib/irs/irp_ho.c
deleted file mode 100644
index 2124017..0000000
--- a/contrib/bind/lib/irs/irp_ho.c
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: irp_ho.c,v 8.3 2001/05/29 05:48:59 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Imports. */
-
-#include "port_before.h"
-
-#include <syslog.h>
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-
-#include <irs.h>
-#include <irp.h>
-#include <isc/irpmarshall.h>
-#include <isc/memcluster.h>
-
-#include "irs_p.h"
-#include "dns_p.h"
-#include "irp_p.h"
-
-#include "port_after.h"
-
-/* Definitions. */
-
-#define MAXALIASES 35
-#define MAXADDRS 35
-#define Max(a,b) ((a) > (b) ? (a) : (b))
-
-
-struct pvt {
- struct irp_p *girpdata;
- int warned;
- struct hostent host;
-};
-
-/* Forward. */
-
-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 void free_host(struct hostent *ho);
-static struct addrinfo * ho_addrinfo(struct irs_ho *this, const char *name,
- const struct addrinfo *pai);
-
-/* Public. */
-
-
-
-/*
- * struct irs_ho * irs_irp_ho(struct irs_acc *this)
- *
- * Notes:
- *
- * Initializes the irp_ho module.
- *
- */
-
-struct irs_ho *
-irs_irp_ho(struct irs_acc *this) {
- struct irs_ho *ho;
- struct pvt *pvt;
-
- if (!(ho = memget(sizeof *ho))) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(ho, 0x0, sizeof *ho);
-
- if (!(pvt = memget(sizeof *pvt))) {
- memput(ho, sizeof *ho);
- errno = ENOMEM;
- return (NULL);
- }
- memset(pvt, 0, sizeof *pvt);
- pvt->girpdata = this->private;
-
- 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->addrinfo = ho_addrinfo;
-
- return (ho);
-}
-
-/* Methods. */
-
-
-
-/*
- * void ho_close(struct irs_ho *this)
- *
- * Notes:
- *
- * Closes down the module.
- *
- */
-
-static void
-ho_close(struct irs_ho *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- ho_minimize(this);
-
- free_host(&pvt->host);
-
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-
-
-/*
- * struct hostent * ho_byname(struct irs_ho *this, const char *name)
- *
- */
-
-static struct hostent *
-ho_byname(struct irs_ho *this, const char *name) {
- return (ho_byname2(this, name, AF_INET));
-}
-
-
-
-
-
-/*
- * struct hostent * ho_byname2(struct irs_ho *this, const char *name, int af)
- *
- */
-
-static struct hostent *
-ho_byname2(struct irs_ho *this, const char *name, int af) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct hostent *ho = &pvt->host;
- char *body = NULL;
- size_t bodylen;
- int code;
- char text[256];
-
- if (ho->h_name != NULL &&
- strcmp(name, ho->h_name) == 0 &&
- af == ho->h_addrtype) {
- return (ho);
- }
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (NULL);
- }
-
- if (irs_irp_send_command(pvt->girpdata, "gethostbyname2 %s %s",
- name, ADDR_T_STR(af)) != 0)
- return (NULL);
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETHOST_OK) {
- free_host(ho);
- if (irp_unmarshall_ho(ho, body) != 0) {
- ho = NULL;
- }
- } else {
- ho = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (ho);
-}
-
-
-
-/*
- * struct hostent * ho_byaddr(struct irs_ho *this, const void *addr,
- * int len, int af)
- *
- */
-
-static struct hostent *
-ho_byaddr(struct irs_ho *this, const void *addr, int len, int af) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct hostent *ho = &pvt->host;
- char *body = NULL;
- size_t bodylen;
- int code;
- char **p;
- char paddr[MAXPADDRSIZE];
- char text[256];
-
- if (ho->h_name != NULL &&
- af == ho->h_addrtype &&
- len == ho->h_length) {
- for (p = ho->h_addr_list ; *p != NULL ; p++) {
- if (memcmp(*p, addr, len) == 0)
- return (ho);
- }
- }
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (NULL);
- }
-
- if (inet_ntop(af, addr, paddr, sizeof paddr) == NULL) {
- return (NULL);
- }
-
- if (irs_irp_send_command(pvt->girpdata, "gethostbyaddr %s %s",
- paddr, ADDR_T_STR(af)) != 0) {
- return (NULL);
- }
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETHOST_OK) {
- free_host(ho);
- if (irp_unmarshall_ho(ho, body) != 0) {
- ho = NULL;
- }
- } else {
- ho = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (ho);
-}
-
-
-
-
-
-/*
- * struct hostent * ho_next(struct irs_ho *this)
- *
- * Notes:
- *
- * The implementation for gethostent(3). The first time it's
- * called all the data is pulled from the remote(i.e. what
- * the maximum number of gethostent(3) calls would return)
- * and that data is cached.
- *
- */
-
-static struct hostent *
-ho_next(struct irs_ho *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct hostent *ho = &pvt->host;
- 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, "gethostent") != 0) {
- return (NULL);
- }
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETHOST_OK) {
- free_host(ho);
- if (irp_unmarshall_ho(ho, body) != 0) {
- ho = NULL;
- }
- } else {
- ho = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (ho);
-}
-
-
-
-
-
-/*
- * void ho_rewind(struct irs_ho *this)
- *
- */
-
-static void
-ho_rewind(struct irs_ho *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, "sethostent") != 0) {
- return;
- }
-
- code = irs_irp_read_response(pvt->girpdata, text, sizeof text);
- if (code != IRPD_GETHOST_SETOK) {
- if (irp_log_errors) {
- syslog(LOG_WARNING, "sethostent failed: %s", text);
- }
- }
-
- return;
-}
-
-
-
-
-/*
- * void ho_minimize(struct irs_ho *this)
- *
- */
-
-static void
-ho_minimize(struct irs_ho *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- free_host(&pvt->host);
-
- irs_irp_disconnect(pvt->girpdata);
-}
-
-
-
-
-/*
- * void free_host(struct hostent *ho)
- *
- */
-
-static void
-free_host(struct hostent *ho) {
- char **p;
-
- if (ho == NULL) {
- return;
- }
-
- if (ho->h_name != NULL)
- free(ho->h_name);
-
- if (ho->h_aliases != NULL) {
- for (p = ho->h_aliases ; *p != NULL ; p++)
- free(*p);
- free(ho->h_aliases);
- }
-
- if (ho->h_addr_list != NULL) {
- for (p = ho->h_addr_list ; *p != NULL ; p++)
- free(*p);
- free(ho->h_addr_list);
- }
-}
-
-/* dummy */
-static struct addrinfo *
-ho_addrinfo(struct irs_ho *this, const char *name, const struct addrinfo *pai)
-{
- UNUSED(this);
- UNUSED(name);
- UNUSED(pai);
- return(NULL);
-}
diff --git a/contrib/bind/lib/irs/irp_ng.c b/contrib/bind/lib/irs/irp_ng.c
deleted file mode 100644
index b3cf0f4..0000000
--- a/contrib/bind/lib/irs/irp_ng.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * 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 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: irp_ng.c,v 8.3 2001/05/29 05:49:00 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <syslog.h>
-
-#include <irs.h>
-#include <irp.h>
-#include <isc/memcluster.h>
-#include <isc/irpmarshall.h>
-
-#include "irs_p.h"
-#include "irp_p.h"
-
-#include "port_after.h"
-
-/* Definitions */
-
-struct pvt {
- struct irp_p *girpdata;
- int warned;
-};
-
-
-/* Forward */
-
-static void ng_rewind(struct irs_ng *, const char*);
-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_minimize(struct irs_ng *);
-
-
-/* Public */
-
-
-
-/*
- * struct irs_ng * irs_irp_ng(struct irs_acc *this)
- *
- * Notes:
- *
- * Intialize the irp netgroup module.
- *
- */
-
-struct irs_ng *
-irs_irp_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->girpdata = this->private;
-
- 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 */
-
-
-
-/*
- * void ng_close(struct irs_ng *this)
- *
- */
-
-static void
-ng_close(struct irs_ng *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- ng_minimize(this);
-
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-
-
-
-/*
- * void ng_rewind(struct irs_ng *this, const char *group)
- *
- *
- */
-
-static void
-ng_rewind(struct irs_ng *this, const char *group) {
- 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,
- "setnetgrent %s", group) != 0) {
- return;
- }
-
- code = irs_irp_read_response(pvt->girpdata, text, sizeof text);
- if (code != IRPD_GETNETGR_SETOK) {
- if (irp_log_errors) {
- syslog(LOG_WARNING, "setnetgrent(%s) failed: %s",
- group, text);
- }
- }
-
- return;
-}
-
-
-
-
-/*
- * int ng_next(struct irs_ng *this, const char **host, const char **user,
- * const char **domain)
- *
- * Notes:
- *
- * Get the next netgroup item from the cache.
- *
- */
-
-static int
-ng_next(struct irs_ng *this, const char **host, const char **user,
- const char **domain)
-{
- struct pvt *pvt = (struct pvt *)this->private;
- int code;
- char *body = NULL;
- size_t bodylen;
- int rval = 0;
- char text[256];
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (0);
- }
-
- if (irs_irp_send_command(pvt->girpdata, "getnetgrent") != 0)
- return (0);
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (0);
- }
-
- if (code == IRPD_GETNETGR_OK) {
- if (irp_unmarshall_ng(host, user, domain, body) == 0) {
- rval = 1;
- }
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (rval);
-}
-
-
-
-/*
- * int ng_test(struct irs_ng *this, const char *name, const char *host,
- * const char *user, const char *domain)
- *
- * Notes:
- *
- * Search for a match in a netgroup.
- *
- */
-
-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;
- char *body = NULL;
- size_t bodylen = 0;
- int code;
- char text[256];
- int rval = 0;
-
- UNUSED(name);
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (0);
- }
-
- if (irp_marshall_ng(host, user, domain, &body, &bodylen) != 0) {
- return (0);
- }
-
- if (irs_irp_send_command(pvt->girpdata, "innetgr %s", body) == 0) {
- memput(body, bodylen);
-
- code = irs_irp_read_response(pvt->girpdata, text, sizeof text);
- if (code == IRPD_GETNETGR_MATCHES) {
- rval = 1;
- }
- }
-
- return (rval);
-}
-
-
-
-
-/*
- * void ng_minimize(struct irs_ng *this)
- *
- */
-
-static void
-ng_minimize(struct irs_ng *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- irs_irp_disconnect(pvt->girpdata);
-}
-
-
-
-
-/* Private */
-
diff --git a/contrib/bind/lib/irs/irp_nw.c b/contrib/bind/lib/irs/irp_nw.c
deleted file mode 100644
index c0bcbfa..0000000
--- a/contrib/bind/lib/irs/irp_nw.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: irp_nw.c,v 8.1 1999/01/18 07:46:54 vixie Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#if 0
-
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <syslog.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-
-#include <irs.h>
-#include <irp.h>
-#include <isc/irpmarshall.h>
-
-#include <isc/memcluster.h>
-#include <isc/misc.h>
-
-#include "irs_p.h"
-#include "lcl_p.h"
-#include "irp_p.h"
-
-#include "port_after.h"
-
-#define MAXALIASES 35
-#define MAXADDRSIZE 4
-
-struct pvt {
- struct irp_p *girpdata;
- int warned;
- struct nwent net;
-};
-
-/* 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 void free_nw(struct nwent *nw);
-
-
-/* Public */
-
-
-
-/*
- * struct irs_nw * irs_irp_nw(struct irs_acc *this)
- *
- */
-
-struct irs_nw *
-irs_irp_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, 0x0, sizeof *nw);
- pvt->girpdata = this->private;
-
- 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;
- return (nw);
-}
-
-/* Methods */
-
-
-
-/*
- * void nw_close(struct irs_nw *this)
- *
- */
-
-static void
-nw_close(struct irs_nw *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- nw_minimize(this);
-
- free_nw(&pvt->net);
-
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-
-
-
-/*
- * struct nwent * nw_byaddr(struct irs_nw *this, void *net,
- * int length, int type)
- *
- */
-
-static struct nwent *
-nw_byaddr(struct irs_nw *this, void *net, int length, int type) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct nwent *nw = &pvt->net;
- char *body = NULL;
- size_t bodylen;
- int code;
- char paddr[24]; /* bigenough for ip4 w/ cidr spec. */
- char text[256];
-
- if (inet_net_ntop(type, net, length, paddr, sizeof paddr) == NULL) {
- return (NULL);
- }
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (NULL);
- }
-
- if (irs_irp_send_command(pvt->girpdata, "getnetbyaddr %s %s",
- paddr, ADDR_T_STR(type)) != 0)
- return (NULL);
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETNET_OK) {
- free_nw(nw);
- if (irp_unmarshall_nw(nw, body) != 0) {
- nw = NULL;
- }
- } else {
- nw = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (nw);
-}
-
-
-
-
-/*
- * struct nwent * nw_byname(struct irs_nw *this, const char *name, int type)
- *
- */
-
-static struct nwent *
-nw_byname(struct irs_nw *this, const char *name, int type) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct nwent *nw = &pvt->net;
- char *body = NULL;
- size_t bodylen;
- int code;
- char text[256];
-
- if (nw->n_name != NULL &&
- strcmp(name, nw->n_name) == 0 &&
- nw->n_addrtype == type) {
- return (nw);
- }
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (NULL);
- }
-
- if (irs_irp_send_command(pvt->girpdata, "getnetbyname %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_GETNET_OK) {
- free_nw(nw);
- if (irp_unmarshall_nw(nw, body) != 0) {
- nw = NULL;
- }
- } else {
- nw = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (nw);
-}
-
-
-
-
-/*
- * void nw_rewind(struct irs_nw *this)
- *
- */
-
-static void
-nw_rewind(struct irs_nw *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, "setnetent") != 0) {
- return;
- }
-
- code = irs_irp_read_response(pvt->girpdata, text, sizeof text);
- if (code != IRPD_GETNET_SETOK) {
- if (irp_log_errors) {
- syslog(LOG_WARNING, "setnetent failed: %s", text);
- }
- }
-
- return;
-}
-
-
-
-
-
-
-/*
- * struct nwent * nw_next(struct irs_nw *this)
- *
- * Notes:
- *
- * Prepares the cache if necessary and returns the first, or
- * next item from it.
- */
-
-static struct nwent *
-nw_next(struct irs_nw *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct nwent *nw = &pvt->net;
- 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, "getnetent") != 0) {
- return (NULL);
- }
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETNET_OK) {
- free_nw(nw);
- if (irp_unmarshall_nw(nw, body) != 0) {
- nw = NULL;
- }
- } else {
- nw = NULL;
- }
-
- return (nw);
-}
-
-
-
-
-
-
-/*
- * void nw_minimize(struct irs_nw *this)
- *
- */
-
-static void
-nw_minimize(struct irs_nw *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_nw(struct nwent *nw) {
- char **p;
-
- if (nw == NULL)
- return;
-
- if (nw->n_name != NULL)
- free(nw->n_name);
-
- if (nw->n_aliases != NULL) {
- for (p = nw->n_aliases ; *p != NULL ; p++) {
- free(*p);
- }
- free(nw->n_aliases);
- }
-
- if (nw->n_addr != NULL)
- free(nw->n_addr);
-}
diff --git a/contrib/bind/lib/irs/irp_p.h b/contrib/bind/lib/irs/irp_p.h
deleted file mode 100644
index 8a02b1b..0000000
--- a/contrib/bind/lib/irs/irp_p.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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 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.
- */
-
-/*
- * $Id: irp_p.h,v 8.2.10.1 2003/06/02 05:55:14 marka Exp $
- */
-
-#ifndef _IRP_P_H_INCLUDED
-#define _IRP_P_H_INCLUDED
-
-#include <stdio.h>
-
-struct irp_p {
- char inbuffer[1024];
- int inlast; /* index of one past the last char in buffer */
- int incurr; /* index of the next char to be read from buffer */
-
- int fdCxn;
-};
-
-/*
- * Externs.
- */
-
-extern struct irs_acc * irs_irp_acc __P((const char *));
-extern struct irs_gr * irs_irp_gr __P((struct irs_acc *));
-extern struct irs_pw * irs_irp_pw __P((struct irs_acc *));
-extern struct irs_sv * irs_irp_sv __P((struct irs_acc *));
-extern struct irs_pr * irs_irp_pr __P((struct irs_acc *));
-extern struct irs_ho * irs_irp_ho __P((struct irs_acc *));
-extern struct irs_nw * irs_irp_nw __P((struct irs_acc *));
-extern struct irs_ng * irs_irp_ng __P((struct irs_acc *));
-
-int irs_irp_connect(struct irp_p *pvt);
-int irs_irp_is_connected(struct irp_p *pvt);
-void irs_irp_disconnect(struct irp_p *pvt);
-int irs_irp_read_response(struct irp_p *pvt, char *text, size_t textlen);
-char *irs_irp_read_body(struct irp_p *pvt, size_t *size);
-int irs_irp_get_full_response(struct irp_p *pvt, int *code,
- char *text, size_t textlen,
- char **body, size_t *bodylen);
-
-extern int irp_log_errors;
-
-#endif
diff --git a/contrib/bind/lib/irs/irp_pr.c b/contrib/bind/lib/irs/irp_pr.c
deleted file mode 100644
index 1de304e..0000000
--- a/contrib/bind/lib/irs/irp_pr.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: irp_pr.c,v 8.1 1999/01/18 07:46:54 vixie Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* extern */
-
-#include "port_before.h"
-
-#include <syslog.h>
-#include <sys/types.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <netdb.h>
-#include <syslog.h>
-
-#include <irs.h>
-#include <irp.h>
-#include <isc/memcluster.h>
-#include <isc/irpmarshall.h>
-
-#include "irs_p.h"
-#include "lcl_p.h"
-#include "irp_p.h"
-
-#include "port_after.h"
-
-
-#define MAXALIASES 35
-
-/* Types */
-
-struct pvt {
- struct irp_p *girpdata;
- int warned;
- struct protoent proto;
-};
-
-/* Forward */
-
-static void pr_close(struct irs_pr *);
-static struct protoent * pr_next(struct irs_pr *);
-static struct protoent * pr_byname(struct irs_pr *, const char *);
-static struct protoent * pr_bynumber(struct irs_pr *, int);
-static void pr_rewind(struct irs_pr *);
-static void pr_minimize(struct irs_pr *);
-
-static void free_proto(struct protoent *pr);
-
-/* Public */
-
-
-
-/*
- * struct irs_pr * irs_irp_pr(struct irs_acc *this)
- *
- */
-
-struct irs_pr *
-irs_irp_pr(struct irs_acc *this) {
- struct irs_pr *pr;
- struct pvt *pvt;
-
- if (!(pr = memget(sizeof *pr))) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(pr, 0x0, sizeof *pr);
-
- if (!(pvt = memget(sizeof *pvt))) {
- memput(pr, sizeof *pr);
- errno = ENOMEM;
- return (NULL);
- }
- memset(pvt, 0, sizeof *pvt);
- pvt->girpdata = this->private;
-
- pr->private = pvt;
- pr->close = pr_close;
- pr->byname = pr_byname;
- pr->bynumber = pr_bynumber;
- pr->next = pr_next;
- pr->rewind = pr_rewind;
- pr->minimize = pr_minimize;
- return (pr);
-}
-
-/* Methods */
-
-
-
-/*
- * void pr_close(struct irs_pr *this)
- *
- */
-
-static void
-pr_close(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- pr_minimize(this);
-
- free_proto(&pvt->proto);
-
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-
-
-/*
- * struct protoent * pr_byname(struct irs_pr *this, const char *name)
- *
- */
-
-static struct protoent *
-pr_byname(struct irs_pr *this, const char *name) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct protoent *pr = &pvt->proto;
- char *body = NULL;
- size_t bodylen;
- int code;
- int i;
- char text[256];
-
- if (pr->p_name != NULL && strcmp(name, pr->p_name) == 0) {
- return (pr);
- }
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (NULL);
- }
-
- i = irs_irp_send_command(pvt->girpdata, "getprotobyname %s", name);
- if (i != 0)
- return (NULL);
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETPROTO_OK) {
- free_proto(pr);
- if (irp_unmarshall_pr(pr, body) != 0) {
- pr = NULL;
- }
- } else {
- pr = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (pr);
-}
-
-
-
-/*
- * struct protoent * pr_bynumber(struct irs_pr *this, int proto)
- *
- */
-
-static struct protoent *
-pr_bynumber(struct irs_pr *this, int proto) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct protoent *pr = &pvt->proto;
- char *body = NULL;
- size_t bodylen;
- int code;
- int i;
- char text[256];
-
- if (pr->p_name != NULL && proto == pr->p_proto) {
- return (pr);
- }
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (NULL);
- }
-
- i = irs_irp_send_command(pvt->girpdata, "getprotobynumber %d", proto);
- if (i != 0)
- return (NULL);
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETPROTO_OK) {
- free_proto(pr);
- if (irp_unmarshall_pr(pr, body) != 0) {
- pr = NULL;
- }
- } else {
- pr = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (pr);
-}
-
-
-
-
-/*
- * void pr_rewind(struct irs_pr *this)
- *
- */
-
-static void
-pr_rewind(struct irs_pr *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, "setprotoent") != 0) {
- return;
- }
-
- code = irs_irp_read_response(pvt->girpdata, text, sizeof text);
- if (code != IRPD_GETPROTO_SETOK) {
- if (irp_log_errors) {
- syslog(LOG_WARNING, "setprotoent failed: %s", text);
- }
- }
-
- return;
-}
-
-
-
-
-/*
- * struct protoent * pr_next(struct irs_pr *this)
- *
- * Notes:
- *
- * Prepares the cache if necessary and returns the next item in it.
- *
- */
-
-static struct protoent *
-pr_next(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct protoent *pr = &pvt->proto;
- 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, "getprotoent") != 0) {
- return (NULL);
- }
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETPROTO_OK) {
- free_proto(pr);
- if (irp_unmarshall_pr(pr, body) != 0) {
- pr = NULL;
- }
- } else {
- pr = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (pr);
-}
-
-
-
-
-/*
- * void pr_minimize(struct irs_pr *this)
- *
- */
-
-static void
-pr_minimize(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- irs_irp_disconnect(pvt->girpdata);
-}
-
-
-
-
-
-
-/*
- * static void free_proto(struct protoent *pw);
- *
- * Deallocate all the memory irp_unmarshall_pr allocated.
- *
- */
-
-static void
-free_proto(struct protoent *pr) {
- char **p;
-
- if (pr == NULL)
- return;
-
- if (pr->p_name != NULL)
- free(pr->p_name);
-
- for (p = pr->p_aliases ; p != NULL && *p != NULL ; p++)
- free(*p);
-}
diff --git a/contrib/bind/lib/irs/irp_pw.c b/contrib/bind/lib/irs/irp_pw.c
deleted file mode 100644
index b659caa..0000000
--- a/contrib/bind/lib/irs/irp_pw.c
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: irp_pw.c,v 8.2 2001/11/01 07:29:26 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Extern */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_PW
-static int __bind_irs_pw_unneeded;
-#else
-
-#include <syslog.h>
-#include <sys/param.h>
-
-#include <db.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <pwd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <utmp.h>
-#include <unistd.h>
-
-#include <irs.h>
-#include <irp.h>
-#include <isc/memcluster.h>
-#include <isc/irpmarshall.h>
-
-#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/contrib/bind/lib/irs/irp_sv.c b/contrib/bind/lib/irs/irp_sv.c
deleted file mode 100644
index 6a12c5b..0000000
--- a/contrib/bind/lib/irs/irp_sv.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: irp_sv.c,v 8.1 1999/01/18 07:46:54 vixie Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* extern */
-
-#include "port_before.h"
-
-#include <syslog.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#ifdef IRS_LCL_SV_DB
-#include <db.h>
-#endif
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <syslog.h>
-
-#include <irs.h>
-#include <irp.h>
-#include <isc/irpmarshall.h>
-#include <isc/memcluster.h>
-
-#include "irs_p.h"
-#include "lcl_p.h"
-#include "irp_p.h"
-
-#include "port_after.h"
-
-/* Types */
-
-struct pvt {
- struct irp_p *girpdata;
- int warned;
- struct servent service;
-};
-
-/* 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 void free_service(struct servent *sv);
-
-
-
-/* Public */
-
-
-
-/*
- * struct irs_sv * irs_irp_sv(struct irs_acc *this)
- *
- */
-
-struct irs_sv *
-irs_irp_sv(struct irs_acc *this) {
- struct irs_sv *sv;
- struct pvt *pvt;
-
- if ((sv = memget(sizeof *sv)) == NULL) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(sv, 0x0, sizeof *sv);
-
- if ((pvt = memget(sizeof *pvt)) == NULL) {
- memput(sv, sizeof *sv);
- errno = ENOMEM;
- return (NULL);
- }
- memset(pvt, 0, sizeof *pvt);
- pvt->girpdata = this->private;
-
- 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;
-
- return (sv);
-}
-
-/* Methods */
-
-
-
-/*
- * void sv_close(struct irs_sv *this)
- *
- */
-
-static void
-sv_close(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- sv_minimize(this);
-
- free_service(&pvt->service);
-
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-
-
-
-/*
- * struct servent * sv_next(struct irs_sv *this)
- *
- * Notes:
- *
- * Fills the cache if necessary and returns the next item from it.
- *
- */
-
-static struct servent *
-sv_next(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct servent *sv = &pvt->service;
- 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, "getservent") != 0) {
- return (NULL);
- }
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETSERVICE_OK) {
- free_service(sv);
- if (irp_unmarshall_sv(sv, body) != 0) {
- sv = NULL;
- }
- } else {
- sv = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (sv);
-}
-
-
-
-
-/*
- * struct servent * sv_byname(struct irs_sv *this, const char *name,
- * const char *proto)
- *
- */
-
-static struct servent *
-sv_byname(struct irs_sv *this, const char *name, const char *proto) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct servent *sv = &pvt->service;
- char *body;
- char text[256];
- size_t bodylen;
- int code;
-
- if (sv->s_name != NULL &&
- strcmp(name, sv->s_name) == 0 &&
- strcasecmp(proto, sv->s_proto) == 0) {
- return (sv);
- }
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (NULL);
- }
-
- if (irs_irp_send_command(pvt->girpdata, "getservbyname %s %s",
- name, proto) != 0)
- return (NULL);
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETSERVICE_OK) {
- free_service(sv);
- if (irp_unmarshall_sv(sv, body) != 0) {
- sv = NULL;
- }
- } else {
- sv = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (sv);
-}
-
-
-
-
-/*
- * struct servent * sv_byport(struct irs_sv *this, int port,
- * const char *proto)
- *
- */
-
-static struct servent *
-sv_byport(struct irs_sv *this, int port, const char *proto) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct servent *sv = &pvt->service;
- char *body;
- size_t bodylen;
- char text[256];
- int code;
-
- if (sv->s_name != NULL &&
- port == sv->s_port &&
- strcasecmp(proto, sv->s_proto) == 0) {
- return (sv);
- }
-
- if (irs_irp_connection_setup(pvt->girpdata, &pvt->warned) != 0) {
- return (NULL);
- }
-
- if (irs_irp_send_command(pvt->girpdata, "getservbyport %d %s",
- ntohs((short)port), proto) != 0) {
- return (NULL);
- }
-
- if (irs_irp_get_full_response(pvt->girpdata, &code,
- text, sizeof text,
- &body, &bodylen) != 0) {
- return (NULL);
- }
-
- if (code == IRPD_GETSERVICE_OK) {
- free_service(sv);
- if (irp_unmarshall_sv(sv, body) != 0) {
- sv = NULL;
- }
- } else {
- sv = NULL;
- }
-
- if (body != NULL) {
- memput(body, bodylen);
- }
-
- return (sv);
-}
-
-
-
-
-
-/*
- * void sv_rewind(struct irs_sv *this)
- *
- */
-
-static void
-sv_rewind(struct irs_sv *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, "setservent") != 0) {
- return;
- }
-
- code = irs_irp_read_response(pvt->girpdata, text, sizeof text);
- if (code != IRPD_GETSERVICE_SETOK) {
- if (irp_log_errors) {
- syslog(LOG_WARNING, "setservent failed: %s", text);
- }
- }
-
- return;
-}
-
-
-
-
-
-/*
- * void sv_minimize(struct irs_sv *this)
- *
- */
-
-static void
-sv_minimize(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- irs_irp_disconnect(pvt->girpdata);
-}
-
-
-
-
-
-
-static void
-free_service(struct servent *sv) {
- char **p;
-
- if (sv == NULL) {
- return;
- }
-
- if (sv->s_name != NULL) {
- free(sv->s_name);
- }
-
- for (p = sv->s_aliases ; p != NULL && *p != NULL ; p++) {
- free(*p);
- }
-
- if (sv->s_proto != NULL) {
- free(sv->s_proto);
- }
-}
-
-
diff --git a/contrib/bind/lib/irs/irpmarshall.c b/contrib/bind/lib/irs/irpmarshall.c
deleted file mode 100644
index 6331ce1..0000000
--- a/contrib/bind/lib/irs/irpmarshall.c
+++ /dev/null
@@ -1,2344 +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.
- */
-
-/*
- * 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 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: irpmarshall.c,v 8.7 2001/05/29 05:49:01 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#if 0
-
-Check values are in approrpriate endian order.
-
-Double check memory allocations on unmarhsalling
-
-#endif
-
-
-/* Extern */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <stdio.h>
-#include <ctype.h>
-#include <pwd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <utmp.h>
-#include <unistd.h>
-#include <assert.h>
-#include <errno.h>
-
-#include <irs.h>
-#include <isc/memcluster.h>
-#include <isc/irpmarshall.h>
-
-#include "port_after.h"
-
-
-#ifndef HAVE_STRNDUP
-static char *strndup(const char *str, size_t len);
-#endif
-
-static char **splitarray(const char *buffer, const char *buffend, char delim);
-static int joinarray(char * const * argv, char *buffer, char delim);
-static char *getfield(char **res, size_t reslen, char **buffer, char delim);
-static size_t joinlength(char * const *argv);
-static void free_array(char **argv, size_t entries);
-
-#define ADDR_T_STR(x) (x == AF_INET ? "AF_INET" :\
- (x == AF_INET6 ? "AF_INET6" : "UNKNOWN"))
-
-#define MAXPADDRSIZE (sizeof "255.255.255.255" + 1)
-
-static char COMMA = ',';
-
-static const char *COMMASTR = ",";
-static const char *COLONSTR = ":";
-
-
-
-/* See big comment at bottom of irpmarshall.h for description. */
-
-
-#ifdef WANT_IRS_PW
-/* +++++++++++++++++++++++++ struct passwd +++++++++++++++++++++++++ */
-
-
-/*
- * int irp_marshall_pw(const struct passwd *pw, char **buffer, size_t *len)
- *
- * notes:
- *
- * See above
- *
- * return:
- *
- * 0 on sucess, -1 on failure.
- *
- */
-
-int
-irp_marshall_pw(const struct passwd *pw, char **buffer, size_t *len) {
- size_t need = 1 ; /* for null byte */
- char pwUid[24];
- char pwGid[24];
- char pwChange[24];
- char pwExpire[24];
- const char *pwClass;
- const char *fieldsep = COLONSTR;
-
- if (pw == NULL || len == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- sprintf(pwUid, "%ld", (long)pw->pw_uid);
- sprintf(pwGid, "%ld", (long)pw->pw_gid);
-
-#ifdef HAVE_PW_CHANGE
- sprintf(pwChange, "%ld", (long)pw->pw_change);
-#else
- pwChange[0] = '0';
- pwChange[1] = '\0';
-#endif
-
-#ifdef HAVE_PW_EXPIRE
- sprintf(pwExpire, "%ld", (long)pw->pw_expire);
-#else
- pwExpire[0] = '0';
- pwExpire[1] = '\0';
-#endif
-
-#ifdef HAVE_PW_CLASS
- pwClass = pw->pw_class;
-#else
- pwClass = "";
-#endif
-
- need += strlen(pw->pw_name) + 1; /* one for fieldsep */
- need += strlen(pw->pw_passwd) + 1;
- need += strlen(pwUid) + 1;
- need += strlen(pwGid) + 1;
- need += strlen(pwClass) + 1;
- need += strlen(pwChange) + 1;
- need += strlen(pwExpire) + 1;
- need += strlen(pw->pw_gecos) + 1;
- need += strlen(pw->pw_dir) + 1;
- need += strlen(pw->pw_shell) + 1;
-
- if (buffer == NULL) {
- *len = need;
- return (0);
- }
-
- if (*buffer != NULL && need > *len) {
- errno = EINVAL;
- return (-1);
- }
-
- if (*buffer == NULL) {
- need += 2; /* for CRLF */
- *buffer = memget(need);
- if (*buffer == NULL) {
- errno = ENOMEM;
- return (-1);
- }
-
- *len = need;
- }
-
- strcpy(*buffer, pw->pw_name); strcat(*buffer, fieldsep);
- strcat(*buffer, pw->pw_passwd); strcat(*buffer, fieldsep);
- strcat(*buffer, pwUid); strcat(*buffer, fieldsep);
- strcat(*buffer, pwGid); strcat(*buffer, fieldsep);
- strcat(*buffer, pwClass); strcat(*buffer, fieldsep);
- strcat(*buffer, pwChange); strcat(*buffer, fieldsep);
- strcat(*buffer, pwExpire); strcat(*buffer, fieldsep);
- strcat(*buffer, pw->pw_gecos); strcat(*buffer, fieldsep);
- strcat(*buffer, pw->pw_dir); strcat(*buffer, fieldsep);
- strcat(*buffer, pw->pw_shell); strcat(*buffer, fieldsep);
-
- return (0);
-}
-
-
-
-
-
-/*
- * int irp_unmarshall_pw(struct passwd *pw, char *buffer)
- *
- * notes:
- *
- * see above
- *
- * return:
- *
- * 0 on success, -1 on failure
- *
- */
-
-int
-irp_unmarshall_pw(struct passwd *pw, char *buffer) {
- char *name, *pass, *class, *gecos, *dir, *shell;
- uid_t pwuid;
- gid_t pwgid;
- time_t pwchange;
- time_t pwexpire;
- char *p;
- long t;
- char tmpbuf[24];
- char *tb = &tmpbuf[0];
- char fieldsep = ':';
- int myerrno = EINVAL;
-
- name = pass = class = gecos = dir = shell = NULL;
- p = buffer;
-
- /* pw_name field */
- name = NULL;
- if (getfield(&name, 0, &p, fieldsep) == NULL || strlen(name) == 0) {
- goto error;
- }
-
- /* pw_passwd field */
- pass = NULL;
- if (getfield(&pass, 0, &p, fieldsep) == NULL) { /* field can be empty */
- goto error;
- }
-
-
- /* pw_uid field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- t = strtol(tmpbuf, &tb, 10);
- if (*tb) {
- goto error; /* junk in value */
- }
- pwuid = (uid_t)t;
- if ((long) pwuid != t) { /* value must have been too big. */
- goto error;
- }
-
-
-
- /* pw_gid field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- t = strtol(tmpbuf, &tb, 10);
- if (*tb) {
- goto error; /* junk in value */
- }
- pwgid = (gid_t)t;
- if ((long)pwgid != t) { /* value must have been too big. */
- goto error;
- }
-
-
-
- /* pw_class field */
- class = NULL;
- if (getfield(&class, 0, &p, fieldsep) == NULL) {
- goto error;
- }
-
-
-
- /* pw_change field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- t = strtol(tmpbuf, &tb, 10);
- if (*tb) {
- goto error; /* junk in value */
- }
- pwchange = (time_t)t;
- if ((long)pwchange != t) { /* value must have been too big. */
- goto error;
- }
-
-
-
- /* pw_expire field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- t = strtol(tmpbuf, &tb, 10);
- if (*tb) {
- goto error; /* junk in value */
- }
- pwexpire = (time_t)t;
- if ((long) pwexpire != t) { /* value must have been too big. */
- goto error;
- }
-
-
-
- /* pw_gecos field */
- gecos = NULL;
- if (getfield(&gecos, 0, &p, fieldsep) == NULL) {
- goto error;
- }
-
-
-
- /* pw_dir field */
- dir = NULL;
- if (getfield(&dir, 0, &p, fieldsep) == NULL) {
- goto error;
- }
-
-
-
- /* pw_shell field */
- shell = NULL;
- if (getfield(&shell, 0, &p, fieldsep) == NULL) {
- goto error;
- }
-
-
-
- pw->pw_name = name;
- pw->pw_passwd = pass;
- pw->pw_uid = pwuid;
- pw->pw_gid = pwgid;
- pw->pw_gecos = gecos;
- pw->pw_dir = dir;
- pw->pw_shell = shell;
-
-#ifdef HAVE_PW_CHANGE
- pw->pw_change = pwchange;
-#endif
-#ifdef HAVE_PW_CLASS
- pw->pw_class = class;
-#endif
-#ifdef HAVE_PW_EXPIRE
- pw->pw_expire = pwexpire;
-#endif
-
- return (0);
-
- error:
- errno = myerrno;
-
- if (name != NULL) free(name);
- if (pass != NULL) free(pass);
- if (gecos != NULL) free(gecos);
- if (dir != NULL) free(dir);
- if (shell != NULL) free(shell);
-
- return (-1);
-}
-
-/* ------------------------- struct passwd ------------------------- */
-#endif /* WANT_IRS_PW */
-
-
-
-/* +++++++++++++++++++++++++ struct group +++++++++++++++++++++++++ */
-
-
-
-/*
- * int irp_marshall_gr(const struct group *gr, char **buffer, size_t *len)
- *
- * notes:
- *
- * see above.
- *
- * return:
- *
- * 0 on success, -1 on failure
- */
-
-int
-irp_marshall_gr(const struct group *gr, char **buffer, size_t *len) {
- size_t need = 1; /* for null byte */
- char grGid[24];
- const char *fieldsep = COLONSTR;
-
- if (gr == NULL || len == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- sprintf(grGid, "%ld", (long)gr->gr_gid);
-
- need += strlen(gr->gr_name) + 1;
-#ifndef MISSING_GR_PASSWD
- need += strlen(gr->gr_passwd) + 1;
-#else
- need++;
-#endif
- need += strlen(grGid) + 1;
- need += joinlength(gr->gr_mem) + 1;
-
- if (buffer == NULL) {
- *len = need;
- return (0);
- }
-
- if (*buffer != NULL && need > *len) {
- errno = EINVAL;
- return (-1);
- }
-
- if (*buffer == NULL) {
- need += 2; /* for CRLF */
- *buffer = memget(need);
- if (*buffer == NULL) {
- errno = ENOMEM;
- return (-1);
- }
-
- *len = need;
- }
-
- strcpy(*buffer, gr->gr_name); strcat(*buffer, fieldsep);
-#ifndef MISSING_GR_PASSWD
- strcat(*buffer, gr->gr_passwd);
-#endif
- strcat(*buffer, fieldsep);
- strcat(*buffer, grGid); strcat(*buffer, fieldsep);
- joinarray(gr->gr_mem, *buffer, COMMA) ; strcat(*buffer, fieldsep);
-
- return (0);
-}
-
-
-
-
-/*
- * int irp_unmarshall_gr(struct group *gr, char *buffer)
- *
- * notes:
- *
- * see above
- *
- * return:
- *
- * 0 on success and -1 on failure.
- *
- */
-
-int
-irp_unmarshall_gr(struct group *gr, char *buffer) {
- char *p, *q;
- gid_t grgid;
- long t;
- char *name = NULL;
- char *pass = NULL;
- char **members = NULL;
- char tmpbuf[24];
- char *tb;
- char fieldsep = ':';
- int myerrno = EINVAL;
-
- if (gr == NULL || buffer == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- p = buffer;
-
- /* gr_name field */
- name = NULL;
- if (getfield(&name, 0, &p, fieldsep) == NULL || strlen(name) == 0) {
- goto error;
- }
-
-
- /* gr_passwd field */
- pass = NULL;
- if (getfield(&pass, 0, &p, fieldsep) == NULL) {
- goto error;
- }
-
-
- /* gr_gid field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- t = strtol(tmpbuf, &tb, 10);
- if (*tb) {
- goto error; /* junk in value */
- }
- grgid = (gid_t)t;
- if ((long) grgid != t) { /* value must have been too big. */
- goto error;
- }
-
-
- /* gr_mem field. Member names are separated by commas */
- q = strchr(p, fieldsep);
- if (q == NULL) {
- goto error;
- }
- members = splitarray(p, q, COMMA);
- if (members == NULL) {
- myerrno = errno;
- goto error;
- }
- p = q + 1;
-
-
- gr->gr_name = name;
-#ifndef MISSING_GR_PASSWD
- gr->gr_passwd = pass;
-#endif
- gr->gr_gid = grgid;
- gr->gr_mem = members;
-
- return (0);
-
- error:
- errno = myerrno;
-
- if (name != NULL) free(name);
- if (pass != NULL) free(pass);
-
- return (-1);
-}
-
-
-/* ------------------------- struct group ------------------------- */
-
-
-
-
-/* +++++++++++++++++++++++++ struct servent +++++++++++++++++++++++++ */
-
-
-
-/*
- * int irp_marshall_sv(const struct servent *sv, char **buffer, size_t *len)
- *
- * notes:
- *
- * see above
- *
- * return:
- *
- * 0 on success, -1 on failure.
- *
- */
-
-int
-irp_marshall_sv(const struct servent *sv, char **buffer, size_t *len) {
- size_t need = 1; /* for null byte */
- char svPort[24];
- const char *fieldsep = COLONSTR;
- short realport;
-
- if (sv == NULL || len == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- /* the int s_port field is actually a short in network order. We
- want host order to make the marshalled data look correct */
- realport = ntohs((short)sv->s_port);
- sprintf(svPort, "%d", realport);
-
- need += strlen(sv->s_name) + 1;
- need += joinlength(sv->s_aliases) + 1;
- need += strlen(svPort) + 1;
- need += strlen(sv->s_proto) + 1;
-
- if (buffer == NULL) {
- *len = need;
- return (0);
- }
-
- if (*buffer != NULL && need > *len) {
- errno = EINVAL;
- return (-1);
- }
-
- if (*buffer == NULL) {
- need += 2; /* for CRLF */
- *buffer = memget(need);
- if (*buffer == NULL) {
- errno = ENOMEM;
- return (-1);
- }
-
- *len = need;
- }
-
- strcpy(*buffer, sv->s_name); strcat(*buffer, fieldsep);
- joinarray(sv->s_aliases, *buffer, COMMA); strcat(*buffer, fieldsep);
- strcat(*buffer, svPort); strcat(*buffer, fieldsep);
- strcat(*buffer, sv->s_proto); strcat(*buffer, fieldsep);
-
- return (0);
-}
-
-
-
-
-
-/*
- * int irp_unmarshall_sv(struct servent *sv, char *buffer)
- *
- * notes:
- *
- * see above
- *
- * return:
- *
- * 0 on success, -1 on failure.
- *
- */
-
-int
-irp_unmarshall_sv(struct servent *sv, char *buffer) {
- char *p, *q;
- short svport;
- long t;
- char *name = NULL;
- char *proto = NULL;
- char **aliases = NULL;
- char tmpbuf[24];
- char *tb;
- char fieldsep = ':';
- int myerrno = EINVAL;
-
- if (sv == NULL || buffer == NULL)
- return (-1);
-
- p = buffer;
-
-
- /* s_name field */
- name = NULL;
- if (getfield(&name, 0, &p, fieldsep) == NULL || strlen(name) == 0) {
- goto error;
- }
-
-
- /* s_aliases field */
- q = strchr(p, fieldsep);
- if (q == NULL) {
- goto error;
- }
- aliases = splitarray(p, q, COMMA);
- if (aliases == NULL) {
- myerrno = errno;
- goto error;
- }
- p = q + 1;
-
-
- /* s_port field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- t = strtol(tmpbuf, &tb, 10);
- if (*tb) {
- goto error; /* junk in value */
- }
- svport = (short)t;
- if ((long) svport != t) { /* value must have been too big. */
- goto error;
- }
- svport = htons(svport);
-
- /* s_proto field */
- proto = NULL;
- if (getfield(&proto, 0, &p, fieldsep) == NULL) {
- goto error;
- }
-
- sv->s_name = name;
- sv->s_aliases = aliases;
- sv->s_port = svport;
- sv->s_proto = proto;
-
- return (0);
-
- error:
- errno = myerrno;
-
- if (name != NULL) free(name);
- if (proto != NULL) free(proto);
- free_array(aliases, 0);
-
- return (-1);
-}
-
-
-/* ------------------------- struct servent ------------------------- */
-
-/* +++++++++++++++++++++++++ struct protoent +++++++++++++++++++++++++ */
-
-
-
-/*
- * int irp_marshall_pr(struct protoent *pr, char **buffer, size_t *len)
- *
- * notes:
- *
- * see above
- *
- * return:
- *
- * 0 on success and -1 on failure.
- *
- */
-
-int
-irp_marshall_pr(struct protoent *pr, char **buffer, size_t *len) {
- size_t need = 1; /* for null byte */
- char prProto[24];
- const char *fieldsep = COLONSTR;
-
- if (pr == NULL || len == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- sprintf(prProto, "%d", (int)pr->p_proto);
-
- need += strlen(pr->p_name) + 1;
- need += joinlength(pr->p_aliases) + 1;
- need += strlen(prProto) + 1;
-
- if (buffer == NULL) {
- *len = need;
- return (0);
- }
-
- if (*buffer != NULL && need > *len) {
- errno = EINVAL;
- return (-1);
- }
-
- if (*buffer == NULL) {
- need += 2; /* for CRLF */
- *buffer = memget(need);
- if (*buffer == NULL) {
- errno = ENOMEM;
- return (-1);
- }
-
- *len = need;
- }
-
- strcpy(*buffer, pr->p_name); strcat(*buffer, fieldsep);
- joinarray(pr->p_aliases, *buffer, COMMA); strcat(*buffer, fieldsep);
- strcat(*buffer, prProto); strcat(*buffer, fieldsep);
-
- return (0);
-
-}
-
-
-
-/*
- * int irp_unmarshall_pr(struct protoent *pr, char *buffer)
- *
- * notes:
- *
- * See above
- *
- * return:
- *
- * 0 on success, -1 on failure
- *
- */
-
-int irp_unmarshall_pr(struct protoent *pr, char *buffer) {
- char *p, *q;
- int prproto;
- long t;
- char *name = NULL;
- char **aliases = NULL;
- char tmpbuf[24];
- char *tb;
- char fieldsep = ':';
- int myerrno = EINVAL;
-
- if (pr == NULL || buffer == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- p = buffer;
-
- /* p_name field */
- name = NULL;
- if (getfield(&name, 0, &p, fieldsep) == NULL || strlen(name) == 0) {
- goto error;
- }
-
-
- /* p_aliases field */
- q = strchr(p, fieldsep);
- if (q == NULL) {
- goto error;
- }
- aliases = splitarray(p, q, COMMA);
- if (aliases == NULL) {
- myerrno = errno;
- goto error;
- }
- p = q + 1;
-
-
- /* p_proto field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- t = strtol(tmpbuf, &tb, 10);
- if (*tb) {
- goto error; /* junk in value */
- }
- prproto = (int)t;
- if ((long) prproto != t) { /* value must have been too big. */
- goto error;
- }
-
- pr->p_name = name;
- pr->p_aliases = aliases;
- pr->p_proto = prproto;
-
- return (0);
-
- error:
- errno = myerrno;
-
- if (name != NULL) free(name);
- free_array(aliases, 0);
-
- return (-1);
-}
-
-/* ------------------------- struct protoent ------------------------- */
-
-
-
-/* +++++++++++++++++++++++++ struct hostent +++++++++++++++++++++++++ */
-
-
-/*
- * int irp_marshall_ho(struct hostent *ho, char **buffer, size_t *len)
- *
- * notes:
- *
- * see above.
- *
- * return:
- *
- * 0 on success, -1 on failure.
- *
- */
-
-int
-irp_marshall_ho(struct hostent *ho, char **buffer, size_t *len) {
- size_t need = 1; /* for null byte */
- char hoaddrtype[24];
- char holength[24];
- char **av;
- char *p;
- int addrlen;
- int malloced = 0;
- size_t remlen;
- const char *fieldsep = "@";
-
- if (ho == NULL || len == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- switch(ho->h_addrtype) {
- case AF_INET:
- strcpy(hoaddrtype, "AF_INET");
- break;
-
- case AF_INET6:
- strcpy(hoaddrtype, "AF_INET6");
- break;
-
- default:
- errno = EINVAL;
- return (-1);
- }
-
- sprintf(holength, "%d", ho->h_length);
-
- need += strlen(ho->h_name) + 1;
- need += joinlength(ho->h_aliases) + 1;
- need += strlen(hoaddrtype) + 1;
- need += strlen(holength) + 1;
-
- /* we determine an upper bound on the string length needed, not an
- exact length. */
- addrlen = (ho->h_addrtype == AF_INET ? 16 : 46) ; /* XX other AF's?? */
- for (av = ho->h_addr_list; av != NULL && *av != NULL ; av++)
- need += addrlen;
-
- if (buffer == NULL) {
- *len = need;
- return (0);
- }
-
- if (*buffer != NULL && need > *len) {
- errno = EINVAL;
- return (-1);
- }
-
- if (*buffer == NULL) {
- need += 2; /* for CRLF */
- *buffer = memget(need);
- if (*buffer == NULL) {
- errno = ENOMEM;
- return (-1);
- }
-
- *len = need;
- malloced = 1;
- }
-
- strcpy(*buffer, ho->h_name); strcat(*buffer, fieldsep);
- joinarray(ho->h_aliases, *buffer, COMMA); strcat(*buffer, fieldsep);
- strcat(*buffer, hoaddrtype); strcat(*buffer, fieldsep);
- strcat(*buffer, holength); strcat(*buffer, fieldsep);
-
- p = *buffer + strlen(*buffer);
- remlen = need - strlen(*buffer);
- for (av = ho->h_addr_list ; av != NULL && *av != NULL ; av++) {
- if (inet_ntop(ho->h_addrtype, *av, p, remlen) == NULL) {
- goto error;
- }
- if (*(av + 1) != NULL)
- strcat(p, COMMASTR);
- remlen -= strlen(p);
- p += strlen(p);
- }
- strcat(*buffer, fieldsep);
-
- return (0);
-
- error:
- if (malloced) {
- memput(*buffer, need);
- }
-
- return (-1);
-}
-
-
-
-/*
- * int irp_unmarshall_ho(struct hostent *ho, char *buffer)
- *
- * notes:
- *
- * See above.
- *
- * return:
- *
- * 0 on success, -1 on failure.
- *
- */
-
-int
-irp_unmarshall_ho(struct hostent *ho, char *buffer) {
- char *p, *q, *r;
- int hoaddrtype;
- int holength;
- long t;
- char *name = NULL;
- char **aliases = NULL;
- char **hohaddrlist = NULL;
- size_t hoaddrsize;
- char tmpbuf[24];
- char *tb;
- char **alist;
- int addrcount;
- char fieldsep = '@';
- int myerrno = EINVAL;
-
- if (ho == NULL || buffer == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- p = buffer;
-
- /* h_name field */
- name = NULL;
- if (getfield(&name, 0, &p, fieldsep) == NULL || strlen(name) == 0) {
- goto error;
- }
-
-
- /* h_aliases field */
- q = strchr(p, fieldsep);
- if (q == NULL) {
- goto error;
- }
- aliases = splitarray(p, q, COMMA);
- if (aliases == NULL) {
- myerrno = errno;
- goto error;
- }
- p = q + 1;
-
-
- /* h_addrtype field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- if (strcmp(tmpbuf, "AF_INET") == 0)
- hoaddrtype = AF_INET;
- else if (strcmp(tmpbuf, "AF_INET6") == 0)
- hoaddrtype = AF_INET6;
- else
- goto error;
-
-
- /* h_length field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- t = strtol(tmpbuf, &tb, 10);
- if (*tb) {
- goto error; /* junk in value */
- }
- holength = (int)t;
- if ((long) holength != t) { /* value must have been too big. */
- goto error;
- }
-
-
- /* h_addr_list field */
- q = strchr(p, fieldsep);
- if (q == NULL)
- goto error;
-
- /* count how many addresss are in there */
- if (q > p + 1) {
- for (addrcount = 1, r = p ; r != q ; r++) {
- if (*r == COMMA)
- addrcount++;
- }
- } else {
- addrcount = 0;
- }
-
- hoaddrsize = (addrcount + 1) * sizeof (char *);
- hohaddrlist = malloc(hoaddrsize);
- if (hohaddrlist == NULL) {
- myerrno = ENOMEM;
- goto error;
- }
-
- memset(hohaddrlist, 0x0, hoaddrsize);
-
- alist = hohaddrlist;
- for (t = 0, r = p ; r != q ; p = r + 1, t++) {
- char saved;
- while (r != q && *r != COMMA) r++;
- saved = *r;
- *r = 0x0;
-
- alist[t] = malloc(hoaddrtype == AF_INET ? 4 : 16);
- if (alist[t] == NULL) {
- myerrno = ENOMEM;
- goto error;
- }
-
- if (inet_pton(hoaddrtype, p, alist[t]) == -1)
- goto error;
- *r = saved;
- }
- alist[t] = NULL;
-
- ho->h_name = name;
- ho->h_aliases = aliases;
- ho->h_addrtype = hoaddrtype;
- ho->h_length = holength;
- ho->h_addr_list = hohaddrlist;
-
- return (0);
-
- error:
- errno = myerrno;
-
- if (name != NULL) free(name);
- free_array(aliases, 0);
-
- return (-1);
-}
-
-/* ------------------------- struct hostent------------------------- */
-
-
-
-/* +++++++++++++++++++++++++ struct netgrp +++++++++++++++++++++++++ */
-
-
-/*
- * int irp_marshall_ng(const char *host, const char *user,
- * const char *domain, char *buffer, size_t *len)
- *
- * notes:
- *
- * See note for irp_marshall_ng_start
- *
- * return:
- *
- * 0 on success, 0 on failure.
- *
- */
-
-int
-irp_marshall_ng(const char *host, const char *user, const char *domain,
- char **buffer, size_t *len) {
- size_t need = 1; /* for nul byte */
- const char *fieldsep = ",";
-
- if (len == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- need += 4; /* two parens and two commas */
- need += (host == NULL ? 0 : strlen(host));
- need += (user == NULL ? 0 : strlen(user));
- need += (domain == NULL ? 0 : strlen(domain));
-
- if (buffer == NULL) {
- *len = need;
- return (0);
- } else if (*buffer != NULL && need > *len) {
- errno = EINVAL;
- return (-1);
- }
-
- if (*buffer == NULL) {
- need += 2; /* for CRLF */
- *buffer = memget(need);
- if (*buffer == NULL) {
- errno = ENOMEM;
- return (-1);
- }
-
- *len = need;
- }
-
- (*buffer)[0] = '(';
- (*buffer)[1] = '\0';
-
- if (host != NULL)
- strcat(*buffer, host);
- strcat(*buffer, fieldsep);
-
- if (user != NULL)
- strcat(*buffer, user);
- strcat(*buffer, fieldsep);
-
- if (domain != NULL)
- strcat(*buffer, domain);
- strcat(*buffer, ")");
-
- return (0);
-}
-
-
-
-/* ---------- */
-
-
-/*
- * int irp_unmarshall_ng(const char **host, const char **user,
- * const char **domain, char *buffer)
- *
- * notes:
- *
- * Unpacks the BUFFER into 3 character arrays it allocates and assigns
- * to *HOST, *USER and *DOMAIN. If any field of the value is empty,
- * then the corresponding paramater value will be set to NULL.
- *
- * return:
- *
- * 0 on success and -1 on failure.
- */
-
-int
-irp_unmarshall_ng(const char **hostp, const char **userp, const char **domainp,
- char *buffer)
-{
- char *p, *q;
- char fieldsep = ',';
- int myerrno = EINVAL;
- char *host, *user, *domain;
-
- if (userp == NULL || hostp == NULL ||
- domainp == NULL || buffer == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- host = user = domain = NULL;
-
- p = buffer;
- while (isspace((unsigned char)*p)) {
- p++;
- }
- if (*p != '(') {
- goto error;
- }
-
- q = p + 1;
- while (*q && *q != fieldsep)
- q++;
- if (!*q) {
- goto error;
- } else if (q > p + 1) {
- host = strndup(p, q - p);
- }
-
- p = q + 1;
- if (!*p) {
- goto error;
- } else if (*p != fieldsep) {
- q = p + 1;
- while (*q && *q != fieldsep)
- q++;
- if (!*q) {
- goto error;
- }
- user = strndup(p, q - p);
- } else {
- p++;
- }
-
- if (!*p) {
- goto error;
- } else if (*p != ')') {
- q = p + 1;
- while (*q && *q != ')')
- q++;
- if (!*q) {
- goto error;
- }
- domain = strndup(p, q - p);
- }
- *hostp = host;
- *userp = user;
- *domainp = domain;
-
- return (0);
-
- error:
- errno = myerrno;
-
- if (host != NULL) free(host);
- if (user != NULL) free(user);
- if (domain != NULL) free(domain);
-
- return (-1);
-}
-
-/* ------------------------- struct netgrp ------------------------- */
-
-
-
-
-/* +++++++++++++++++++++++++ struct nwent +++++++++++++++++++++++++ */
-
-
-/*
- * int irp_marshall_nw(struct nwent *ne, char **buffer, size_t *len)
- *
- * notes:
- *
- * See at top.
- *
- * return:
- *
- * 0 on success and -1 on failure.
- *
- */
-
-int
-irp_marshall_nw(struct nwent *ne, char **buffer, size_t *len) {
- size_t need = 1; /* for null byte */
- char nAddrType[24];
- char nNet[MAXPADDRSIZE];
- const char *fieldsep = COLONSTR;
-
- if (ne == NULL || len == NULL) {
- return (-1);
- }
-
- strcpy(nAddrType, ADDR_T_STR(ne->n_addrtype));
-
- if (inet_net_ntop(ne->n_addrtype, ne->n_addr, ne->n_length,
- nNet, sizeof nNet) == NULL) {
- return (-1);
- }
-
-
- need += strlen(ne->n_name) + 1;
- need += joinlength(ne->n_aliases) + 1;
- need += strlen(nAddrType) + 1;
- need += strlen(nNet) + 1;
-
- if (buffer == NULL) {
- *len = need;
- return (0);
- }
-
- if (*buffer != NULL && need > *len) {
- errno = EINVAL;
- return (-1);
- }
-
- if (*buffer == NULL) {
- need += 2; /* for CRLF */
- *buffer = memget(need);
- if (*buffer == NULL) {
- errno = ENOMEM;
- return (-1);
- }
-
- *len = need;
- }
-
- strcpy(*buffer, ne->n_name); strcat(*buffer, fieldsep);
- joinarray(ne->n_aliases, *buffer, COMMA) ; strcat(*buffer, fieldsep);
- strcat(*buffer, nAddrType); strcat(*buffer, fieldsep);
- strcat(*buffer, nNet); strcat(*buffer, fieldsep);
-
- return (0);
-}
-
-
-
-/*
- * int irp_unmarshall_nw(struct nwent *ne, char *buffer)
- *
- * notes:
- *
- * See note up top.
- *
- * return:
- *
- * 0 on success and -1 on failure.
- *
- */
-
-int
-irp_unmarshall_nw(struct nwent *ne, char *buffer) {
- char *p, *q;
- int naddrtype;
- long nnet;
- int bits;
- char *name = NULL;
- char **aliases = NULL;
- char tmpbuf[24];
- char *tb;
- char fieldsep = ':';
- int myerrno = EINVAL;
-
- if (ne == NULL || buffer == NULL) {
- goto error;
- }
-
- p = buffer;
-
- /* n_name field */
- name = NULL;
- if (getfield(&name, 0, &p, fieldsep) == NULL || strlen(name) == 0) {
- goto error;
- }
-
-
- /* n_aliases field. Aliases are separated by commas */
- q = strchr(p, fieldsep);
- if (q == NULL) {
- goto error;
- }
- aliases = splitarray(p, q, COMMA);
- if (aliases == NULL) {
- myerrno = errno;
- goto error;
- }
- p = q + 1;
-
-
- /* h_addrtype field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- if (strcmp(tmpbuf, "AF_INET") == 0)
- naddrtype = AF_INET;
- else if (strcmp(tmpbuf, "AF_INET6") == 0)
- naddrtype = AF_INET6;
- else
- goto error;
-
-
- /* n_net field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- nnet = 0;
- bits = inet_net_pton(naddrtype, tmpbuf, &nnet, sizeof nnet);
- if (bits < 0) {
- goto error;
- }
-
- /* nnet = ntohl(nnet); */ /* keep in network order for nwent */
-
- ne->n_name = name;
- ne->n_aliases = aliases;
- ne->n_addrtype = naddrtype;
- ne->n_length = bits;
- ne->n_addr = malloc(sizeof nnet);
- if (ne->n_addr == NULL) {
- goto error;
- }
-
- memcpy(ne->n_addr, &nnet, sizeof nnet);
-
- return (0);
-
- error:
- errno = myerrno;
-
- if (name != NULL) free(name);
- free_array(aliases, 0);
-
- return (-1);
-}
-
-
-/* ------------------------- struct nwent ------------------------- */
-
-
-/* +++++++++++++++++++++++++ struct netent +++++++++++++++++++++++++ */
-
-
-/*
- * int irp_marshall_ne(struct netent *ne, char **buffer, size_t *len)
- *
- * notes:
- *
- * See at top.
- *
- * return:
- *
- * 0 on success and -1 on failure.
- *
- */
-
-int
-irp_marshall_ne(struct netent *ne, char **buffer, size_t *len) {
- size_t need = 1; /* for null byte */
- char nAddrType[24];
- char nNet[MAXPADDRSIZE];
- const char *fieldsep = COLONSTR;
- long nval;
-
- if (ne == NULL || len == NULL) {
- return (-1);
- }
-
- strcpy(nAddrType, ADDR_T_STR(ne->n_addrtype));
-
- nval = htonl(ne->n_net);
- if (inet_ntop(ne->n_addrtype, &nval, nNet, sizeof nNet) == NULL) {
- return (-1);
- }
-
- need += strlen(ne->n_name) + 1;
- need += joinlength(ne->n_aliases) + 1;
- need += strlen(nAddrType) + 1;
- need += strlen(nNet) + 1;
-
- if (buffer == NULL) {
- *len = need;
- return (0);
- }
-
- if (*buffer != NULL && need > *len) {
- errno = EINVAL;
- return (-1);
- }
-
- if (*buffer == NULL) {
- need += 2; /* for CRLF */
- *buffer = memget(need);
- if (*buffer == NULL) {
- errno = ENOMEM;
- return (-1);
- }
-
- *len = need;
- }
-
- strcpy(*buffer, ne->n_name); strcat(*buffer, fieldsep);
- joinarray(ne->n_aliases, *buffer, COMMA) ; strcat(*buffer, fieldsep);
- strcat(*buffer, nAddrType); strcat(*buffer, fieldsep);
- strcat(*buffer, nNet); strcat(*buffer, fieldsep);
-
- return (0);
-}
-
-
-
-/*
- * int irp_unmarshall_ne(struct netent *ne, char *buffer)
- *
- * notes:
- *
- * See note up top.
- *
- * return:
- *
- * 0 on success and -1 on failure.
- *
- */
-
-int
-irp_unmarshall_ne(struct netent *ne, char *buffer) {
- char *p, *q;
- int naddrtype;
- long nnet;
- int bits;
- char *name = NULL;
- char **aliases = NULL;
- char tmpbuf[24];
- char *tb;
- char fieldsep = ':';
- int myerrno = EINVAL;
-
- if (ne == NULL || buffer == NULL) {
- goto error;
- }
-
- p = buffer;
-
- /* n_name field */
- name = NULL;
- if (getfield(&name, 0, &p, fieldsep) == NULL || strlen(name) == 0) {
- goto error;
- }
-
-
- /* n_aliases field. Aliases are separated by commas */
- q = strchr(p, fieldsep);
- if (q == NULL) {
- goto error;
- }
- aliases = splitarray(p, q, COMMA);
- if (aliases == NULL) {
- myerrno = errno;
- goto error;
- }
- p = q + 1;
-
-
- /* h_addrtype field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- if (strcmp(tmpbuf, "AF_INET") == 0)
- naddrtype = AF_INET;
- else if (strcmp(tmpbuf, "AF_INET6") == 0)
- naddrtype = AF_INET6;
- else
- goto error;
-
-
- /* n_net field */
- tb = tmpbuf;
- if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||
- strlen(tb) == 0) {
- goto error;
- }
- bits = inet_net_pton(naddrtype, tmpbuf, &nnet, sizeof nnet);
- if (bits < 0) {
- goto error;
- }
- nnet = ntohl(nnet);
-
- ne->n_name = name;
- ne->n_aliases = aliases;
- ne->n_addrtype = naddrtype;
- ne->n_net = nnet;
-
- return (0);
-
- error:
- errno = myerrno;
-
- if (name != NULL) free(name);
- free_array(aliases, 0);
-
- return (-1);
-}
-
-
-/* ------------------------- struct netent ------------------------- */
-
-
-/* =========================================================================== */
-
-
-/*
- * static char ** splitarray(const char *buffer, const char *buffend, char delim)
- *
- * notes:
- *
- * Split a delim separated astring. Not allowed
- * to have two delims next to each other. BUFFER points to begining of
- * string, BUFFEND points to one past the end of the string
- * (i.e. points at where the null byte would be if null
- * terminated).
- *
- * return:
- *
- * Returns a malloced array of pointers, each pointer pointing to a
- * malloced string. If BUFEER is an empty string, then return values is
- * array of 1 pointer that is NULL. Returns NULL on failure.
- *
- */
-
-static char **
-splitarray(const char *buffer, const char *buffend, char delim) {
- const char *p, *q;
- int count = 0;
- char **arr = NULL;
- char **aptr;
-
- if (buffend < buffer)
- return (NULL);
- else if (buffend > buffer && *buffer == delim)
- return (NULL);
- else if (buffend > buffer && *(buffend - 1) == delim)
- return (NULL);
-
- /* count the number of field and make sure none are empty */
- if (buffend > buffer + 1) {
- for (count = 1, q = buffer ; q != buffend ; q++) {
- if (*q == delim) {
- if (q > buffer && (*(q - 1) == delim)) {
- errno = EINVAL;
- return (NULL);
- }
- count++;
- }
- }
- }
-
- if (count > 0) {
- count++ ; /* for NULL at end */
- aptr = arr = malloc(count * sizeof (char *));
- if (aptr == NULL) {
- errno = ENOMEM;
- return (NULL);
- }
-
- memset(arr, 0x0, count * sizeof (char *));
- for (p = buffer ; p < buffend ; p++) {
- for (q = p ; *q != delim && q != buffend ; q++)
- /* nothing */;
- *aptr = strndup(p, q - p);
-
- p = q;
- aptr++;
- }
- *aptr = NULL;
- } else {
- arr = malloc(sizeof (char *));
- if (arr == NULL) {
- errno = ENOMEM;
- return (NULL);
- }
-
- *arr = NULL;
- }
-
- return (arr);
-}
-
-
-
-
-/*
- * static size_t joinlength(char * const *argv)
- *
- * return:
- *
- * the number of bytes in all the arrays pointed at
- * by argv, including their null bytes(which will usually be turned
- * into commas).
- *
- *
- */
-
-static size_t
-joinlength(char * const *argv) {
- int len = 0;
-
- while (argv && *argv) {
- len += (strlen(*argv) + 1);
- argv++;
- }
-
- return (len);
-}
-
-
-
-/*
- * int joinarray(char * const *argv, char *buffer, char delim)
- *
- * notes:
- *
- * Copy all the ARGV strings into the end of BUFFER
- * separating them with DELIM. BUFFER is assumed to have
- * enough space to hold everything and to be already null-terminated.
- *
- * return:
- *
- * 0 unless argv or buffer is NULL.
- *
- *
- */
-
-static int
-joinarray(char * const *argv, char *buffer, char delim) {
- char * const *p;
- char sep[2];
-
- if (argv == NULL || buffer == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- sep[0] = delim;
- sep[1] = 0x0;
-
- for (p = argv ; *p != NULL ; p++) {
- strcat(buffer, *p);
- if (*(p + 1) != NULL) {
- strcat(buffer, sep);
- }
- }
-
- return (0);
-}
-
-
-/*
- * static char * getfield(char **res, size_t reslen, char **ptr, char delim)
- *
- * notes:
- *
- * Stores in *RES, which is a buffer of length RESLEN, a
- * copy of the bytes from *PTR up to and including the first
- * instance of DELIM. If *RES is NULL, then it will be
- * assigned a malloced buffer to hold the copy. *PTR is
- * modified to point at the found delimiter.
- *
- * return:
- *
- * If there was no delimiter, then NULL is returned,
- * otherewise *RES is returned.
- *
- */
-
-static char *
-getfield(char **res, size_t reslen, char **ptr, char delim) {
- char *q;
-
- if (res == NULL || ptr == NULL || *ptr == NULL) {
- errno = EINVAL;
- return (NULL);
- }
-
- q = strchr(*ptr, delim);
-
- if (q == NULL) {
- errno = EINVAL;
- return (NULL);
- } else {
- if (*res == NULL) {
- *res = strndup(*ptr, q - *ptr);
- } else {
- if ((size_t)(q - *ptr + 1) > reslen) { /* to big for res */
- errno = EINVAL;
- return (NULL);
- } else {
- strncpy(*res, *ptr, q - *ptr);
- (*res)[q - *ptr] = 0x0;
- }
- }
- *ptr = q + 1;
- }
-
- return (*res);
-}
-
-
-
-
-
-#ifndef HAVE_STRNDUP
-/*
- * static char * strndup(const char *str, size_t len)
- *
- * notes:
- *
- * like strdup, except do len bytes instead of the whole string. Always
- * null-terminates.
- *
- * return:
- *
- * The newly malloced string.
- *
- */
-
-static char *
-strndup(const char *str, size_t len) {
- char *p = malloc(len + 1);
-
- if (p == NULL)
- return (NULL);
- strncpy(p, str, len);
- p[len] = 0x0;
- return (p);
-}
-#endif
-
-#if WANT_MAIN
-
-/*
- * static int strcmp_nws(const char *a, const char *b)
- *
- * notes:
- *
- * do a strcmp, except uneven lengths of whitespace compare the same
- *
- * return:
- *
- */
-
-static int
-strcmp_nws(const char *a, const char *b) {
- while (*a && *b) {
- if (isspace(*a) && isspace(*b)) {
- do {
- a++;
- } while (isspace(*a));
- do {
- b++;
- } while (isspace(*b));
- }
- if (*a < *b)
- return (-1);
- else if (*a > *b)
- return (1);
-
- a++;
- b++;;
- }
-
- if (*a == *b)
- return (0);
- else if (*a > *b)
- return (1);
- else
- return (-1);
-}
-
-#endif
-
-
-
-
-
-/*
- * static void free_array(char **argv, size_t entries)
- *
- * notes:
- *
- * Free argv and each of the pointers inside it. The end of
- * the array is when a NULL pointer is found inside. If
- * entries is > 0, then NULL pointers inside the array do
- * not indicate the end of the array.
- *
- */
-
-static void
-free_array(char **argv, size_t entries) {
- char **p = argv;
- int useEntries = (entries > 0);
-
- if (argv == NULL)
- return;
-
- while ((useEntries && entries > 0) || *p) {
- if (*p)
- free(*p);
- p++;
- if (useEntries)
- entries--;
- }
- free(argv);
-}
-
-
-
-
-
-/* ************************************************** */
-
-#if WANT_MAIN
-
-/* takes an option to indicate what sort of marshalling(read the code) and
- an argument. If the argument looks like a marshalled buffer(has a ':'
- embedded) then it's unmarshalled and the remarshalled and the new string
- is compared to the old one.
-*/
-
-int
-main(int argc, char **argv) {
- char buffer[1024];
- char *b = &buffer[0];
- size_t len = sizeof buffer;
- char option;
-
- if (argc < 2 || argv[1][0] != '-')
- exit(1);
-
- option = argv[1][1];
- argv++;
- argc--;
-
-
-#if 0
- {
- char buff[10];
- char *p = argv[1], *q = &buff[0];
-
- while (getfield(&q, sizeof buff, &p, ':') != NULL) {
- printf("field: \"%s\"\n", q);
- p++;
- }
- printf("p is now \"%s\"\n", p);
- }
-#endif
-
-#if 0
- {
- char **x = splitarray(argv[1], argv[1] + strlen(argv[1]),
- argv[2][0]);
- char **p;
-
- if (x == NULL)
- printf("split failed\n");
-
- for (p = x ; p != NULL && *p != NULL ; p++) {
- printf("\"%s\"\n", *p);
- }
- }
-#endif
-
-#if 1
- switch(option) {
- case 'n': {
- struct nwent ne;
- int i;
-
- if (strchr(argv[1], ':') != NULL) {
- if (irp_unmarshall_nw(&ne, argv[1]) != 0) {
- printf("Unmarhsalling failed\n");
- exit(1);
- }
-
- printf("Name: \"%s\"\n", ne.n_name);
- printf("Aliases:");
- for (i = 0 ; ne.n_aliases[i] != NULL ; i++)
- printf("\n\t\"%s\"", ne.n_aliases[i]);
- printf("\nAddrtype: %s\n", ADDR_T_STR(ne.n_addrtype));
- inet_net_ntop(ne.n_addrtype, ne.n_addr, ne.n_length,
- buffer, sizeof buffer);
- printf("Net: \"%s\"\n", buffer);
- *((long*)ne.n_addr) = htonl(*((long*)ne.n_addr));
- inet_net_ntop(ne.n_addrtype, ne.n_addr, ne.n_length,
- buffer, sizeof buffer);
- printf("Corrected Net: \"%s\"\n", buffer);
- } else {
- struct netent *np1 = getnetbyname(argv[1]);
- ne.n_name = np1->n_name;
- ne.n_aliases = np1->n_aliases;
- ne.n_addrtype = np1->n_addrtype;
- ne.n_addr = &np1->n_net;
- ne.n_length = (IN_CLASSA(np1->n_net) ?
- 8 :
- (IN_CLASSB(np1->n_net) ?
- 16 :
- (IN_CLASSC(np1->n_net) ?
- 24 : -1)));
- np1->n_net = htonl(np1->n_net);
- if (irp_marshall_nw(&ne, &b, &len) != 0) {
- printf("Marshalling failed\n");
- }
- printf("%s\n", b);
- }
- break;
- }
-
-
- case 'r': {
- char **hosts, **users, **domains;
- size_t entries;
- int i;
- char *buff;
- size_t size;
- char *ngname;
-
- if (strchr(argv[1], '(') != NULL) {
- if (irp_unmarshall_ng(&ngname, &entries,
- &hosts, &users, &domains,
- argv[1]) != 0) {
- printf("unmarshall failed\n");
- exit(1);
- }
-
-#define STRVAL(x) (x == NULL ? "*" : x)
-
- printf("%s {\n", ngname);
- for (i = 0 ; i < entries ; i++)
- printf("\t\"%s\" : \"%s\" : \"%s\"\n",
- STRVAL(hosts[i]),
- STRVAL(users[i]),
- STRVAL(domains[i]));
- printf("}\n\n\n");
-
-
- irp_marshall_ng_start(ngname, NULL, &size);
- for (i = 0 ; i < entries ; i++)
- irp_marshall_ng_next(hosts[i], users[i],
- domains[i], NULL, &size);
- irp_marshall_ng_end(NULL, &size);
-
- buff = malloc(size);
-
- irp_marshall_ng_start(ngname, buff, &size);
- for (i = 0 ; i < entries ; i++) {
- if (irp_marshall_ng_next(hosts[i], users[i],
- domains[i], buff,
- &size) != 0)
- printf("next marshalling failed.\n");
- }
- irp_marshall_ng_end(buff, &size);
-
- if (strcmp_nws(argv[1], buff) != 0) {
- printf("compare failed:\n\t%s\n\t%s\n",
- buffer, argv[1]);
- } else {
- printf("compare ok\n");
- }
- } else {
- char *h, *u, *d, *buff;
- size_t size;
-
- /* run through two times. First to figure out how
- much of a buffer we need. Second to do the
- actual marshalling */
-
- setnetgrent(argv[1]);
- irp_marshall_ng_start(argv[1], NULL, &size);
- while (getnetgrent(&h, &u, &d) == 1)
- irp_marshall_ng_next(h, u, d, NULL, &size);
- irp_marshall_ng_end(NULL, &size);
- endnetgrent(argv[1]);
-
- buff = malloc(size);
-
- setnetgrent(argv[1]);
- if (irp_marshall_ng_start(argv[1], buff, &size) != 0)
- printf("Marshalling start failed\n");
-
- while (getnetgrent(&h, &u, &d) == 1) {
- if (irp_marshall_ng_next(h, u, d, buff, &size)
- != 0) {
- printf("Marshalling failed\n");
- }
- }
-
- irp_marshall_ng_end(buff, &size);
- endnetgrent();
-
- printf("success: %s\n", buff);
- }
- break;
- }
-
-
-
- case 'h': {
- struct hostent he, *hp;
- int i;
-
-
- if (strchr(argv[1], '@') != NULL) {
- if (irp_unmarshall_ho(&he, argv[1]) != 0) {
- printf("unmarshall failed\n");
- exit(1);
- }
-
- printf("Host: \"%s\"\nAliases:", he.h_name);
- for (i = 0 ; he.h_aliases[i] != NULL ; i++)
- printf("\n\t\t\"%s\"", he.h_aliases[i]);
- printf("\nAddr Type: \"%s\"\n",
- ADDR_T_STR(he.h_addrtype));
- printf("Length: %d\nAddresses:", he.h_length);
- for (i = 0 ; he.h_addr_list[i] != 0 ; i++) {
- inet_ntop(he.h_addrtype, he.h_addr_list[i],
- buffer, sizeof buffer);
- printf("\n\t\"%s\"\n", buffer);
- }
- printf("\n\n");
-
- irp_marshall_ho(&he, &b, &len);
- if (strcmp(argv[1], buffer) != 0) {
- printf("compare failed:\n\t\"%s\"\n\t\"%s\"\n",
- buffer, argv[1]);
- } else {
- printf("compare ok\n");
- }
- } else {
- if ((hp = gethostbyname(argv[1])) == NULL) {
- perror("gethostbyname");
- printf("\"%s\"\n", argv[1]);
- exit(1);
- }
-
- if (irp_marshall_ho(hp, &b, &len) != 0) {
- printf("irp_marshall_ho failed\n");
- exit(1);
- }
-
- printf("success: \"%s\"\n", buffer);
- }
- break;
- }
-
-
- case 's': {
- struct servent *sv;
- struct servent sv1;
-
- if (strchr(argv[1], ':') != NULL) {
- sv = &sv1;
- memset(sv, 0xef, sizeof (struct servent));
- if (irp_unmarshall_sv(sv, argv[1]) != 0) {
- printf("unmarshall failed\n");
-
- }
-
- irp_marshall_sv(sv, &b, &len);
- if (strcmp(argv[1], buffer) != 0) {
- printf("compare failed:\n\t\"%s\"\n\t\"%s\"\n",
- buffer, argv[1]);
- } else {
- printf("compare ok\n");
- }
- } else {
- if ((sv = getservbyname(argv[1], argv[2])) == NULL) {
- perror("getservent");
- exit(1);
- }
-
- if (irp_marshall_sv(sv, &b, &len) != 0) {
- printf("irp_marshall_sv failed\n");
- exit(1);
- }
-
- printf("success: \"%s\"\n", buffer);
- }
- break;
- }
-
- case 'g': {
- struct group *gr;
- struct group gr1;
-
- if (strchr(argv[1], ':') != NULL) {
- gr = &gr1;
- memset(gr, 0xef, sizeof (struct group));
- if (irp_unmarshall_gr(gr, argv[1]) != 0) {
- printf("unmarshall failed\n");
-
- }
-
- irp_marshall_gr(gr, &b, &len);
- if (strcmp(argv[1], buffer) != 0) {
- printf("compare failed:\n\t\"%s\"\n\t\"%s\"\n",
- buffer, argv[1]);
- } else {
- printf("compare ok\n");
- }
- } else {
- if ((gr = getgrnam(argv[1])) == NULL) {
- perror("getgrnam");
- exit(1);
- }
-
- if (irp_marshall_gr(gr, &b, &len) != 0) {
- printf("irp_marshall_gr failed\n");
- exit(1);
- }
-
- printf("success: \"%s\"\n", buffer);
- }
- break;
- }
-
-
- case 'p': {
- struct passwd *pw;
- struct passwd pw1;
-
- if (strchr(argv[1], ':') != NULL) {
- pw = &pw1;
- memset(pw, 0xef, sizeof (*pw));
- if (irp_unmarshall_pw(pw, argv[1]) != 0) {
- printf("unmarshall failed\n");
- exit(1);
- }
-
- printf("User: \"%s\"\nPasswd: \"%s\"\nUid: %ld\nGid: %ld\n",
- pw->pw_name, pw->pw_passwd, (long)pw->pw_uid,
- (long)pw->pw_gid);
- printf("Class: \"%s\"\nChange: %ld\nGecos: \"%s\"\n",
- pw->pw_class, (long)pw->pw_change, pw->pw_gecos);
- printf("Shell: \"%s\"\nDirectory: \"%s\"\n",
- pw->pw_shell, pw->pw_dir);
-
- pw = getpwnam(pw->pw_name);
- irp_marshall_pw(pw, &b, &len);
- if (strcmp(argv[1], buffer) != 0) {
- printf("compare failed:\n\t\"%s\"\n\t\"%s\"\n",
- buffer, argv[1]);
- } else {
- printf("compare ok\n");
- }
- } else {
- if ((pw = getpwnam(argv[1])) == NULL) {
- perror("getpwnam");
- exit(1);
- }
-
- if (irp_marshall_pw(pw, &b, &len) != 0) {
- printf("irp_marshall_pw failed\n");
- exit(1);
- }
-
- printf("success: \"%s\"\n", buffer);
- }
- break;
- }
-
- default:
- printf("Wrong option: %c\n", option);
- break;
- }
-
-#endif
-
- return (0);
-}
-
-#endif
diff --git a/contrib/bind/lib/irs/irs_data.c b/contrib/bind/lib/irs/irs_data.c
deleted file mode 100644
index f69a6b4..0000000
--- a/contrib/bind/lib/irs/irs_data.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: irs_data.c,v 1.20.2.1 2003/06/02 10:09:48 marka Exp $";
-#endif
-
-#include "port_before.h"
-
-#ifndef __BIND_NOSTATIC
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-#include <isc/memcluster.h>
-
-#ifdef DO_PTHREADS
-#include <pthread.h>
-#endif
-
-#include <irs.h>
-#include <stdlib.h>
-
-#include "port_after.h"
-
-#include "irs_data.h"
-#undef _res
-#undef h_errno
-
-extern struct __res_state _res;
-extern int h_errno;
-
-#ifdef DO_PTHREADS
-static pthread_key_t key;
-static int once = 0;
-#else
-static struct net_data *net_data;
-#endif
-
-void
-irs_destroy(void) {
-#ifndef DO_PTHREADS
- if (net_data != NULL)
- net_data_destroy(net_data);
- net_data = NULL;
-#endif
-}
-
-void
-net_data_destroy(void *p) {
- struct net_data *net_data = p;
-
- res_ndestroy(net_data->res);
- if (net_data->gr != NULL) {
- (*net_data->gr->close)(net_data->gr);
- net_data->gr = NULL;
- }
- if (net_data->pw != NULL) {
- (*net_data->pw->close)(net_data->pw);
- net_data->pw = NULL;
- }
- if (net_data->sv != NULL) {
- (*net_data->sv->close)(net_data->sv);
- net_data->sv = NULL;
- }
- if (net_data->pr != NULL) {
- (*net_data->pr->close)(net_data->pr);
- net_data->pr = NULL;
- }
- if (net_data->ho != NULL) {
- (*net_data->ho->close)(net_data->ho);
- net_data->ho = NULL;
- }
- if (net_data->nw != NULL) {
- (*net_data->nw->close)(net_data->nw);
- net_data->nw = NULL;
- }
- if (net_data->ng != NULL) {
- (*net_data->ng->close)(net_data->ng);
- net_data->ng = NULL;
- }
- if (net_data->ho_data != NULL) {
- free(net_data->ho_data);
- net_data->ho_data = NULL;
- }
- if (net_data->nw_data != NULL) {
- free(net_data->nw_data);
- net_data->nw_data = NULL;
- }
-
- (*net_data->irs->close)(net_data->irs);
- memput(net_data, sizeof *net_data);
-}
-
-/* applications that need a specific config file other than
- * _PATH_IRS_CONF should call net_data_init directly rather than letting
- * the various wrapper functions make the first call. - brister
- */
-
-struct net_data *
-net_data_init(const char *conf_file) {
-#ifdef DO_PTHREADS
- static pthread_mutex_t keylock = PTHREAD_MUTEX_INITIALIZER;
- struct net_data *net_data;
-
- if (!once) {
- pthread_mutex_lock(&keylock);
- if (!once++)
- pthread_key_create(&key, net_data_destroy);
- pthread_mutex_unlock(&keylock);
- }
- net_data = pthread_getspecific(key);
-#endif
-
- if (net_data == NULL) {
- net_data = net_data_create(conf_file);
- if (net_data == NULL)
- return (NULL);
-#ifdef DO_PTHREADS
- pthread_setspecific(key, net_data);
-#endif
- }
-
- return (net_data);
-}
-
-struct net_data *
-net_data_create(const char *conf_file) {
- struct net_data *net_data;
-
- net_data = memget(sizeof (struct net_data));
- if (net_data == NULL)
- return (NULL);
- memset(net_data, 0, sizeof (struct net_data));
-
- if ((net_data->irs = irs_gen_acc("", conf_file)) == NULL) {
- memput(net_data, sizeof (struct net_data));
- return (NULL);
- }
-#ifndef DO_PTHREADS
- (*net_data->irs->res_set)(net_data->irs, &_res, NULL);
-#endif
-
- net_data->res = (*net_data->irs->res_get)(net_data->irs);
- if (net_data->res == NULL) {
- (*net_data->irs->close)(net_data->irs);
- memput(net_data, sizeof (struct net_data));
- return (NULL);
- }
-
- if ((net_data->res->options & RES_INIT) == 0 &&
- res_ninit(net_data->res) == -1) {
- (*net_data->irs->close)(net_data->irs);
- memput(net_data, sizeof (struct net_data));
- return (NULL);
- }
-
- return (net_data);
-}
-
-
-
-void
-net_data_minimize(struct net_data *net_data) {
- res_nclose(net_data->res);
-}
-
-#ifdef _REENTRANT
-struct __res_state *
-__res_state(void) {
- /* NULL param here means use the default config file. */
- struct net_data *net_data = net_data_init(NULL);
- if (net_data && net_data->res)
- return (net_data->res);
-
- return (&_res);
-}
-#endif
-
-int *
-__h_errno(void) {
- /* NULL param here means use the default config file. */
- struct net_data *net_data = net_data_init(NULL);
- if (net_data && net_data->res)
- return (&net_data->res->res_h_errno);
- return (&h_errno);
-}
-
-void
-__h_errno_set(struct __res_state *res, int err) {
-
- h_errno = res->res_h_errno = err;
-}
-
-#endif /*__BIND_NOSTATIC*/
diff --git a/contrib/bind/lib/irs/irs_data.h b/contrib/bind/lib/irs/irs_data.h
deleted file mode 100644
index c82d767..0000000
--- a/contrib/bind/lib/irs/irs_data.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * $Id: irs_data.h,v 1.12 1999/01/18 07:46:55 vixie Exp $
- */
-
-#ifndef __BIND_NOSTATIC
-
-#define net_data_init __net_data_init
-
-struct net_data {
- struct irs_acc * irs;
-
- struct irs_gr * gr;
- struct irs_pw * pw;
- struct irs_sv * sv;
- struct irs_pr * pr;
- struct irs_ho * ho;
- struct irs_nw * nw;
- struct irs_ng * ng;
-
- struct group * gr_last;
- struct passwd * pw_last;
- struct servent * sv_last;
- struct protoent * pr_last;
- struct netent * nw_last; /* should have been ne_last */
- struct nwent * nww_last;
- struct hostent * ho_last;
-
- unsigned int gr_stayopen :1;
- unsigned int pw_stayopen :1;
- unsigned int sv_stayopen :1;
- unsigned int pr_stayopen :1;
- unsigned int ho_stayopen :1;
- unsigned int nw_stayopen :1;
-
- void * nw_data;
- void * ho_data;
-
- struct __res_state * res; /* for gethostent.c */
-
-};
-
-extern struct net_data * net_data_init(const char *conf_file);
-extern void net_data_minimize(struct net_data *);
-
-#endif /*__BIND_NOSTATIC*/
diff --git a/contrib/bind/lib/irs/irs_p.h b/contrib/bind/lib/irs/irs_p.h
deleted file mode 100644
index d14f7d1..0000000
--- a/contrib/bind/lib/irs/irs_p.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * $Id: irs_p.h,v 1.8 1999/01/08 19:24:42 vixie Exp $
- */
-
-#ifndef _IRS_P_H_INCLUDED
-#define _IRS_P_H_INCLUDED
-
-#include <stdio.h>
-
-#include "pathnames.h"
-
-#define IRS_SV_MAXALIASES 35
-
-struct lcl_sv {
- FILE * fp;
- char line[BUFSIZ+1];
- struct servent serv;
- char * serv_aliases[IRS_SV_MAXALIASES];
-};
-
-#define irs_nul_ng __irs_nul_ng
-#define map_v4v6_address __map_v4v6_address
-#define make_group_list __make_group_list
-#define irs_lclsv_fnxt __irs_lclsv_fnxt
-
-extern void map_v4v6_address(const char *src, char *dst);
-extern int make_group_list(struct irs_gr *, const char *,
- gid_t, gid_t *, int *);
-extern struct irs_ng * irs_nul_ng(struct irs_acc *);
-extern struct servent * irs_lclsv_fnxt(struct lcl_sv *);
-
-#endif
diff --git a/contrib/bind/lib/irs/lcl.c b/contrib/bind/lib/irs/lcl.c
deleted file mode 100644
index ed9e6b4..0000000
--- a/contrib/bind/lib/irs/lcl.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: lcl.c,v 1.17 2001/05/29 05:49:02 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <isc/memcluster.h>
-
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "lcl_p.h"
-
-/* Forward. */
-
-static void lcl_close(struct irs_acc *);
-static struct __res_state * lcl_res_get(struct irs_acc *);
-static void lcl_res_set(struct irs_acc *, struct __res_state *,
- void (*)(void *));
-
-/* Public */
-
-struct irs_acc *
-irs_lcl_acc(const char *options) {
- struct irs_acc *acc;
- struct lcl_p *lcl;
-
- UNUSED(options);
-
- if (!(acc = memget(sizeof *acc))) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(acc, 0x5e, sizeof *acc);
- if (!(lcl = memget(sizeof *lcl))) {
- errno = ENOMEM;
- free(acc);
- return (NULL);
- }
- memset(lcl, 0x5e, sizeof *lcl);
- lcl->res = NULL;
- lcl->free_res = NULL;
- acc->private = lcl;
-#ifdef WANT_IRS_GR
- acc->gr_map = irs_lcl_gr;
-#else
- acc->gr_map = NULL;
-#endif
-#ifdef WANT_IRS_PW
- acc->pw_map = irs_lcl_pw;
-#else
- acc->pw_map = NULL;
-#endif
- acc->sv_map = irs_lcl_sv;
- acc->pr_map = irs_lcl_pr;
- acc->ho_map = irs_lcl_ho;
- acc->nw_map = irs_lcl_nw;
- acc->ng_map = irs_lcl_ng;
- acc->res_get = lcl_res_get;
- acc->res_set = lcl_res_set;
- acc->close = lcl_close;
- return (acc);
-}
-
-/* Methods */
-static struct __res_state *
-lcl_res_get(struct irs_acc *this) {
- struct lcl_p *lcl = (struct lcl_p *)this->private;
-
- if (lcl->res == NULL) {
- struct __res_state *res;
- res = (struct __res_state *)malloc(sizeof *res);
- if (res == NULL)
- return (NULL);
- memset(res, 0, sizeof *res);
- lcl_res_set(this, res, free);
- }
-
- if ((lcl->res->options & RES_INIT) == 0 &&
- res_ninit(lcl->res) < 0)
- return (NULL);
-
- return (lcl->res);
-}
-
-static void
-lcl_res_set(struct irs_acc *this, struct __res_state *res,
- void (*free_res)(void *)) {
- struct lcl_p *lcl = (struct lcl_p *)this->private;
-
- if (lcl->res && lcl->free_res) {
- res_nclose(lcl->res);
- (*lcl->free_res)(lcl->res);
- }
-
- lcl->res = res;
- lcl->free_res = free_res;
-}
-
-static void
-lcl_close(struct irs_acc *this) {
- struct lcl_p *lcl = (struct lcl_p *)this->private;
-
- if (lcl) {
- if (lcl->free_res)
- (*lcl->free_res)(lcl->res);
- memput(lcl, sizeof *lcl);
- }
- memput(this, sizeof *this);
-}
diff --git a/contrib/bind/lib/irs/lcl_gr.c b/contrib/bind/lib/irs/lcl_gr.c
deleted file mode 100644
index 7536c27..0000000
--- a/contrib/bind/lib/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.
- */
-
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: lcl_gr.c,v 1.26 2001/05/29 05:49:03 marka Exp $";
-/* 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 <sys/param.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <irs.h>
-#include <isc/memcluster.h>
-
-#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/contrib/bind/lib/irs/lcl_ho.c b/contrib/bind/lib/irs/lcl_ho.c
deleted file mode 100644
index e9685a3..0000000
--- a/contrib/bind/lib/irs/lcl_ho.c
+++ /dev/null
@@ -1,576 +0,0 @@
-/*
- * Copyright (c) 1985, 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) 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.
- */
-
-/* from gethostnamadr.c 8.1 (Berkeley) 6/4/93 */
-/* BIND Id: gethnamaddr.c,v 8.15 1996/05/22 04:56:30 vixie Exp $ */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: lcl_ho.c,v 1.26 2001/05/29 05:49:04 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Imports. */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <irs.h>
-#include <isc/memcluster.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "dns_p.h"
-#include "lcl_p.h"
-
-#ifdef SPRINTF_CHAR
-# define SPRINTF(x) strlen(sprintf/**/x)
-#else
-# define SPRINTF(x) sprintf x
-#endif
-
-/* Definitions. */
-
-#define MAXALIASES 35
-#define MAXADDRS 35
-#define Max(a,b) ((a) > (b) ? (a) : (b))
-
-#if PACKETSZ > 1024
-#define MAXPACKET PACKETSZ
-#else
-#define MAXPACKET 1024
-#endif
-
-struct pvt {
- FILE * fp;
- struct hostent host;
- char * h_addr_ptrs[MAXADDRS + 1];
- char * host_aliases[MAXALIASES];
- char hostbuf[8*1024];
- u_char host_addr[16]; /* IPv4 or IPv6 */
- struct __res_state *res;
- void (*free_res)(void *);
-};
-
-typedef union {
- int32_t al;
- char ac;
-} align;
-
-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 };
-
-/* Forward. */
-
-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 size_t ns_namelen(const char *);
-static int init(struct irs_ho *this);
-
-/* Portability. */
-
-#ifndef SEEK_SET
-# define SEEK_SET 0
-#endif
-
-/* Public. */
-
-struct irs_ho *
-irs_lcl_ho(struct irs_acc *this) {
- struct irs_ho *ho;
- struct pvt *pvt;
-
- UNUSED(this);
-
- 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);
- 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_get = ho_res_get;
- ho->res_set = ho_res_set;
- 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);
- if (pvt->fp)
- (void) fclose(pvt->fp);
- 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;
- struct hostent *hp;
- char **hap;
- size_t n;
-
- if (init(this) == -1)
- return (NULL);
-
- ho_rewind(this);
- n = ns_namelen(name);
- while ((hp = ho_next(this)) != NULL) {
- size_t nn;
-
- if (hp->h_addrtype != af)
- continue;
- nn = ns_namelen(hp->h_name);
- if (strncasecmp(hp->h_name, name, Max(n, nn)) == 0)
- goto found;
- for (hap = hp->h_aliases; *hap; hap++) {
- nn = ns_namelen(*hap);
- if (strncasecmp(*hap, name, Max(n, nn)) == 0)
- goto found;
- }
- }
- found:
- if (!hp) {
- RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND);
- return (NULL);
- }
- RES_SET_H_ERRNO(pvt->res, NETDB_SUCCESS);
- return (hp);
-}
-
-static struct hostent *
-ho_byaddr(struct irs_ho *this, const void *addr, int len, int af) {
- struct pvt *pvt = (struct pvt *)this->private;
- const u_char *uaddr = addr;
- struct hostent *hp;
- int size;
-
- 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;
- }
- switch (af) {
- case AF_INET:
- size = INADDRSZ;
- break;
- case AF_INET6:
- size = IN6ADDRSZ;
- break;
- default:
- errno = EAFNOSUPPORT;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- return (NULL);
- }
- if (size > len) {
- errno = EINVAL;
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- return (NULL);
- }
-
- /*
- * Do the search.
- */
- ho_rewind(this);
- while ((hp = ho_next(this)) != NULL) {
- char **hap;
-
- for (hap = hp->h_addr_list; *hap; hap++) {
- const u_char *taddr = (const u_char *)*hap;
- int taf = hp->h_addrtype;
- int tlen = hp->h_length;
-
- if (taf == AF_INET6 && tlen == IN6ADDRSZ &&
- (!memcmp(taddr, mapped, sizeof mapped) ||
- !memcmp(taddr, tunnelled, sizeof tunnelled))) {
- /* Unmap. */
- taddr += sizeof mapped;
- taf = AF_INET;
- tlen = INADDRSZ;
- }
- if (taf == af && tlen == len &&
- !memcmp(taddr, uaddr, tlen))
- goto found;
- }
- }
- found:
- if (!hp) {
- RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND);
- return (NULL);
- }
- RES_SET_H_ERRNO(pvt->res, NETDB_SUCCESS);
- return (hp);
-}
-
-static struct hostent *
-ho_next(struct irs_ho *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- char *cp, **q, *p;
- char *bufp, *ndbuf, *dbuf = NULL;
- int c, af, len, bufsiz, offset;
-
- if (init(this) == -1)
- return (NULL);
-
- if (!pvt->fp)
- ho_rewind(this);
- if (!pvt->fp) {
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- return (NULL);
- }
- bufp = pvt->hostbuf;
- bufsiz = sizeof pvt->hostbuf;
- offset = 0;
- again:
- if (!(p = fgets(bufp + offset, bufsiz - offset, pvt->fp))) {
- RES_SET_H_ERRNO(pvt->res, HOST_NOT_FOUND);
- if (dbuf)
- free(dbuf);
- return (NULL);
- }
- if (!strchr(p, '\n') && !feof(pvt->fp)) {
-#define GROWBUF 1024
- /* allocate space for longer line */
- if (dbuf == NULL) {
- if ((ndbuf = malloc(bufsiz + GROWBUF)) != NULL)
- strcpy(ndbuf, bufp);
- } else
- ndbuf = realloc(dbuf, bufsiz + GROWBUF);
- if (ndbuf) {
- dbuf = ndbuf;
- bufp = dbuf;
- bufsiz += GROWBUF;
- offset = strlen(dbuf);
- } else {
- /* allocation failed; skip this long line */
- while ((c = getc(pvt->fp)) != EOF)
- if (c == '\n')
- break;
- if (c != EOF)
- ungetc(c, pvt->fp);
- }
- goto again;
- }
-
- p -= offset;
- offset = 0;
-
- if (*p == '#')
- goto again;
- if ((cp = strpbrk(p, "#\n")) != NULL)
- *cp = '\0';
- if (!(cp = strpbrk(p, " \t")))
- goto again;
- *cp++ = '\0';
- if (inet_pton(AF_INET6, p, pvt->host_addr) > 0) {
- af = AF_INET6;
- len = IN6ADDRSZ;
- } else if (inet_aton(p, (struct in_addr *)pvt->host_addr) > 0) {
- if (pvt->res->options & RES_USE_INET6) {
- map_v4v6_address((char*)pvt->host_addr,
- (char*)pvt->host_addr);
- af = AF_INET6;
- len = IN6ADDRSZ;
- } else {
- af = AF_INET;
- len = INADDRSZ;
- }
- } else {
- goto again;
- }
- pvt->h_addr_ptrs[0] = (char *)pvt->host_addr;
- pvt->h_addr_ptrs[1] = NULL;
- pvt->host.h_addr_list = pvt->h_addr_ptrs;
- pvt->host.h_length = len;
- pvt->host.h_addrtype = af;
- while (*cp == ' ' || *cp == '\t')
- cp++;
- pvt->host.h_name = cp;
- q = pvt->host.h_aliases = pvt->host_aliases;
- if ((cp = strpbrk(cp, " \t")) != NULL)
- *cp++ = '\0';
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &pvt->host_aliases[MAXALIASES - 1])
- *q++ = cp;
- if ((cp = strpbrk(cp, " \t")) != NULL)
- *cp++ = '\0';
- }
- *q = NULL;
- if (dbuf)
- free(dbuf);
- RES_SET_H_ERRNO(pvt->res, NETDB_SUCCESS);
- return (&pvt->host);
-}
-
-static void
-ho_rewind(struct irs_ho *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->fp) {
- if (fseek(pvt->fp, 0L, SEEK_SET) == 0)
- return;
- (void)fclose(pvt->fp);
- }
- if (!(pvt->fp = fopen(_PATH_HOSTS, "r")))
- return;
- if (fcntl(fileno(pvt->fp), F_SETFD, 1) < 0) {
- (void)fclose(pvt->fp);
- pvt->fp = NULL;
- }
-}
-
-static void
-ho_minimize(struct irs_ho *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->fp != NULL) {
- (void)fclose(pvt->fp);
- pvt->fp = NULL;
- }
- 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 lcl_res_target {
- struct lcl_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 lcl_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. */
-
-static size_t
-ns_namelen(const char *s) {
- int i;
-
- for (i = strlen(s); i > 0 && s[i-1] == '.'; i--)
- (void)NULL;
- return ((size_t) i);
-}
-
-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);
-}
diff --git a/contrib/bind/lib/irs/lcl_ng.c b/contrib/bind/lib/irs/lcl_ng.c
deleted file mode 100644
index 239b63e..0000000
--- a/contrib/bind/lib/irs/lcl_ng.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * 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.
- */
-
-#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: lcl_ng.c,v 1.17 2001/05/29 05:49:05 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <irs.h>
-#include <isc/memcluster.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "lcl_p.h"
-
-/* Definitions */
-
-#define NG_HOST 0 /* Host name */
-#define NG_USER 1 /* User name */
-#define NG_DOM 2 /* and Domain name */
-#define LINSIZ 1024 /* Length of netgroup file line */
-
-/*
- * XXX Warning XXX
- * This code is a hack-and-slash special. It realy needs to be
- * rewritten with things like strdup, and realloc in mind.
- * More reasonable data structures would not be a bad thing.
- */
-
-/*
- * Static Variables and functions used by setnetgrent(), getnetgrent() and
- * endnetgrent().
- * There are two linked lists:
- * - linelist is just used by setnetgrent() to parse the net group file via.
- * parse_netgrp()
- * - netgrp is the list of entries for the current netgroup
- */
-struct linelist {
- struct linelist *l_next; /* Chain ptr. */
- int l_parsed; /* Flag for cycles */
- char * l_groupname; /* Name of netgroup */
- char * l_line; /* Netgroup entrie(s) to be parsed */
-};
-
-struct ng_old_struct {
- struct ng_old_struct *ng_next; /* Chain ptr */
- char * ng_str[3]; /* Field pointers, see below */
-};
-
-struct pvt {
- FILE *fp;
- struct linelist *linehead;
- struct ng_old_struct *nextgrp;
- struct {
- struct ng_old_struct *gr;
- char *grname;
- } grouphead;
-};
-
-/* Forward */
-
-static void ng_rewind(struct irs_ng *, const char*);
-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_minimize(struct irs_ng *);
-
-static int parse_netgrp(struct irs_ng *, const char*);
-static struct linelist *read_for_group(struct irs_ng *, const char *);
-static void freelists(struct irs_ng *);
-
-/* Public */
-
-struct irs_ng *
-irs_lcl_ng(struct irs_acc *this) {
- struct irs_ng *ng;
- struct pvt *pvt;
-
- UNUSED(this);
-
- 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);
- 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;
-
- if (pvt->fp != NULL)
- fclose(pvt->fp);
- freelists(this);
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-/*
- * Parse the netgroup file looking for the netgroup and build the list
- * of netgrp structures. Let parse_netgrp() and read_for_group() do
- * most of the work.
- */
-static void
-ng_rewind(struct irs_ng *this, const char *group) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->fp != NULL && fseek(pvt->fp, SEEK_CUR, 0L) == -1) {
- fclose(pvt->fp);
- pvt->fp = NULL;
- }
-
- if (pvt->fp == NULL || pvt->grouphead.gr == NULL ||
- strcmp(group, pvt->grouphead.grname)) {
- freelists(this);
- if (pvt->fp != NULL)
- fclose(pvt->fp);
- pvt->fp = fopen(_PATH_NETGROUP, "r");
- if (pvt->fp != NULL) {
- if (parse_netgrp(this, group))
- freelists(this);
- if (!(pvt->grouphead.grname = strdup(group)))
- freelists(this);
- fclose(pvt->fp);
- pvt->fp = NULL;
- }
- }
- pvt->nextgrp = pvt->grouphead.gr;
-}
-
-/*
- * Get the next netgroup off the list.
- */
-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->nextgrp) {
- *host = pvt->nextgrp->ng_str[NG_HOST];
- *user = pvt->nextgrp->ng_str[NG_USER];
- *domain = pvt->nextgrp->ng_str[NG_DOM];
- pvt->nextgrp = pvt->nextgrp->ng_next;
- return (1);
- }
- return (0);
-}
-
-/*
- * Search for a match in a netgroup.
- */
-static int
-ng_test(struct irs_ng *this, const char *name,
- const char *host, const char *user, const char *domain)
-{
- const char *ng_host, *ng_user, *ng_domain;
-
- ng_rewind(this, name);
- while (ng_next(this, &ng_host, &ng_user, &ng_domain))
- if ((host == NULL || ng_host == NULL ||
- !strcmp(host, ng_host)) &&
- (user == NULL || ng_user == NULL ||
- !strcmp(user, ng_user)) &&
- (domain == NULL || ng_domain == NULL ||
- !strcmp(domain, ng_domain))) {
- freelists(this);
- return (1);
- }
- freelists(this);
- return (0);
-}
-
-static void
-ng_minimize(struct irs_ng *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->fp != NULL) {
- (void)fclose(pvt->fp);
- pvt->fp = NULL;
- }
-}
-
-/* Private */
-
-/*
- * endnetgrent() - cleanup
- */
-static void
-freelists(struct irs_ng *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct linelist *lp, *olp;
- struct ng_old_struct *gp, *ogp;
-
- lp = pvt->linehead;
- while (lp) {
- olp = lp;
- lp = lp->l_next;
- free(olp->l_groupname);
- free(olp->l_line);
- free((char *)olp);
- }
- pvt->linehead = NULL;
- if (pvt->grouphead.grname) {
- free(pvt->grouphead.grname);
- pvt->grouphead.grname = NULL;
- }
- gp = pvt->grouphead.gr;
- while (gp) {
- ogp = gp;
- gp = gp->ng_next;
- if (ogp->ng_str[NG_HOST])
- free(ogp->ng_str[NG_HOST]);
- if (ogp->ng_str[NG_USER])
- free(ogp->ng_str[NG_USER]);
- if (ogp->ng_str[NG_DOM])
- free(ogp->ng_str[NG_DOM]);
- free((char *)ogp);
- }
- pvt->grouphead.gr = NULL;
-}
-
-/*
- * Parse the netgroup file setting up the linked lists.
- */
-static int
-parse_netgrp(struct irs_ng *this, const char *group) {
- struct pvt *pvt = (struct pvt *)this->private;
- char *spos, *epos;
- int len, strpos;
- char *pos, *gpos;
- struct ng_old_struct *grp;
- struct linelist *lp = pvt->linehead;
-
- /*
- * First, see if the line has already been read in.
- */
- while (lp) {
- if (!strcmp(group, lp->l_groupname))
- break;
- lp = lp->l_next;
- }
- if (lp == NULL &&
- (lp = read_for_group(this, group)) == NULL)
- return (1);
- if (lp->l_parsed) {
- /*fprintf(stderr, "Cycle in netgroup %s\n", lp->l_groupname);*/
- return (1);
- } else
- lp->l_parsed = 1;
- pos = lp->l_line;
- while (*pos != '\0') {
- if (*pos == '(') {
- if (!(grp = malloc(sizeof (struct ng_old_struct)))) {
- freelists(this);
- errno = ENOMEM;
- return (1);
- }
- memset(grp, 0, sizeof (struct ng_old_struct));
- grp->ng_next = pvt->grouphead.gr;
- pvt->grouphead.gr = grp;
- pos++;
- gpos = strsep(&pos, ")");
- for (strpos = 0; strpos < 3; strpos++) {
- if ((spos = strsep(&gpos, ","))) {
- while (*spos == ' ' || *spos == '\t')
- spos++;
- if ((epos = strpbrk(spos, " \t"))) {
- *epos = '\0';
- len = epos - spos;
- } else
- len = strlen(spos);
- if (len > 0) {
- if(!(grp->ng_str[strpos]
- = (char *)
- malloc(len + 1))) {
- freelists(this);
- return (1);
- }
- memcpy(grp->ng_str[strpos],
- spos,
- len + 1);
- }
- } else
- goto errout;
- }
- } else {
- spos = strsep(&pos, ", \t");
- if (spos != NULL && parse_netgrp(this, spos)) {
- freelists(this);
- return (1);
- }
- }
- if (pos == NULL)
- break;
- while (*pos == ' ' || *pos == ',' || *pos == '\t')
- pos++;
- }
- return (0);
- errout:
- /*fprintf(stderr, "Bad netgroup %s at ..%s\n", lp->l_groupname,
- spos);*/
- return (1);
-}
-
-/*
- * Read the netgroup file and save lines until the line for the netgroup
- * is found. Return 1 if eof is encountered.
- */
-static struct linelist *
-read_for_group(struct irs_ng *this, const char *group) {
- struct pvt *pvt = (struct pvt *)this->private;
- char *pos, *spos, *linep = NULL, *olinep;
- int len, olen, cont;
- struct linelist *lp;
- char line[LINSIZ + 1];
-
- while (fgets(line, LINSIZ, pvt->fp) != NULL) {
- pos = line;
- if (*pos == '#')
- continue;
- while (*pos == ' ' || *pos == '\t')
- pos++;
- spos = pos;
- while (*pos != ' ' && *pos != '\t' && *pos != '\n' &&
- *pos != '\0')
- pos++;
- len = pos - spos;
- while (*pos == ' ' || *pos == '\t')
- pos++;
- if (*pos != '\n' && *pos != '\0') {
- if (!(lp = malloc(sizeof (*lp)))) {
- freelists(this);
- return (NULL);
- }
- lp->l_parsed = 0;
- if (!(lp->l_groupname = malloc(len + 1))) {
- free(lp);
- freelists(this);
- return (NULL);
- }
- memcpy(lp->l_groupname, spos, len);
- *(lp->l_groupname + len) = '\0';
- len = strlen(pos);
- olen = 0;
- olinep = NULL;
-
- /*
- * Loop around handling line continuations.
- */
- do {
- if (*(pos + len - 1) == '\n')
- len--;
- if (*(pos + len - 1) == '\\') {
- len--;
- cont = 1;
- } else
- cont = 0;
- if (len > 0) {
- if (!(linep = malloc(olen + len + 1))){
- if (olen > 0)
- free(olinep);
- free(lp->l_groupname);
- free(lp);
- freelists(this);
- errno = ENOMEM;
- return (NULL);
- }
- if (olen > 0) {
- memcpy(linep, olinep, olen);
- free(olinep);
- }
- memcpy(linep + olen, pos, len);
- olen += len;
- *(linep + olen) = '\0';
- olinep = linep;
- }
- if (cont) {
- if (fgets(line, LINSIZ, pvt->fp)) {
- pos = line;
- len = strlen(pos);
- } else
- cont = 0;
- }
- } while (cont);
- lp->l_line = linep;
- lp->l_next = pvt->linehead;
- pvt->linehead = lp;
-
- /*
- * If this is the one we wanted, we are done.
- */
- if (!strcmp(lp->l_groupname, group))
- return (lp);
- }
- }
- return (NULL);
-}
diff --git a/contrib/bind/lib/irs/lcl_nw.c b/contrib/bind/lib/irs/lcl_nw.c
deleted file mode 100644
index 457621b..0000000
--- a/contrib/bind/lib/irs/lcl_nw.c
+++ /dev/null
@@ -1,371 +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.
- */
-
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: lcl_nw.c,v 1.22 2001/05/29 05:49:07 marka Exp $";
-/* 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"
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <irs.h>
-#include <isc/memcluster.h>
-
-#include "port_after.h"
-
-#include <isc/misc.h>
-#include "irs_p.h"
-#include "lcl_p.h"
-
-#define MAXALIASES 35
-#define MAXADDRSIZE 4
-
-struct pvt {
- FILE * fp;
- char line[BUFSIZ+1];
- struct nwent net;
- char * aliases[MAXALIASES];
- char addr[MAXADDRSIZE];
- struct __res_state * res;
- void (*free_res)(void *);
-};
-
-/* 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 int init(struct irs_nw *this);
-
-/* Portability. */
-
-#ifndef SEEK_SET
-# define SEEK_SET 0
-#endif
-
-/* Public */
-
-struct irs_nw *
-irs_lcl_nw(struct irs_acc *this) {
- struct irs_nw *nw;
- struct pvt *pvt;
-
- UNUSED(this);
-
- 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);
- 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->fp)
- (void)fclose(pvt->fp);
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-static struct nwent *
-nw_byaddr(struct irs_nw *this, void *net, int length, int type) {
- struct nwent *p;
-
- if (init(this) == -1)
- return(NULL);
-
- nw_rewind(this);
- while ((p = nw_next(this)) != NULL)
- if (p->n_addrtype == type && p->n_length == length)
- if (bitncmp(p->n_addr, net, length) == 0)
- break;
- return (p);
-}
-
-static struct nwent *
-nw_byname(struct irs_nw *this, const char *name, int type) {
- struct nwent *p;
- char **ap;
-
- if (init(this) == -1)
- return(NULL);
-
- nw_rewind(this);
- while ((p = nw_next(this)) != NULL) {
- if (ns_samename(p->n_name, name) == 1 &&
- p->n_addrtype == type)
- break;
- for (ap = p->n_aliases; *ap; ap++)
- if ((ns_samename(*ap, name) == 1) &&
- (p->n_addrtype == type))
- goto found;
- }
- found:
- return (p);
-}
-
-static void
-nw_rewind(struct irs_nw *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->fp) {
- if (fseek(pvt->fp, 0L, SEEK_SET) == 0)
- return;
- (void)fclose(pvt->fp);
- }
- if (!(pvt->fp = fopen(_PATH_NETWORKS, "r")))
- return;
- if (fcntl(fileno(pvt->fp), F_SETFD, 1) < 0) {
- (void)fclose(pvt->fp);
- pvt->fp = NULL;
- }
-}
-
-static struct nwent *
-nw_next(struct irs_nw *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- struct nwent *ret = NULL;
- char *p, *cp, **q;
- char *bufp, *ndbuf, *dbuf = NULL;
- int c, bufsiz, offset = 0;
-
- if (init(this) == -1)
- return(NULL);
-
- if (pvt->fp == NULL)
- nw_rewind(this);
- if (pvt->fp == NULL) {
- RES_SET_H_ERRNO(pvt->res, NETDB_INTERNAL);
- return (NULL);
- }
- bufp = pvt->line;
- bufsiz = sizeof(pvt->line);
-
- again:
- p = fgets(bufp + offset, bufsiz - offset, pvt->fp);
- if (p == NULL)
- goto cleanup;
- if (!strchr(p, '\n') && !feof(pvt->fp)) {
-#define GROWBUF 1024
- /* allocate space for longer line */
- if (dbuf == NULL) {
- if ((ndbuf = malloc(bufsiz + GROWBUF)) != NULL)
- strcpy(ndbuf, bufp);
- } else
- ndbuf = realloc(dbuf, bufsiz + GROWBUF);
- if (ndbuf) {
- dbuf = ndbuf;
- bufp = dbuf;
- bufsiz += GROWBUF;
- offset = strlen(dbuf);
- } else {
- /* allocation failed; skip this long line */
- while ((c = getc(pvt->fp)) != EOF)
- if (c == '\n')
- break;
- if (c != EOF)
- ungetc(c, pvt->fp);
- }
- goto again;
- }
-
- p -= offset;
- offset = 0;
-
- if (*p == '#')
- goto again;
-
- cp = strpbrk(p, "#\n");
- if (cp != NULL)
- *cp = '\0';
- pvt->net.n_name = p;
- cp = strpbrk(p, " \t");
- if (cp == NULL)
- goto again;
- *cp++ = '\0';
- while (*cp == ' ' || *cp == '\t')
- cp++;
- p = strpbrk(cp, " \t");
- if (p != NULL)
- *p++ = '\0';
- pvt->net.n_length = inet_net_pton(AF_INET, cp, pvt->addr,
- sizeof pvt->addr);
- if (pvt->net.n_length < 0)
- goto again;
- pvt->net.n_addrtype = AF_INET;
- pvt->net.n_addr = pvt->addr;
- q = pvt->net.n_aliases = pvt->aliases;
- if (p != NULL) {
- cp = p;
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &pvt->aliases[MAXALIASES - 1])
- *q++ = cp;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- }
- }
- *q = NULL;
- ret = &pvt->net;
-
- cleanup:
- if (dbuf)
- free(dbuf);
-
- return (ret);
-}
-
-static void
-nw_minimize(struct irs_nw *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->res)
- res_nclose(pvt->res);
- if (pvt->fp != NULL) {
- (void)fclose(pvt->fp);
- pvt->fp = NULL;
- }
-}
-
-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;
-}
-
-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);
-}
diff --git a/contrib/bind/lib/irs/lcl_p.h b/contrib/bind/lib/irs/lcl_p.h
deleted file mode 100644
index b9e3b3e..0000000
--- a/contrib/bind/lib/irs/lcl_p.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * $Id: lcl_p.h,v 1.7 1999/01/08 19:24:51 vixie Exp $
- */
-
-/*
- * lcl_p.h - private include file for the local accessor functions.
- */
-
-#ifndef _LCL_P_H_INCLUDED
-#define _LCL_P_H_INCLUDED
-
-/*
- * Object state.
- */
-struct lcl_p {
- struct __res_state * res;
- void (*free_res) __P((void *));
-};
-
-/*
- * Externs.
- */
-
-extern struct irs_acc * irs_lcl_acc __P((const char *));
-extern struct irs_gr * irs_lcl_gr __P((struct irs_acc *));
-extern struct irs_pw * irs_lcl_pw __P((struct irs_acc *));
-extern struct irs_sv * irs_lcl_sv __P((struct irs_acc *));
-extern struct irs_pr * irs_lcl_pr __P((struct irs_acc *));
-extern struct irs_ho * irs_lcl_ho __P((struct irs_acc *));
-extern struct irs_nw * irs_lcl_nw __P((struct irs_acc *));
-extern struct irs_ng * irs_lcl_ng __P((struct irs_acc *));
-
-#endif /*_LCL_P_H_INCLUDED*/
diff --git a/contrib/bind/lib/irs/lcl_pr.c b/contrib/bind/lib/irs/lcl_pr.c
deleted file mode 100644
index 5162115..0000000
--- a/contrib/bind/lib/irs/lcl_pr.c
+++ /dev/null
@@ -1,284 +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.
- */
-
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: lcl_pr.c,v 1.18 1999/10/13 17:11:20 vixie Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* extern */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <irs.h>
-#include <isc/memcluster.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "lcl_p.h"
-
-#ifndef _PATH_PROTOCOLS
-#define _PATH_PROTOCOLS "/etc/protocols"
-#endif
-#define MAXALIASES 35
-
-/* Types */
-
-struct pvt {
- FILE * fp;
- char line[BUFSIZ+1];
- struct protoent proto;
- char * proto_aliases[MAXALIASES];
-};
-
-/* Forward */
-
-static void pr_close(struct irs_pr *);
-static struct protoent * pr_next(struct irs_pr *);
-static struct protoent * pr_byname(struct irs_pr *, const char *);
-static struct protoent * pr_bynumber(struct irs_pr *, int);
-static void pr_rewind(struct irs_pr *);
-static void pr_minimize(struct irs_pr *);
-
-/* Portability. */
-
-#ifndef SEEK_SET
-# define SEEK_SET 0
-#endif
-
-/* Public */
-
-struct irs_pr *
-irs_lcl_pr(struct irs_acc *this) {
- struct irs_pr *pr;
- struct pvt *pvt;
-
- if (!(pr = memget(sizeof *pr))) {
- errno = ENOMEM;
- return (NULL);
- }
- if (!(pvt = memget(sizeof *pvt))) {
- memput(pr, sizeof *this);
- errno = ENOMEM;
- return (NULL);
- }
- memset(pvt, 0, sizeof *pvt);
- pr->private = pvt;
- pr->close = pr_close;
- pr->byname = pr_byname;
- pr->bynumber = pr_bynumber;
- pr->next = pr_next;
- pr->rewind = pr_rewind;
- 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;
-
- if (pvt->fp)
- (void) fclose(pvt->fp);
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-static struct protoent *
-pr_byname(struct irs_pr *this, const char *name) {
-
- struct protoent *p;
- char **cp;
-
- pr_rewind(this);
- while ((p = pr_next(this))) {
- if (!strcmp(p->p_name, name))
- goto found;
- for (cp = p->p_aliases; *cp; cp++)
- if (!strcmp(*cp, name))
- goto found;
- }
- found:
- return (p);
-}
-
-static struct protoent *
-pr_bynumber(struct irs_pr *this, int proto) {
- struct protoent *p;
-
- pr_rewind(this);
- while ((p = pr_next(this)))
- if (p->p_proto == proto)
- break;
- return (p);
-}
-
-static void
-pr_rewind(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->fp) {
- if (fseek(pvt->fp, 0L, SEEK_SET) == 0)
- return;
- (void)fclose(pvt->fp);
- }
- if (!(pvt->fp = fopen(_PATH_PROTOCOLS, "r" )))
- return;
- if (fcntl(fileno(pvt->fp), F_SETFD, 1) < 0) {
- (void)fclose(pvt->fp);
- pvt->fp = NULL;
- }
-}
-
-static struct protoent *
-pr_next(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
- char *p, *cp, **q;
- char *bufp, *ndbuf, *dbuf = NULL;
- int c, bufsiz, offset;
-
- if (!pvt->fp)
- pr_rewind(this);
- if (!pvt->fp)
- return (NULL);
- bufp = pvt->line;
- bufsiz = BUFSIZ;
- offset = 0;
- again:
- if ((p = fgets(bufp + offset, bufsiz - offset, pvt->fp)) == NULL) {
- if (dbuf)
- free(dbuf);
- return (NULL);
- }
- if (!strchr(p, '\n') && !feof(pvt->fp)) {
-#define GROWBUF 1024
- /* allocate space for longer line */
- if (dbuf == NULL) {
- if ((ndbuf = malloc(bufsiz + GROWBUF)) != NULL)
- strcpy(ndbuf, bufp);
- } else
- ndbuf = realloc(dbuf, bufsiz + GROWBUF);
- if (ndbuf) {
- dbuf = ndbuf;
- bufp = dbuf;
- bufsiz += GROWBUF;
- offset = strlen(dbuf);
- } else {
- /* allocation failed; skip this long line */
- while ((c = getc(pvt->fp)) != EOF)
- if (c == '\n')
- break;
- if (c != EOF)
- ungetc(c, pvt->fp);
- }
- goto again;
- }
-
- p -= offset;
- offset = 0;
-
- if (*p == '#')
- goto again;
- cp = strpbrk(p, "#\n");
- if (cp != NULL)
- *cp = '\0';
- pvt->proto.p_name = p;
- cp = strpbrk(p, " \t");
- if (cp == NULL)
- goto again;
- *cp++ = '\0';
- while (*cp == ' ' || *cp == '\t')
- cp++;
- p = strpbrk(cp, " \t");
- if (p != NULL)
- *p++ = '\0';
- pvt->proto.p_proto = atoi(cp);
- q = pvt->proto.p_aliases = pvt->proto_aliases;
- if (p != NULL) {
- cp = p;
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &pvt->proto_aliases[MAXALIASES - 1])
- *q++ = cp;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- }
- }
- *q = NULL;
- return (&pvt->proto);
-}
-
-static void
-pr_minimize(struct irs_pr *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->fp != NULL) {
- (void)fclose(pvt->fp);
- pvt->fp = NULL;
- }
-}
diff --git a/contrib/bind/lib/irs/lcl_pw.c b/contrib/bind/lib/irs/lcl_pw.c
deleted file mode 100644
index 31c1ed0..0000000
--- a/contrib/bind/lib/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.
- */
-
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: lcl_pw.c,v 1.20 2001/05/29 05:49:08 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Extern */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_PW
-static int __bind_irs_pw_unneeded;
-#else
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <db.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <pwd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <utmp.h>
-#include <unistd.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/lcl_sv.c b/contrib/bind/lib/irs/lcl_sv.c
deleted file mode 100644
index d94366b..0000000
--- a/contrib/bind/lib/irs/lcl_sv.c
+++ /dev/null
@@ -1,431 +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.
- */
-
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: lcl_sv.c,v 1.22 2001/06/18 14:43:59 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* extern */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#ifdef IRS_LCL_SV_DB
-#include <db.h>
-#endif
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <irs.h>
-#include <isc/memcluster.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "lcl_p.h"
-
-#ifdef SPRINTF_CHAR
-# define SPRINTF(x) strlen(sprintf/**/x)
-#else
-# define SPRINTF(x) ((size_t)sprintf x)
-#endif
-
-/* Types */
-
-struct pvt {
-#ifdef IRS_LCL_SV_DB
- DB * dbh;
- int dbf;
-#endif
- struct lcl_sv sv;
-};
-
-/* 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 *);
-/*global*/ struct servent * irs_lclsv_fnxt(struct lcl_sv *);
-#ifdef IRS_LCL_SV_DB
-static struct servent * sv_db_rec(struct lcl_sv *, DBT *, DBT *);
-#endif
-
-/* Portability */
-
-#ifndef SEEK_SET
-# define SEEK_SET 0
-#endif
-
-/* Public */
-
-struct irs_sv *
-irs_lcl_sv(struct irs_acc *this) {
- struct irs_sv *sv;
- struct pvt *pvt;
-
- UNUSED(this);
-
- if ((sv = memget(sizeof *sv)) == NULL) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(sv, 0x5e, sizeof *sv);
- if ((pvt = memget(sizeof *pvt)) == NULL) {
- memput(sv, sizeof *sv);
- errno = ENOMEM;
- return (NULL);
- }
- memset(pvt, 0, sizeof *pvt);
- 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;
-#ifdef IRS_LCL_SV_DB
- pvt->dbf = R_FIRST;
-#endif
- return (sv);
-}
-
-/* Methods */
-
-static void
-sv_close(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
-#ifdef IRS_LCL_SV_DB
- if (pvt->dbh != NULL)
- (*pvt->dbh->close)(pvt->dbh);
-#endif
- if (pvt->sv.fp)
- fclose(pvt->sv.fp);
- memput(pvt, sizeof *pvt);
- memput(this, sizeof *this);
-}
-
-static struct servent *
-sv_byname(struct irs_sv *this, const char *name, const char *proto) {
-#ifdef IRS_LCL_SV_DB
- struct pvt *pvt = (struct pvt *)this->private;
-#endif
- struct servent *p;
- char **cp;
-
- sv_rewind(this);
-#ifdef IRS_LCL_SV_DB
- if (pvt->dbh != NULL) {
- DBT key, data;
-
- /* Note that (sizeof "/") == 2. */
- if ((strlen(name) + sizeof "/" + proto ? strlen(proto) : 0)
- > sizeof pvt->sv.line)
- goto try_local;
- key.data = pvt->sv.line;
- key.size = SPRINTF((pvt->sv.line, "%s/%s", name,
- proto ? proto : "")) + 1;
- if (proto != NULL) {
- if ((*pvt->dbh->get)(pvt->dbh, &key, &data, 0) != 0)
- return (NULL);
- } else if ((*pvt->dbh->seq)(pvt->dbh, &key, &data, R_CURSOR)
- != 0)
- return (NULL);
- return (sv_db_rec(&pvt->sv, &key, &data));
- }
- try_local:
-#endif
-
- while ((p = sv_next(this))) {
- if (strcmp(name, p->s_name) == 0)
- goto gotname;
- for (cp = p->s_aliases; *cp; cp++)
- if (strcmp(name, *cp) == 0)
- goto gotname;
- continue;
- gotname:
- if (proto == NULL || strcmp(p->s_proto, proto) == 0)
- break;
- }
- return (p);
-}
-
-static struct servent *
-sv_byport(struct irs_sv *this, int port, const char *proto) {
-#ifdef IRS_LCL_SV_DB
- struct pvt *pvt = (struct pvt *)this->private;
-#endif
- struct servent *p;
-
- sv_rewind(this);
-#ifdef IRS_LCL_SV_DB
- if (pvt->dbh != NULL) {
- DBT key, data;
- u_short *ports;
-
- ports = (u_short *)pvt->sv.line;
- ports[0] = 0;
- ports[1] = port;
- key.data = ports;
- key.size = sizeof(u_short) * 2;
- if (proto && *proto) {
- strncpy((char *)ports + key.size, proto,
- BUFSIZ - key.size);
- key.size += strlen((char *)ports + key.size) + 1;
- if ((*pvt->dbh->get)(pvt->dbh, &key, &data, 0) != 0)
- return (NULL);
- } else {
- if ((*pvt->dbh->seq)(pvt->dbh, &key, &data, R_CURSOR)
- != 0)
- return (NULL);
- }
- return (sv_db_rec(&pvt->sv, &key, &data));
- }
-#endif
- while ((p = sv_next(this))) {
- if (p->s_port != port)
- continue;
- if (proto == NULL || strcmp(p->s_proto, proto) == 0)
- break;
- }
- return (p);
-}
-
-static void
-sv_rewind(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
- if (pvt->sv.fp) {
- if (fseek(pvt->sv.fp, 0L, SEEK_SET) == 0)
- return;
- (void)fclose(pvt->sv.fp);
- pvt->sv.fp = NULL;
- }
-#ifdef IRS_LCL_SV_DB
- pvt->dbf = R_FIRST;
- if (pvt->dbh != NULL)
- return;
- pvt->dbh = dbopen(_PATH_SERVICES_DB, O_RDONLY,O_RDONLY,DB_BTREE, NULL);
- if (pvt->dbh != NULL) {
- if (fcntl((*pvt->dbh->fd)(pvt->dbh), F_SETFD, 1) < 0) {
- (*pvt->dbh->close)(pvt->dbh);
- pvt->dbh = NULL;
- }
- return;
- }
-#endif
- if ((pvt->sv.fp = fopen(_PATH_SERVICES, "r")) == NULL)
- return;
- if (fcntl(fileno(pvt->sv.fp), F_SETFD, 1) < 0) {
- (void)fclose(pvt->sv.fp);
- pvt->sv.fp = NULL;
- }
-}
-
-static struct servent *
-sv_next(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
-#ifdef IRS_LCL_SV_DB
- if (pvt->dbh == NULL && pvt->sv.fp == NULL)
-#else
- if (pvt->sv.fp == NULL)
-#endif
- sv_rewind(this);
-
-#ifdef IRS_LCL_SV_DB
- if (pvt->dbh != NULL) {
- DBT key, data;
-
- while ((*pvt->dbh->seq)(pvt->dbh, &key, &data, pvt->dbf) == 0){
- pvt->dbf = R_NEXT;
- if (((char *)key.data)[0])
- continue;
- return (sv_db_rec(&pvt->sv, &key, &data));
- }
- }
-#endif
-
- if (pvt->sv.fp == NULL)
- return (NULL);
- return (irs_lclsv_fnxt(&pvt->sv));
-}
-
-static void
-sv_minimize(struct irs_sv *this) {
- struct pvt *pvt = (struct pvt *)this->private;
-
-#ifdef IRS_LCL_SV_DB
- if (pvt->dbh != NULL) {
- (*pvt->dbh->close)(pvt->dbh);
- pvt->dbh = NULL;
- }
-#endif
- if (pvt->sv.fp != NULL) {
- (void)fclose(pvt->sv.fp);
- pvt->sv.fp = NULL;
- }
-}
-
-/* Quasipublic. */
-
-struct servent *
-irs_lclsv_fnxt(struct lcl_sv *sv) {
- char *p, *cp, **q;
-
- again:
- if ((p = fgets(sv->line, BUFSIZ, sv->fp)) == NULL)
- return (NULL);
- if (*p == '#')
- goto again;
- sv->serv.s_name = p;
- while (*p && *p != '\n' && *p != ' ' && *p != '\t' && *p != '#')
- ++p;
- if (*p == '\0' || *p == '#' || *p == '\n')
- goto again;
- *p++ = '\0';
- while (*p == ' ' || *p == '\t')
- p++;
- if (*p == '\0' || *p == '#' || *p == '\n')
- goto again;
- sv->serv.s_port = htons((u_short)strtol(p, &cp, 10));
- if (cp == p || (*cp != '/' && *cp != ','))
- goto again;
- p = cp + 1;
- sv->serv.s_proto = p;
-
- q = sv->serv.s_aliases = sv->serv_aliases;
-
- while (*p && *p != '\n' && *p != ' ' && *p != '\t' && *p != '#')
- ++p;
-
- while (*p == ' ' || *p == '\t') {
- *p++ = '\0';
- while (*p == ' ' || *p == '\t')
- ++p;
- if (*p == '\0' || *p == '#' || *p == '\n')
- break;
- if (q < &sv->serv_aliases[IRS_SV_MAXALIASES - 1])
- *q++ = p;
- while (*p && *p != '\n' && *p != ' ' && *p != '\t' && *p != '#')
- ++p;
- }
-
- *p = '\0';
- *q = NULL;
- return (&sv->serv);
-}
-
-/* Private. */
-
-#ifdef IRS_LCL_SV_DB
-static struct servent *
-sv_db_rec(struct lcl_sv *sv, DBT *key, DBT *data) {
- char *p, **q;
- int n;
-
- p = data->data;
- p[data->size - 1] = '\0'; /* should be, but we depend on it */
-
- if (((char *)key->data)[0] == '\0') {
- if (key->size < sizeof(u_short)*2 || data->size < 2)
- return (NULL);
- sv->serv.s_port = ((u_short *)key->data)[1];
- n = strlen(p) + 1;
- if ((size_t)n > sizeof(sv->line)) {
- n = sizeof(sv->line);
- }
- memcpy(sv->line, p, n);
- sv->serv.s_name = sv->line;
- if ((sv->serv.s_proto = strchr(sv->line, '/')) != NULL)
- *(sv->serv.s_proto)++ = '\0';
- p += n;
- data->size -= n;
- } else {
- if (data->size < sizeof(u_short) + 1)
- return (NULL);
- if (key->size > sizeof(sv->line))
- key->size = sizeof(sv->line);
- ((char *)key->data)[key->size - 1] = '\0';
- memcpy(sv->line, key->data, key->size);
- sv->serv.s_name = sv->line;
- if ((sv->serv.s_proto = strchr(sv->line, '/')) != NULL)
- *(sv->serv.s_proto)++ = '\0';
- sv->serv.s_port = *(u_short *)data->data;
- p += sizeof(u_short);
- data->size -= sizeof(u_short);
- }
- q = sv->serv.s_aliases = sv->serv_aliases;
- while (data->size > 0 && q < &sv->serv_aliases[IRS_SV_MAXALIASES - 1]) {
-
- *q++ = p;
- n = strlen(p) + 1;
- data->size -= n;
- p += n;
- }
- *q = NULL;
- return (&sv->serv);
-}
-#endif
diff --git a/contrib/bind/lib/irs/nis.c b/contrib/bind/lib/irs/nis.c
deleted file mode 100644
index aa10fba..0000000
--- a/contrib/bind/lib/irs/nis.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis.c,v 1.15 2001/05/29 05:49:11 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#ifdef WANT_IRS_NIS
-
-#include <rpc/rpc.h>
-#include <rpc/xdr.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "hesiod.h"
-#include "nis_p.h"
-
-/* Forward */
-
-static void nis_close(struct irs_acc *);
-static struct __res_state * nis_res_get(struct irs_acc *);
-static void nis_res_set(struct irs_acc *, struct __res_state *,
- void (*)(void *));
-
-/* Public */
-
-struct irs_acc *
-irs_nis_acc(const char *options) {
- struct nis_p *nis;
- struct irs_acc *acc;
- char *domain;
-
- UNUSED(options);
-
- if (yp_get_default_domain(&domain) != 0)
- return (NULL);
- if (!(nis = memget(sizeof *nis))) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(nis, 0, sizeof *nis);
- if (!(acc = memget(sizeof *acc))) {
- memput(nis, sizeof *nis);
- errno = ENOMEM;
- return (NULL);
- }
- memset(acc, 0x5e, sizeof *acc);
- acc->private = nis;
- nis->domain = strdup(domain);
-#ifdef WANT_IRS_GR
- acc->gr_map = irs_nis_gr;
-#else
- acc->gr_map = NULL;
-#endif
-#ifdef WANT_IRS_PW
- acc->pw_map = irs_nis_pw;
-#else
- acc->pw_map = NULL;
-#endif
- acc->sv_map = irs_nis_sv;
- acc->pr_map = irs_nis_pr;
- acc->ho_map = irs_nis_ho;
- acc->nw_map = irs_nis_nw;
- acc->ng_map = irs_nis_ng;
- acc->res_get = nis_res_get;
- acc->res_set = nis_res_set;
- acc->close = nis_close;
- return (acc);
-}
-
-/* Methods */
-
-static struct __res_state *
-nis_res_get(struct irs_acc *this) {
- struct nis_p *nis = (struct nis_p *)this->private;
-
- if (nis->res == NULL) {
- struct __res_state *res;
- res = (struct __res_state *)malloc(sizeof *res);
- if (res == NULL)
- return (NULL);
- memset(res, 0, sizeof *res);
- nis_res_set(this, res, free);
- }
-
- if ((nis->res->options & RES_INIT) == 0 &&
- res_ninit(nis->res) < 0)
- return (NULL);
-
- return (nis->res);
-}
-
-static void
-nis_res_set(struct irs_acc *this, struct __res_state *res,
- void (*free_res)(void *)) {
- struct nis_p *nis = (struct nis_p *)this->private;
-
- if (nis->res && nis->free_res) {
- res_nclose(nis->res);
- (*nis->free_res)(nis->res);
- }
-
- nis->res = res;
- nis->free_res = free_res;
-}
-
-static void
-nis_close(struct irs_acc *this) {
- struct nis_p *nis = (struct nis_p *)this->private;
-
- if (nis->res && nis->free_res)
- (*nis->free_res)(nis->res);
- free(nis->domain);
- memput(nis, sizeof *nis);
- memput(this, sizeof *this);
-}
-
-#endif /*WANT_IRS_NIS*/
diff --git a/contrib/bind/lib/irs/nis_gr.c b/contrib/bind/lib/irs/nis_gr.c
deleted file mode 100644
index 0ea50f5..0000000
--- a/contrib/bind/lib/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.
- */
-
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis_gr.c,v 1.22 2002/07/08 06:26:11 marka Exp $";
-/* 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 <sys/param.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-#include <isc/memcluster.h>
-
-#include <rpc/rpc.h>
-#include <rpc/xdr.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-
-#include <errno.h>
-#include <grp.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <isc/memcluster.h>
-
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/nis_ho.c b/contrib/bind/lib/irs/nis_ho.c
deleted file mode 100644
index 7158f4c..0000000
--- a/contrib/bind/lib/irs/nis_ho.c
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis_ho.c,v 1.18.10.1 2003/06/02 05:50:57 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Imports */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_NIS
-static int __bind_irs_nis_unneeded;
-#else
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <rpc/rpc.h>
-#include <rpc/xdr.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/nis_ng.c b/contrib/bind/lib/irs/nis_ng.c
deleted file mode 100644
index a42d994..0000000
--- a/contrib/bind/lib/irs/nis_ng.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis_ng.c,v 1.17 2001/05/29 05:49:14 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_NIS
-static int __bind_irs_nis_unneeded;
-#else
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <rpc/rpc.h>
-#include <rpc/xdr.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-
-#include <isc/assertions.h>
-#include <ctype.h>
-#include <errno.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/nis_nw.c b/contrib/bind/lib/irs/nis_nw.c
deleted file mode 100644
index bc659f3..0000000
--- a/contrib/bind/lib/irs/nis_nw.c
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis_nw.c,v 1.16 2001/05/29 05:49:15 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Imports */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_NIS
-static int __bind_irs_nis_unneeded;
-#else
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <rpc/rpc.h>
-#include <rpc/xdr.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-
-#include <errno.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/nis_p.h b/contrib/bind/lib/irs/nis_p.h
deleted file mode 100644
index d3dc126..0000000
--- a/contrib/bind/lib/irs/nis_p.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * $Id: nis_p.h,v 1.6 1999/01/08 19:25:03 vixie Exp $
- */
-
-/*
- * nis_p.h - private include file for the NIS functions.
- */
-
-/*
- * Object state.
- */
-struct nis_p {
- char * domain;
- struct __res_state * res;
- void (*free_res) __P((void *));
-};
-
-
-/*
- * Methods.
- */
-
-extern struct irs_gr * irs_nis_gr __P((struct irs_acc *));
-extern struct irs_pw * irs_nis_pw __P((struct irs_acc *));
-extern struct irs_sv * irs_nis_sv __P((struct irs_acc *));
-extern struct irs_pr * irs_nis_pr __P((struct irs_acc *));
-extern struct irs_ho * irs_nis_ho __P((struct irs_acc *));
-extern struct irs_nw * irs_nis_nw __P((struct irs_acc *));
-extern struct irs_ng * irs_nis_ng __P((struct irs_acc *));
diff --git a/contrib/bind/lib/irs/nis_pr.c b/contrib/bind/lib/irs/nis_pr.c
deleted file mode 100644
index bc09075..0000000
--- a/contrib/bind/lib/irs/nis_pr.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis_pr.c,v 1.14 2001/05/29 05:49:16 marka Exp $";
-#endif
-
-/* Imports */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_NIS
-static int __bind_irs_nis_unneeded;
-#else
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-#include <rpc/rpc.h>
-#include <rpc/xdr.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <netdb.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/nis_pw.c b/contrib/bind/lib/irs/nis_pw.c
deleted file mode 100644
index 1d345a5..0000000
--- a/contrib/bind/lib/irs/nis_pw.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis_pw.c,v 1.17 2001/05/29 05:49:18 marka Exp $";
-#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 <sys/param.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-#include <isc/memcluster.h>
-#include <rpc/rpc.h>
-#include <rpc/xdr.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <isc/memcluster.h>
-
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/nis_sv.c b/contrib/bind/lib/irs/nis_sv.c
deleted file mode 100644
index 40bfda5..0000000
--- a/contrib/bind/lib/irs/nis_sv.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nis_sv.c,v 1.15 2001/05/29 05:49:19 marka Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/* Imports */
-
-#include "port_before.h"
-
-#ifndef WANT_IRS_NIS
-static int __bind_irs_nis_unneeded;
-#else
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-#include <sys/socket.h>
-#include <rpc/rpc.h>
-#include <rpc/xdr.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <isc/memcluster.h>
-#include <irs.h>
-
-#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/contrib/bind/lib/irs/nul_ng.c b/contrib/bind/lib/irs/nul_ng.c
deleted file mode 100644
index 1a61d8c..0000000
--- a/contrib/bind/lib/irs/nul_ng.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: nul_ng.c,v 1.11 2001/05/29 05:49:20 marka Exp $";
-#endif
-
-/*
- * nul_ng.c - the netgroup accessor null map
- */
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <netdb.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include <irs.h>
-#include <isc/memcluster.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-#include "hesiod.h"
-#include "dns_p.h"
-
-/* 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 *);
-
-/* Public. */
-
-struct irs_ng *
-irs_nul_ng(struct irs_acc *this) {
- struct irs_ng *ng;
-
- UNUSED(this);
-
- if (!(ng = memget(sizeof *ng))) {
- errno = ENOMEM;
- return (NULL);
- }
- memset(ng, 0x5e, sizeof *ng);
- ng->private = NULL;
- 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) {
- memput(this, sizeof *this);
-}
-
-/* ARGSUSED */
-static int
-ng_next(struct irs_ng *this, const char **host, const char **user,
- const char **domain)
-{
- UNUSED(this);
- UNUSED(host);
- UNUSED(user);
- UNUSED(domain);
- errno = ENOENT;
- return (-1);
-}
-
-static int
-ng_test(struct irs_ng *this, const char *name,
- const char *user, const char *host, const char *domain)
-{
- UNUSED(this);
- UNUSED(name);
- UNUSED(user);
- UNUSED(host);
- UNUSED(domain);
- errno = ENODEV;
- return (-1);
-}
-
-static void
-ng_rewind(struct irs_ng *this, const char *netgroup) {
- UNUSED(this);
- UNUSED(netgroup);
- /* NOOP */
-}
-
-static void
-ng_minimize(struct irs_ng *this) {
- UNUSED(this);
- /* NOOP */
-}
diff --git a/contrib/bind/lib/irs/pathnames.h b/contrib/bind/lib/irs/pathnames.h
deleted file mode 100644
index 1a225e5..0000000
--- a/contrib/bind/lib/irs/pathnames.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * $Id: pathnames.h,v 1.7 1999/01/08 19:25:10 vixie Exp $
- */
-
-#ifndef _PATH_IRS_CONF
-#define _PATH_IRS_CONF "/etc/irs.conf"
-#endif
-
-#ifndef _PATH_NETWORKS
-#define _PATH_NETWORKS "/etc/networks"
-#endif
-
-#ifndef _PATH_GROUP
-#define _PATH_GROUP "/etc/group"
-#endif
-
-#ifndef _PATH_NETGROUP
-#define _PATH_NETGROUP "/etc/netgroup"
-#endif
-
-#ifndef _PATH_SERVICES
-#define _PATH_SERVICES "/etc/services"
-#endif
-
-#ifdef IRS_LCL_SV_DB
-#ifndef _PATH_SERVICES_DB
-#define _PATH_SERVICES_DB _PATH_SERVICES ".db"
-#endif
-#endif
-
-#ifndef _PATH_HESIOD_CONF
-#define _PATH_HESIOD_CONF "/etc/hesiod.conf"
-#endif
diff --git a/contrib/bind/lib/irs/util.c b/contrib/bind/lib/irs/util.c
deleted file mode 100644
index e37f4d9..0000000
--- a/contrib/bind/lib/irs/util.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: util.c,v 1.12 2001/05/29 05:49:21 marka Exp $";
-#endif
-
-#include "port_before.h"
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <irs.h>
-
-#include "port_after.h"
-
-#include "irs_p.h"
-
-#ifdef SPRINTF_CHAR
-# define SPRINTF(x) strlen(sprintf/**/x)
-#else
-# define SPRINTF(x) sprintf x
-#endif
-
-void
-map_v4v6_address(const char *src, char *dst) {
- u_char *p = (u_char *)dst;
- char tmp[NS_INADDRSZ];
- int i;
-
- /* Stash a temporary copy so our caller can update in place. */
- memcpy(tmp, src, NS_INADDRSZ);
- /* Mark this ipv6 addr as a mapped ipv4. */
- for (i = 0; i < 10; i++)
- *p++ = 0x00;
- *p++ = 0xff;
- *p++ = 0xff;
- /* Retrieve the saved copy and we're done. */
- memcpy((void*)p, tmp, NS_INADDRSZ);
-}
-
-int
-make_group_list(struct irs_gr *this, const char *name,
- gid_t basegid, gid_t *groups, int *ngroups)
-{
- struct group *grp;
- int i, ng;
- int ret, maxgroups;
-
- ret = -1;
- ng = 0;
- maxgroups = *ngroups;
- /*
- * When installing primary group, duplicate it;
- * the first element of groups is the effective gid
- * and will be overwritten when a setgid file is executed.
- */
- if (ng >= maxgroups)
- goto done;
- groups[ng++] = basegid;
- if (ng >= maxgroups)
- goto done;
- groups[ng++] = basegid;
- /*
- * Scan the group file to find additional groups.
- */
- (*this->rewind)(this);
- while ((grp = (*this->next)(this)) != NULL) {
- if ((gid_t)grp->gr_gid == basegid)
- continue;
- for (i = 0; grp->gr_mem[i]; i++) {
- if (!strcmp(grp->gr_mem[i], name)) {
- if (ng >= maxgroups)
- goto done;
- groups[ng++] = grp->gr_gid;
- break;
- }
- }
- }
- ret = 0;
- done:
- *ngroups = ng;
- return (ret);
-}
OpenPOWER on IntegriCloud