summaryrefslogtreecommitdiff
path: root/glibc-compat
diff options
context:
space:
mode:
Diffstat (limited to 'glibc-compat')
-rw-r--r--glibc-compat/.cvsignore1
-rw-r--r--glibc-compat/Banner1
-rw-r--r--glibc-compat/ChangeLog37
-rw-r--r--glibc-compat/Depend3
-rw-r--r--glibc-compat/Makefile150
-rw-r--r--glibc-compat/Versions106
-rw-r--r--glibc-compat/Versions.def15
-rwxr-xr-xglibc-compat/configure3
-rw-r--r--glibc-compat/include/aliases.h20
-rw-r--r--glibc-compat/include/grp.h29
-rw-r--r--glibc-compat/include/netdb.h178
-rw-r--r--glibc-compat/include/pwd.h25
-rw-r--r--glibc-compat/include/rpc/netdb.h24
-rw-r--r--glibc-compat/include/shadow.h24
-rw-r--r--glibc-compat/nss-nis.h58
-rw-r--r--glibc-compat/nss_compat/compat-grp.c769
-rw-r--r--glibc-compat/nss_compat/compat-pwd.c1199
-rw-r--r--glibc-compat/nss_compat/compat-spwd.c915
-rw-r--r--glibc-compat/nss_db/db-XXX.c257
-rw-r--r--glibc-compat/nss_db/db-alias.c208
-rw-r--r--glibc-compat/nss_db/db-netgrp.c101
-rw-r--r--glibc-compat/nss_db/db-open.c1
-rw-r--r--glibc-compat/nss_db/dummy-db.h1
-rw-r--r--glibc-compat/nss_db/nss_db.h1
-rw-r--r--glibc-compat/nss_dns/dns-host.c641
-rw-r--r--glibc-compat/nss_dns/dns-network.c420
-rw-r--r--glibc-compat/nss_files/files-XXX.c311
-rw-r--r--glibc-compat/nss_files/files-alias.c451
-rw-r--r--glibc-compat/nss_files/files-ethers.c75
-rw-r--r--glibc-compat/nss_files/files-grp.c45
-rw-r--r--glibc-compat/nss_files/files-hosts.c107
-rw-r--r--glibc-compat/nss_files/files-netgrp.c268
-rw-r--r--glibc-compat/nss_files/files-network.c56
-rw-r--r--glibc-compat/nss_files/files-parse.c252
-rw-r--r--glibc-compat/nss_files/files-proto.c47
-rw-r--r--glibc-compat/nss_files/files-pwd.c45
-rw-r--r--glibc-compat/nss_files/files-rpc.c47
-rw-r--r--glibc-compat/nss_files/files-service.c60
-rw-r--r--glibc-compat/nss_files/files-spwd.c38
-rw-r--r--glibc-compat/nss_nis/nis-alias.c278
-rw-r--r--glibc-compat/nss_nis/nis-ethers.c299
-rw-r--r--glibc-compat/nss_nis/nis-grp.c249
-rw-r--r--glibc-compat/nss_nis/nis-hosts.c417
-rw-r--r--glibc-compat/nss_nis/nis-netgrp.c128
-rw-r--r--glibc-compat/nss_nis/nis-network.c318
-rw-r--r--glibc-compat/nss_nis/nis-proto.c280
-rw-r--r--glibc-compat/nss_nis/nis-pwd.c407
-rw-r--r--glibc-compat/nss_nis/nis-rpc.c295
-rw-r--r--glibc-compat/nss_nis/nis-service.c280
-rw-r--r--glibc-compat/nss_nis/nis-spwd.c201
-rw-r--r--glibc-compat/oldfileops.c774
-rw-r--r--glibc-compat/oldiofclose.c60
-rw-r--r--glibc-compat/oldiofdopen.c140
-rw-r--r--glibc-compat/oldiofopen.c71
-rw-r--r--glibc-compat/oldiopopen.c289
-rw-r--r--glibc-compat/oldpclose.c48
-rw-r--r--glibc-compat/oldstdfiles.c97
-rw-r--r--glibc-compat/oldtmpfile.c55
-rw-r--r--glibc-compat/rpcsvc/yp.h621
-rw-r--r--glibc-compat/rpcsvc/ypclnt.h90
-rw-r--r--glibc-compat/shlib-versions19
-rw-r--r--glibc-compat/stubs.c57
62 files changed, 0 insertions, 12462 deletions
diff --git a/glibc-compat/.cvsignore b/glibc-compat/.cvsignore
deleted file mode 100644
index 6eaa1d38eb..0000000000
--- a/glibc-compat/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-glibc-compat*.tar.gz
diff --git a/glibc-compat/Banner b/glibc-compat/Banner
deleted file mode 100644
index 7d4bde6291..0000000000
--- a/glibc-compat/Banner
+++ /dev/null
@@ -1 +0,0 @@
-Glibc-2.0 compatibility add-on by Cristian Gafton
diff --git a/glibc-compat/ChangeLog b/glibc-compat/ChangeLog
deleted file mode 100644
index e61c488926..0000000000
--- a/glibc-compat/ChangeLog
+++ /dev/null
@@ -1,37 +0,0 @@
-2000-04-13 Jakub Jelinek <jakub@redhat.com>
-
- * Makefile (services): revert last change.
- (libnss1_db-routines): Add db-open.
- (libnss1_db.so): Remove libdb dependencies, add libdl.
- * nss_db/db-open.c: New file.
- * nss_db/dummy-db.h: New file.
- * nss_db/nss_db.h: New file.
- * nss_db/db-XXX.c: Update from glibc 2.1.90 nss_db/db-XXX.c,
- remove errnop passing and EXTRA_ARGS.
- * nss_db/db-alias.c: Likewise.
- * nss_db/db-netgrp.c: Likewise.
-
-2000-01-04 Cristian Gafton <gafton@redhat.com>
-
- * Makefile (services): disable the compat NSS module for
- Berkeley DB (nss_db). Berkeley BD is not part of the glibc anymore.
-
-1999-07-08 Cristian Gafton <gafton@redhat.com>
-
- * stubs.c (__setfpucw): New function
- * Makefile: Use -include, not include
- (archive): New target.
-
-1999-04-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
- * glibc-compat/Makefile: Add rules to link libnss_*.so.1 to libnss1_*.so.2.
-
-1998-11-18 Cristian Gafton <gafton@redhat.com>
-
- * shlib-versions: added alpha versions
-
- * Makefile (services): Added libnss_dns
-
-1998-11-16 Cristian Gafton <gafton@redhat.com>
-
- * makedist (archive): remove old tar file just in case
-
diff --git a/glibc-compat/Depend b/glibc-compat/Depend
deleted file mode 100644
index 89d8e5bfec..0000000000
--- a/glibc-compat/Depend
+++ /dev/null
@@ -1,3 +0,0 @@
-resolv
-nss
-nis
diff --git a/glibc-compat/Makefile b/glibc-compat/Makefile
deleted file mode 100644
index 8c60483524..0000000000
--- a/glibc-compat/Makefile
+++ /dev/null
@@ -1,150 +0,0 @@
-# Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
-
-# This is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-
-# The GNU C Library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with the GNU C Library; see the file COPYING.LIB. If not,
-# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# $Id$
-
-subdir := glibc-compat
-
-distribute := nss-nis.h
-
-# This is the trivial part which goes into libc itself.
-routines =
-
-# These are the databases that go through nss dispatch.
-# Caution: if you add a database here, you must add its real name
-# in databases.def, too.
-databases = proto service hosts network grp pwd rpc ethers \
- spwd netgrp alias
-
-# Specify rules for the nss_* modules. We have some services.
-services := files nis compat dns
-
-extra-libs := $(services:%=libnss1_%) libNoVersion
-# These libraries will be built in the `others' pass rather than
-# the `lib' pass, because they depend on libc.so being built already.
-extra-libs-others = $(extra-libs)
-
-# The sources are found in the appropriate subdir.
-subdir-dirs = $(services:%=nss_%)
-vpath %.c $(subdir-dirs)
-
-libnss1_files-routines := $(addprefix files-,$(databases))
-libnss1_compat-routines := $(addprefix compat-,grp pwd spwd)
-libnss1_nis-routines := $(addprefix nis-,$(databases))
-libnss1_dns-routines := $(addprefix dns-, host network)
-
-libcompat-routines := $(addprefix old, fileops iofdopen iopopen stdfiles \
- iofclose iofopen pclose tmpfile)
-libNoVersion-routines := stubs
-
-libnss1_files-inhibit-o = $(filter-out .os,$(object-suffixes))
-libnss1_compat-inhibit-o = $(filter-out .os,$(object-suffixes))
-libnss1_nis-inhibit-o = $(filter-out .os,$(object-suffixes))
-libnss1_dns-inhibit-o = $(filter-out .os,$(object-suffixes))
-
--include ../Rules
-
-# Force the soname to be libnss_*.so.1 for compatibility.
-LDFLAGS-nss1_files.so = -Wl,-soname=lib$(libprefix)nss_files.so$($(@F)-version)
-LDFLAGS-nss1_nis.so = -Wl,-soname=lib$(libprefix)nss_nis.so$($(@F)-version)
-LDFLAGS-nss1_compat.so = -Wl,-soname=lib$(libprefix)nss_compat.so$($(@F)-version)
-LDFLAGS-nss1_dns.so = -Wl,-soname=lib$(libprefix)nss_dns.so$($(@F)-version)
-
--include ../Makeconfig
-
-ifeq (yes,$(build-shared))
-install-others += $(inst_slibdir)/libnss_files.so$(libnss1_files.so-version) \
- $(inst_slibdir)/libnss_nis.so$(libnss1_nis.so-version) \
- $(inst_slibdir)/libnss_compat.so$(libnss1_compat.so-version) \
- $(inst_slibdir)/libnss_dns.so$(libnss1_dns.so-version)
-endif
-
-$(inst_slibdir)/libnss_files.so$(libnss1_files.so-version): $(inst_slibdir)/libnss1_files-$(version).so $(+force)
- rm -f $@
- $(LN_S) $(<F) $@
-
-$(inst_slibdir)/libnss_nis.so$(libnss1_nis.so-version): $(inst_slibdir)/libnss1_nis-$(version).so $(+force)
- rm -f $@
- $(LN_S) $(<F) $@
-
-$(inst_slibdir)/libnss_compat.so$(libnss1_compat.so-version): $(inst_slibdir)/libnss1_compat-$(version).so $(+force)
- rm -f $@
- $(LN_S) $(<F) $@
-
-$(inst_slibdir)/libnss_dns.so$(libnss1_dns.so-version): $(inst_slibdir)/libnss1_dns-$(version).so $(+force)
- rm -f $@
- $(LN_S) $(<F) $@
-
-
-$(objpfx)libnss1_compat.so: $(common-objpfx)nis/libnsl.so$(libnsl.so-version) \
- $(objpfx)libnss1_files.so
-$(objpfx)libnss1_nis.so: $(common-objpfx)nis/libnsl.so$(libnsl.so-version) \
- $(objpfx)libnss1_files.so
-
-# The DNS NSS modules needs the resolver.
-#$(objpfx)libnss1_dns.so: $(filter-out $(common-objpfx)resolv/stamp.os, \
-# $(wildcard $(common-objpfx)resolv/*.os)) \
-# $(common-objpfx)libc.so
-$(objpfx)libnss1_dns.so: $(common-objpfx)resolv/libresolv.so $(common-objpfx)libc.so
-
-# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
-# This ensures they will load libc.so for needed symbols if loaded by
-# a statically-linked program that hasn't already loaded it.
-$(objpfx)libnss1_compat.so: $(common-objpfx)nis/libnsl.so$(libnsl.so-version) \
- $(objpfx)libnss1_files.so $(common-objpfx)libc.so
-$(objpfx)libnss1_dns.so: $(common-objpfx)resolv/libresolv.so \
- $(common-objpfx)libc.so
-$(objpfs)libnss1_files.so: $(common-objpfx)libc.so
-$(objpfx)libnss1_nis.so: $(common-objpfx)nis/libnsl.so$(libnsl.so-version) \
- $(objpfx)libnss1_files.so $(common-objpfx)libc.so
-
-check-abi-libNoVersion: $(..)scripts/extract-abilist.awk
- @:
-update-abi-libNoVersion: $(..)scripts/merge-abilist.awk
- @:
-check-abi-libnss1_compat: $(..)scripts/extract-abilist.awk
- @:
-update-abi-libnss1_compat: $(..)scripts/merge-abilist.awk
- @:
-check-abi-libnss1_dns: $(..)scripts/extract-abilist.awk
- @:
-update-abi-libnss1_dns: $(..)scripts/merge-abilist.awk
- @:
-check-abi-libnss1_files: $(..)scripts/extract-abilist.awk
- @:
-update-abi-libnss1_files: $(..)scripts/merge-abilist.awk
- @:
-check-abi-libnss1_nis: $(..)scripts/extract-abilist.awk
- @:
-update-abi-libnss1_nis: $(..)scripts/merge-abilist.awk
- @:
-
-#
-# This is needed to build the separate tarball
-#
-pkgNAME = $(subdir)
-pkgVERSION = 2.1.3
-pkgCVSTAG = $(pkgNAME)_$(subst .,-,$(pkgVERSION))
-
-archive:
- @rm -f *.tar.gz *~
- cvs tag -F $(pkgCVSTAG) .
- @rm -rf /tmp/$(pkgNAME)-$(pkgVERSION) /tmp/$(pkgNAME) $(pkgNAME)-$(pkgVERSION).tar.gz
- @cd /tmp; cvs export -r$(pkgCVSTAG) $(pkgNAME)
- @pkgDIR=$$PWD; cd /tmp; tar cvzf $$pkgDIR/$(pkgNAME)-$(pkgVERSION).tar.gz $(pkgNAME)
- @rm -rf /tmp/$(pkgNAME)
- @echo "The archive is in $(pkgNAME)-$(pkgVERSION).tar.gz"
diff --git a/glibc-compat/Versions b/glibc-compat/Versions
deleted file mode 100644
index 354d5b62a6..0000000000
--- a/glibc-compat/Versions
+++ /dev/null
@@ -1,106 +0,0 @@
-libnss1_db {
- GLIBC_2.0 {
- _nss_db_endaliasent; _nss_db_endetherent; _nss_db_endgrent;
- _nss_db_endnetgrent; _nss_db_endprotoent; _nss_db_endpwent;
- _nss_db_endrpcent; _nss_db_endservent; _nss_db_endspent;
- _nss_db_getaliasbyname_r; _nss_db_getaliasent_r; _nss_db_getetherent_r;
- _nss_db_getgrent_r; _nss_db_getgrgid_r; _nss_db_getgrnam_r;
- _nss_db_gethostton_r; _nss_db_getnetgrent_r; _nss_db_getntohost_r;
- _nss_db_getprotobyname_r; _nss_db_getprotobynumber_r;
- _nss_db_getprotoent_r; _nss_db_getpwent_r; _nss_db_getpwnam_r;
- _nss_db_getpwuid_r; _nss_db_getrpcbyname_r; _nss_db_getrpcbynumber_r;
- _nss_db_getrpcent_r; _nss_db_getservbyname_r; _nss_db_getservbyport_r;
- _nss_db_getservent_r; _nss_db_getspent_r; _nss_db_getspnam_r;
- _nss_db_setaliasent; _nss_db_setetherent; _nss_db_setgrent;
- _nss_db_setnetgrent; _nss_db_setprotoent; _nss_db_setpwent;
- _nss_db_setrpcent; _nss_db_setservent; _nss_db_setspent;
- }
-}
-
-libnss1_dns {
- GLIBC_2.0 {
- _nss_dns_gethostbyaddr_r; _nss_dns_gethostbyname2_r;
- _nss_dns_gethostbyname_r; _nss_dns_getnetbyaddr_r;
- _nss_dns_getnetbyname_r;
- }
-}
-
-libnss1_files {
- GLIBC_2.0 {
- _nss_files_setaliasent; _nss_files_endaliasent;
- _nss_files_getaliasbyname_r; _nss_files_getaliasent_r;
-
- _nss_files_setetherent; _nss_files_endetherent;
- _nss_files_getetherent_r; _nss_files_parse_etherent;
-
- _nss_files_setgrent; _nss_files_endgrent;
- _nss_files_getgrent_r; _nss_files_getgrgid_r; _nss_files_getgrnam_r;
-
- _nss_files_sethostent; _nss_files_endhostent;
- _nss_files_gethostbyaddr_r; _nss_files_gethostbyname2_r; _nss_files_gethostbyname_r;
- _nss_files_gethostent_r; _nss_files_gethostton_r;
-
- _nss_files_setnetent; _nss_files_endnetent;
- _nss_files_getnetbyaddr_r; _nss_files_getnetbyname_r;
- _nss_files_getnetent_r; _nss_files_getntohost_r;
- _nss_files_parse_netent;
-
- _nss_files_setnetgrent; _nss_files_endnetgrent; _nss_files_getnetgrent_r;
-
- _nss_files_setprotoent; _nss_files_endprotoent;
- _nss_files_getprotobyname_r; _nss_files_getprotobynumber_r;
- _nss_files_getprotoent_r; _nss_files_parse_protoent;
-
- _nss_files_setpwent; _nss_files_endpwent;
- _nss_files_getpwent_r; _nss_files_getpwnam_r; _nss_files_getpwuid_r;
-
- _nss_files_setrpcent; _nss_files_endrpcent;
- _nss_files_getrpcbyname_r; _nss_files_getrpcbynumber_r;
- _nss_files_getrpcent_r;
- _nss_files_parse_rpcent;
-
- _nss_files_setservent; _nss_files_endservent;
- _nss_files_getservbyname_r; _nss_files_getservbyport_r;
- _nss_files_getservent_r;
- _nss_files_parse_servent;
-
- _nss_files_setspent; _nss_files_endspent;
- _nss_files_getspent_r; _nss_files_getspnam_r;
-
- _nss_netgroup_parseline;
- }
-}
-
-libnss1_compat {
- GLIBC_2.0 {
- _nss_compat_endgrent; _nss_compat_endpwent; _nss_compat_endspent;
- _nss_compat_getgrent_r; _nss_compat_getgrgid_r; _nss_compat_getgrnam_r;
- _nss_compat_getpwent_r; _nss_compat_getpwnam_r; _nss_compat_getpwuid_r;
- _nss_compat_getspent_r; _nss_compat_getspnam_r; _nss_compat_initgroups;
- _nss_compat_setgrent; _nss_compat_setpwent; _nss_compat_setspent;
- }
-}
-
-libnss1_nis {
- GLIBC_2.0 {
- _nss_nis_endaliasent; _nss_nis_endetherent; _nss_nis_endgrent;
- _nss_nis_endhostent; _nss_nis_endnetent; _nss_nis_endnetgrent;
- _nss_nis_endprotoent; _nss_nis_endpwent; _nss_nis_endrpcent;
- _nss_nis_endservent; _nss_nis_endspent; _nss_nis_getaliasbyname_r;
- _nss_nis_getaliasent_r; _nss_nis_getetherent_r; _nss_nis_getgrent_r;
- _nss_nis_getgrgid_r; _nss_nis_getgrnam_r; _nss_nis_gethostbyaddr_r;
- _nss_nis_gethostbyname2_r; _nss_nis_gethostbyname_r; _nss_nis_gethostent_r;
- _nss_nis_gethostton_r; _nss_nis_getnetbyaddr_r; _nss_nis_getnetbyname_r;
- _nss_nis_getnetent_r; _nss_nis_getnetgrent_r; _nss_nis_getntohost_r;
- _nss_nis_getprotobyname_r; _nss_nis_getprotobynumber_r;
- _nss_nis_getprotoent_r; _nss_nis_getpublickey; _nss_nis_getpwent_r;
- _nss_nis_getpwnam_r; _nss_nis_getpwuid_r; _nss_nis_getrpcbyname_r;
- _nss_nis_getrpcbynumber_r; _nss_nis_getrpcent_r; _nss_nis_getsecretkey;
- _nss_nis_getservbyname_r; _nss_nis_getservbyport_r; _nss_nis_getservent_r;
- _nss_nis_getspent_r; _nss_nis_getspnam_r; _nss_nis_initgroups;
- _nss_nis_netname2user; _nss_nis_setaliasent; _nss_nis_setetherent;
- _nss_nis_setgrent; _nss_nis_sethostent; _nss_nis_setnetent;
- _nss_nis_setnetgrent; _nss_nis_setprotoent; _nss_nis_setpwent;
- _nss_nis_setrpcent; _nss_nis_setservent; _nss_nis_setspent;
- }
-}
diff --git a/glibc-compat/Versions.def b/glibc-compat/Versions.def
deleted file mode 100644
index 742eda0f2c..0000000000
--- a/glibc-compat/Versions.def
+++ /dev/null
@@ -1,15 +0,0 @@
-libnss1_files {
- GLIBC_2.0
-}
-libnss1_db {
- GLIBC_2.0
-}
-libnss1_dns {
- GLIBC_2.0
-}
-libnss1_nis {
- GLIBC_2.0
-}
-libnss1_compat {
- GLIBC_2.0
-}
diff --git a/glibc-compat/configure b/glibc-compat/configure
deleted file mode 100755
index 53d0dcd67e..0000000000
--- a/glibc-compat/configure
+++ /dev/null
@@ -1,3 +0,0 @@
-# This is only to keep the GNU C library configure mechanism happy.
-# This is a shell script fragment sourced by the main configure script.
-# We have nothing we need to add here.
diff --git a/glibc-compat/include/aliases.h b/glibc-compat/include/aliases.h
deleted file mode 100644
index 3932e52097..0000000000
--- a/glibc-compat/include/aliases.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _ALIASES_H
-#include <inet/aliases.h>
-
-extern int __getaliasent_r (struct aliasent *__restrict __result_buf,
- char *__restrict __buffer, size_t __buflen,
- struct aliasent **__restrict __result);
-extern int __old_getaliasent_r (struct aliasent *__restrict __result_buf,
- char *__restrict __buffer, size_t __buflen,
- struct aliasent **__restrict __result);
-
-extern int __getaliasbyname_r (__const char *__restrict __name,
- struct aliasent *__restrict __result_buf,
- char *__restrict __buffer, size_t __buflen,
- struct aliasent **__restrict __result);
-extern int __old_getaliasbyname_r (__const char *__restrict __name,
- struct aliasent *__restrict __result_buf,
- char *__restrict __buffer, size_t __buflen,
- struct aliasent **__restrict __result);
-
-#endif
diff --git a/glibc-compat/include/grp.h b/glibc-compat/include/grp.h
deleted file mode 100644
index aba77c6e8c..0000000000
--- a/glibc-compat/include/grp.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef _GRP_H
-#include <grp/grp.h>
-
-/* Now define the internal interfaces. */
-extern int __getgrent_r (struct group *__resultbuf, char *buffer,
- size_t __buflen, struct group **__result);
-extern int __old_getgrent_r (struct group *__resultbuf, char *buffer,
- size_t __buflen, struct group **__result);
-extern int __fgetgrent_r (FILE * __stream, struct group *__resultbuf,
- char *buffer, size_t __buflen,
- struct group **__result);
-
-/* Search for an entry with a matching group ID. */
-extern int __getgrgid_r (__gid_t __gid, struct group *__resultbuf,
- char *__buffer, size_t __buflen,
- struct group **__result);
-extern int __old_getgrgid_r (__gid_t __gid, struct group *__resultbuf,
- char *__buffer, size_t __buflen,
- struct group **__result);
-
-/* Search for an entry with a matching group name. */
-extern int __getgrnam_r (__const char *__name, struct group *__resultbuf,
- char *__buffer, size_t __buflen,
- struct group **__result);
-extern int __old_getgrnam_r (__const char *__name, struct group *__resultbuf,
- char *__buffer, size_t __buflen,
- struct group **__result);
-
-#endif
diff --git a/glibc-compat/include/netdb.h b/glibc-compat/include/netdb.h
deleted file mode 100644
index 85ab234177..0000000000
--- a/glibc-compat/include/netdb.h
+++ /dev/null
@@ -1,178 +0,0 @@
-#ifndef _NETDB_H
-#include <glibc-compat/include/rpc/netdb.h>
-#include <resolv/netdb.h>
-
-/* Macros for accessing h_errno from inside libc. */
-# ifdef _LIBC_REENTRANT
-# include <tls.h>
-# if USE___THREAD
-# undef h_errno
-# ifndef NOT_IN_libc
-# define h_errno __libc_h_errno
-# else
-# define h_errno h_errno /* For #ifndef h_errno tests. */
-# endif
-extern __thread int h_errno attribute_tls_model_ie;
-# define __set_h_errno(x) (h_errno = (x))
-# else
-static inline int
-__set_h_errno (int __err)
-{
- return *__h_errno_location () = __err;
-}
-# endif
-# else
-# undef h_errno
-# define __set_h_errno(x) (h_errno = (x))
-extern int h_errno;
-# endif /* _LIBC_REENTRANT */
-
-/* Document internal interfaces. */
-extern int __gethostent_r (struct hostent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct hostent **__restrict __result,
- int *__restrict __h_errnop);
-extern int __old_gethostent_r (struct hostent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct hostent **__restrict __result,
- int *__restrict __h_errnop);
-
-extern int __gethostbyaddr_r (__const void *__restrict __addr,
- socklen_t __len, int __type,
- struct hostent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct hostent **__restrict __result,
- int *__restrict __h_errnop);
-extern int __old_gethostbyaddr_r (__const void *__restrict __addr,
- socklen_t __len, int __type,
- struct hostent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct hostent **__restrict __result,
- int *__restrict __h_errnop);
-
-extern int __gethostbyname_r (__const char *__restrict __name,
- struct hostent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct hostent **__restrict __result,
- int *__restrict __h_errnop);
-extern int __old_gethostbyname_r (__const char *__restrict __name,
- struct hostent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct hostent **__restrict __result,
- int *__restrict __h_errnop);
-
-extern int __gethostbyname2_r (__const char *__restrict __name, int __af,
- struct hostent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct hostent **__restrict __result,
- int *__restrict __h_errnop);
-extern int __old_gethostbyname2_r (__const char *__restrict __name, int __af,
- struct hostent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct hostent **__restrict __result,
- int *__restrict __h_errnop);
-
-extern int __getnetent_r (struct netent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct netent **__restrict __result,
- int *__restrict __h_errnop);
-extern int __old_getnetent_r (struct netent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct netent **__restrict __result,
- int *__restrict __h_errnop);
-
-extern int __getnetbyaddr_r (uint32_t __net, int __type,
- struct netent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct netent **__restrict __result,
- int *__restrict __h_errnop);
-extern int __old_getnetbyaddr_r (uint32_t __net, int __type,
- struct netent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct netent **__restrict __result,
- int *__restrict __h_errnop);
-
-extern int __getnetbyname_r (__const char *__restrict __name,
- struct netent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct netent **__restrict __result,
- int *__restrict __h_errnop);
-extern int __old_getnetbyname_r (__const char *__restrict __name,
- struct netent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct netent **__restrict __result,
- int *__restrict __h_errnop);
-
-extern int __getservent_r (struct servent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct servent **__restrict __result);
-extern int __old_getservent_r (struct servent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct servent **__restrict __result);
-
-extern int __getservbyname_r (__const char *__restrict __name,
- __const char *__restrict __proto,
- struct servent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct servent **__restrict __result);
-extern int __old_getservbyname_r (__const char *__restrict __name,
- __const char *__restrict __proto,
- struct servent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct servent **__restrict __result);
-
-extern int __getservbyport_r (int __port,
- __const char *__restrict __proto,
- struct servent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct servent **__restrict __result);
-extern int __old_getservbyport_r (int __port,
- __const char *__restrict __proto,
- struct servent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct servent **__restrict __result);
-
-extern int __getprotoent_r (struct protoent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct protoent **__restrict __result);
-extern int __old_getprotoent_r (struct protoent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct protoent **__restrict __result);
-
-extern int __getprotobyname_r (__const char *__restrict __name,
- struct protoent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct protoent **__restrict __result);
-extern int __old_getprotobyname_r (__const char *__restrict __name,
- struct protoent *__restrict __result_buf,
- char *__restrict __buf, size_t __buflen,
- struct protoent **__restrict __result);
-
-extern int __getprotobynumber_r (int __proto,
- struct protoent *__restrict __res_buf,
- char *__restrict __buf, size_t __buflen,
- struct protoent **__restrict __result);
-extern int __old_getprotobynumber_r (int __proto,
- struct protoent *__restrict __res_buf,
- char *__restrict __buf, size_t __buflen,
- struct protoent **__restrict __result);
-
-extern int __getnetgrent_r (char **__restrict __hostp,
- char **__restrict __userp,
- char **__restrict __domainp,
- char *__restrict __buffer, size_t __buflen);
-
-extern int ruserpass (const char *host, const char **aname,
- const char **apass);
-
-
-/* The following declarations and definitions have been removed from
- the public header since we don't want people to use them. */
-
-#define AI_V4MAPPED 0x0008 /* IPv4-mapped addresses are acceptable. */
-#define AI_ALL 0x0010 /* Return both IPv4 and IPv6 addresses. */
-#define AI_ADDRCONFIG 0x0020 /* Use configuration of this host to choose
- returned address type. */
-#define AI_DEFAULT (AI_V4MAPPED | AI_ADDRCONFIG)
-
-#endif /* !_NETDB_H */
diff --git a/glibc-compat/include/pwd.h b/glibc-compat/include/pwd.h
deleted file mode 100644
index a0e94e6631..0000000000
--- a/glibc-compat/include/pwd.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _PWD_H
-#include <pwd/pwd.h>
-
-/* Now define the internal interfaces. */
-extern int __getpwent_r (struct passwd *__resultbuf, char *__buffer,
- size_t __buflen, struct passwd **__result);
-extern int __old_getpwent_r (struct passwd *__resultbuf, char *__buffer,
- size_t __buflen, struct passwd **__result);
-extern int __getpwuid_r (__uid_t __uid, struct passwd *__resultbuf,
- char *__buffer, size_t __buflen,
- struct passwd **__result);
-extern int __old_getpwuid_r (__uid_t __uid, struct passwd *__resultbuf,
- char *__buffer, size_t __buflen,
- struct passwd **__result);
-extern int __getpwnam_r (__const char *__name, struct passwd *__resultbuf,
- char *__buffer, size_t __buflen,
- struct passwd **__result);
-extern int __old_getpwnam_r (__const char *__name, struct passwd *__resultbuf,
- char *__buffer, size_t __buflen,
- struct passwd **__result);
-extern int __fgetpwent_r (FILE * __stream, struct passwd *__resultbuf,
- char *__buffer, size_t __buflen,
- struct passwd **__result);
-
-#endif
diff --git a/glibc-compat/include/rpc/netdb.h b/glibc-compat/include/rpc/netdb.h
deleted file mode 100644
index 54a4b70052..0000000000
--- a/glibc-compat/include/rpc/netdb.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _RPC_NETDB_H
-#include <sunrpc/rpc/netdb.h>
-
-extern int __getrpcbyname_r (__const char *__name, struct rpcent *__result_buf,
- char *__buffer, size_t __buflen,
- struct rpcent **__result);
-extern int __old_getrpcbyname_r (__const char *__name,
- struct rpcent *__result_buf,
- char *__buffer, size_t __buflen,
- struct rpcent **__result);
-
-extern int __getrpcbynumber_r (int __number, struct rpcent *__result_buf,
- char *__buffer, size_t __buflen,
- struct rpcent **__result);
-extern int __old_getrpcbynumber_r (int __number, struct rpcent *__result_buf,
- char *__buffer, size_t __buflen,
- struct rpcent **__result);
-
-extern int __getrpcent_r (struct rpcent *__result_buf, char *__buffer,
- size_t __buflen, struct rpcent **__result);
-extern int __old_getrpcent_r (struct rpcent *__result_buf, char *__buffer,
- size_t __buflen, struct rpcent **__result);
-
-#endif
diff --git a/glibc-compat/include/shadow.h b/glibc-compat/include/shadow.h
deleted file mode 100644
index e9429d7369..0000000000
--- a/glibc-compat/include/shadow.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _SHADOW_H
-#include <shadow/shadow.h>
-
-/* Now define the internal interfaces. */
-extern int __getspent_r (struct spwd *__result_buf, char *__buffer,
- size_t __buflen, struct spwd **__result);
-extern int __old_getspent_r (struct spwd *__result_buf, char *__buffer,
- size_t __buflen, struct spwd **__result);
-extern int __getspnam_r (__const char *__name, struct spwd *__result_buf,
- char *__buffer, size_t __buflen,
- struct spwd **__result);
-extern int __old_getspnam_r (__const char *__name, struct spwd *__result_buf,
- char *__buffer, size_t __buflen,
- struct spwd **__result);
-extern int __sgetspent_r (__const char *__string,
- struct spwd *__result_buf, char *__buffer,
- size_t __buflen, struct spwd **__result);
-extern int __fgetspent_r (FILE *__stream, struct spwd *__result_buf,
- char *__buffer, size_t __buflen,
- struct spwd **__result);
-extern int __lckpwdf (void);
-extern int __ulckpwdf (void);
-
-#endif
diff --git a/glibc-compat/nss-nis.h b/glibc-compat/nss-nis.h
deleted file mode 100644
index 13ba62ed9f..0000000000
--- a/glibc-compat/nss-nis.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#ifndef _NIS_NSS_NIS_H
-#define _NIS_NSS_NIS_H 1
-
-#include <rpcsvc/ypclnt.h>
-
-#include "nsswitch.h"
-
-
-/* Convert YP error number to NSS error number. */
-static enum nss_status yperr2nss_tab[] =
-{
- [YPERR_SUCCESS] = NSS_STATUS_SUCCESS,
- [YPERR_BADARGS] = NSS_STATUS_UNAVAIL,
- [YPERR_RPC] = NSS_STATUS_UNAVAIL,
- [YPERR_DOMAIN] = NSS_STATUS_UNAVAIL,
- [YPERR_MAP] = NSS_STATUS_UNAVAIL,
- [YPERR_KEY] = NSS_STATUS_NOTFOUND,
- [YPERR_YPERR] = NSS_STATUS_UNAVAIL,
- [YPERR_RESRC] = NSS_STATUS_TRYAGAIN,
- [YPERR_NOMORE] = NSS_STATUS_NOTFOUND,
- [YPERR_PMAP] = NSS_STATUS_UNAVAIL,
- [YPERR_YPBIND] = NSS_STATUS_UNAVAIL,
- [YPERR_YPSERV] = NSS_STATUS_UNAVAIL,
- [YPERR_NODOM] = NSS_STATUS_UNAVAIL,
- [YPERR_BADDB] = NSS_STATUS_UNAVAIL,
- [YPERR_VERS] = NSS_STATUS_UNAVAIL,
- [YPERR_ACCESS] = NSS_STATUS_UNAVAIL,
- [YPERR_BUSY] = NSS_STATUS_TRYAGAIN
-};
-#define YPERR_COUNT (sizeof (yperr2nss_tab) / sizeof (yperr2nss_tab[0]))
-
-static inline enum nss_status
-yperr2nss (int errval)
-{
- if ((unsigned int) errval > YPERR_COUNT)
- return NSS_STATUS_UNAVAIL;
- return yperr2nss_tab[errval];
-}
-
-#endif /* nis/nss-nis.h */
diff --git a/glibc-compat/nss_compat/compat-grp.c b/glibc-compat/nss_compat/compat-grp.c
deleted file mode 100644
index d0780c4081..0000000000
--- a/glibc-compat/nss_compat/compat-grp.c
+++ /dev/null
@@ -1,769 +0,0 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <nss.h>
-#include <glibc-compat/include/grp.h>
-#include <ctype.h>
-#include <bits/libc-lock.h>
-#include <string.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-#include <nsswitch.h>
-
-/* Get the declaration of the parser function. */
-#define ENTNAME grent
-#define STRUCTURE group
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-/* Structure for remembering -group members ... */
-#define BLACKLIST_INITIAL_SIZE 512
-#define BLACKLIST_INCREMENT 256
-struct blacklist_t
- {
- char *data;
- int current;
- int size;
- };
-
-struct ent_t
- {
- bool_t nis;
- bool_t nis_first;
- char *oldkey;
- int oldkeylen;
- FILE *stream;
- struct blacklist_t blacklist;
-};
-typedef struct ent_t ent_t;
-
-static ent_t ext_ent = {0, 0, NULL, 0, NULL, {NULL, 0, 0}};
-
-/* Protect global state against multiple changers. */
-__libc_lock_define_initialized (static, lock)
-
-/* Prototypes for local functions. */
-static void blacklist_store_name (const char *, ent_t *);
-static int in_blacklist (const char *, int, ent_t *);
-
-static enum nss_status
-internal_setgrent (ent_t *ent)
-{
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- ent->nis = ent->nis_first = 0;
-
- if (ent->oldkey != NULL)
- {
- free (ent->oldkey);
- ent->oldkey = NULL;
- ent->oldkeylen = 0;
- }
-
- if (ent->blacklist.data != NULL)
- {
- ent->blacklist.current = 1;
- ent->blacklist.data[0] = '|';
- ent->blacklist.data[1] = '\0';
- }
- else
- ent->blacklist.current = 0;
-
- if (ent->stream == NULL)
- {
- ent->stream = fopen ("/etc/group", "r");
-
- if (ent->stream == NULL)
- status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
- else
- {
- /* We have to make sure the file is `closed on exec'. */
- int result, flags;
-
- result = flags = fcntl (fileno (ent->stream), F_GETFD, 0);
- if (result >= 0)
- {
- flags |= FD_CLOEXEC;
- result = fcntl (fileno (ent->stream), F_SETFD, flags);
- }
- if (result < 0)
- {
- /* Something went wrong. Close the stream and return a
- failure. */
- fclose (ent->stream);
- ent->stream = NULL;
- status = NSS_STATUS_UNAVAIL;
- }
- }
- }
- else
- rewind (ent->stream);
-
- return status;
-}
-
-
-enum nss_status
-_nss_compat_setgrent (void)
-{
- enum nss_status result;
-
- __libc_lock_lock (lock);
-
- result = internal_setgrent (&ext_ent);
-
- __libc_lock_unlock (lock);
-
- return result;
-}
-
-
-static enum nss_status
-internal_endgrent (ent_t *ent)
-{
- if (ent->stream != NULL)
- {
- fclose (ent->stream);
- ent->stream = NULL;
- }
-
- ent->nis = ent->nis_first = 0;
-
- if (ent->oldkey != NULL)
- {
- free (ent->oldkey);
- ent->oldkey = NULL;
- ent->oldkeylen = 0;
- }
-
- if (ent->blacklist.data != NULL)
- {
- ent->blacklist.current = 1;
- ent->blacklist.data[0] = '|';
- ent->blacklist.data[1] = '\0';
- }
- else
- ent->blacklist.current = 0;
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_compat_endgrent (void)
-{
- enum nss_status result;
-
- __libc_lock_lock (lock);
-
- result = internal_endgrent (&ext_ent);
-
- __libc_lock_unlock (lock);
-
- return result;
-}
-
-static enum nss_status
-getgrent_next_nis (struct group *result, ent_t *ent, char *buffer,
- size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- char *domain;
- char *outkey, *outval;
- int outkeylen, outvallen, parse_res;
- char *p;
-
- if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- {
- ent->nis = 0;
- return NSS_STATUS_NOTFOUND;
- }
-
- do
- {
- char *save_oldkey;
- int save_oldlen;
- bool_t save_nis_first;
-
- if (ent->nis_first)
- {
- if (yp_first (domain, "group.byname", &outkey, &outkeylen,
- &outval, &outvallen) != YPERR_SUCCESS)
- {
- ent->nis = 0;
- return NSS_STATUS_UNAVAIL;
- }
- save_oldkey = ent->oldkey;
- save_oldlen = ent->oldkeylen;
- save_nis_first = TRUE;
- ent->oldkey = outkey;
- ent->oldkeylen = outkeylen;
- ent->nis_first = FALSE;
- }
- else
- {
- if (yp_next (domain, "group.byname", ent->oldkey, ent->oldkeylen,
- &outkey, &outkeylen, &outval, &outvallen)
- != YPERR_SUCCESS)
- {
- ent->nis = 0;
- return NSS_STATUS_NOTFOUND;
- }
-
- save_oldkey = ent->oldkey;
- save_oldlen = ent->oldkeylen;
- save_nis_first = FALSE;
- ent->oldkey = outkey;
- ent->oldkeylen = outkeylen;
- }
-
- /* Copy the found data to our buffer */
- p = strncpy (buffer, outval, buflen);
-
- /* ...and free the data. */
- free (outval);
-
- while (isspace (*p))
- ++p;
-
- if ((parse_res = _nss_files_parse_grent (p, result, data, buflen)) == -1)
- {
- free (ent->oldkey);
- ent->oldkey = save_oldkey;
- ent->oldkeylen = save_oldlen;
- ent->nis_first = save_nis_first;
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- else
- {
- if (!save_nis_first)
- free (save_oldkey);
- }
-
- if (parse_res &&
- in_blacklist (result->gr_name, strlen (result->gr_name), ent))
- parse_res = 0; /* if result->gr_name in blacklist,search next entry */
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-/* This function handle the +group entrys in /etc/group */
-static enum nss_status
-getgrnam_plusgroup (const char *name, struct group *result, char *buffer,
- size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- int parse_res;
- char *domain, *outval, *p;
- int outvallen;
-
- if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- return NSS_STATUS_NOTFOUND;
-
- if (yp_match (domain, "group.byname", name, strlen (name),
- &outval, &outvallen) != YPERR_SUCCESS)
- return NSS_STATUS_NOTFOUND;
- p = strncpy (buffer, outval,
- buflen < (size_t) outvallen ? buflen : (size_t) outvallen);
- free (outval);
- while (isspace (*p))
- p++;
- if ((parse_res = _nss_files_parse_grent (p, result, data, buflen)) == -1)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (parse_res)
- /* We found the entry. */
- return NSS_STATUS_SUCCESS;
- else
- return NSS_STATUS_RETURN;
-}
-
-static enum nss_status
-getgrent_next_file (struct group *result, ent_t *ent,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- while (1)
- {
- fpos_t pos;
- int parse_res = 0;
- char *p;
-
- do
- {
- fgetpos (ent->stream, &pos);
- buffer[buflen - 1] = '\xff';
- p = fgets (buffer, buflen, ent->stream);
- if (p == NULL && feof (ent->stream))
- return NSS_STATUS_NOTFOUND;
- if (p == NULL || buffer[buflen - 1] != '\xff')
- {
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Terminate the line for any case. */
- buffer[buflen - 1] = '\0';
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- }
- while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- !(parse_res = _nss_files_parse_grent (p, result, data, buflen)));
-
- if (parse_res == -1)
- {
- /* The parser ran out of space. */
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (result->gr_name[0] != '+' && result->gr_name[0] != '-')
- /* This is a real entry. */
- break;
-
- /* -group */
- if (result->gr_name[0] == '-' && result->gr_name[1] != '\0'
- && result->gr_name[1] != '@')
- {
- blacklist_store_name (&result->gr_name[1], ent);
- continue;
- }
-
- /* +group */
- if (result->gr_name[0] == '+' && result->gr_name[1] != '\0'
- && result->gr_name[1] != '@')
- {
- enum nss_status status;
-
- /* Store the group in the blacklist for the "+" at the end of
- /etc/group */
- blacklist_store_name (&result->gr_name[1], ent);
- status = getgrnam_plusgroup (&result->gr_name[1], result, buffer,
- buflen);
- if (status == NSS_STATUS_SUCCESS) /* We found the entry. */
- break;
- else
- if (status == NSS_STATUS_RETURN /* We couldn't parse the entry */
- || status == NSS_STATUS_NOTFOUND) /* No group in NIS */
- continue;
- else
- {
- if (status == NSS_STATUS_TRYAGAIN)
- /* The parser ran out of space. */
- fsetpos (ent->stream, &pos);
- return status;
- }
- }
-
- /* +:... */
- if (result->gr_name[0] == '+' && result->gr_name[1] == '\0')
- {
- ent->nis = TRUE;
- ent->nis_first = TRUE;
-
- return getgrent_next_nis (result, ent, buffer, buflen);
- }
- }
-
- return NSS_STATUS_SUCCESS;
-}
-
-
-static enum nss_status
-internal_getgrent_r (struct group *gr, ent_t *ent, char *buffer,
- size_t buflen)
-{
- if (ent->nis)
- {
- return getgrent_next_nis (gr, ent, buffer, buflen);
- }
- else
- return getgrent_next_file (gr, ent, buffer, buflen);
-}
-
-enum nss_status
-_nss_compat_getgrent_r (struct group *grp, char *buffer, size_t buflen)
-{
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- __libc_lock_lock (lock);
-
- /* Be prepared that the setgrent function was not called before. */
- if (ext_ent.stream == NULL)
- status = internal_setgrent (&ext_ent);
-
- if (status == NSS_STATUS_SUCCESS)
- status = internal_getgrent_r (grp, &ext_ent, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-/* Searches in /etc/group and the NIS/NIS+ map for a special group */
-static enum nss_status
-internal_getgrnam_r (const char *name, struct group *result, ent_t *ent,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- while (1)
- {
- fpos_t pos;
- int parse_res = 0;
- char *p;
-
- do
- {
- fgetpos (ent->stream, &pos);
- buffer[buflen - 1] = '\xff';
- p = fgets (buffer, buflen, ent->stream);
- if (p == NULL && feof (ent->stream))
- return NSS_STATUS_NOTFOUND;
- if (p == NULL || buffer[buflen - 1] != '\xff')
- {
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Terminate the line for any case. */
- buffer[buflen - 1] = '\0';
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- }
- while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- !(parse_res = _nss_files_parse_grent (p, result, data, buflen)));
-
- if (parse_res == -1)
- {
- /* The parser ran out of space. */
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* This is a real entry. */
- if (result->gr_name[0] != '+' && result->gr_name[0] != '-')
- {
- if (strcmp (result->gr_name, name) == 0)
- return NSS_STATUS_SUCCESS;
- else
- continue;
- }
-
- /* -group */
- if (result->gr_name[0] == '-' && result->gr_name[1] != '\0')
- {
- if (strcmp (&result->gr_name[1], name) == 0)
- return NSS_STATUS_NOTFOUND;
- else
- continue;
- }
-
- /* +group */
- if (result->gr_name[0] == '+' && result->gr_name[1] != '\0')
- {
- if (strcmp (name, &result->gr_name[1]) == 0)
- {
- enum nss_status status;
-
- status = getgrnam_plusgroup (name, result, buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- /* We couldn't parse the entry */
- continue;
- else
- return status;
- }
- }
- /* +:... */
- if (result->gr_name[0] == '+' && result->gr_name[1] == '\0')
- {
- enum nss_status status;
-
- status = getgrnam_plusgroup (name, result, buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- /* We couldn't parse the entry */
- continue;
- else
- return status;
- }
- }
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_compat_getgrnam_r (const char *name, struct group *grp,
- char *buffer, size_t buflen)
-{
- ent_t ent = {0, 0, NULL, 0, NULL, {NULL, 0, 0}};
- enum nss_status status;
-
- if (name[0] == '-' || name[0] == '+')
- return NSS_STATUS_NOTFOUND;
-
- __libc_lock_lock (lock);
-
- status = internal_setgrent (&ent);
-
- __libc_lock_unlock (lock);
-
- if (status != NSS_STATUS_SUCCESS)
- return status;
-
- status = internal_getgrnam_r (name, grp, &ent, buffer, buflen);
-
- internal_endgrent (&ent);
-
- return status;
-}
-
-/* This function handle the + entry in /etc/group */
-static enum nss_status
-getgrgid_plusgroup (gid_t gid, struct group *result, char *buffer,
- size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- int parse_res;
- char buf[1024];
- char *domain, *outval, *p;
- int outvallen;
-
- if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- return NSS_STATUS_TRYAGAIN;
-
- snprintf (buf, sizeof (buf), "%d", gid);
-
- if (yp_match (domain, "group.bygid", buf, strlen (buf),
- &outval, &outvallen) != YPERR_SUCCESS)
- return NSS_STATUS_TRYAGAIN;
- p = strncpy (buffer, outval,
- buflen < (size_t) outvallen ? buflen : (size_t) outvallen);
- free (outval);
- while (isspace (*p))
- p++;
- if ((parse_res = _nss_files_parse_grent (p, result, data, buflen)) == -1)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (parse_res)
- /* We found the entry. */
- return NSS_STATUS_SUCCESS;
- else
- return NSS_STATUS_RETURN;
-}
-
-/* Searches in /etc/group and the NIS/NIS+ map for a special group id */
-static enum nss_status
-internal_getgrgid_r (gid_t gid, struct group *result, ent_t *ent,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- while (1)
- {
- fpos_t pos;
- int parse_res = 0;
- char *p;
-
- do
- {
- fgetpos (ent->stream, &pos);
- buffer[buflen - 1] = '\xff';
- p = fgets (buffer, buflen, ent->stream);
- if (p == NULL && feof (ent->stream))
- return NSS_STATUS_NOTFOUND;
- if (p == NULL || buffer[buflen - 1] != '\xff')
- {
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Terminate the line for any case. */
- buffer[buflen - 1] = '\0';
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- }
- while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- !(parse_res = _nss_files_parse_grent (p, result, data, buflen)));
-
- if (parse_res == -1)
- {
- /* The parser ran out of space. */
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* This is a real entry. */
- if (result->gr_name[0] != '+' && result->gr_name[0] != '-')
- {
- if (result->gr_gid == gid)
- return NSS_STATUS_SUCCESS;
- else
- continue;
- }
-
- /* -group */
- if (result->gr_name[0] == '-' && result->gr_name[1] != '\0')
- {
- blacklist_store_name (&result->gr_name[1], ent);
- continue;
- }
-
- /* +group */
- if (result->gr_name[0] == '+' && result->gr_name[1] != '\0')
- {
- enum nss_status status;
-
- /* Store the group in the blacklist for the "+" at the end of
- /etc/group */
- blacklist_store_name (&result->gr_name[1], ent);
- status = getgrnam_plusgroup (&result->gr_name[1], result, buffer,
- buflen);
- if (status == NSS_STATUS_SUCCESS && result->gr_gid == gid)
- break;
- else
- continue;
- }
- /* +:... */
- if (result->gr_name[0] == '+' && result->gr_name[1] == '\0')
- {
- enum nss_status status;
-
- status = getgrgid_plusgroup (gid, result, buffer, buflen);
- if (status == NSS_STATUS_RETURN) /* We couldn't parse the entry */
- return NSS_STATUS_NOTFOUND;
- else
- return status;
- }
- }
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_compat_getgrgid_r (gid_t gid, struct group *grp,
- char *buffer, size_t buflen)
-{
- ent_t ent = {0, 0, NULL, 0, NULL, {NULL, 0, 0}};
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_setgrent (&ent);
-
- __libc_lock_unlock (lock);
-
- if (status != NSS_STATUS_SUCCESS)
- return status;
-
- status = internal_getgrgid_r (gid, grp, &ent, buffer, buflen);
-
- internal_endgrent (&ent);
-
- return status;
-}
-
-
-/* Support routines for remembering -@netgroup and -user entries.
- The names are stored in a single string with `|' as separator. */
-static void
-blacklist_store_name (const char *name, ent_t *ent)
-{
- int namelen = strlen (name);
- char *tmp;
-
- /* first call, setup cache */
- if (ent->blacklist.size == 0)
- {
- ent->blacklist.size = MAX (BLACKLIST_INITIAL_SIZE, 2 * namelen);
- ent->blacklist.data = malloc (ent->blacklist.size);
- if (ent->blacklist.data == NULL)
- return;
- ent->blacklist.data[0] = '|';
- ent->blacklist.data[1] = '\0';
- ent->blacklist.current = 1;
- }
- else
- {
- if (in_blacklist (name, namelen, ent))
- return; /* no duplicates */
-
- if (ent->blacklist.current + namelen + 1 >= ent->blacklist.size)
- {
- ent->blacklist.size += MAX (BLACKLIST_INCREMENT, 2 * namelen);
- tmp = realloc (ent->blacklist.data, ent->blacklist.size);
- if (tmp == NULL)
- {
- free (ent->blacklist.data);
- ent->blacklist.size = 0;
- return;
- }
- ent->blacklist.data = tmp;
- }
- }
-
- tmp = stpcpy (ent->blacklist.data + ent->blacklist.current, name);
- *tmp++ = '|';
- *tmp = '\0';
- ent->blacklist.current += namelen + 1;
-
- return;
-}
-
-/* returns TRUE if ent->blacklist contains name, else FALSE */
-static bool_t
-in_blacklist (const char *name, int namelen, ent_t *ent)
-{
- char buf[namelen + 3];
- char *cp;
-
- if (ent->blacklist.data == NULL)
- return FALSE;
-
- buf[0] = '|';
- cp = stpcpy (&buf[1], name);
- *cp++= '|';
- *cp = '\0';
- return strstr (ent->blacklist.data, buf) != NULL;
-}
diff --git a/glibc-compat/nss_compat/compat-pwd.c b/glibc-compat/nss_compat/compat-pwd.c
deleted file mode 100644
index 5857bf9f78..0000000000
--- a/glibc-compat/nss_compat/compat-pwd.c
+++ /dev/null
@@ -1,1199 +0,0 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <glibc-compat/include/pwd.h>
-#include <errno.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <glibc-compat/include/netdb.h>
-#include <string.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-#include <nsswitch.h>
-
-#include "netgroup.h"
-
-/* Get the declaration of the parser function. */
-#define ENTNAME pwent
-#define STRUCTURE passwd
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-/* Structure for remembering -@netgroup and -user members ... */
-#define BLACKLIST_INITIAL_SIZE 512
-#define BLACKLIST_INCREMENT 256
-struct blacklist_t
- {
- char *data;
- int current;
- int size;
- };
-
-struct ent_t
- {
- bool_t netgroup;
- bool_t nis;
- bool_t first;
- char *oldkey;
- int oldkeylen;
- FILE *stream;
- struct blacklist_t blacklist;
- struct passwd pwd;
- struct __netgrent netgrdata;
- };
-typedef struct ent_t ent_t;
-
-static ent_t ext_ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0},
- {NULL, NULL, 0, 0, NULL, NULL, NULL}};
-
-/* Protect global state against multiple changers. */
-__libc_lock_define_initialized (static, lock)
-
-/* Prototypes for local functions. */
-static void blacklist_store_name (const char *, ent_t *);
-static int in_blacklist (const char *, int, ent_t *);
-
-static void
-give_pwd_free (struct passwd *pwd)
-{
- if (pwd->pw_name != NULL)
- free (pwd->pw_name);
- if (pwd->pw_passwd != NULL)
- free (pwd->pw_passwd);
- if (pwd->pw_gecos != NULL)
- free (pwd->pw_gecos);
- if (pwd->pw_dir != NULL)
- free (pwd->pw_dir);
- if (pwd->pw_shell != NULL)
- free (pwd->pw_shell);
-
- memset (pwd, '\0', sizeof (struct passwd));
-}
-
-static size_t
-pwd_need_buflen (struct passwd *pwd)
-{
- size_t len = 0;
-
- if (pwd->pw_passwd != NULL)
- len += strlen (pwd->pw_passwd) + 1;
-
- if (pwd->pw_gecos != NULL)
- len += strlen (pwd->pw_gecos) + 1;
-
- if (pwd->pw_dir != NULL)
- len += strlen (pwd->pw_dir) + 1;
-
- if (pwd->pw_shell != NULL)
- len += strlen (pwd->pw_shell) + 1;
-
- return len;
-}
-
-static void
-copy_pwd_changes (struct passwd *dest, struct passwd *src,
- char *buffer, size_t buflen)
-{
- if (src->pw_passwd != NULL && strlen (src->pw_passwd))
- {
- if (buffer == NULL)
- dest->pw_passwd = strdup (src->pw_passwd);
- else if (dest->pw_passwd &&
- strlen (dest->pw_passwd) >= strlen (src->pw_passwd))
- strcpy (dest->pw_passwd, src->pw_passwd);
- else
- {
- dest->pw_passwd = buffer;
- strcpy (dest->pw_passwd, src->pw_passwd);
- buffer += strlen (dest->pw_passwd) + 1;
- buflen = buflen - (strlen (dest->pw_passwd) + 1);
- }
- }
-
- if (src->pw_gecos != NULL && strlen (src->pw_gecos))
- {
- if (buffer == NULL)
- dest->pw_gecos = strdup (src->pw_gecos);
- else if (dest->pw_gecos &&
- strlen (dest->pw_gecos) >= strlen (src->pw_gecos))
- strcpy (dest->pw_gecos, src->pw_gecos);
- else
- {
- dest->pw_gecos = buffer;
- strcpy (dest->pw_gecos, src->pw_gecos);
- buffer += strlen (dest->pw_gecos) + 1;
- buflen = buflen - (strlen (dest->pw_gecos) + 1);
- }
- }
- if (src->pw_dir != NULL && strlen (src->pw_dir))
- {
- if (buffer == NULL)
- dest->pw_dir = strdup (src->pw_dir);
- else if (dest->pw_dir &&
- strlen (dest->pw_dir) >= strlen (src->pw_dir))
- strcpy (dest->pw_dir, src->pw_dir);
- else
- {
- dest->pw_dir = buffer;
- strcpy (dest->pw_dir, src->pw_dir);
- buffer += strlen (dest->pw_dir) + 1;
- buflen = buflen - (strlen (dest->pw_dir) + 1);
- }
- }
-
- if (src->pw_shell != NULL && strlen (src->pw_shell))
- {
- if (buffer == NULL)
- dest->pw_shell = strdup (src->pw_shell);
- else if (dest->pw_shell &&
- strlen (dest->pw_shell) >= strlen (src->pw_shell))
- strcpy (dest->pw_shell, src->pw_shell);
- else
- {
- dest->pw_shell = buffer;
- strcpy (dest->pw_shell, src->pw_shell);
- buffer += strlen (dest->pw_shell) + 1;
- buflen = buflen - (strlen (dest->pw_shell) + 1);
- }
- }
-}
-
-static enum nss_status
-internal_setpwent (ent_t *ent)
-{
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- ent->nis = ent->first = ent->netgroup = 0;
-
- /* If something was left over free it. */
- if (ent->netgroup)
- __internal_endnetgrent (&ent->netgrdata);
-
- if (ent->oldkey != NULL)
- {
- free (ent->oldkey);
- ent->oldkey = NULL;
- ent->oldkeylen = 0;
- }
-
- if (ent->blacklist.data != NULL)
- {
- ent->blacklist.current = 1;
- ent->blacklist.data[0] = '|';
- ent->blacklist.data[1] = '\0';
- }
- else
- ent->blacklist.current = 0;
-
- if (ent->stream == NULL)
- {
- ent->stream = fopen ("/etc/passwd", "r");
-
- if (ent->stream == NULL)
- status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
- else
- {
- /* We have to make sure the file is `closed on exec'. */
- int result, flags;
-
- result = flags = fcntl (fileno (ent->stream), F_GETFD, 0);
- if (result >= 0)
- {
- flags |= FD_CLOEXEC;
- result = fcntl (fileno (ent->stream), F_SETFD, flags);
- }
- if (result < 0)
- {
- /* Something went wrong. Close the stream and return a
- failure. */
- fclose (ent->stream);
- ent->stream = NULL;
- status = NSS_STATUS_UNAVAIL;
- }
- }
- }
- else
- rewind (ent->stream);
-
- give_pwd_free (&ent->pwd);
-
- return status;
-}
-
-
-enum nss_status
-_nss_compat_setpwent (void)
-{
- enum nss_status result;
-
- __libc_lock_lock (lock);
-
- result = internal_setpwent (&ext_ent);
-
- __libc_lock_unlock (lock);
-
- return result;
-}
-
-
-static enum nss_status
-internal_endpwent (ent_t *ent)
-{
- if (ent->stream != NULL)
- {
- fclose (ent->stream);
- ent->stream = NULL;
- }
-
- if (ent->netgroup)
- __internal_endnetgrent (&ent->netgrdata);
-
- ent->nis = ent->first = ent->netgroup = 0;
-
- if (ent->oldkey != NULL)
- {
- free (ent->oldkey);
- ent->oldkey = NULL;
- ent->oldkeylen = 0;
- }
-
- if (ent->blacklist.data != NULL)
- {
- ent->blacklist.current = 1;
- ent->blacklist.data[0] = '|';
- ent->blacklist.data[1] = '\0';
- }
- else
- ent->blacklist.current = 0;
-
- give_pwd_free (&ent->pwd);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_compat_endpwent (void)
-{
- enum nss_status result;
-
- __libc_lock_lock (lock);
-
- result = internal_endpwent (&ext_ent);
-
- __libc_lock_unlock (lock);
-
- return result;
-}
-
-static enum nss_status
-getpwent_next_nis_netgr (const char *name, struct passwd *result, ent_t *ent,
- char *group, char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- char *ypdomain, *host, *user, *domain, *outval, *p, *p2;
- int status, outvallen;
- size_t p2len;
-
- if (yp_get_default_domain (&ypdomain) != YPERR_SUCCESS)
- {
- ent->netgroup = 0;
- ent->first = 0;
- give_pwd_free (&ent->pwd);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (ent->first == TRUE)
- {
- memset (&ent->netgrdata, 0, sizeof (struct __netgrent));
- __internal_setnetgrent (group, &ent->netgrdata);
- ent->first = FALSE;
- }
-
- while (1)
- {
- char *saved_cursor;
- int parse_res;
-
- saved_cursor = ent->netgrdata.cursor;
- status = __internal_getnetgrent_r (&host, &user, &domain,
- &ent->netgrdata, buffer, buflen,
- &errno);
- if (status != 1)
- {
- __internal_endnetgrent (&ent->netgrdata);
- ent->netgroup = 0;
- give_pwd_free (&ent->pwd);
- return NSS_STATUS_RETURN;
- }
-
- if (user == NULL || user[0] == '-')
- continue;
-
- if (domain != NULL && strcmp (ypdomain, domain) != 0)
- continue;
-
- /* If name != NULL, we are called from getpwnam */
- if (name != NULL)
- if (strcmp (user, name) != 0)
- continue;
-
- if (yp_match (ypdomain, "passwd.byname", user,
- strlen (user), &outval, &outvallen)
- != YPERR_SUCCESS)
- continue;
-
- p2len = pwd_need_buflen (&ent->pwd);
- if (p2len > buflen)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- p2 = buffer + (buflen - p2len);
- buflen -= p2len;
- p = strncpy (buffer, outval, buflen);
- while (isspace (*p))
- p++;
- free (outval);
- if ((parse_res = _nss_files_parse_pwent (p, result, data, buflen)) == -1)
- {
- ent->netgrdata.cursor = saved_cursor;
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (parse_res)
- {
- /* Store the User in the blacklist for the "+" at the end of
- /etc/passwd */
- blacklist_store_name (result->pw_name, ent);
- copy_pwd_changes (result, &ent->pwd, p2, p2len);
- break;
- }
- }
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-getpwent_next_nis (struct passwd *result, ent_t *ent, char *buffer,
- size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- char *domain, *outkey, *outval, *p, *p2;
- int outkeylen, outvallen, parse_res;
- size_t p2len;
-
- if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- {
- ent->nis = 0;
- give_pwd_free (&ent->pwd);
- return NSS_STATUS_UNAVAIL;
- }
-
- p2len = pwd_need_buflen (&ent->pwd);
- if (p2len > buflen)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- p2 = buffer + (buflen - p2len);
- buflen -= p2len;
- do
- {
- bool_t saved_first;
- char *saved_oldkey;
- int saved_oldlen;
-
- if (ent->first)
- {
- if (yp_first (domain, "passwd.byname", &outkey, &outkeylen,
- &outval, &outvallen) != YPERR_SUCCESS)
- {
- ent->nis = 0;
- give_pwd_free (&ent->pwd);
- return NSS_STATUS_UNAVAIL;
- }
-
- saved_first = TRUE;
- saved_oldkey = ent->oldkey;
- saved_oldlen = ent->oldkeylen;
- ent->oldkey = outkey;
- ent->oldkeylen = outkeylen;
- ent->first = FALSE;
- }
- else
- {
- if (yp_next (domain, "passwd.byname", ent->oldkey, ent->oldkeylen,
- &outkey, &outkeylen, &outval, &outvallen)
- != YPERR_SUCCESS)
- {
- ent->nis = 0;
- give_pwd_free (&ent->pwd);
- return NSS_STATUS_NOTFOUND;
- }
-
- saved_first = FALSE;
- saved_oldkey = ent->oldkey;
- saved_oldlen = ent->oldkeylen;
- ent->oldkey = outkey;
- ent->oldkeylen = outkeylen;
- }
-
- /* Copy the found data to our buffer */
- p = strncpy (buffer, outval, buflen);
-
- /* ...and free the data. */
- free (outval);
-
- while (isspace (*p))
- ++p;
- if ((parse_res = _nss_files_parse_pwent (p, result, data, buflen)) == -1)
- {
- free (ent->oldkey);
- ent->oldkey = saved_oldkey;
- ent->oldkeylen = saved_oldlen;
- ent->first = saved_first;
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- else
- {
- if (!saved_first)
- free (saved_oldkey);
- }
- if (parse_res &&
- in_blacklist (result->pw_name, strlen (result->pw_name), ent))
- parse_res = 0;
- }
- while (!parse_res);
-
- copy_pwd_changes (result, &ent->pwd, p2, p2len);
-
- return NSS_STATUS_SUCCESS;
-}
-
-/* This function handle the +user entrys in /etc/passwd */
-static enum nss_status
-getpwnam_plususer (const char *name, struct passwd *result, char *buffer,
- size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- struct passwd pwd;
- int parse_res;
- char *p;
- size_t plen;
- char *domain, *outval, *ptr;
- int outvallen;
-
- memset (&pwd, '\0', sizeof (struct passwd));
-
- copy_pwd_changes (&pwd, result, NULL, 0);
-
- plen = pwd_need_buflen (&pwd);
- if (plen > buflen)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- p = buffer + (buflen - plen);
- buflen -= plen;
-
-
- if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- return NSS_STATUS_NOTFOUND;
-
- if (yp_match (domain, "passwd.byname", name, strlen (name),
- &outval, &outvallen) != YPERR_SUCCESS)
- return NSS_STATUS_NOTFOUND;
- ptr = strncpy (buffer, outval, buflen < (size_t) outvallen ?
- buflen : (size_t) outvallen);
- buffer[buflen < (size_t) outvallen ? buflen : (size_t) outvallen] = '\0';
- free (outval);
- while (isspace (*ptr))
- ptr++;
- if ((parse_res = _nss_files_parse_pwent (ptr, result, data, buflen))
- == -1)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (parse_res > 0)
- {
- copy_pwd_changes (result, &pwd, p, plen);
- give_pwd_free (&pwd);
- /* We found the entry. */
- return NSS_STATUS_SUCCESS;
- }
- else
- {
- /* Give buffer the old len back */
- buflen += plen;
- give_pwd_free (&pwd);
- }
- return NSS_STATUS_RETURN;
-}
-
-/* get the next user from NIS+ (+ entry) */
-static enum nss_status
-getpwent_next_file (struct passwd *result, ent_t *ent,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- while (1)
- {
- fpos_t pos;
- char *p;
- int parse_res;
-
- do
- {
- fgetpos (ent->stream, &pos);
- buffer[buflen - 1] = '\xff';
- p = fgets (buffer, buflen, ent->stream);
- if (p == NULL && feof (ent->stream))
- return NSS_STATUS_NOTFOUND;
- if (p == NULL || buffer[buflen - 1] != '\xff')
- {
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Terminate the line for any case. */
- buffer[buflen - 1] = '\0';
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- }
- while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- !(parse_res = _nss_files_parse_pwent (p, result, data, buflen)));
-
- if (parse_res == -1)
- {
- /* The parser ran out of space. */
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (result->pw_name[0] != '+' && result->pw_name[0] != '-')
- /* This is a real entry. */
- break;
-
- /* -@netgroup */
- if (result->pw_name[0] == '-' && result->pw_name[1] == '@'
- && result->pw_name[2] != '\0')
- {
- char buf2[1024];
- char *user, *host, *domain;
- struct __netgrent netgrdata;
-
- bzero (&netgrdata, sizeof (struct __netgrent));
- __internal_setnetgrent (&result->pw_name[2], &netgrdata);
- while (__internal_getnetgrent_r (&host, &user, &domain,
- &netgrdata, buf2, sizeof (buf2),
- &errno))
- {
- if (user != NULL && user[0] != '-')
- blacklist_store_name (user, ent);
- }
- __internal_endnetgrent (&netgrdata);
- continue;
- }
-
- /* +@netgroup */
- if (result->pw_name[0] == '+' && result->pw_name[1] == '@'
- && result->pw_name[2] != '\0')
- {
- int status;
-
- ent->netgroup = TRUE;
- ent->first = TRUE;
- copy_pwd_changes (&ent->pwd, result, NULL, 0);
-
- status = getpwent_next_nis_netgr (NULL, result, ent,
- &result->pw_name[2],
- buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- continue;
- else
- return status;
- }
-
- /* -user */
- if (result->pw_name[0] == '-' && result->pw_name[1] != '\0'
- && result->pw_name[1] != '@')
- {
- blacklist_store_name (&result->pw_name[1], ent);
- continue;
- }
-
- /* +user */
- if (result->pw_name[0] == '+' && result->pw_name[1] != '\0'
- && result->pw_name[1] != '@')
- {
- enum nss_status status;
-
- /* Store the User in the blacklist for the "+" at the end of
- /etc/passwd */
- blacklist_store_name (&result->pw_name[1], ent);
- status = getpwnam_plususer (&result->pw_name[1], result, buffer,
- buflen);
- if (status == NSS_STATUS_SUCCESS) /* We found the entry. */
- break;
- else
- if (status == NSS_STATUS_RETURN) /* We couldn't parse the entry */
- continue;
- else
- return status;
- }
-
- /* +:... */
- if (result->pw_name[0] == '+' && result->pw_name[1] == '\0')
- {
- ent->nis = TRUE;
- ent->first = TRUE;
- copy_pwd_changes (&ent->pwd, result, NULL, 0);
-
- return getpwent_next_nis (result, ent, buffer, buflen);
- }
- }
-
- return NSS_STATUS_SUCCESS;
-}
-
-
-/* get the next user from NIS (+ entry) */
-static enum nss_status
-internal_getpwent_r (struct passwd *pw, ent_t *ent, char *buffer,
- size_t buflen)
-{
- if (ent->netgroup)
- {
- int status;
-
- /* We are searching members in a netgroup */
- /* Since this is not the first call, we don't need the group name */
- status = getpwent_next_nis_netgr (NULL, pw, ent, NULL, buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- return getpwent_next_file (pw, ent, buffer, buflen);
- else
- return status;
- }
- else
- if (ent->nis)
- {
- return getpwent_next_nis (pw, ent, buffer, buflen);
- }
- else
- return getpwent_next_file (pw, ent, buffer, buflen);
-}
-
-enum nss_status
-_nss_compat_getpwent_r (struct passwd *pwd, char *buffer, size_t buflen)
-{
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- __libc_lock_lock (lock);
-
- /* Be prepared that the setpwent function was not called before. */
- if (ext_ent.stream == NULL)
- status = internal_setpwent (&ext_ent);
-
- if (status == NSS_STATUS_SUCCESS)
- status = internal_getpwent_r (pwd, &ext_ent, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-/* Searches in /etc/passwd and the NIS/NIS+ map for a special user */
-static enum nss_status
-internal_getpwnam_r (const char *name, struct passwd *result, ent_t *ent,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
-
- while (1)
- {
- fpos_t pos;
- char *p;
- int parse_res;
-
- do
- {
- fgetpos (ent->stream, &pos);
- buffer[buflen - 1] = '\xff';
- p = fgets (buffer, buflen, ent->stream);
- if (p == NULL && feof (ent->stream))
- return NSS_STATUS_NOTFOUND;
- if (p == NULL || buffer[buflen - 1] != '\xff')
- {
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Terminate the line for any case. */
- buffer[buflen - 1] = '\0';
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- }
- while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- !(parse_res = _nss_files_parse_pwent (p, result, data, buflen)));
-
- if (parse_res == -1)
- {
- /* The parser ran out of space. */
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* This is a real entry. */
- if (result->pw_name[0] != '+' && result->pw_name[0] != '-')
- {
- if (strcmp (result->pw_name, name) == 0)
- return NSS_STATUS_SUCCESS;
- else
- continue;
- }
-
- /* -@netgroup */
- if (result->pw_name[0] == '-' && result->pw_name[1] == '@'
- && result->pw_name[2] != '\0')
- {
- char buf2[1024];
- char *user, *host, *domain;
- struct __netgrent netgrdata;
-
- bzero (&netgrdata, sizeof (struct __netgrent));
- __internal_setnetgrent (&result->pw_name[2], &netgrdata);
- while (__internal_getnetgrent_r (&host, &user, &domain,
- &netgrdata, buf2, sizeof (buf2),
- &errno))
- {
- if (user != NULL && user[0] != '-')
- if (strcmp (user, name) == 0)
- return NSS_STATUS_NOTFOUND;
- }
- __internal_endnetgrent (&netgrdata);
- continue;
- }
-
- /* +@netgroup */
- if (result->pw_name[0] == '+' && result->pw_name[1] == '@'
- && result->pw_name[2] != '\0')
- {
- char buf[strlen (result->pw_name)];
- int status;
-
- strcpy (buf, &result->pw_name[2]);
- ent->netgroup = TRUE;
- ent->first = TRUE;
- copy_pwd_changes (&ent->pwd, result, NULL, 0);
-
- do
- {
- status = getpwent_next_nis_netgr (name, result, ent, buf,
- buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- continue;
-
- if (status == NSS_STATUS_SUCCESS &&
- strcmp (result->pw_name, name) == 0)
- return NSS_STATUS_SUCCESS;
- } while (status == NSS_STATUS_SUCCESS);
- continue;
- }
-
- /* -user */
- if (result->pw_name[0] == '-' && result->pw_name[1] != '\0'
- && result->pw_name[1] != '@')
- {
- if (strcmp (&result->pw_name[1], name) == 0)
- return NSS_STATUS_NOTFOUND;
- else
- continue;
- }
-
- /* +user */
- if (result->pw_name[0] == '+' && result->pw_name[1] != '\0'
- && result->pw_name[1] != '@')
- {
- if (strcmp (name, &result->pw_name[1]) == 0)
- {
- enum nss_status status;
-
- status = getpwnam_plususer (name, result, buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- /* We couldn't parse the entry */
- return NSS_STATUS_NOTFOUND;
- else
- return status;
- }
- }
-
- /* +:... */
- if (result->pw_name[0] == '+' && result->pw_name[1] == '\0')
- {
- enum nss_status status;
-
- status = getpwnam_plususer (name, result, buffer, buflen);
- if (status == NSS_STATUS_SUCCESS) /* We found the entry. */
- break;
- else
- if (status == NSS_STATUS_RETURN) /* We couldn't parse the entry */
- return NSS_STATUS_NOTFOUND;
- else
- return status;
- }
- }
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_compat_getpwnam_r (const char *name, struct passwd *pwd,
- char *buffer, size_t buflen)
-{
- ent_t ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0},
- {NULL, NULL, 0, 0, NULL, NULL, NULL}};
- enum nss_status status;
-
- if (name[0] == '-' || name[0] == '+')
- return NSS_STATUS_NOTFOUND;
-
- status = internal_setpwent (&ent);
- if (status != NSS_STATUS_SUCCESS)
- return status;
-
- status = internal_getpwnam_r (name, pwd, &ent, buffer, buflen);
-
- internal_endpwent (&ent);
-
- return status;
-}
-
-/* This function handle the + entry in /etc/passwd for getpwuid */
-static enum nss_status
-getpwuid_plususer (uid_t uid, struct passwd *result, char *buffer,
- size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- struct passwd pwd;
- int parse_res;
- char *p;
- size_t plen;
- char buf[1024];
- char *domain, *outval, *ptr;
- int outvallen;
-
- memset (&pwd, '\0', sizeof (struct passwd));
-
- copy_pwd_changes (&pwd, result, NULL, 0);
-
- plen = pwd_need_buflen (&pwd);
- if (plen > buflen)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- p = buffer + (buflen - plen);
- buflen -= plen;
-
-
- if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- return NSS_STATUS_TRYAGAIN;
-
- sprintf (buf, "%d", uid);
- if (yp_match (domain, "passwd.byuid", buf, strlen (buf),
- &outval, &outvallen)
- != YPERR_SUCCESS)
- return NSS_STATUS_TRYAGAIN;
- ptr = strncpy (buffer, outval, buflen < (size_t) outvallen ?
- buflen : (size_t) outvallen);
- buffer[buflen < (size_t) outvallen ? buflen : (size_t) outvallen] = '\0';
- free (outval);
- while (isspace (*ptr))
- ptr++;
- if ((parse_res = _nss_files_parse_pwent (ptr, result, data, buflen))
- == -1)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (parse_res > 0)
- {
- copy_pwd_changes (result, &pwd, p, plen);
- give_pwd_free (&pwd);
- /* We found the entry. */
- return NSS_STATUS_SUCCESS;
- }
- else
- {
- /* Give buffer the old len back */
- buflen += plen;
- give_pwd_free (&pwd);
- }
- return NSS_STATUS_RETURN;
-}
-
-/* Searches in /etc/passwd and the NIS/NIS+ map for a special user id */
-static enum nss_status
-internal_getpwuid_r (uid_t uid, struct passwd *result, ent_t *ent,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
-
- while (1)
- {
- fpos_t pos;
- char *p;
- int parse_res;
-
- do
- {
- fgetpos (ent->stream, &pos);
- buffer[buflen - 1] = '\xff';
- p = fgets (buffer, buflen, ent->stream);
- if (p == NULL && feof (ent->stream))
- return NSS_STATUS_NOTFOUND;
- if (p == NULL || buffer[buflen - 1] != '\xff')
- {
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Terminate the line for any case. */
- buffer[buflen - 1] = '\0';
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- }
- while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- !(parse_res = _nss_files_parse_pwent (p, result, data, buflen)));
-
- if (parse_res == -1)
- {
- /* The parser ran out of space. */
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* This is a real entry. */
- if (result->pw_name[0] != '+' && result->pw_name[0] != '-')
- {
- if (result->pw_uid == uid)
- return NSS_STATUS_SUCCESS;
- else
- continue;
- }
-
- /* -@netgroup */
- if (result->pw_name[0] == '-' && result->pw_name[1] == '@'
- && result->pw_name[2] != '\0')
- {
- char buf2[1024];
- char *user, *host, *domain;
- struct __netgrent netgrdata;
-
- bzero (&netgrdata, sizeof (struct __netgrent));
- __internal_setnetgrent (&result->pw_name[2], &netgrdata);
- while (__internal_getnetgrent_r (&host, &user, &domain,
- &netgrdata, buf2, sizeof (buf2),
- &errno))
- {
- if (user != NULL && user[0] != '-')
- blacklist_store_name (user, ent);
- }
- __internal_endnetgrent (&netgrdata);
- continue;
- }
-
- /* +@netgroup */
- if (result->pw_name[0] == '+' && result->pw_name[1] == '@'
- && result->pw_name[2] != '\0')
- {
- char buf[strlen (result->pw_name)];
- int status;
-
- strcpy (buf, &result->pw_name[2]);
- ent->netgroup = TRUE;
- ent->first = TRUE;
- copy_pwd_changes (&ent->pwd, result, NULL, 0);
-
- do
- {
- status = getpwent_next_nis_netgr (NULL, result, ent, buf,
- buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- continue;
-
- if (status == NSS_STATUS_SUCCESS && uid == result->pw_uid)
- return NSS_STATUS_SUCCESS;
- } while (status == NSS_STATUS_SUCCESS);
- continue;
- }
-
- /* -user */
- if (result->pw_name[0] == '-' && result->pw_name[1] != '\0'
- && result->pw_name[1] != '@')
- {
- blacklist_store_name (&result->pw_name[1], ent);
- continue;
- }
-
- /* +user */
- if (result->pw_name[0] == '+' && result->pw_name[1] != '\0'
- && result->pw_name[1] != '@')
- {
- enum nss_status status;
-
- /* Store the User in the blacklist for the "+" at the end of
- /etc/passwd */
- blacklist_store_name (&result->pw_name[1], ent);
- status = getpwnam_plususer (&result->pw_name[1], result, buffer,
- buflen);
- if (status == NSS_STATUS_SUCCESS && result->pw_uid == uid)
- break;
- else
- continue;
- }
-
- /* +:... */
- if (result->pw_name[0] == '+' && result->pw_name[1] == '\0')
- {
- enum nss_status status;
-
- status = getpwuid_plususer (uid, result, buffer, buflen);
- if (status == NSS_STATUS_SUCCESS) /* We found the entry. */
- break;
- else
- if (status == NSS_STATUS_RETURN) /* We couldn't parse the entry */
- return NSS_STATUS_NOTFOUND;
- else
- {
- if (status == NSS_STATUS_TRYAGAIN)
- /* The parser ran out of space */
- fsetpos (ent->stream, &pos);
- return status;
- }
- }
- }
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_compat_getpwuid_r (uid_t uid, struct passwd *pwd,
- char *buffer, size_t buflen)
-{
- ent_t ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0},
- {NULL, NULL, 0, 0, NULL, NULL, NULL}};
- enum nss_status status;
-
- status = internal_setpwent (&ent);
- if (status != NSS_STATUS_SUCCESS)
- return status;
-
- status = internal_getpwuid_r (uid, pwd, &ent, buffer, buflen);
-
- internal_endpwent (&ent);
-
- return status;
-}
-
-
-/* Support routines for remembering -@netgroup and -user entries.
- The names are stored in a single string with `|' as separator. */
-static void
-blacklist_store_name (const char *name, ent_t *ent)
-{
- int namelen = strlen (name);
- char *tmp;
-
- /* first call, setup cache */
- if (ent->blacklist.size == 0)
- {
- ent->blacklist.size = MAX (BLACKLIST_INITIAL_SIZE, 2 * namelen);
- ent->blacklist.data = malloc (ent->blacklist.size);
- if (ent->blacklist.data == NULL)
- return;
- ent->blacklist.data[0] = '|';
- ent->blacklist.data[1] = '\0';
- ent->blacklist.current = 1;
- }
- else
- {
- if (in_blacklist (name, namelen, ent))
- return; /* no duplicates */
-
- if (ent->blacklist.current + namelen + 1 >= ent->blacklist.size)
- {
- ent->blacklist.size += MAX (BLACKLIST_INCREMENT, 2 * namelen);
- tmp = realloc (ent->blacklist.data, ent->blacklist.size);
- if (tmp == NULL)
- {
- free (ent->blacklist.data);
- ent->blacklist.size = 0;
- return;
- }
- ent->blacklist.data = tmp;
- }
- }
-
- tmp = stpcpy (ent->blacklist.data + ent->blacklist.current, name);
- *tmp++ = '|';
- *tmp = '\0';
- ent->blacklist.current += namelen + 1;
-
- return;
-}
-
-/* returns TRUE if ent->blacklist contains name, else FALSE */
-static bool_t
-in_blacklist (const char *name, int namelen, ent_t *ent)
-{
- char buf[namelen + 3];
- char *cp;
-
- if (ent->blacklist.data == NULL)
- return FALSE;
-
- buf[0] = '|';
- cp = stpcpy (&buf[1], name);
- *cp++= '|';
- *cp = '\0';
- return strstr (ent->blacklist.data, buf) != NULL;
-}
diff --git a/glibc-compat/nss_compat/compat-spwd.c b/glibc-compat/nss_compat/compat-spwd.c
deleted file mode 100644
index 2c33d80688..0000000000
--- a/glibc-compat/nss_compat/compat-spwd.c
+++ /dev/null
@@ -1,915 +0,0 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <errno.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <glibc-compat/include/netdb.h>
-#include <glibc-compat/include/shadow.h>
-#include <string.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-#include <nsswitch.h>
-
-#include "netgroup.h"
-
-/* Get the declaration of the parser function. */
-#define ENTNAME spent
-#define STRUCTURE spwd
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-/* Structure for remembering -@netgroup and -user members ... */
-#define BLACKLIST_INITIAL_SIZE 512
-#define BLACKLIST_INCREMENT 256
-struct blacklist_t
- {
- char *data;
- int current;
- int size;
- };
-
-struct ent_t
- {
- bool_t netgroup;
- bool_t nis;
- bool_t first;
- char *oldkey;
- int oldkeylen;
- FILE *stream;
- struct blacklist_t blacklist;
- struct spwd pwd;
- struct __netgrent netgrdata;
- };
-typedef struct ent_t ent_t;
-
-static ent_t ext_ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0},
- {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}};
-
-/* Protect global state against multiple changers. */
-__libc_lock_define_initialized (static, lock)
-
-/* Prototypes for local functions. */
-static void blacklist_store_name (const char *, ent_t *);
-static int in_blacklist (const char *, int, ent_t *);
-
-static void
-give_spwd_free (struct spwd *pwd)
-{
- if (pwd->sp_namp != NULL)
- free (pwd->sp_namp);
- if (pwd->sp_pwdp != NULL)
- free (pwd->sp_pwdp);
-
- memset (pwd, '\0', sizeof (struct spwd));
-}
-
-static int
-spwd_need_buflen (struct spwd *pwd)
-{
- int len = 0;
-
- if (pwd->sp_pwdp != NULL)
- len += strlen (pwd->sp_pwdp) + 1;
-
- return len;
-}
-
-static void
-copy_spwd_changes (struct spwd *dest, struct spwd *src,
- char *buffer, size_t buflen)
-{
- if (src->sp_pwdp != NULL && strlen (src->sp_pwdp))
- {
- if (buffer == NULL)
- dest->sp_pwdp = strdup (src->sp_pwdp);
- else if (dest->sp_pwdp &&
- strlen (dest->sp_pwdp) >= strlen (src->sp_pwdp))
- strcpy (dest->sp_pwdp, src->sp_pwdp);
- else
- {
- dest->sp_pwdp = buffer;
- strcpy (dest->sp_pwdp, src->sp_pwdp);
- buffer += strlen (dest->sp_pwdp) + 1;
- buflen = buflen - (strlen (dest->sp_pwdp) + 1);
- }
- }
- if (src->sp_lstchg != 0)
- dest->sp_lstchg = src->sp_lstchg;
- if (src->sp_min != 0)
- dest->sp_min = src->sp_min;
- if (src->sp_max != 0)
- dest->sp_max = src->sp_max;
- if (src->sp_warn != 0)
- dest->sp_warn = src->sp_warn;
- if (src->sp_inact != 0)
- dest->sp_inact = src->sp_inact;
- if (src->sp_expire != 0)
- dest->sp_expire = src->sp_expire;
- if (src->sp_flag != 0)
- dest->sp_flag = src->sp_flag;
-}
-
-static enum nss_status
-internal_setspent (ent_t *ent)
-{
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- ent->nis = ent->first = ent->netgroup = 0;
-
- /* If something was left over free it. */
- if (ent->netgroup)
- __internal_endnetgrent (&ent->netgrdata);
-
- if (ent->oldkey != NULL)
- {
- free (ent->oldkey);
- ent->oldkey = NULL;
- ent->oldkeylen = 0;
- }
-
- if (ent->blacklist.data != NULL)
- {
- ent->blacklist.current = 1;
- ent->blacklist.data[0] = '|';
- ent->blacklist.data[1] = '\0';
- }
- else
- ent->blacklist.current = 0;
-
- if (ent->stream == NULL)
- {
- ent->stream = fopen ("/etc/shadow", "r");
-
- if (ent->stream == NULL)
- status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
- else
- {
- /* We have to make sure the file is `closed on exec'. */
- int result, flags;
-
- result = flags = fcntl (fileno (ent->stream), F_GETFD, 0);
- if (result >= 0)
- {
- flags |= FD_CLOEXEC;
- result = fcntl (fileno (ent->stream), F_SETFD, flags);
- }
- if (result < 0)
- {
- /* Something went wrong. Close the stream and return a
- failure. */
- fclose (ent->stream);
- ent->stream = NULL;
- status = NSS_STATUS_UNAVAIL;
- }
- }
- }
- else
- rewind (ent->stream);
-
- give_spwd_free (&ent->pwd);
-
- return status;
-}
-
-
-enum nss_status
-_nss_compat_setspent (void)
-{
- enum nss_status result;
-
- __libc_lock_lock (lock);
-
- result = internal_setspent (&ext_ent);
-
- __libc_lock_unlock (lock);
-
- return result;
-}
-
-
-static enum nss_status
-internal_endspent (ent_t *ent)
-{
- if (ent->stream != NULL)
- {
- fclose (ent->stream);
- ent->stream = NULL;
- }
-
- if (ent->netgroup)
- __internal_endnetgrent (&ent->netgrdata);
-
- ent->nis = ent->first = ent->netgroup = 0;
-
- if (ent->oldkey != NULL)
- {
- free (ent->oldkey);
- ent->oldkey = NULL;
- ent->oldkeylen = 0;
- }
-
- if (ent->blacklist.data != NULL)
- {
- ent->blacklist.current = 1;
- ent->blacklist.data[0] = '|';
- ent->blacklist.data[1] = '\0';
- }
- else
- ent->blacklist.current = 0;
-
- give_spwd_free (&ent->pwd);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_compat_endspent (void)
-{
- enum nss_status result;
-
- __libc_lock_lock (lock);
-
- result = internal_endspent (&ext_ent);
-
- __libc_lock_unlock (lock);
-
- return result;
-}
-
-
-static enum nss_status
-getspent_next_nis_netgr (const char *name, struct spwd *result, ent_t *ent,
- char *group, char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- char *ypdomain, *host, *user, *domain, *outval, *p, *p2;
- int status, outvallen;
- size_t p2len;
-
- if (yp_get_default_domain (&ypdomain) != YPERR_SUCCESS)
- {
- ent->netgroup = 0;
- ent->first = 0;
- give_spwd_free (&ent->pwd);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (ent->first == TRUE)
- {
- bzero (&ent->netgrdata, sizeof (struct __netgrent));
- __internal_setnetgrent (group, &ent->netgrdata);
- ent->first = FALSE;
- }
-
- while (1)
- {
- char *saved_cursor;
- int parse_res;
-
- saved_cursor = ent->netgrdata.cursor;
- status = __internal_getnetgrent_r (&host, &user, &domain,
- &ent->netgrdata, buffer, buflen,
- &errno);
- if (status != 1)
- {
- __internal_endnetgrent (&ent->netgrdata);
- ent->netgroup = 0;
- give_spwd_free (&ent->pwd);
- return NSS_STATUS_RETURN;
- }
-
- if (user == NULL || user[0] == '-')
- continue;
-
- if (domain != NULL && strcmp (ypdomain, domain) != 0)
- continue;
-
- /* If name != NULL, we are called from getpwnam */
- if (name != NULL)
- if (strcmp (user, name) != 0)
- continue;
-
- if (yp_match (ypdomain, "shadow.byname", user,
- strlen (user), &outval, &outvallen)
- != YPERR_SUCCESS)
- continue;
-
- p2len = spwd_need_buflen (&ent->pwd);
- if (p2len > buflen)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- p2 = buffer + (buflen - p2len);
- buflen -= p2len;
- p = strncpy (buffer, outval, buflen);
- while (isspace (*p))
- p++;
- free (outval);
- if ((parse_res = _nss_files_parse_spent (p, result, data, buflen)) == -1)
- {
- ent->netgrdata.cursor = saved_cursor;
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (parse_res)
- {
- /* Store the User in the blacklist for the "+" at the end of
- /etc/passwd */
- blacklist_store_name (result->sp_namp, ent);
- copy_spwd_changes (result, &ent->pwd, p2, p2len);
- break;
- }
- }
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-getspent_next_nis (struct spwd *result, ent_t *ent,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- char *domain, *outkey, *outval, *p, *p2;
- int outkeylen, outvallen, parse_res;
- size_t p2len;
-
- if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- {
- ent->nis = 0;
- give_spwd_free (&ent->pwd);
- return NSS_STATUS_UNAVAIL;
- }
-
- p2len = spwd_need_buflen (&ent->pwd);
- if (p2len > buflen)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- p2 = buffer + (buflen - p2len);
- buflen -= p2len;
- do
- {
- bool_t saved_first;
- char *saved_oldkey;
- int saved_oldlen;
-
- if (ent->first)
- {
- if (yp_first (domain, "shadow.byname", &outkey, &outkeylen,
- &outval, &outvallen) != YPERR_SUCCESS)
- {
- ent->nis = 0;
- give_spwd_free (&ent->pwd);
- return NSS_STATUS_UNAVAIL;
- }
- saved_first = TRUE;
- saved_oldkey = ent->oldkey;
- saved_oldlen = ent->oldkeylen;
- ent->oldkey = outkey;
- ent->oldkeylen = outkeylen;
- ent->first = FALSE;
- }
- else
- {
- if (yp_next (domain, "shadow.byname", ent->oldkey, ent->oldkeylen,
- &outkey, &outkeylen, &outval, &outvallen)
- != YPERR_SUCCESS)
- {
- ent->nis = 0;
- give_spwd_free (&ent->pwd);
- return NSS_STATUS_NOTFOUND;
- }
-
- saved_first = FALSE;
- saved_oldkey = ent->oldkey;
- saved_oldlen = ent->oldkeylen;
- ent->oldkey = outkey;
- ent->oldkeylen = outkeylen;
- }
-
- /* Copy the found data to our buffer */
- p = strncpy (buffer, outval, buflen);
-
- /* ...and free the data. */
- free (outval);
-
- while (isspace (*p))
- ++p;
- if ((parse_res = _nss_files_parse_spent (p, result, data, buflen)) == -1)
- {
- free (ent->oldkey);
- ent->oldkey = saved_oldkey;
- ent->oldkeylen = saved_oldlen;
- ent->first = saved_first;
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- else
- {
- if (!saved_first)
- free (saved_oldkey);
- }
- if (parse_res &&
- in_blacklist (result->sp_namp, strlen (result->sp_namp), ent))
- parse_res = 0;
- }
- while (!parse_res);
-
- copy_spwd_changes (result, &ent->pwd, p2, p2len);
-
- return NSS_STATUS_SUCCESS;
-}
-
-/* This function handle the +user entrys in /etc/shadow */
-static enum nss_status
-getspnam_plususer (const char *name, struct spwd *result, char *buffer,
- size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- struct spwd pwd;
- int parse_res;
- char *p;
- size_t plen;
- char *domain, *outval, *ptr;
- int outvallen;
-
-
- memset (&pwd, '\0', sizeof (struct spwd));
-
- copy_spwd_changes (&pwd, result, NULL, 0);
-
- plen = spwd_need_buflen (&pwd);
- if (plen > buflen)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- p = buffer + (buflen - plen);
- buflen -= plen;
-
- if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- return NSS_STATUS_NOTFOUND;
-
- if (yp_match (domain, "shadow.byname", name, strlen (name),
- &outval, &outvallen) != YPERR_SUCCESS)
- return NSS_STATUS_NOTFOUND;
- ptr = strncpy (buffer, outval, buflen < (size_t) outvallen ?
- buflen : (size_t) outvallen);
- buffer[buflen < (size_t) outvallen ? buflen : (size_t) outvallen] = '\0';
- free (outval);
- while (isspace (*ptr))
- ptr++;
- if ((parse_res = _nss_files_parse_spent (ptr, result, data, buflen)) == -1)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (parse_res)
- {
- copy_spwd_changes (result, &pwd, p, plen);
- give_spwd_free (&pwd);
- /* We found the entry. */
- return NSS_STATUS_SUCCESS;
- }
- else
- {
- /* Give buffer the old len back */
- buflen += plen;
- give_spwd_free (&pwd);
- }
- return NSS_STATUS_RETURN;
-}
-
-static enum nss_status
-getspent_next_file (struct spwd *result, ent_t *ent,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- while (1)
- {
- fpos_t pos;
- int parse_res = 0;
- char *p;
-
- do
- {
- fgetpos (ent->stream, &pos);
- buffer[buflen - 1] = '\xff';
- p = fgets (buffer, buflen, ent->stream);
- if (p == NULL && feof (ent->stream))
- return NSS_STATUS_NOTFOUND;
- if (p == NULL || buffer[buflen - 1] != '\xff')
- {
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Terminate the line for any case. */
- buffer[buflen - 1] = '\0';
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- }
- while (*p == '\0' || *p == '#' /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- || !(parse_res = _nss_files_parse_spent (p, result, data,
- buflen)));
-
- if (parse_res == -1)
- {
- /* The parser ran out of space. */
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (result->sp_namp[0] != '+' && result->sp_namp[0] != '-')
- /* This is a real entry. */
- break;
-
- /* -@netgroup */
- if (result->sp_namp[0] == '-' && result->sp_namp[1] == '@'
- && result->sp_namp[2] != '\0')
- {
- char buf2[1024];
- char *user, *host, *domain;
- struct __netgrent netgrdata;
-
- bzero (&netgrdata, sizeof (struct __netgrent));
- __internal_setnetgrent (&result->sp_namp[2], &netgrdata);
- while (__internal_getnetgrent_r (&host, &user, &domain,
- &netgrdata, buf2, sizeof (buf2),
- &errno))
- {
- if (user != NULL && user[0] != '-')
- blacklist_store_name (user, ent);
- }
- __internal_endnetgrent (&netgrdata);
- continue;
- }
-
- /* +@netgroup */
- if (result->sp_namp[0] == '+' && result->sp_namp[1] == '@'
- && result->sp_namp[2] != '\0')
- {
- int status;
-
- ent->netgroup = TRUE;
- ent->first = TRUE;
- copy_spwd_changes (&ent->pwd, result, NULL, 0);
-
- status = getspent_next_nis_netgr (NULL, result, ent,
- &result->sp_namp[2],
- buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- continue;
- else
- return status;
- }
-
- /* -user */
- if (result->sp_namp[0] == '-' && result->sp_namp[1] != '\0'
- && result->sp_namp[1] != '@')
- {
- blacklist_store_name (&result->sp_namp[1], ent);
- continue;
- }
-
- /* +user */
- if (result->sp_namp[0] == '+' && result->sp_namp[1] != '\0'
- && result->sp_namp[1] != '@')
- {
- enum nss_status status;
-
- /* Store the User in the blacklist for the "+" at the end of
- /etc/passwd */
- blacklist_store_name (&result->sp_namp[1], ent);
- status = getspnam_plususer (&result->sp_namp[1], result, buffer,
- buflen);
- if (status == NSS_STATUS_SUCCESS) /* We found the entry. */
- break;
- else
- if (status == NSS_STATUS_RETURN /* We couldn't parse the entry */
- || status == NSS_STATUS_NOTFOUND) /* entry doesn't exist */
- continue;
- else
- {
- if (status == NSS_STATUS_TRYAGAIN)
- fsetpos (ent->stream, &pos);
- return status;
- }
- }
-
- /* +:... */
- if (result->sp_namp[0] == '+' && result->sp_namp[1] == '\0')
- {
- ent->nis = TRUE;
- ent->first = TRUE;
- copy_spwd_changes (&ent->pwd, result, NULL, 0);
-
- return getspent_next_nis (result, ent, buffer, buflen);
- }
- }
-
- return NSS_STATUS_SUCCESS;
-}
-
-
-static enum nss_status
-internal_getspent_r (struct spwd *pw, ent_t *ent,
- char *buffer, size_t buflen)
-{
- if (ent->netgroup)
- {
- int status;
-
- /* We are searching members in a netgroup */
- /* Since this is not the first call, we don't need the group name */
- status = getspent_next_nis_netgr (NULL, pw, ent, NULL, buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- return getspent_next_file (pw, ent, buffer, buflen);
- else
- return status;
- }
- else
- if (ent->nis)
- {
- return getspent_next_nis (pw, ent, buffer, buflen);
- }
- else
- return getspent_next_file (pw, ent, buffer, buflen);
-}
-
-enum nss_status
-_nss_compat_getspent_r (struct spwd *pwd, char *buffer, size_t buflen)
-{
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- __libc_lock_lock (lock);
-
- if (ext_ent.stream == NULL)
- status = internal_setspent (&ext_ent);
-
- if (status == NSS_STATUS_SUCCESS)
- status = internal_getspent_r (pwd, &ext_ent, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-/* Searches in /etc/passwd and the NIS/NIS+ map for a special user */
-static enum nss_status
-internal_getspnam_r (const char *name, struct spwd *result, ent_t *ent,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
-
- while (1)
- {
- fpos_t pos;
- char *p;
- int parse_res;
-
- do
- {
- fgetpos (ent->stream, &pos);
- buffer[buflen - 1] = '\xff';
- p = fgets (buffer, buflen, ent->stream);
- if (p == NULL && feof (ent->stream))
- return NSS_STATUS_NOTFOUND;
- if (p == NULL || buffer[buflen - 1] != '\xff')
- {
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Terminate the line for any case. */
- buffer[buflen - 1] = '\0';
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- }
- while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- !(parse_res = _nss_files_parse_spent (p, result, data, buflen)));
-
- if (parse_res == -1)
- {
- /* The parser ran out of space. */
- fsetpos (ent->stream, &pos);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* This is a real entry. */
- if (result->sp_namp[0] != '+' && result->sp_namp[0] != '-')
- {
- if (strcmp (result->sp_namp, name) == 0)
- return NSS_STATUS_SUCCESS;
- else
- continue;
- }
-
- /* -@netgroup */
- if (result->sp_namp[0] == '-' && result->sp_namp[1] == '@'
- && result->sp_namp[2] != '\0')
- {
- char buf2[1024];
- char *user, *host, *domain;
- struct __netgrent netgrdata;
-
- bzero (&netgrdata, sizeof (struct __netgrent));
- __internal_setnetgrent (&result->sp_namp[2], &netgrdata);
- while (__internal_getnetgrent_r (&host, &user, &domain,
- &netgrdata, buf2, sizeof (buf2),
- &errno))
- {
- if (user != NULL && user[0] != '-')
- if (strcmp (user, name) == 0)
- return NSS_STATUS_NOTFOUND;
- }
- __internal_endnetgrent (&netgrdata);
- continue;
- }
-
- /* +@netgroup */
- if (result->sp_namp[0] == '+' && result->sp_namp[1] == '@'
- && result->sp_namp[2] != '\0')
- {
- char buf[strlen (result->sp_namp)];
- int status;
-
- strcpy (buf, &result->sp_namp[2]);
- ent->netgroup = TRUE;
- ent->first = TRUE;
- copy_spwd_changes (&ent->pwd, result, NULL, 0);
-
- do
- {
- status = getspent_next_nis_netgr (name, result, ent, buf,
- buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- continue;
-
- if (status == NSS_STATUS_SUCCESS &&
- strcmp (result->sp_namp, name) == 0)
- return NSS_STATUS_SUCCESS;
- } while (status == NSS_STATUS_SUCCESS);
- continue;
- }
-
- /* -user */
- if (result->sp_namp[0] == '-' && result->sp_namp[1] != '\0'
- && result->sp_namp[1] != '@')
- {
- if (strcmp (&result->sp_namp[1], name) == 0)
- return NSS_STATUS_NOTFOUND;
- else
- continue;
- }
-
- /* +user */
- if (result->sp_namp[0] == '+' && result->sp_namp[1] != '\0'
- && result->sp_namp[1] != '@')
- {
- if (strcmp (name, &result->sp_namp[1]) == 0)
- {
- enum nss_status status;
-
- status = getspnam_plususer (name, result, buffer, buflen);
- if (status == NSS_STATUS_RETURN)
- /* We couldn't parse the entry */
- return NSS_STATUS_NOTFOUND;
- else
- return status;
- }
- }
-
- /* +:... */
- if (result->sp_namp[0] == '+' && result->sp_namp[1] == '\0')
- {
- enum nss_status status;
-
- status = getspnam_plususer (name, result, buffer, buflen);
- if (status == NSS_STATUS_RETURN) /* We couldn't parse the entry */
- return NSS_STATUS_NOTFOUND;
- else
- return status;
- }
- }
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_compat_getspnam_r (const char *name, struct spwd *pwd,
- char *buffer, size_t buflen)
-{
- ent_t ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0},
- {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}};
- enum nss_status status;
-
- if (name[0] == '-' || name[0] == '+')
- return NSS_STATUS_NOTFOUND;
-
- status = internal_setspent (&ent);
- if (status != NSS_STATUS_SUCCESS)
- return status;
-
- status = internal_getspnam_r (name, pwd, &ent, buffer, buflen);
-
- internal_endspent (&ent);
-
- return status;
-}
-
-/* Support routines for remembering -@netgroup and -user entries.
- The names are stored in a single string with `|' as separator. */
-static void
-blacklist_store_name (const char *name, ent_t *ent)
-{
- int namelen = strlen (name);
- char *tmp;
-
- /* first call, setup cache */
- if (ent->blacklist.size == 0)
- {
- ent->blacklist.size = MAX (BLACKLIST_INITIAL_SIZE, 2 * namelen);
- ent->blacklist.data = malloc (ent->blacklist.size);
- if (ent->blacklist.data == NULL)
- return;
- ent->blacklist.data[0] = '|';
- ent->blacklist.data[1] = '\0';
- ent->blacklist.current = 1;
- }
- else
- {
- if (in_blacklist (name, namelen, ent))
- return; /* no duplicates */
-
- if (ent->blacklist.current + namelen + 1 >= ent->blacklist.size)
- {
- ent->blacklist.size += MAX (BLACKLIST_INCREMENT, 2 * namelen);
- tmp = realloc (ent->blacklist.data, ent->blacklist.size);
- if (tmp == NULL)
- {
- free (ent->blacklist.data);
- ent->blacklist.size = 0;
- return;
- }
- ent->blacklist.data = tmp;
- }
- }
-
- tmp = stpcpy (ent->blacklist.data + ent->blacklist.current, name);
- *tmp++ = '|';
- *tmp = '\0';
- ent->blacklist.current += namelen + 1;
-
- return;
-}
-
-/* Returns TRUE if ent->blacklist contains name, else FALSE. */
-static bool_t
-in_blacklist (const char *name, int namelen, ent_t *ent)
-{
- char buf[namelen + 3];
- char *cp;
-
- if (ent->blacklist.data == NULL)
- return FALSE;
-
- buf[0] = '|';
- cp = stpcpy (&buf[1], name);
- *cp++= '|';
- *cp = '\0';
- return strstr (ent->blacklist.data, buf) != NULL;
-}
diff --git a/glibc-compat/nss_db/db-XXX.c b/glibc-compat/nss_db/db-XXX.c
deleted file mode 100644
index 8c05829656..0000000000
--- a/glibc-compat/nss_db/db-XXX.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Common code for DB-based databases in nss_db module.
- Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <dlfcn.h>
-#include <fcntl.h>
-#include <bits/libc-lock.h>
-#include "nsswitch.h"
-#include "nss_db.h"
-
-/* These symbols are defined by the including source file:
-
- ENTNAME -- database name of the structure and functions (hostent, pwent).
- STRUCTURE -- struct name, define only if not ENTNAME (passwd, group).
- DATABASE -- database file name, ("hosts", "passwd")
-
- NEED_H_ERRNO - defined iff an arg `int *herrnop' is used.
-*/
-
-#define ENTNAME_r CONCAT(ENTNAME,_r)
-
-#include <paths.h>
-#define DBFILE _PATH_VARDB DATABASE ".db"
-
-#ifdef NEED_H_ERRNO
-#define H_ERRNO_PROTO , int *herrnop
-#define H_ERRNO_ARG , herrnop
-#define H_ERRNO_SET(val) (*herrnop = (val))
-#else
-#define H_ERRNO_PROTO
-#define H_ERRNO_ARG
-#define H_ERRNO_SET(val) ((void) 0)
-#endif
-
-/* Locks the static variables in this file. */
-__libc_lock_define_initialized (static, lock)
-
-/* Maintenance of the shared handle open on the database. */
-
-static NSS_DB *db;
-static int keep_db;
-static int entidx;
-
-
-/* Open the database. */
-enum nss_status
-CONCAT(_nss_db_set,ENTNAME) (int stayopen)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_setent (DBFILE, &db);
-
- /* Remember STAYOPEN flag. */
- if (db != NULL)
- keep_db |= stayopen;
- /* Reset the sequential index. */
- entidx = 0;
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-
-/* Close it again. */
-enum nss_status
-CONCAT(_nss_db_end,ENTNAME) (void)
-{
- __libc_lock_lock (lock);
-
- internal_endent (&db);
-
- /* Reset STAYOPEN flag. */
- keep_db = 0;
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-/* Do a database lookup for KEY. */
-static enum nss_status
-lookup (DBT *key, struct STRUCTURE *result,
- void *buffer, int buflen H_ERRNO_PROTO)
-{
- char *p;
- enum nss_status status;
- int err;
- DBT value;
-
- /* Open the database. */
- if (db == NULL)
- {
- status = internal_setent (DBFILE, &db);
- if (status != NSS_STATUS_SUCCESS)
- {
- H_ERRNO_SET (NETDB_INTERNAL);
- return status;
- }
- }
-
- /* Succeed iff it matches a value that parses correctly. */
- value.flags = 0;
- err = DL_CALL_FCT (db->get, (db->db, NULL, key, &value, 0));
- if (err != 0)
- {
- if (err == db_notfound)
- {
- H_ERRNO_SET (HOST_NOT_FOUND);
- status = NSS_STATUS_NOTFOUND;
- }
- else
- {
- H_ERRNO_SET (NETDB_INTERNAL);
- status = NSS_STATUS_UNAVAIL;
- }
- }
- else if (buflen < value.size)
- {
- /* No room to copy the data to. */
- __set_errno (ERANGE);
- H_ERRNO_SET (NETDB_INTERNAL);
- status = NSS_STATUS_TRYAGAIN;
- }
- else
- {
- /* Copy the result to a safe place. */
- p = (char *) memcpy (buffer, value.data, value.size);
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
-
- err = parse_line (p, result, buffer, buflen);
-
- if (err == 0)
- {
- /* If the key begins with '0' we are trying to get the next
- entry. We want to ignore unparsable lines in this case. */
- if (((char *) key->data)[0] == '0')
- {
- /* Super magical return value. We need to tell our caller
- that it should continue looping. This value cannot
- happen in other cases. */
- status = NSS_STATUS_RETURN;
- }
- else
- {
- H_ERRNO_SET (HOST_NOT_FOUND);
- status = NSS_STATUS_NOTFOUND;
- }
- }
- else if (err < 0)
- {
- H_ERRNO_SET (NETDB_INTERNAL);
- status = NSS_STATUS_TRYAGAIN;
- }
- else
- status = NSS_STATUS_SUCCESS;
- }
-
- if (! keep_db)
- internal_endent (&db);
-
- return status;
-}
-
-
-/* Macro for defining lookup functions for this DB-based database.
-
- NAME is the name of the lookup; e.g. `pwnam'.
-
- KEYPATTERN gives `printf' args to construct a key string;
- e.g. `(".%s", name)'.
-
- KEYSIZE gives the allocation size of a buffer to construct it in;
- e.g. `1 + strlen (name)'.
-
- PROTO describes the arguments for the lookup key;
- e.g. `const char *name'.
-
- BREAK_IF_MATCH is ignored, but used by ../nss_files/files-XXX.c. */
-
-#define DB_LOOKUP(name, keysize, keypattern, break_if_match, proto...) \
-enum nss_status \
-_nss_db_get##name##_r (proto, \
- struct STRUCTURE *result, \
- char *buffer, size_t buflen H_ERRNO_PROTO)\
-{ \
- DBT key; \
- enum nss_status status; \
- const size_t size = (keysize) + 1; \
- key.data = __alloca (size); \
- key.size = KEYPRINTF keypattern; \
- key.flags = 0; \
- __libc_lock_lock (lock); \
- status = lookup (&key, result, buffer, buflen H_ERRNO_ARG); \
- __libc_lock_unlock (lock); \
- return status; \
-}
-
-#define KEYPRINTF(pattern, args...) snprintf (key.data, size, pattern ,##args)
-
-
-
-
-/* Return the next entry from the database file, doing locking. */
-enum nss_status
-CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer,
- size_t buflen H_ERRNO_PROTO)
-{
- /* Return next entry in host file. */
- enum nss_status status;
- char buf[20];
- DBT key;
-
- __libc_lock_lock (lock);
-
- /* Loop until we find a valid entry or hit EOF. See above for the
- special meaning of the status value. */
- do
- {
- key.size = snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
- key.flags = 0;
- status = lookup (&key, result, buffer, buflen H_ERRNO_ARG);
- if (status == NSS_STATUS_TRYAGAIN
-#ifdef NEED_H_ERRNO
- && *herrnop == NETDB_INTERNAL
-#endif
- && errno == ERANGE)
- /* Give the user a chance to get the same entry with a larger
- buffer. */
- --entidx;
- }
- while (status == NSS_STATUS_RETURN);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
diff --git a/glibc-compat/nss_db/db-alias.c b/glibc-compat/nss_db/db-alias.c
deleted file mode 100644
index b9b9489989..0000000000
--- a/glibc-compat/nss_db/db-alias.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* Mail alias file parser in nss_db module.
- Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <glibc-compat/include/aliases.h>
-#include <alloca.h>
-#include <ctype.h>
-#include <dlfcn.h>
-#include <errno.h>
-#include <bits/libc-lock.h>
-#include <paths.h>
-#include <string.h>
-
-#include "nsswitch.h"
-#include "nss_db.h"
-
-/* Locks the static variables in this file. */
-__libc_lock_define_initialized (static, lock)
-
-/* Maintenance of the shared handle open on the database. */
-
-static NSS_DB *db;
-static int keep_db;
-static unsigned int entidx; /* Index for `getaliasent_r'. */
-
-
-/* Open database. */
-enum nss_status
-_nss_db_setaliasent (int stayopen)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_setent (_PATH_VARDB "aliases.db", &db);
-
- /* Remember STAYOPEN flag. */
- if (db != NULL)
- keep_db |= stayopen;
-
- /* Reset the sequential index. */
- entidx = 0;
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-
-/* Close it again. */
-enum nss_status
-_nss_db_endaliasent (void)
-{
- __libc_lock_lock (lock);
-
- internal_endent (&db);
-
- /* Reset STAYOPEN flag. */
- keep_db = 0;
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-/* We provide the parse function here. The parser in libnss_files
- cannot be used. The generation of the db file already resolved all
- :include: statements so we simply have to parse the list and store
- the result. */
-static enum nss_status
-lookup (DBT *key, struct aliasent *result, char *buffer,
- size_t buflen)
-{
- enum nss_status status;
- DBT value;
-
- /* Open the database. */
- if (db == NULL)
- {
- status = internal_setent (_PATH_VARDB "aliases.db", &db);
- if (status != NSS_STATUS_SUCCESS)
- return status;
- }
-
- value.flags = 0;
- if (DL_CALL_FCT (db->get, (db->db, NULL, key, &value, 0)) == 0)
- {
- const char *src = value.data;
- char *cp;
- size_t cnt;
-
- result->alias_members_len = 0;
-
- /* We now have to fill the BUFFER with all the information. */
- if (buflen < key->size + 1)
- {
- no_more_room:
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- buffer = stpncpy (buffer, key->data, key->size) + 1;
- buflen -= key->size + 1;
-
- while (*src != '\0')
- {
- const char *end, *upto;
- while (isspace (*src))
- ++src;
-
- end = strchr (src, ',');
- if (end == NULL)
- end = strchr (src, '\0');
- for (upto = end; upto > src && isspace (upto[-1]); --upto);
-
- if (upto != src)
- {
- if ((upto - src) + __alignof__ (char *) > buflen)
- goto no_more_room;
- buffer = stpncpy (buffer, src, upto - src) + 1;
- buflen -= (upto - src) + __alignof (char *);
- ++result->alias_members_len;
- }
- src = end + (*end != '\0');
- }
-
- /* Now prepare the return. Provide string pointers for the
- currently selected aliases. */
-
- /* Adjust the pointer so it is aligned for storing pointers. */
- buffer += __alignof__ (char *) - 1;
- buffer -= ((buffer - (char *) 0) % __alignof__ (char *));
- result->alias_members = (char **) buffer;
-
- /* Compute addresses of alias entry strings. */
- cp = result->alias_name;
- for (cnt = 0; cnt < result->alias_members_len; ++cnt)
- {
- cp = strchr (cp, '\0') + 1;
- result->alias_members[cnt] = cp;
- }
-
- status = (result->alias_members_len == 0
- ? NSS_STATUS_RETURN : NSS_STATUS_SUCCESS);
- }
- else
- status = NSS_STATUS_NOTFOUND;
-
- if (! keep_db)
- internal_endent (&db);
-
- return status;
-}
-
-enum nss_status
-_nss_db_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen)
-{
- /* Return next entry in alias file. */
- enum nss_status status;
- char buf[20];
- DBT key;
-
- __libc_lock_lock (lock);
- key.size = snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
- key.flags = 0;
- status = lookup (&key, result, buffer, buflen);
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-
-enum nss_status
-_nss_db_getaliasbyname_r (const char *name, struct aliasent *result,
- char *buffer, size_t buflen)
-{
- DBT key;
- enum nss_status status;
-
- key.size = 1 + strlen (name);
-
- key.data = __alloca (key.size);
- ((char *) key.data)[0] = '.';
- memcpy (&((char *) key.data)[1], name, key.size - 1);
- key.flags = 0;
-
- __libc_lock_lock (lock);
- status = lookup (&key, result, buffer, buflen);
- __libc_lock_unlock (lock);
-
- return status;
-}
diff --git a/glibc-compat/nss_db/db-netgrp.c b/glibc-compat/nss_db/db-netgrp.c
deleted file mode 100644
index 73309077e1..0000000000
--- a/glibc-compat/nss_db/db-netgrp.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Netgroup file parser in nss_db modules.
- Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <dlfcn.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <netgroup.h>
-#include <string.h>
-#include <bits/libc-lock.h>
-#include <paths.h>
-
-#include "nsswitch.h"
-#include "nss_db.h"
-
-
-#define DBFILE _PATH_VARDB "netgroup.db"
-
-
-/* Locks the static variables in this file. */
-__libc_lock_define_initialized (static, lock)
-
-/* Maintenance of the shared handle open on the database. */
-static NSS_DB *db;
-static char *entry;
-static char *cursor;
-
-enum nss_status
-_nss_db_setnetgrent (const char *group)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_setent (DBFILE, &db);
-
- if (status == NSS_STATUS_SUCCESS)
- {
- DBT key = { data: (void *) group, size: strlen (group), flags: 0 };
- DBT value;
-
- value.flags = 0;
- if (DL_CALL_FCT (db->get, (db->db, NULL, &key, &value, 0)) != 0)
- status = NSS_STATUS_NOTFOUND;
- else
- cursor = entry = value.data;
- }
-
- __libc_lock_unlock (lock);
-
- return status;
-
-}
-
-
-enum nss_status
-_nss_db_endnetgrent (void)
-{
- __libc_lock_lock (lock);
-
- internal_endent (&db);
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-
-extern enum nss_status _nss_netgroup_parseline (char **cursor,
- struct __netgrent *result,
- char *buffer, int buflen);
-
-enum nss_status
-_nss_db_getnetgrent_r (struct __netgrent *result, char *buffer, size_t buflen)
-{
- int status;
-
- __libc_lock_lock (lock);
-
- status = _nss_netgroup_parseline (&cursor, result, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
diff --git a/glibc-compat/nss_db/db-open.c b/glibc-compat/nss_db/db-open.c
deleted file mode 100644
index 99ff3030f0..0000000000
--- a/glibc-compat/nss_db/db-open.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <nss/nss_db/db-open.c>
diff --git a/glibc-compat/nss_db/dummy-db.h b/glibc-compat/nss_db/dummy-db.h
deleted file mode 100644
index aed84621c1..0000000000
--- a/glibc-compat/nss_db/dummy-db.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <nss/nss_db/dummy-db.h>
diff --git a/glibc-compat/nss_db/nss_db.h b/glibc-compat/nss_db/nss_db.h
deleted file mode 100644
index 0bd98b5866..0000000000
--- a/glibc-compat/nss_db/nss_db.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <nss/nss_db/nss_db.h>
diff --git a/glibc-compat/nss_dns/dns-host.c b/glibc-compat/nss_dns/dns-host.c
deleted file mode 100644
index 5db030cde1..0000000000
--- a/glibc-compat/nss_dns/dns-host.c
+++ /dev/null
@@ -1,641 +0,0 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* Parts of this file are plain copies of the file `gethtnamadr.c' from
- the bind package and it has the following copyright. */
-
-/*
- * ++Copyright++ 1985, 1988, 1993
- * -
- * 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) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- * -
- * --Copyright--
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <glibc-compat/include/netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-#include <sys/syslog.h>
-
-#include "nsswitch.h"
-
-/* Get implementation for some internal functions. */
-#include "../resolv/mapv4v6addr.h"
-#include "../resolv/mapv4v6hostent.h"
-
-/* Maximum number of aliases we allow. */
-#define MAX_NR_ALIASES 48
-#define MAX_NR_ADDRS 48
-
-#if PACKETSZ > 65536
-# define MAXPACKET PACKETSZ
-#else
-# define MAXPACKET 65536
-#endif
-/* As per RFC 1034 and 1035 a host name cannot exceed 255 octets in length. */
-#ifdef MAXHOSTNAMELEN
-# undef MAXHOSTNAMELEN
-#endif
-#define MAXHOSTNAMELEN 256
-
-static const char AskedForGot[] = "\
-gethostby*.getanswer: asked for \"%s\", got \"%s\"";
-
-
-/* We need this time later. */
-typedef union querybuf
-{
- HEADER hdr;
- u_char buf[MAXPACKET];
-} querybuf;
-
-
-static enum nss_status getanswer_r (const querybuf *answer, int anslen,
- const char *qname, int qtype,
- struct hostent *result, char *buffer,
- size_t buflen, int *h_errnop);
-
-enum nss_status
-_nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,
- char *buffer, size_t buflen, int *h_errnop)
-{
- union
- {
- querybuf *buf;
- u_char *ptr;
- } host_buffer;
- querybuf *orig_host_buffer;
- int size, type, n;
- const char *cp;
- enum nss_status status;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1)
- {
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_UNAVAIL;
- }
-
- switch (af) {
- case AF_INET:
- size = INADDRSZ;
- type = T_A;
- break;
- case AF_INET6:
- size = IN6ADDRSZ;
- type = T_AAAA;
- break;
- default:
- *h_errnop = NETDB_INTERNAL;
- __set_errno (EAFNOSUPPORT);
- return NSS_STATUS_UNAVAIL;
- }
-
- result->h_addrtype = af;
- result->h_length = size;
-
- /*
- * if there aren't any dots, it could be a user-level alias.
- * this is also done in res_query() since we are not the only
- * function that looks up host names.
- */
- if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
- name = cp;
-
- host_buffer.buf = orig_host_buffer = (querybuf *) alloca (1024);
-
- n = __libc_res_nsearch (&_res, name, C_IN, type, host_buffer.buf->buf, 1024,
- &host_buffer.ptr);
- if (n < 0)
- {
- *h_errnop = h_errno;
- if (host_buffer.buf != orig_host_buffer)
- free (host_buffer.buf);
- return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
- }
-
- status = getanswer_r (host_buffer.buf, n, name, type, result, buffer, buflen,
- h_errnop);
- if (host_buffer.buf != orig_host_buffer)
- free (host_buffer.buf);
- return status;
-}
-
-
-enum nss_status
-_nss_dns_gethostbyname_r (const char *name, struct hostent *result,
- char *buffer, size_t buflen, int *h_errnop)
-{
- enum nss_status status = NSS_STATUS_NOTFOUND;
-
- if (_res.options & RES_USE_INET6)
- status = _nss_dns_gethostbyname2_r (name, AF_INET6, result, buffer,
- buflen, h_errnop);
- if (status == NSS_STATUS_NOTFOUND)
- status = _nss_dns_gethostbyname2_r (name, AF_INET, result, buffer,
- buflen, h_errnop);
-
- return status;
-}
-
-
-enum nss_status
-_nss_dns_gethostbyaddr_r (const char *addr, int len, int af,
- struct hostent *result, char *buffer, size_t buflen,
- int *h_errnop)
-{
- 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 };
- const u_char *uaddr = (const u_char *)addr;
- struct host_data
- {
- char *aliases[MAX_NR_ALIASES];
- unsigned char host_addr[16]; /* IPv4 or IPv6 */
- char *h_addr_ptrs[MAX_NR_ADDRS + 1];
- char linebuffer[0];
- } *host_data = (struct host_data *) buffer;
- union
- {
- querybuf *buf;
- u_char *ptr;
- } host_buffer;
- querybuf *orig_host_buffer;
- char qbuf[MAXDNAME+1], *qp;
- int size, n, status;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1)
- {
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_UNAVAIL;
- }
-
- if (af == AF_INET6 && len == IN6ADDRSZ &&
- (memcmp (uaddr, mapped, sizeof mapped) == 0
- || memcmp (uaddr, tunnelled, sizeof tunnelled) == 0))
- {
- /* Unmap. */
- 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:
- __set_errno (EAFNOSUPPORT);
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_UNAVAIL;
- }
- if (size != len)
- {
- __set_errno (EAFNOSUPPORT);
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_UNAVAIL;
- }
-
- switch (af)
- {
- case AF_INET:
- sprintf (qbuf, "%u.%u.%u.%u.in-addr.arpa", (uaddr[3] & 0xff),
- (uaddr[2] & 0xff), (uaddr[1] & 0xff), (uaddr[0] & 0xff));
- break;
- case AF_INET6:
- qp = qbuf;
- for (n = IN6ADDRSZ - 1; n >= 0; n--)
- qp += sprintf (qp, "%x.%x.", uaddr[n] & 0xf, (uaddr[n] >> 4) & 0xf);
- strcpy(qp, "ip6.int");
- break;
- default:
- /* Cannot happen. */
- break;
- }
-
- host_buffer.buf = orig_host_buffer = (querybuf *) alloca (1024);
-
- n = __libc_res_nquery (&_res, qbuf, C_IN, T_PTR, host_buffer.buf->buf,
- 1024, &host_buffer.ptr);
- if (n < 0)
- {
- *h_errnop = h_errno;
- if (host_buffer.buf != orig_host_buffer)
- free (host_buffer.buf);
- return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
- }
-
- status = getanswer_r (host_buffer.buf, n, qbuf, T_PTR, result, buffer, buflen,
- h_errnop);
- if (host_buffer.buf != orig_host_buffer)
- free (host_buffer.buf);
- if (status != NSS_STATUS_SUCCESS)
- {
- *h_errnop = h_errno;
- return status;
- }
-
-#ifdef SUNSECURITY
- This is not implemented because it is not possible to use the current
- source from bind in a multi-threaded program.
-#endif
-
- result->h_addrtype = af;
- result->h_length = len;
- memcpy (host_data->host_addr, addr, len);
- host_data->h_addr_ptrs[0] = (char *) host_data->host_addr;
- host_data->h_addr_ptrs[1] = NULL;
- if (af == AF_INET && (_res.options & RES_USE_INET6))
- {
- map_v4v6_address ((char *) host_data->host_addr,
- (char *) host_data->host_addr);
- result->h_addrtype = AF_INET6;
- result->h_length = IN6ADDRSZ;
- }
- *h_errnop = NETDB_SUCCESS;
- return NSS_STATUS_SUCCESS;
-}
-
-
-static enum nss_status
-getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
- struct hostent *result, char *buffer, size_t buflen,
- int *h_errnop)
-{
- struct host_data
- {
- char *aliases[MAX_NR_ALIASES];
- unsigned char host_addr[16]; /* IPv4 or IPv6 */
- char *h_addr_ptrs[MAX_NR_ADDRS + 1];
- char linebuffer[0];
- } *host_data = (struct host_data *) buffer;
- int linebuflen = buflen - offsetof (struct host_data, linebuffer);
- register const HEADER *hp;
- const u_char *end_of_message, *cp;
- int n, ancount, qdcount;
- int haveanswer, had_error;
- char *bp, **ap, **hap;
- char tbuf[MAXDNAME];
- const char *tname;
- int (*name_ok) (const char *);
-
- tname = qname;
- result->h_name = NULL;
- end_of_message = answer->buf + anslen;
- switch (qtype)
- {
- case T_A:
- case T_AAAA:
- name_ok = res_hnok;
- break;
- case T_PTR:
- name_ok = res_dnok;
- break;
- default:
- return NSS_STATUS_UNAVAIL; /* XXX should be abort(); */
- }
-
- /*
- * find first satisfactory answer
- */
- hp = &answer->hdr;
- bp = host_data->linebuffer;
- ancount = ntohs (hp->ancount);
- qdcount = ntohs (hp->qdcount);
- cp = answer->buf + HFIXEDSZ;
- if (qdcount != 1)
- {
- *h_errnop = NO_RECOVERY;
- return NSS_STATUS_UNAVAIL;
- }
-
- n = dn_expand (answer->buf, end_of_message, cp, bp, linebuflen);
- if (n < 0 || (*name_ok) (bp) == 0)
- {
- *h_errnop = NO_RECOVERY;
- return NSS_STATUS_UNAVAIL;
- }
- cp += n + QFIXEDSZ;
-
- if (qtype == T_A || qtype == T_AAAA)
- {
- /* res_send() 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)
- {
- __set_h_errno (NO_RECOVERY);
- return NSS_STATUS_TRYAGAIN;
- }
- result->h_name = bp;
- bp += n;
- linebuflen -= n;
- /* The qname can be abbreviated, but h_name is now absolute. */
- qname = result->h_name;
- }
-
- ap = host_data->aliases;
- *ap = NULL;
- result->h_aliases = host_data->aliases;
- hap = host_data->h_addr_ptrs;
- *hap = NULL;
- result->h_addr_list = host_data->h_addr_ptrs;
- haveanswer = 0;
- had_error = 0;
-
- while (ancount-- > 0 && cp < end_of_message && had_error == 0)
- {
- int type, class;
-
- n = dn_expand (answer->buf, end_of_message, cp, bp, linebuflen);
- if (n < 0 || (*name_ok) (bp) == 0)
- {
- ++had_error;
- continue;
- }
- cp += n; /* name */
- type = _getshort (cp);
- cp += INT16SZ; /* type */
- class = _getshort(cp);
- cp += INT16SZ + INT32SZ; /* class, TTL */
- n = _getshort(cp);
- cp += INT16SZ; /* len */
- if (class != C_IN)
- {
- /* XXX - debug? syslog? */
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
-
- if ((qtype ==T_A || qtype == T_AAAA) && type == T_CNAME)
- {
- if (ap >= &host_data->aliases[MAX_NR_ALIASES - 1])
- continue;
- n = dn_expand (answer->buf, end_of_message, cp, tbuf, sizeof tbuf);
- if (n < 0 || (*name_ok) (tbuf) == 0)
- {
- ++had_error;
- continue;
- }
- cp += n;
- /* Store alias. */
- *ap++ = bp;
- n = strlen (bp) + 1; /* For the \0. */
- if (n >= MAXHOSTNAMELEN)
- {
- ++had_error;
- continue;
- }
- bp += n;
- linebuflen -= n;
- /* Get canonical name. */
- n = strlen (tbuf) + 1; /* For the \0. */
- if ((size_t) n > linebuflen || n >= MAXHOSTNAMELEN)
- {
- ++had_error;
- continue;
- }
- strcpy (bp, tbuf); /* Cannot overflow. */
- result->h_name = bp;
- bp += n;
- linebuflen -= n;
- continue;
- }
-
- if (qtype == T_PTR && type == T_CNAME)
- {
- n = dn_expand (answer->buf, end_of_message, cp, tbuf, sizeof tbuf);
- if (n < 0 || res_dnok (tbuf) == 0)
- {
- ++had_error;
- continue;
- }
- cp += n;
- /* Get canonical name. */
- n = strlen (tbuf) + 1; /* For the \0. */
- if ((size_t) n > linebuflen || n >= MAXHOSTNAMELEN)
- {
- ++had_error;
- continue;
- }
- strcpy (bp, tbuf); /* Cannot overflow. */
- tname = bp;
- bp += n;
- linebuflen -= n;
- continue;
- }
- if (type != qtype)
- {
- syslog (LOG_NOTICE | LOG_AUTH,
- "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"",
- qname, p_class (C_IN), p_type (qtype), p_type (type));
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
-
- switch (type)
- {
- case T_PTR:
- if (strcasecmp (tname, bp) != 0)
- {
- syslog (LOG_NOTICE | LOG_AUTH, AskedForGot, qname, bp);
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
- n = dn_expand (answer->buf, end_of_message, cp, bp, linebuflen);
- if (n < 0 || res_hnok (bp) == 0)
- {
- ++had_error;
- break;
- }
-#if MULTI_PTRS_ARE_ALIASES
- cp += n;
- if (haveanswer == 0)
- result->h_name = bp;
- else if (ap < &host_data->aliases[MAXALIASES-1])
- *ap++ = bp;
- else
- n = -1;
- if (n != -1)
- {
- n = strlen (bp) + 1; /* for the \0 */
- if (n >= MAXHOSTNAMELEN)
- {
- ++had_error;
- break;
- }
- bp += n;
- linebuflen -= n;
- }
- break;
-#else
- result->h_name = bp;
- if (_res.options & RES_USE_INET6)
- {
- n = strlen (bp) + 1; /* for the \0 */
- if (n >= MAXHOSTNAMELEN)
- {
- ++had_error;
- break;
- }
- bp += n;
- linebuflen -= n;
- map_v4v6_hostent (result, &bp, &linebuflen);
- }
- *h_errnop = NETDB_SUCCESS;
- return NSS_STATUS_SUCCESS;
-#endif
- case T_A:
- case T_AAAA:
- if (strcasecmp (result->h_name, bp) != 0)
- {
- syslog (LOG_NOTICE | LOG_AUTH, AskedForGot, result->h_name, bp);
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
- if (n != result->h_length)
- {
- cp += n;
- continue;
- }
- if (!haveanswer)
- {
- register int nn;
-
- result->h_name = bp;
- nn = strlen (bp) + 1; /* for the \0 */
- bp += nn;
- linebuflen -= nn;
- }
-
- linebuflen -= sizeof (align) - ((u_long) bp % sizeof (align));
- bp += sizeof (align) - ((u_long) bp % sizeof (align));
-
- if (n >= linebuflen)
- {
- ++had_error;
- continue;
- }
- if (hap >= &host_data->h_addr_ptrs[MAX_NR_ADDRS-1])
- {
- cp += n;
- continue;
- }
- memcpy (*hap++ = bp, cp, n);
- bp += n;
- cp += n;
- linebuflen -= n;
- break;
- default:
- abort ();
- }
- if (had_error == 0)
- ++haveanswer;
- }
-
- if (haveanswer > 0)
- {
- *ap = NULL;
- *hap = NULL;
-#if defined(RESOLVSORT)
- /*
- * Note: we sort even if host can take only one address
- * in its return structures - should give it the "best"
- * address in that case, not some random one
- */
- if (_res.nsort && haveanswer > 1 && qtype == T_A)
- addrsort (host_data->h_addr_ptrs, haveanswer);
-#endif /*RESOLVSORT*/
-
- if (result->h_name == NULL)
- {
- n = strlen (qname) + 1; /* For the \0. */
- if (n > linebuflen || n >= MAXHOSTNAMELEN)
- goto no_recovery;
- strcpy (bp, qname); /* Cannot overflow. */
- result->h_name = bp;
- bp += n;
- linebuflen -= n;
- }
-
- if (_res.options & RES_USE_INET6)
- map_v4v6_hostent (result, &bp, &linebuflen);
- *h_errnop = NETDB_SUCCESS;
- return NSS_STATUS_SUCCESS;
- }
- no_recovery:
- *h_errnop = NO_RECOVERY;
- return NSS_STATUS_TRYAGAIN;
-}
diff --git a/glibc-compat/nss_dns/dns-network.c b/glibc-compat/nss_dns/dns-network.c
deleted file mode 100644
index b6c7a4fdc9..0000000000
--- a/glibc-compat/nss_dns/dns-network.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* Parts of this file are plain copies of the file `getnetnamadr.c' from
- the bind package and it has the following copyright. */
-
-/* Copyright (c) 1993 Carlos Leandro and Rui Salgueiro
- * Dep. Matematica Universidade de Coimbra, Portugal, Europe
- *
- * 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.
- */
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <glibc-compat/include/netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "nsswitch.h"
-#include <arpa/inet.h>
-
-/* Maximum number of aliases we allow. */
-#define MAX_NR_ALIASES 48
-
-
-#if PACKETSZ > 65536
-#define MAXPACKET PACKETSZ
-#else
-#define MAXPACKET 65536
-#endif
-
-
-typedef enum
-{
- BYADDR,
- BYNAME
-} lookup_method;
-
-
-/* We need this time later. */
-typedef union querybuf
-{
- HEADER hdr;
- u_char buf[MAXPACKET];
-} querybuf;
-
-
-/* Prototypes for local functions. */
-static enum nss_status getanswer_r (const querybuf *answer, int anslen,
- struct netent *result, char *buffer,
- size_t buflen, lookup_method net_i);
-
-
-enum nss_status
-_nss_dns_getnetbyname_r (const char *name, struct netent *result,
- char *buffer, size_t buflen)
-{
- /* Return entry for network with NAME. */
- union
- {
- querybuf *buf;
- u_char *ptr;
- } net_buffer;
- querybuf *orig_net_buffer;
- int anslen;
- char *qbuf;
- enum nss_status status;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1)
- return NSS_STATUS_UNAVAIL;
-
- qbuf = strdupa (name);
-
- net_buffer.buf = orig_net_buffer = (querybuf *) alloca (1024);
-
- anslen = __libc_res_nsearch (&_res, qbuf, C_IN, T_PTR, net_buffer.buf->buf,
- 1024, &net_buffer.ptr);
- if (anslen < 0)
- {
- if (net_buffer.buf != orig_net_buffer)
- free (net_buffer.buf);
- /* Nothing found. */
- return (errno == ECONNREFUSED
- || errno == EPFNOSUPPORT
- || errno == EAFNOSUPPORT)
- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
- }
-
- status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen, BYNAME);
- if (net_buffer.buf != orig_net_buffer)
- free (net_buffer.buf);
- return status;
-}
-
-
-enum nss_status
-_nss_dns_getnetbyaddr_r (long net, int type, struct netent *result,
- char *buffer, size_t buflen)
-{
- /* Return entry for network with NAME. */
- enum nss_status status;
- union
- {
- querybuf *buf;
- u_char *ptr;
- } net_buffer;
- querybuf *orig_net_buffer;
- unsigned int net_bytes[4];
- char qbuf[MAXDNAME];
- int cnt, anslen;
- u_int32_t net2;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1)
- return NSS_STATUS_UNAVAIL;
-
- /* No net address lookup for IPv6 yet. */
- if (type != AF_INET)
- return NSS_STATUS_UNAVAIL;
-
- net2 = (u_int32_t) net;
- for (cnt = 4; net2 != 0; net2 >>= 8)
- net_bytes[--cnt] = net2 & 0xff;
-
- switch (cnt)
- {
- case 3:
- /* Class A network. */
- sprintf (qbuf, "0.0.0.%u.in-addr.arpa", net_bytes[3]);
- break;
- case 2:
- /* Class B network. */
- sprintf (qbuf, "0.0.%u.%u.in-addr.arpa", net_bytes[3], net_bytes[2]);
- break;
- case 1:
- /* Class C network. */
- sprintf (qbuf, "0.%u.%u.%u.in-addr.arpa", net_bytes[3], net_bytes[2],
- net_bytes[1]);
- break;
- case 0:
- /* Class D - E network. */
- sprintf (qbuf, "%u.%u.%u.%u.in-addr.arpa", net_bytes[3], net_bytes[2],
- net_bytes[1], net_bytes[0]);
- break;
- }
-
- net_buffer.buf = orig_net_buffer = (querybuf *) alloca (1024);
-
- anslen = __libc_res_nquery (&_res, qbuf, C_IN, T_PTR, net_buffer.buf->buf,
- 1024, &net_buffer.ptr);
- if (anslen < 0)
- {
- if (net_buffer.buf != orig_net_buffer)
- free (net_buffer.buf);
- /* Nothing found. */
- return (errno == ECONNREFUSED
- || errno == EPFNOSUPPORT
- || errno == EAFNOSUPPORT)
- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
- }
-
- status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen, BYADDR);
- if (net_buffer.buf != orig_net_buffer)
- free (net_buffer.buf);
- if (status == NSS_STATUS_SUCCESS)
- {
- /* Strip trailing zeros. */
- unsigned int u_net = net; /* Maybe net should be unsigned? */
-
- while ((u_net & 0xff) == 0 && u_net != 0)
- u_net >>= 8;
- result->n_net = u_net;
- }
-
- return status;
-}
-
-
-#undef offsetof
-#define offsetof(Type, Member) ((size_t) &((Type *) NULL)->Member)
-
-static enum nss_status
-getanswer_r (const querybuf *answer, int anslen, struct netent *result,
- char *buffer, size_t buflen, lookup_method net_i)
-{
- /*
- * Find first satisfactory answer
- *
- * answer --> +------------+ ( MESSAGE )
- * | Header |
- * +------------+
- * | Question | the question for the name server
- * +------------+
- * | Answer | RRs answering the question
- * +------------+
- * | Authority | RRs pointing toward an authority
- * | Additional | RRs holding additional information
- * +------------+
- */
- struct net_data
- {
- char *aliases[MAX_NR_ALIASES];
- char linebuffer[0];
- } *net_data = (struct net_data *) buffer;
- int linebuflen = buflen - offsetof (struct net_data, linebuffer);
- const char *end_of_message = &answer->buf[anslen];
- const HEADER *header_pointer = &answer->hdr;
- /* #/records in the answer section. */
- int answer_count = ntohs (header_pointer->ancount);
- /* #/entries in the question section. */
- int question_count = ntohs (header_pointer->qdcount);
- char *bp = net_data->linebuffer;
- const char *cp = &answer->buf[HFIXEDSZ];
- char **alias_pointer;
- int have_answer;
- char *ans;
-
- if (question_count == 0)
- {
- /* FIXME: the Sun version uses for host name lookup an additional
- parameter for pointing to h_errno. this is missing here.
- OSF/1 has a per-thread h_errno variable. */
- if (header_pointer->aa != 0)
- {
- __set_h_errno (HOST_NOT_FOUND);
- return NSS_STATUS_NOTFOUND;
- }
- else
- {
- __set_h_errno (TRY_AGAIN);
- return NSS_STATUS_TRYAGAIN;
- }
- }
-
- /* Skip the question part. */
- while (question_count-- > 0)
- {
- int n = __dn_skipname (cp, end_of_message);
- if (n < 0 || end_of_message - (cp + n) < QFIXEDSZ)
- {
- __set_h_errno (NO_RECOVERY);
- return NSS_STATUS_UNAVAIL;
- }
- cp += n + QFIXEDSZ;
- }
-
- alias_pointer = result->n_aliases = &net_data->aliases[0];
- *alias_pointer = NULL;
- have_answer = 0;
- ans = NULL;
-
- while (--answer_count >= 0 && cp < end_of_message)
- {
- int n = dn_expand (answer->buf, end_of_message, cp, bp, linebuflen);
- int type, class;
-
- if (n < 0 || res_dnok (bp) == 0)
- break;
- cp += n;
- ans = strdupa (bp);
- GETSHORT (type, cp);
- GETSHORT (class, cp);
- cp += INT32SZ; /* TTL */
- GETSHORT (n, cp);
-
- if (class == C_IN && type == T_PTR)
- {
- n = dn_expand (answer->buf, end_of_message, cp, bp, linebuflen);
- if (n < 0 || !res_hnok (bp))
- {
- /* XXX What does this mean? The original form from bind
- returns NULL. Incrementing cp has no effect in any case.
- What should I return here. ??? */
- cp += n;
- return NSS_STATUS_UNAVAIL;
- }
- cp += n;
- if (alias_pointer + 2 < &net_data->aliases[MAX_NR_ALIASES])
- {
- *alias_pointer++ = bp;
- n = strlen (bp) + 1;
- bp += n;
- linebuflen -= n;
- result->n_addrtype = class == C_IN ? AF_INET : AF_UNSPEC;
- ++have_answer;
- }
- }
- }
-
- if (have_answer)
- {
- *alias_pointer = NULL;
- switch (net_i)
- {
- case BYADDR:
- result->n_name = *result->n_aliases++;
- result->n_net = 0L;
- return NSS_STATUS_SUCCESS;
-
- case BYNAME:
- {
- char **ap = result->n_aliases++;
- while (*ap != NULL)
- {
- /* Check each alias name for being of the forms:
- 4.3.2.1.in-addr.arpa = net 1.2.3.4
- 3.2.1.in-addr.arpa = net 0.1.2.3
- 2.1.in-addr.arpa = net 0.0.1.2
- 1.in-addr.arpa = net 0.0.0.1
- */
- uint32_t val = 0; /* Accumulator for n_net value. */
- unsigned int shift = 0; /* Which part we are parsing now. */
- const char *p = *ap; /* Consuming the string. */
- do
- {
- /* Match the leading 0 or 0[xX] base indicator. */
- unsigned int base = 10;
- if (*p == '0' && p[1] != '.')
- {
- base = 8;
- ++p;
- if (*p == 'x' || *p == 'X')
- {
- base = 16;
- ++p;
- if (*p == '.')
- break; /* No digit here. Give up on alias. */
- }
- if (*p == '\0')
- break;
- }
-
- uint32_t part = 0; /* Accumulates this part's number. */
- do
- {
- if (isdigit (*p) && (*p - '0' < base))
- part = (part * base) + (*p - '0');
- else if (base == 16 && isxdigit (*p))
- part = (part << 4) + 10 + (tolower (*p) - 'a');
- ++p;
- } while (*p != '\0' && *p != '.');
-
- if (*p != '.')
- break; /* Bad form. Give up on this name. */
-
- /* Install this as the next more significant byte. */
- val |= part << shift;
- shift += 8;
- ++p;
-
- /* If we are out of digits now, there are two cases:
- 1. We are done with digits and now see "in-addr.arpa".
- 2. This is not the droid we are looking for. */
- if (!isdigit (*p) && !strcasecmp (p, "in-addr.arpa"))
- {
- result->n_net = val;
- return NSS_STATUS_SUCCESS;
- }
-
- /* Keep going when we have seen fewer than 4 parts. */
- } while (shift < 32);
- }
- }
- break;
- }
- }
-
- __set_h_errno (TRY_AGAIN);
- return NSS_STATUS_TRYAGAIN;
-}
diff --git a/glibc-compat/nss_files/files-XXX.c b/glibc-compat/nss_files/files-XXX.c
deleted file mode 100644
index fde75a87b4..0000000000
--- a/glibc-compat/nss_files/files-XXX.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/* Common code for file-based databases in nss_files module.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <assert.h>
-#include <errno.h>
-#include <bits/libc-lock.h>
-#include "nsswitch.h"
-
-/* These symbols are defined by the including source file:
-
- ENTNAME -- database name of the structure and functions (hostent, pwent).
- STRUCTURE -- struct name, define only if not ENTNAME (passwd, group).
- DATABASE -- string of the database file's name ("hosts", "passwd").
-
- NEED_H_ERRNO - defined iff an arg `int *herrnop' is used.
-
- Also see files-parse.c.
-*/
-
-#define ENTNAME_r CONCAT(ENTNAME,_r)
-
-#define DATAFILE "/etc/" DATABASE
-
-#ifdef NEED_H_ERRNO
-# include <glibc-compat/include/netdb.h>
-# define H_ERRNO_PROTO , int *herrnop
-# define H_ERRNO_ARG , herrnop
-# define H_ERRNO_SET(val) (*herrnop = (val))
-#else
-# define H_ERRNO_PROTO
-# define H_ERRNO_ARG
-# define H_ERRNO_SET(val) ((void) 0)
-#endif
-
-/* Locks the static variables in this file. */
-__libc_lock_define_initialized (static, lock)
-
-/* Maintenance of the shared stream open on the database file. */
-
-static FILE *stream;
-static fpos_t position;
-static enum { none, getent, getby } last_use;
-static int keep_stream;
-
-/* Open database file if not already opened. */
-static enum nss_status
-internal_setent (int stayopen)
-{
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- if (stream == NULL)
- {
- stream = fopen (DATAFILE, "r");
-
- if (stream == NULL)
- status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
- else
- {
- /* We have to make sure the file is `closed on exec'. */
- int result, flags;
-
- result = flags = fcntl (fileno (stream), F_GETFD, 0);
- if (result >= 0)
- {
- flags |= FD_CLOEXEC;
- result = fcntl (fileno (stream), F_SETFD, flags);
- }
- if (result < 0)
- {
- /* Something went wrong. Close the stream and return a
- failure. */
- fclose (stream);
- stream = NULL;
- status = NSS_STATUS_UNAVAIL;
- }
- }
- }
- else
- rewind (stream);
-
- /* Remember STAYOPEN flag. */
- if (stream != NULL)
- keep_stream |= stayopen;
-
- return status;
-}
-
-
-/* Thread-safe, exported version of that. */
-enum nss_status
-CONCAT(_nss_files_set,ENTNAME) (int stayopen)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_setent (stayopen);
-
- if (status == NSS_STATUS_SUCCESS && fgetpos (stream, &position) < 0)
- {
- fclose (stream);
- stream = NULL;
- status = NSS_STATUS_UNAVAIL;
- }
-
- last_use = getent;
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-
-/* Close the database file. */
-static void
-internal_endent (void)
-{
- if (stream != NULL)
- {
- fclose (stream);
- stream = NULL;
- }
-}
-
-
-/* Thread-safe, exported version of that. */
-enum nss_status
-CONCAT(_nss_files_end,ENTNAME) (void)
-{
- __libc_lock_lock (lock);
-
- internal_endent ();
-
- /* Reset STAYOPEN flag. */
- keep_stream = 0;
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-/* Parsing the database file into `struct STRUCTURE' data structures. */
-
-static enum nss_status
-internal_getent (struct STRUCTURE *result,
- char *buffer, int buflen H_ERRNO_PROTO)
-{
- char *p;
- struct parser_data *data = (void *) buffer;
- int linebuflen = buffer + buflen - data->linebuffer;
- int parse_result;
-
- if (buflen < (int) sizeof *data + 1)
- {
- __set_errno (ERANGE);
- H_ERRNO_SET (NETDB_INTERNAL);
- return NSS_STATUS_TRYAGAIN;
- }
-
- do
- {
- /* Terminate the line so that we can test for overflow. */
- data->linebuffer[linebuflen - 1] = '\xff';
-
- p = fgets (data->linebuffer, linebuflen, stream);
- if (p == NULL && feof (stream))
- {
- /* End of file or read error. */
- __set_errno (ENOENT);
- H_ERRNO_SET (HOST_NOT_FOUND);
- return NSS_STATUS_NOTFOUND;
- }
- else if (p == NULL || data->linebuffer[linebuflen - 1] != '\xff')
- {
- /* The line is too long. Give the user the opportunity to
- enlarge the buffer. */
- __set_errno (ERANGE);
- H_ERRNO_SET (NETDB_INTERNAL);
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- }
- while (*p == '\0' || *p == '#' /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to get the next
- line of the file to parse. */
- || ! (parse_result = parse_line (p, result, data, buflen)));
-
- /* Filled in RESULT with the next entry from the database file. */
- return parse_result == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_SUCCESS;
-}
-
-
-/* Return the next entry from the database file, doing locking. */
-enum nss_status
-CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result,
- char *buffer, size_t buflen H_ERRNO_PROTO)
-{
- /* Return next entry in host file. */
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- __libc_lock_lock (lock);
-
- /* Be prepared that the set*ent function was not called before. */
- if (stream == NULL)
- {
- status = internal_setent (0);
-
- if (status == NSS_STATUS_SUCCESS && fgetpos (stream, &position) < 0)
- {
- fclose (stream);
- stream = NULL;
- status = NSS_STATUS_UNAVAIL;
- }
- }
-
- if (status == NSS_STATUS_SUCCESS)
- {
- /* If the last use was not by the getent function we need the
- position the stream. */
- if (last_use != getent)
- {
- if (fsetpos (stream, &position) < 0)
- status = NSS_STATUS_UNAVAIL;
- else
- last_use = getent;
- }
-
- if (status == NSS_STATUS_SUCCESS)
- {
- status = internal_getent (result, buffer, buflen H_ERRNO_ARG);
-
- /* Remember this position if we were successful. If the
- operation failed we give the user a chance to repeat the
- operation (perhaps the buffer was too small). */
- if (status == NSS_STATUS_SUCCESS)
- fgetpos (stream, &position);
- else
- /* We must make sure we reposition the stream the next call. */
- last_use = none;
- }
- }
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-/* Macro for defining lookup functions for this file-based database.
-
- NAME is the name of the lookup; e.g. `hostbyname'.
-
- KEYSIZE and KEYPATTERN are ignored here but used by ../nss_db/db-XXX.c.
-
- PROTO describes the arguments for the lookup key;
- e.g. `const char *hostname'.
-
- BREAK_IF_MATCH is a block of code which compares `struct STRUCTURE *result'
- to the lookup key arguments and does `break;' if they match. */
-
-#define DB_LOOKUP(name, keysize, keypattern, break_if_match, proto...) \
-enum nss_status \
-_nss_files_get##name##_r (proto, \
- struct STRUCTURE *result, \
- char *buffer, size_t buflen H_ERRNO_PROTO) \
-{ \
- enum nss_status status; \
- \
- __libc_lock_lock (lock); \
- \
- /* Reset file pointer to beginning or open file. */ \
- status = internal_setent (keep_stream); \
- \
- if (status == NSS_STATUS_SUCCESS) \
- { \
- /* Tell getent function that we have repositioned the file pointer. */ \
- last_use = getby; \
- \
- while ((status = internal_getent (result, buffer, buflen H_ERRNO_ARG)) \
- == NSS_STATUS_SUCCESS) \
- { break_if_match } \
- \
- if (! keep_stream) \
- internal_endent (); \
- } \
- \
- __libc_lock_unlock (lock); \
- \
- return status; \
-}
diff --git a/glibc-compat/nss_files/files-alias.c b/glibc-compat/nss_files/files-alias.c
deleted file mode 100644
index d9e5549998..0000000000
--- a/glibc-compat/nss_files/files-alias.c
+++ /dev/null
@@ -1,451 +0,0 @@
-/* Mail alias file parser in nss_files module.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <glibc-compat/include/aliases.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <bits/libc-lock.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "nsswitch.h"
-
-/* Locks the static variables in this file. */
-__libc_lock_define_initialized (static, lock)
-
-/* Maintenance of the shared stream open on the database file. */
-
-static FILE *stream;
-static fpos_t position;
-static enum { none, getent, getby } last_use;
-
-
-static enum nss_status
-internal_setent (void)
-{
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- if (stream == NULL)
- {
- stream = fopen ("/etc/aliases", "r");
-
- if (stream == NULL)
- status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
- else
- {
- /* We have to make sure the file is `closed on exec'. */
- int result, flags;
-
- result = flags = fcntl (fileno (stream), F_GETFD, 0);
- if (result >= 0)
- {
- flags |= FD_CLOEXEC;
- result = fcntl (fileno (stream), F_SETFD, flags);
- }
- if (result < 0)
- {
- /* Something went wrong. Close the stream and return a
- failure. */
- fclose (stream);
- stream = NULL;
- status = NSS_STATUS_UNAVAIL;
- }
- }
- }
- else
- rewind (stream);
-
- return status;
-}
-
-
-/* Thread-safe, exported version of that. */
-enum nss_status
-_nss_files_setaliasent (void)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_setent ();
-
- if (status == NSS_STATUS_SUCCESS && fgetpos (stream, &position) < 0)
- {
- fclose (stream);
- stream = NULL;
- status = NSS_STATUS_UNAVAIL;
- }
-
- last_use = getent;
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-
-/* Close the database file. */
-static void
-internal_endent (void)
-{
- if (stream != NULL)
- {
- fclose (stream);
- stream = NULL;
- }
-}
-
-
-/* Thread-safe, exported version of that. */
-enum nss_status
-_nss_files_endaliasent (void)
-{
- __libc_lock_lock (lock);
-
- internal_endent ();
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-/* Parsing the database file into `struct aliasent' data structures. */
-static enum nss_status
-get_next_alias (const char *match, struct aliasent *result,
- char *buffer, size_t buflen)
-{
- enum nss_status status = NSS_STATUS_NOTFOUND;
- int ignore = 0;
-
- result->alias_members_len = 0;
-
- while (1)
- {
- /* Now we are ready to process the input. We have to read a
- line and all its continuations and construct the array of
- string pointers. This pointers and the names itself have to
- be placed in BUFFER. */
- char *first_unused = buffer;
- size_t room_left = buflen - (buflen % __alignof__ (char *));
- char *line;
-
- /* Read the first line. It must contain the alias name and
- possibly some alias names. */
- first_unused[room_left - 1] = '\xff';
- line = fgets (first_unused, room_left, stream);
- if (line == NULL && feof (stream))
- /* Nothing to read. */
- break;
- else if (line == NULL || first_unused[room_left - 1] != '\xff')
- {
- /* The line is too long for our buffer. */
- no_more_room:
- __set_errno (ERANGE);
- status = NSS_STATUS_TRYAGAIN;
- break;
- }
- else
- {
- char *cp;
-
- /* If we are in IGNORE mode and the first character in the
- line is a white space we ignore the line and start
- reading the next. */
- if (ignore && isspace (*first_unused))
- continue;
-
- /* Terminate the line for any case. */
- cp = strpbrk (first_unused, "#\n");
- if (cp != NULL)
- *cp = '\0';
-
- /* Skip leading blanks. */
- while (isspace (*line))
- ++line;
-
- result->alias_name = first_unused;
- while (*line != '\0' && *line != ':')
- *first_unused++ = *line++;
- if (*line == '\0' || result->alias_name == first_unused)
- /* No valid name. Ignore the line. */
- continue;
-
- *first_unused++ = '\0';
- if (room_left < (size_t) (first_unused - result->alias_name))
- goto no_more_room;
- room_left -= first_unused - result->alias_name;
- ++line;
-
- /* When we search for a specific alias we can avoid all the
- difficult parts and compare now with the name we are
- looking for. If it does not match we simply ignore all
- lines until the next line containing the start of a new
- alias is found. */
- ignore = (match != NULL
- && __strcasecmp (result->alias_name, match) != 0);
-
- while (! ignore)
- {
- while (isspace (*line))
- ++line;
-
- cp = first_unused;
- while (*line != '\0' && *line != ',')
- *first_unused++ = *line++;
-
- if (first_unused != cp)
- {
- /* OK, we can have a regular entry or an include
- request. */
- if (*line != '\0')
- ++line;
- *first_unused++ = '\0';
-
- if (strncmp (cp, ":include:", 9) != 0)
- {
- if (room_left < (first_unused - cp) + sizeof (char *))
- goto no_more_room;
- room_left -= (first_unused - cp) + sizeof (char *);
-
- ++result->alias_members_len;
- }
- else
- {
- /* Oh well, we have to read the addressed file. */
- FILE *listfile;
- char *old_line = NULL;
-
- first_unused = cp;
-
- listfile = fopen (&cp[9], "r");
- /* If the file does not exist we simply ignore
- the statement. */
- if (listfile != NULL
- && (old_line = strdup (line)) != NULL)
- {
- while (! feof (listfile))
- {
- first_unused[room_left - 1] = '\xff';
- line = fgets (first_unused, room_left, listfile);
- if (line == NULL && feof (listfile))
- break;
- if (line == NULL
- || first_unused[room_left - 1] != '\xff')
- {
- free (old_line);
- goto no_more_room;
- }
-
- /* Parse the line. */
- cp = strpbrk (line, "#\n");
- if (cp != NULL)
- *cp = '\0';
-
- do
- {
- while (isspace (*line))
- ++line;
-
- cp = first_unused;
- while (*line != '\0' && *line != ',')
- *first_unused++ = *line++;
-
- if (*line != '\0')
- ++line;
-
- if (first_unused != cp)
- {
- *first_unused++ = '\0';
- if (room_left < ((first_unused - cp)
- + __alignof__ (char *)))
- {
- free (old_line);
- goto no_more_room;
- }
- room_left -= ((first_unused - cp)
- + __alignof__ (char *));
- ++result->alias_members_len;
- }
- }
- while (*line != '\0');
- }
- fclose (listfile);
-
- first_unused[room_left - 1] = '\0';
- strncpy (first_unused, old_line, room_left);
-
- if (old_line != NULL)
- free (old_line);
-
- if (first_unused[room_left - 1] != '\0')
- goto no_more_room;
- }
- }
- }
-
- if (*line == '\0')
- {
- /* Get the next line. But we must be careful. We
- must not read the whole line at once since it
- might belong to the current alias. Simply read
- the first character. If it is a white space we
- have a continuation line. Otherwise it is the
- beginning of a new alias and we can push back the
- just read character. */
- int ch;
-
- ch = fgetc (stream);
- if (ch == EOF || ch == '\n' || !isspace (ch))
- {
- size_t cnt;
-
- /* Now prepare the return. Provide string
- pointers for the currently selected aliases. */
- if (ch != EOF)
- ungetc (ch, stream);
-
- /* Adjust the pointer so it is aligned for
- storing pointers. */
- first_unused += __alignof__ (char *) - 1;
- first_unused -= ((first_unused - (char *) 0)
- % __alignof__ (char *));
- result->alias_members = (char **) first_unused;
-
- /* Compute addresses of alias entry strings. */
- cp = result->alias_name;
- for (cnt = 0; cnt < result->alias_members_len; ++cnt)
- {
- cp = strchr (cp, '\0') + 1;
- result->alias_members[cnt] = cp;
- }
-
- status = (result->alias_members_len == 0
- ? NSS_STATUS_RETURN : NSS_STATUS_SUCCESS);
- break;
- }
-
- /* The just read character is a white space and so
- can be ignored. */
- first_unused[room_left - 1] = '\xff';
- line = fgets (first_unused, room_left, stream);
- if (line == NULL && feof (stream))
- break;
- if (line == NULL || first_unused[room_left - 1] != '\xff')
- goto no_more_room;
- cp = strpbrk (line, "#\n");
- if (cp != NULL)
- *cp = '\0';
- }
- }
- }
-
- if (status != NSS_STATUS_NOTFOUND)
- /* We read something. In any case break here. */
- break;
- }
-
- return status;
-}
-
-
-enum nss_status
-_nss_files_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen)
-{
- /* Return next entry in host file. */
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- __libc_lock_lock (lock);
-
- /* Be prepared that the set*ent function was not called before. */
- if (stream == NULL)
- status = internal_setent ();
-
- if (status == NSS_STATUS_SUCCESS)
- {
- /* If the last use was not by the getent function we need the
- position the stream. */
- if (last_use != getent)
- {
- if (fsetpos (stream, &position) < 0)
- status = NSS_STATUS_UNAVAIL;
- else
- last_use = getent;
- }
-
- if (status == NSS_STATUS_SUCCESS)
- {
- result->alias_local = 1;
-
- /* Read lines until we get a definite result. */
- do
- status = get_next_alias (NULL, result, buffer, buflen);
- while (status == NSS_STATUS_RETURN);
-
- /* If we successfully read an entry remember this position. */
- if (status == NSS_STATUS_SUCCESS)
- fgetpos (stream, &position);
- else
- last_use = none;
- }
- }
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-
-enum nss_status
-_nss_files_getaliasbyname_r (const char *name, struct aliasent *result,
- char *buffer, size_t buflen)
-{
- /* Return next entry in host file. */
- enum nss_status status = NSS_STATUS_SUCCESS;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- __libc_lock_lock (lock);
-
- /* Open the stream or rest it. */
- status = internal_setent ();
- last_use = getby;
-
- if (status == NSS_STATUS_SUCCESS)
- {
- result->alias_local = 1;
-
- /* Read lines until we get a definite result. */
- do
- status = get_next_alias (name, result, buffer, buflen);
- while (status == NSS_STATUS_RETURN);
- }
-
- internal_endent ();
-
- __libc_lock_unlock (lock);
-
- return status;
-}
diff --git a/glibc-compat/nss_files/files-ethers.c b/glibc-compat/nss_files/files-ethers.c
deleted file mode 100644
index 290d931c97..0000000000
--- a/glibc-compat/nss_files/files-ethers.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#include <string.h>
-#include <netinet/if_ether.h>
-
-/* Because the `ethers' lookup does not fit so well in the scheme so
- we define a dummy struct here which helps us to use the available
- functions. */
-struct etherent
-{
- const char *e_name;
- struct ether_addr e_addr;
-};
-struct etherent_data {};
-
-#define ENTNAME etherent
-#define DATABASE "ethers"
-#include "files-parse.c"
-LINE_PARSER
-("#",
- /* Read the ethernet address: 6 x 8bit hexadecimal number. */
- {
- size_t cnt;
-
- for (cnt = 0; cnt < 6; ++cnt)
- {
- unsigned int number;
-
- if (cnt < 5)
- INT_FIELD (number, ISCOLON , 0, 16, (unsigned int))
- else
- INT_FIELD (number, isspace, 0, 16, (unsigned int))
-
- if (number > 0xff)
- return 0;
- result->e_addr.ether_addr_octet[cnt] = number;
- }
- };
- STRING_FIELD (result->e_name, isspace, 1);
- )
-
-
-#include GENERIC
-
-DB_LOOKUP (hostton, 1 + strlen (name), (".%s", name),
- {
- if (strcmp (result->e_name, name) == 0)
- break;
- }, const char *name)
-
-DB_LOOKUP (ntohost, 18, ("=%x:%x:%x:%x:%x:%x",
- addr->ether_addr_octet[0], addr->ether_addr_octet[1],
- addr->ether_addr_octet[2], addr->ether_addr_octet[3],
- addr->ether_addr_octet[4], addr->ether_addr_octet[5]),
- {
- if (memcmp (&result->e_addr, addr,
- sizeof (struct ether_addr)) == 0)
- break;
- }, struct ether_addr *addr)
diff --git a/glibc-compat/nss_files/files-grp.c b/glibc-compat/nss_files/files-grp.c
deleted file mode 100644
index ac9b632d42..0000000000
--- a/glibc-compat/nss_files/files-grp.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Group file parser in nss_files module.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <glibc-compat/include/grp.h>
-
-#define STRUCTURE group
-#define ENTNAME grent
-#define DATABASE "group"
-struct grent_data {};
-
-/* Our parser function is already defined in fgetgrent.c, so use that.
- to parse lines from the database file. */
-#define EXTERN_PARSER
-#include "files-parse.c"
-#include GENERIC
-
-DB_LOOKUP (grnam, 1 + strlen (name), (".%s", name),
- {
- if (name[0] != '-' && name[0] != '+'
- && ! strcmp (name, result->gr_name))
- break;
- }, const char *name)
-
-DB_LOOKUP (grgid, 20, ("=%lu", (unsigned long int) gid),
- {
- if (result->gr_gid == gid && result->gr_name[0] != '+'
- && result->gr_name[0] != '-')
- break;
- }, gid_t gid)
diff --git a/glibc-compat/nss_files/files-hosts.c b/glibc-compat/nss_files/files-hosts.c
deleted file mode 100644
index 1b96f74b35..0000000000
--- a/glibc-compat/nss_files/files-hosts.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Hosts file parser in nss_files module.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <glibc-compat/include/netdb.h>
-#include <resolv.h>
-
-
-/* Get implementation for some internal functions. */
-#include "../resolv/mapv4v6addr.h"
-
-
-#define ENTNAME hostent
-#define DATABASE "hosts"
-#define NEED_H_ERRNO
-
-#define ENTDATA hostent_data
-struct hostent_data
- {
- unsigned char host_addr[16]; /* IPv4 or IPv6 address. */
- char *h_addr_ptrs[2]; /* Points to that and null terminator. */
- };
-
-#define TRAILING_LIST_MEMBER h_aliases
-#define TRAILING_LIST_SEPARATOR_P isspace
-#include "files-parse.c"
-LINE_PARSER
-("#",
- {
- char *addr;
-
- STRING_FIELD (addr, isspace, 1);
-
- /* Parse address. */
- if (inet_pton (AF_INET, addr, entdata->host_addr) > 0)
- {
- if (_res.options & RES_USE_INET6)
- {
- map_v4v6_address ((char *) entdata->host_addr,
- (char *) entdata->host_addr);
- result->h_addrtype = AF_INET6;
- result->h_length = IN6ADDRSZ;
- }
- else
- {
- result->h_addrtype = AF_INET;
- result->h_length = INADDRSZ;
- }
- }
- else if (inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
- {
- result->h_addrtype = AF_INET6;
- result->h_length = IN6ADDRSZ;
- }
- else
- /* Illegal address: ignore line. */
- return 0;
-
- /* Store a pointer to the address in the expected form. */
- entdata->h_addr_ptrs[0] = entdata->host_addr;
- entdata->h_addr_ptrs[1] = NULL;
- result->h_addr_list = entdata->h_addr_ptrs;
-
- STRING_FIELD (result->h_name, isspace, 1);
- })
-
-#include "files-XXX.c"
-
-DB_LOOKUP (hostbyname, ,,
- {
- if (result->h_addrtype != ((_res.options & RES_USE_INET6)
- ? AF_INET6 : AF_INET))
- continue;
- LOOKUP_NAME_CASE (h_name, h_aliases)
- }, const char *name)
-
-DB_LOOKUP (hostbyname2, ,,
- {
- if (result->h_addrtype != af)
- continue;
- LOOKUP_NAME_CASE (h_name, h_aliases)
- }, const char *name, int af)
-
-DB_LOOKUP (hostbyaddr, ,,
- {
- if (result->h_addrtype == type && result->h_length == len &&
- ! memcmp (addr, result->h_addr_list[0], len))
- break;
- }, const char *addr, int len, int type)
diff --git a/glibc-compat/nss_files/files-netgrp.c b/glibc-compat/nss_files/files-netgrp.c
deleted file mode 100644
index 8820e6a02c..0000000000
--- a/glibc-compat/nss_files/files-netgrp.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/* Netgroup file parser in nss_files modules.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <ctype.h>
-#include <errno.h>
-#include <glibc-compat/include/netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "nsswitch.h"
-#include "netgroup.h"
-
-#define DATAFILE "/etc/netgroup"
-
-
-#define EXPAND(needed) \
- do \
- { \
- size_t old_cursor = result->cursor - result->data; \
- \
- result->data_size += 512 > 2 * needed ? 512 : 2 * needed; \
- result->data = realloc (result->data, result->data_size); \
- \
- if (result->data == NULL) \
- { \
- status = NSS_STATUS_UNAVAIL; \
- goto the_end; \
- } \
- \
- result->cursor = result->data + old_cursor; \
- } \
- while (0)
-
-
-enum nss_status
-_nss_files_setnetgrent (const char *group, struct __netgrent *result)
-{
- FILE *fp;
- enum nss_status status;
-
- if (group[0] == '\0')
- return NSS_STATUS_UNAVAIL;
-
- /* Find the netgroups file and open it. */
- fp = fopen (DATAFILE, "r");
- if (fp == NULL)
- status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
- else
- {
- /* Read the file line by line and try to find the description
- GROUP. We must take care for long lines. */
- char *line = NULL;
- size_t line_len = 0;
- const ssize_t group_len = strlen (group);
-
- status = NSS_STATUS_NOTFOUND;
- result->cursor = result->data;
-
- while (!feof (fp))
- {
- ssize_t curlen = getline (&line, &line_len, fp);
- int found;
-
- if (curlen < 0)
- {
- status = NSS_STATUS_NOTFOUND;
- break;
- }
-
- found = (curlen > group_len && strncmp (line, group, group_len) == 0
- && isspace (line[group_len]));
-
- /* Read the whole line (including continuation) and store it
- if FOUND in nonzero. Otherwise we don't need it. */
- if (found)
- {
- /* Store the data from the first line. */
- EXPAND (curlen - group_len);
- memcpy (result->cursor, &line[group_len + 1],
- curlen - group_len);
- result->cursor += (curlen - group_len) - 1;
- }
-
- while (line[curlen - 1] == '\n' && line[curlen - 2] == '\\')
- {
- /* Yes, we have a continuation line. */
- if (found)
- /* Remove these characters from the stored line. */
- result->cursor -= 2;
-
- /* Get next line. */
- curlen = getline (&line, &line_len, fp);
- if (curlen <= 0)
- break;
-
- if (found)
- {
- /* Make sure we have enough room. */
- EXPAND (1 + curlen + 1);
-
- /* Add separator in case next line starts immediately. */
- *result->cursor++ = ' ';
-
- /* Copy new line. */
- memcpy (result->cursor, line, curlen + 1);
- result->cursor += curlen;
- }
- }
-
- if (found)
- {
- /* Now we have read the line. */
- status = NSS_STATUS_SUCCESS;
- result->cursor = result->data;
- result->first = 1;
- break;
- }
- }
-
- the_end:
- /* We don't need the file and the line buffer anymore. */
- free (line);
- fclose (fp);
- }
-
- return status;
-}
-
-
-int
-_nss_files_endnetgrent (struct __netgrent *result)
-{
- /* Free allocated memory for data if some is present. */
- if (result->data != NULL)
- {
- free (result->data);
- result->data = NULL;
- result->data_size = 0;
- result->cursor = NULL;
- }
-
- return NSS_STATUS_SUCCESS;
-}
-
-
-enum nss_status
-_nss_netgroup_parseline (char **cursor, struct __netgrent *result,
- char *buffer, int buflen)
-{
- enum nss_status status;
- const char *host, *user, *domain;
- char *cp = *cursor;
-
- /* Some sanity checks. */
- if (cp == NULL)
- return NSS_STATUS_NOTFOUND;
-
- /* First skip leading spaces. */
- while (isspace (*cp))
- ++cp;
-
- if (*cp != '(')
- {
- /* We have a list of other netgroups. */
- char *name = cp;
-
- while (*cp != '\0' && ! isspace (*cp))
- ++cp;
-
- if (name != cp)
- {
- /* It is another netgroup name. */
- int last = *cp == '\0';
-
- result->type = group_val;
- result->val.group = name;
- *cp = '\0';
- if (! last)
- ++cp;
- *cursor = cp;
- result->first = 0;
-
- return NSS_STATUS_SUCCESS;
- }
-
- return result->first ? NSS_STATUS_NOTFOUND : NSS_STATUS_RETURN;
- }
-
- /* Match host name. */
- host = ++cp;
- while (*cp != ',')
- if (*cp++ == '\0')
- return result->first ? NSS_STATUS_NOTFOUND : NSS_STATUS_RETURN;
-
- /* Match user name. */
- user = ++cp;
- while (*cp != ',')
- if (*cp++ == '\0')
- return result->first ? NSS_STATUS_NOTFOUND : NSS_STATUS_RETURN;
-
- /* Match domain name. */
- domain = ++cp;
- while (*cp != ')')
- if (*cp++ == '\0')
- return result->first ? NSS_STATUS_NOTFOUND : NSS_STATUS_RETURN;
- ++cp;
-
-
- /* When we got here we have found an entry. Before we can copy it
- to the private buffer we have to make sure it is big enough. */
- if (cp - host > buflen)
- {
- __set_errno (ERANGE);
- status = NSS_STATUS_UNAVAIL;
- }
- else
- {
- memcpy (buffer, host, cp - host);
- result->type = triple_val;
-
- buffer[(user - host) - 1] = '\0';
- result->val.triple.host = *host == ',' ? NULL : buffer;
-
- buffer[(domain - host) - 1] = '\0';
- result->val.triple.user = *user == ',' ? NULL : buffer + (user - host);
-
- buffer[(cp - host) - 1] = '\0';
- result->val.triple.domain =
- *domain == ')' ? NULL : buffer + (domain - host);
-
- status = NSS_STATUS_SUCCESS;
-
- /* Remember where we stopped reading. */
- *cursor = cp;
-
- result->first = 0;
- }
-
- return status;
-}
-
-
-enum nss_status
-_nss_files_getnetgrent_r (struct __netgrent *result, char *buffer, int buflen)
-{
- enum nss_status status;
-
- status = _nss_netgroup_parseline (&result->cursor, result, buffer, buflen);
-
- return status;
-}
diff --git a/glibc-compat/nss_files/files-network.c b/glibc-compat/nss_files/files-network.c
deleted file mode 100644
index 45ded2fedf..0000000000
--- a/glibc-compat/nss_files/files-network.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Networks file parser in nss_files module.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <glibc-compat/include/netdb.h>
-
-#define ENTNAME netent
-#define DATABASE "networks"
-
-struct netent_data {};
-
-#define TRAILING_LIST_MEMBER n_aliases
-#define TRAILING_LIST_SEPARATOR_P isspace
-#include "files-parse.c"
-LINE_PARSER
-("#",
- {
- char *addr;
-
- STRING_FIELD (result->n_name, isspace, 1);
-
- STRING_FIELD (addr, isspace, 1);
- result->n_net = inet_network (addr);
- result->n_addrtype = AF_INET;
-
- })
-
-#include "files-XXX.c"
-
-DB_LOOKUP (netbyname, ,,
- LOOKUP_NAME_CASE (n_name, n_aliases),
- const char *name)
-
-DB_LOOKUP (netbyaddr, ,,
- {
- if (result->n_addrtype == type && result->n_net == net)
- /* Bingo! */
- break;
- }, unsigned long int net, int type)
diff --git a/glibc-compat/nss_files/files-parse.c b/glibc-compat/nss_files/files-parse.c
deleted file mode 100644
index 49c08153c9..0000000000
--- a/glibc-compat/nss_files/files-parse.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/* Common code for file-based database parsers in nss_files module.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-
-/* These symbols are defined by the including source file:
-
- ENTNAME -- database name of the structure and functions (hostent, pwent).
- STRUCTURE -- struct name, define only if not ENTNAME (passwd, group).
- DATABASE -- string of the database file's name ("hosts", "passwd").
-
- ENTDATA -- if defined, `struct ENTDATA' is used by the parser to store
- things pointed to by the resultant `struct STRUCTURE'.
-
- NEED_H_ERRNO - defined iff an arg `int *herrnop' is used.
-
- Also see files-XXX.c. */
-
-#define CONCAT(a,b) CONCAT1(a,b)
-#define CONCAT1(a,b) a##b
-
-#ifndef STRUCTURE
-# define STRUCTURE ENTNAME
-#endif
-
-
-struct parser_data
- {
-#ifdef ENTDATA
- struct ENTDATA entdata;
-# define ENTDATA_DECL(data) struct ENTDATA *const entdata = &data->entdata;
-#else
-# define ENTDATA_DECL(data)
-#endif
- char linebuffer[0];
- };
-
-#ifdef ENTDATA
-/* The function can't be exported, because the entdata structure
- is defined only in files-foo.c. */
-# define parser_stclass static
-#else
-/* Export the line parser function so it can be used in nss_db. */
-# define parser_stclass /* Global */
-# define parse_line CONCAT(_nss_files_parse_,ENTNAME)
-#endif
-
-
-#ifdef EXTERN_PARSER
-
-/* The parser is defined in a different module. */
-extern int parse_line (char *line, struct STRUCTURE *result,
- struct parser_data *data, size_t datalen);
-
-# define LINE_PARSER(EOLSET, BODY) /* Do nothing */
-
-#else
-
-/* Define a line parsing function. */
-
-# define LINE_PARSER(EOLSET, BODY) \
-parser_stclass int \
-parse_line (char *line, struct STRUCTURE *result, \
- struct parser_data *data, size_t datalen) \
-{ \
- ENTDATA_DECL (data) \
- char *p = strpbrk (line, EOLSET "\n"); \
- if (p != NULL) \
- *p = '\0'; \
- BODY; \
- TRAILING_LIST_PARSER; \
- return 1; \
-}
-
-
-# define STRING_FIELD(variable, terminator_p, swallow) \
- { \
- variable = line; \
- while (*line != '\0' && !terminator_p (*line)) \
- ++line; \
- if (*line != '\0') \
- { \
- *line = '\0'; \
- do \
- ++line; \
- while (swallow && terminator_p (*line)); \
- } \
- }
-
-# define INT_FIELD(variable, terminator_p, swallow, base, convert) \
- { \
- char *endp; \
- variable = convert (strtoul (line, &endp, base)); \
- if (endp == line) \
- return 0; \
- else if (terminator_p (*endp)) \
- do \
- ++endp; \
- while (swallow && terminator_p (*endp)); \
- else if (*endp != '\0') \
- return 0; \
- line = endp; \
- }
-
-# define INT_FIELD_MAYBE_NULL(variable, terminator_p, swallow, base, convert, default) \
- { \
- char *endp; \
- if (*line == '\0') \
- /* We expect some more input, so don't allow the string to end here. */ \
- return 0; \
- variable = convert (strtoul (line, &endp, base)); \
- if (endp == line) \
- variable = default; \
- if (terminator_p (*endp)) \
- do \
- ++endp; \
- while (swallow && terminator_p (*endp)); \
- else if (*endp != '\0') \
- return 0; \
- line = endp; \
- }
-
-# define ISCOLON(c) ((c) == ':')
-
-
-# ifndef TRAILING_LIST_MEMBER
-# define TRAILING_LIST_PARSER /* Nothing to do. */
-# else
-
-# define TRAILING_LIST_PARSER \
-{ \
- char **list = parse_list (line, data, datalen); \
- if (list) \
- result->TRAILING_LIST_MEMBER = list; \
- else \
- return -1; /* -1 indicates we ran out of space. */ \
-}
-
-static inline char **
-__attribute ((always_inline))
-parse_list (char *line, struct parser_data *data, size_t datalen)
-{
- char *eol, **list, **p;
-
- if (line >= data->linebuffer && line < (char *) data + datalen)
- /* Find the end of the line buffer, we will use the space in DATA after
- it for storing the vector of pointers. */
- eol = strchr (line, '\0') + 1;
- else
- /* LINE does not point within DATA->linebuffer, so that space is
- not being used for scratch space right now. We can use all of
- it for the pointer vector storage. */
- eol = data->linebuffer;
- /* Adjust the pointer so it is aligned for storing pointers. */
- eol += __alignof__ (char *) - 1;
- eol -= (eol - (char *) 0) % __alignof__ (char *);
- /* We will start the storage here for the vector of pointers. */
- list = (char **) eol;
-
- p = list;
- while (1)
- {
- char *elt;
-
- if ((size_t) ((char *) &p[1] - (char *) data) > datalen)
- {
- /* We cannot fit another pointer in the buffer. */
- __set_errno (ERANGE);
- return NULL;
- }
- if (*line == '\0')
- break;
-
- /* Skip leading white space. This might not be portable but useful. */
- while (isspace (*line))
- ++line;
-
- elt = line;
- while (1)
- {
- if (*line == '\0' || TRAILING_LIST_SEPARATOR_P (*line))
- {
- /* End of the next entry. */
- if (line > elt)
- /* We really found some data. */
- *p++ = elt;
-
- /* Terminate string if necessary. */
- if (*line != '\0')
- *line++ = '\0';
- break;
- }
- ++line;
- }
- }
- *p = NULL;
-
- return list;
-}
-
-# endif /* TRAILING_LIST_MEMBER */
-#endif /* EXTERN_PARSER */
-
-
-#define LOOKUP_NAME(nameelt, aliaselt) \
-{ \
- char **ap; \
- if (! strcmp (name, result->nameelt)) \
- break; \
- for (ap = result->aliaselt; *ap; ++ap) \
- if (! strcmp (name, *ap)) \
- break; \
- if (*ap) \
- break; \
-}
-
-#define LOOKUP_NAME_CASE(nameelt, aliaselt) \
-{ \
- char **ap; \
- if (! __strcasecmp (name, result->nameelt)) \
- break; \
- for (ap = result->aliaselt; *ap; ++ap) \
- if (! __strcasecmp (name, *ap)) \
- break; \
- if (*ap) \
- break; \
-}
-
-
-/* This is defined by db-*.c to include "../nss_db/db-XXX.c" instead. */
-#ifndef GENERIC
-# define GENERIC "files-XXX.c"
-#endif
diff --git a/glibc-compat/nss_files/files-proto.c b/glibc-compat/nss_files/files-proto.c
deleted file mode 100644
index 6c53cce6a1..0000000000
--- a/glibc-compat/nss_files/files-proto.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Protocols file parser in nss_files module.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <glibc-compat/include/netdb.h>
-
-
-#define ENTNAME protoent
-#define DATABASE "protocols"
-
-struct protoent_data {};
-
-#define TRAILING_LIST_MEMBER p_aliases
-#define TRAILING_LIST_SEPARATOR_P isspace
-#include "files-parse.c"
-LINE_PARSER
-("#",
- STRING_FIELD (result->p_name, isspace, 1);
- INT_FIELD (result->p_proto, isspace, 1, 10,);
- )
-
-#include GENERIC
-
-DB_LOOKUP (protobyname, 1 + strlen (name), (".%s", name),
- LOOKUP_NAME (p_name, p_aliases),
- const char *name)
-
-DB_LOOKUP (protobynumber, 20, ("=%d", proto),
- {
- if (result->p_proto == proto)
- break;
- }, int proto)
diff --git a/glibc-compat/nss_files/files-pwd.c b/glibc-compat/nss_files/files-pwd.c
deleted file mode 100644
index 621d70e065..0000000000
--- a/glibc-compat/nss_files/files-pwd.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* User file parser in nss_files module.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <glibc-compat/include/pwd.h>
-
-#define STRUCTURE passwd
-#define ENTNAME pwent
-#define DATABASE "passwd"
-struct pwent_data {};
-
-/* Our parser function is already defined in fgetpwent_r.c, so use that
- to parse lines from the database file. */
-#define EXTERN_PARSER
-#include "files-parse.c"
-#include GENERIC
-
-DB_LOOKUP (pwnam, 1 + strlen (name), (".%s", name),
- {
- if (name[0] != '+' && name[0] != '-'
- && ! strcmp (name, result->pw_name))
- break;
- }, const char *name)
-
-DB_LOOKUP (pwuid, 20, ("=%lu", (unsigned long int) uid),
- {
- if (result->pw_uid == uid && result->pw_name[0] != '+'
- && result->pw_name[0] != '-')
- break;
- }, uid_t uid)
diff --git a/glibc-compat/nss_files/files-rpc.c b/glibc-compat/nss_files/files-rpc.c
deleted file mode 100644
index 4e73e0e06b..0000000000
--- a/glibc-compat/nss_files/files-rpc.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* SunRPC program number file parser in nss_files module.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <glibc-compat/include/rpc/netdb.h>
-
-
-#define ENTNAME rpcent
-#define DATABASE "rpc"
-
-struct rpcent_data {};
-
-#define TRAILING_LIST_MEMBER r_aliases
-#define TRAILING_LIST_SEPARATOR_P isspace
-#include "files-parse.c"
-LINE_PARSER
-("#",
- STRING_FIELD (result->r_name, isspace, 1);
- INT_FIELD (result->r_number, isspace, 1, 10,);
- )
-
-#include GENERIC
-
-DB_LOOKUP (rpcbyname, 1 + strlen (name), (".%s", name),
- LOOKUP_NAME (r_name, r_aliases),
- const char *name)
-
-DB_LOOKUP (rpcbynumber, 20, ("=%d", number),
- {
- if (result->r_number == number)
- break;
- }, int number)
diff --git a/glibc-compat/nss_files/files-service.c b/glibc-compat/nss_files/files-service.c
deleted file mode 100644
index 96255dd223..0000000000
--- a/glibc-compat/nss_files/files-service.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Services file parser in nss_files module.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <netinet/in.h>
-#include <glibc-compat/include/netdb.h>
-
-
-#define ENTNAME servent
-#define DATABASE "services"
-
-struct servent_data {};
-
-#define TRAILING_LIST_MEMBER s_aliases
-#define TRAILING_LIST_SEPARATOR_P isspace
-#include "files-parse.c"
-#define ISSLASH(c) ((c) == '/')
-LINE_PARSER
-("#",
- STRING_FIELD (result->s_name, isspace, 1);
- INT_FIELD (result->s_port, ISSLASH, 10, 0, htons);
- STRING_FIELD (result->s_proto, isspace, 1);
- )
-
-#include GENERIC
-
-DB_LOOKUP (servbyname, 2 + strlen (name) + (proto ? strlen (proto) : 0),
- (".%s/%s", name, proto ?: ""),
- {
- /* Must match both protocol (if specified) and name. */
- if (proto != NULL && strcmp (result->s_proto, proto))
- continue;
- LOOKUP_NAME (s_name, s_aliases)
- },
- const char *name, const char *proto)
-
-DB_LOOKUP (servbyport, 21 + (proto ? strlen (proto) : 0),
- ("=%d/%s", ntohs (port), proto ?: ""),
- {
- /* Must match both port and protocol. */
- if (result->s_port == port
- && (proto == NULL
- || strcmp (result->s_proto, proto) == 0))
- break;
- }, int port, const char *proto)
diff --git a/glibc-compat/nss_files/files-spwd.c b/glibc-compat/nss_files/files-spwd.c
deleted file mode 100644
index f7f25fd304..0000000000
--- a/glibc-compat/nss_files/files-spwd.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* User file parser in nss_files module.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <glibc-compat/include/shadow.h>
-
-#define STRUCTURE spwd
-#define ENTNAME spent
-#define DATABASE "shadow"
-struct spent_data {};
-
-/* Our parser function is already defined in sgetspent_r.c, so use that
- to parse lines from the database file. */
-#define EXTERN_PARSER
-#include "files-parse.c"
-#include GENERIC
-
-DB_LOOKUP (spnam, 1 + strlen (name), (".%s", name),
- {
- if (name[0] != '+' && name[0] != '-'
- && ! strcmp (name, result->sp_namp))
- break;
- }, const char *name)
diff --git a/glibc-compat/nss_nis/nis-alias.c b/glibc-compat/nss_nis/nis-alias.c
deleted file mode 100644
index 14149699d3..0000000000
--- a/glibc-compat/nss_nis/nis-alias.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/* Copyright (C) 1996, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <glibc-compat/include/aliases.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-__libc_lock_define_initialized (static, lock)
-
-static bool_t new_start = 1;
-static char *oldkey = NULL;
-static int oldkeylen = 0;
-
-static int
-_nss_nis_parse_aliasent (const char *key, char *alias, struct aliasent *result,
- char *buffer, size_t buflen)
-{
- char *first_unused = buffer + strlen (alias) + 1;
- size_t room_left =
- buflen - (buflen % __alignof__ (char *)) - strlen (alias) - 2;
- char *line;
- char *cp;
-
- result->alias_members_len = 0;
- *first_unused = '\0';
- first_unused++;
- strcpy (first_unused, key);
-
- if (first_unused[room_left - 1] != '\0')
- {
- /* The line is too long for our buffer. */
- no_more_room:
- __set_errno (ERANGE);
- return -1;
- }
-
- result->alias_name = first_unused;
-
- /* Terminate the line for any case. */
- cp = strpbrk (alias, "#\n");
- if (cp != NULL)
- *cp = '\0';
-
- first_unused += strlen (result->alias_name) + 1;
- /* Adjust the pointer so it is aligned for
- storing pointers. */
- first_unused += __alignof__ (char *) - 1;
- first_unused -= ((first_unused - (char *) 0) % __alignof__ (char *));
- result->alias_members = (char **) first_unused;
-
- line = alias;
-
- while (*line != '\0')
- {
- /* Skip leading blanks. */
- while (isspace (*line))
- line++;
-
- if (*line == '\0')
- break;
-
- if (room_left < sizeof (char *))
- goto no_more_room;
- room_left -= sizeof (char *);
- result->alias_members[result->alias_members_len] = line;
-
- while (*line != '\0' && *line != ',')
- line++;
-
- if (line != result->alias_members[result->alias_members_len])
- {
- *line = '\0';
- line++;
- result->alias_members_len++;
- }
- }
- return result->alias_members_len == 0 ? 0 : 1;
-}
-
-enum nss_status
-_nss_nis_setaliasent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_endaliasent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-internal_nis_getaliasent_r (struct aliasent *alias, char *buffer,
- size_t buflen)
-{
- char *domain;
- char *result;
- int len;
- char *outkey;
- int keylen;
- char *p;
- int parse_res;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- alias->alias_local = 0;
-
- /* Get the next entry until we found a correct one. */
- do
- {
- enum nss_status retval;
-
- if (new_start)
- retval = yperr2nss (yp_first (domain, "mail.aliases",
- &outkey, &keylen, &result, &len));
- else
- retval = yperr2nss ( yp_next (domain, "mail.aliases", oldkey,
- oldkeylen, &outkey, &keylen,
- &result, &len));
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_nis_parse_aliasent (outkey, p, alias, buffer, buflen);
- if (parse_res == -1)
- {
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- free (oldkey);
- oldkey = outkey;
- oldkeylen = keylen;
- new_start = 0;
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getaliasent_r (struct aliasent *alias, char *buffer, size_t buflen)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_getaliasent_r (alias, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias,
- char *buffer, size_t buflen)
-{
- enum nss_status retval;
- int parse_res;
- char *domain;
- char *result;
- int len;
- char *p;
- size_t namlen = strlen (name);
- char name2[namlen + 1];
- int i;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- /* Convert name to lowercase. */
- for (i = 0; i < namlen; ++i)
- name2[i] = tolower (name[i]);
- name2[i] = '\0';
-
- retval = yperr2nss (yp_match (domain, "mail.aliases", name, namlen,
- &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- alias->alias_local = 0;
- parse_res = _nss_nis_parse_aliasent (name, p, alias, buffer, buflen);
- if (parse_res == -1)
- return NSS_STATUS_TRYAGAIN;
- else
- if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
- else
- return NSS_STATUS_SUCCESS;
-}
diff --git a/glibc-compat/nss_nis/nis-ethers.c b/glibc-compat/nss_nis/nis-ethers.c
deleted file mode 100644
index 54b99dcba9..0000000000
--- a/glibc-compat/nss_nis/nis-ethers.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-#include <netinet/if_ether.h>
-
-#include "nss-nis.h"
-
-/* Protect global state against multiple changers */
-__libc_lock_define_initialized (static, lock)
-
-struct ether
-{
- const char *e_name;
- struct ether_addr e_addr;
-};
-
-/* Get the declaration of the parser function. */
-#define ENTNAME etherent
-#define STRUCTURE ether
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-struct response
-{
- char *val;
- struct response *next;
-};
-
-static struct response *start = NULL;
-static struct response *next = NULL;
-
-static int
-saveit (int instatus, char *inkey, int inkeylen, char *inval,
- int invallen, char *indata)
-{
- if (instatus != YP_TRUE)
- return instatus;
-
- if (inkey && inkeylen > 0 && inval && invallen > 0)
- {
- if (start == NULL)
- {
- start = malloc (sizeof (struct response));
- next = start;
- }
- else
- {
- next->next = malloc (sizeof (struct response));
- next = next->next;
- }
- next->next = NULL;
- next->val = malloc (invallen + 1);
- strncpy (next->val, inval, invallen);
- next->val[invallen] = '\0';
- }
-
- return 0;
-}
-
-enum nss_status
-internal_nis_setetherent (void)
-{
- char *domainname;
- struct ypall_callback ypcb;
- enum nss_status status;
-
- yp_get_default_domain (&domainname);
-
- while (start != NULL)
- {
- if (start->val != NULL)
- free (start->val);
- next = start;
- start = start->next;
- free (next);
- }
- start = NULL;
-
- ypcb.foreach = saveit;
- ypcb.data = NULL;
- status = yperr2nss (yp_all (domainname, "ethers.byname", &ypcb));
- next = start;
-
- return status;
-}
-
-enum nss_status
-_nss_nis_setetherent (void)
-{
- enum nss_status result;
-
- __libc_lock_lock (lock);
-
- result = internal_nis_setetherent ();
-
- __libc_lock_unlock (lock);
-
- return result;
-}
-
-enum nss_status
-_nss_nis_endetherent (void)
-{
- __libc_lock_lock (lock);
-
- while (start != NULL)
- {
- if (start->val != NULL)
- free (start->val);
- next = start;
- start = start->next;
- free (next);
- }
- start = NULL;
- next = NULL;
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-internal_nis_getetherent_r (struct ether *eth, char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- int parse_res;
-
- if (start == NULL)
- internal_nis_setetherent ();
-
- /* Get the next entry until we found a correct one. */
- do
- {
- char *p;
-
- if (next == NULL)
- return NSS_STATUS_NOTFOUND;
- p = strncpy (buffer, next->val, buflen);
- next = next->next;
-
- while (isspace (*p))
- ++p;
-
- parse_res = _nss_files_parse_etherent (p, eth, data, buflen);
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getetherent_r (struct ether *result, char *buffer, size_t buflen)
-{
- int status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_getetherent_r (result, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_gethostton_r (const char *name, struct ether *eth,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *p;
- int len, parse_res;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- retval = yperr2nss (yp_match (domain, "ethers.byname", name,
- strlen (name), &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_etherent (p, eth, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getntohost_r (struct ether_addr *addr, struct ether *eth,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *p;
- int len, nlen, parse_res;
- char buf[33];
-
- if (addr == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- nlen = sprintf (buf, "%x:%x:%x:%x:%x:%x",
- (int) addr->ether_addr_octet[0],
- (int) addr->ether_addr_octet[1],
- (int) addr->ether_addr_octet[2],
- (int) addr->ether_addr_octet[3],
- (int) addr->ether_addr_octet[4],
- (int) addr->ether_addr_octet[5]);
-
- retval = yperr2nss (yp_match (domain, "ethers.byaddr", buf,
- nlen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_etherent (p, eth, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
diff --git a/glibc-compat/nss_nis/nis-grp.c b/glibc-compat/nss_nis/nis-grp.c
deleted file mode 100644
index 5b8e838bdc..0000000000
--- a/glibc-compat/nss_nis/nis-grp.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <glibc-compat/include/grp.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-/* Get the declaration of the parser function. */
-#define ENTNAME grent
-#define STRUCTURE group
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-/* Protect global state against multiple changers */
-__libc_lock_define_initialized (static, lock)
-
-static bool_t new_start = 1;
-static char *oldkey = NULL;
-static int oldkeylen = 0;
-
-enum nss_status
-_nss_nis_setgrent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_endgrent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-internal_nis_getgrent_r (struct group *grp, char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- char *domain, *result, *outkey;
- int len, keylen, parse_res;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- /* Get the next entry until we found a correct one. */
- do
- {
- enum nss_status retval;
- char *p;
-
- if (new_start)
- retval = yperr2nss (yp_first (domain, "group.byname",
- &outkey, &keylen, &result, &len));
- else
- retval = yperr2nss ( yp_next (domain, "group.byname",
- oldkey, oldkeylen,
- &outkey, &keylen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_grent (p, grp, data, buflen);
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
-
- free (oldkey);
- oldkey = outkey;
- oldkeylen = keylen;
- new_start = 0;
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getgrent_r (struct group *result, char *buffer, size_t buflen)
-{
- int status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_getgrent_r (result, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_getgrnam_r (const char *name, struct group *grp,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *p;
- int len, parse_res;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- retval = yperr2nss (yp_match (domain, "group.byname", name,
- strlen (name), &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_grent (p, grp, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getgrgid_r (gid_t gid, struct group *grp,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *p;
- int len, nlen, parse_res;
- char buf[32];
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- nlen = sprintf (buf, "%d", gid);
-
- retval = yperr2nss (yp_match (domain, "group.bygid", buf,
- nlen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_grent (p, grp, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
diff --git a/glibc-compat/nss_nis/nis-hosts.c b/glibc-compat/nss_nis/nis-hosts.c
deleted file mode 100644
index c6c413c55d..0000000000
--- a/glibc-compat/nss_nis/nis-hosts.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <ctype.h>
-#include <glibc-compat/include/netdb.h>
-#include <string.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <resolv.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-/* Get implementation for some internal functions. */
-#include "../../resolv/mapv4v6addr.h"
-#include "../../resolv/mapv4v6hostent.h"
-
-#define ENTNAME hostent
-#define DATABASE "hosts"
-#define NEED_H_ERRNO
-
-#define ENTDATA hostent_data
-struct hostent_data
- {
- unsigned char host_addr[16]; /* IPv4 or IPv6 address. */
- char *h_addr_ptrs[2]; /* Points to that and null terminator. */
- };
-
-#define TRAILING_LIST_MEMBER h_aliases
-#define TRAILING_LIST_SEPARATOR_P isspace
-#include "../nss_files/files-parse.c"
-LINE_PARSER
-("#",
- {
- char *addr;
-
- STRING_FIELD (addr, isspace, 1);
-
- /* Parse address. */
- if ((_res.options & RES_USE_INET6)
- && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
- {
- result->h_addrtype = AF_INET6;
- result->h_length = IN6ADDRSZ;
- }
- else
- if (inet_pton (AF_INET, addr, entdata->host_addr) > 0)
- {
- if (_res.options & RES_USE_INET6)
- {
- map_v4v6_address ((char *) entdata->host_addr,
- (char *) entdata->host_addr);
- result->h_addrtype = AF_INET6;
- result->h_length = IN6ADDRSZ;
- }
- else
- {
- result->h_addrtype = AF_INET;
- result->h_length = INADDRSZ;
- }
- }
- else
- /* Illegal address: ignore line. */
- return 0;
-
- /* Store a pointer to the address in the expected form. */
- entdata->h_addr_ptrs[0] = entdata->host_addr;
- entdata->h_addr_ptrs[1] = NULL;
- result->h_addr_list = entdata->h_addr_ptrs;
-
- /* If we need the host entry in IPv6 form change it now. */
- if (_res.options & RES_USE_INET6)
- {
- char *bufptr = data->linebuffer;
- size_t buflen = (char *) data + datalen - bufptr;
- int ibuflen = buflen; /* Use this for machines with size_t > int. */
- map_v4v6_hostent (result, &bufptr, &ibuflen);
- buflen = ibuflen;
- }
-
- STRING_FIELD (result->h_name, isspace, 1);
- }
-)
-
-__libc_lock_define_initialized (static, lock)
-
-static bool_t new_start = 1;
-static char *oldkey = NULL;
-static int oldkeylen = 0;
-
-enum nss_status
-_nss_nis_sethostent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_endhostent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-internal_nis_gethostent_r (struct hostent *host, char *buffer,
- size_t buflen, int *h_errnop)
-{
- char *domain;
- char *result;
- int len, parse_res;
- char *outkey;
- int keylen;
- struct parser_data *data = (void *) buffer;
- size_t linebuflen = buffer + buflen - data->linebuffer;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- if (buflen < sizeof *data + 1)
- {
- __set_errno (ERANGE);
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
-
- /* Get the next entry until we found a correct one. */
- do
- {
- enum nss_status retval;
- char *p;
-
- if (new_start)
- retval = yperr2nss (yp_first (domain, "hosts.byname",
- &outkey, &keylen, &result, &len));
- else
- retval = yperr2nss ( yp_next (domain, "hosts.byname",
- oldkey, oldkeylen,
- &outkey, &keylen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- switch (retval)
- {
- case NSS_STATUS_TRYAGAIN:
- __set_errno (EAGAIN);
- *h_errnop = TRY_AGAIN;
- break;
- case NSS_STATUS_NOTFOUND:
- *h_errnop = HOST_NOT_FOUND;
- break;
- default:
- *h_errnop = NO_RECOVERY;
- break;
- }
- return retval;
- }
-
- if ((size_t) (len + 1) > linebuflen)
- {
- free (result);
- *h_errnop = NETDB_INTERNAL;
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (data->linebuffer, result, len);
- data->linebuffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = parse_line (p, host, data, buflen);
- if (parse_res == -1 && errno == ERANGE)
- {
- *h_errnop = NETDB_INTERNAL;;
- return NSS_STATUS_TRYAGAIN;
- }
- free (oldkey);
- oldkey = outkey;
- oldkeylen = keylen;
- new_start = 0;
- }
- while (!parse_res);
-
- *h_errnop = NETDB_SUCCESS;
- return NSS_STATUS_SUCCESS;
-}
-
-int
-_nss_nis_gethostent_r (struct hostent *host, char *buffer, size_t buflen,
- int *h_errnop)
-{
- int status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_gethostent_r (host, buffer, buflen, h_errnop);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_gethostbyname2_r (const char *name, int af, struct hostent *host,
- char *buffer, size_t buflen, int *h_errnop)
-{
- enum nss_status retval;
- char *domain, *result, *p;
- int len, parse_res;
- struct parser_data *data = (void *) buffer;
- size_t linebuflen = buffer + buflen - data->linebuffer;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- if (buflen < sizeof *data + 1)
- {
- *h_errnop = NETDB_INTERNAL;
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- else
- {
- /* Convert name to lowercase. */
- size_t namelen = strlen (name);
- char name2[namelen + 1];
- int i;
-
- for (i = 0; i < namelen; ++i)
- name2[i] = tolower (name[i]);
- name2[i] = '\0';
-
- retval = yperr2nss (yp_match (domain, "hosts.byname", name2,
- namelen, &result, &len));
-
- }
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- {
- *h_errnop = TRY_AGAIN;
- __set_errno (EAGAIN);
- }
- if (retval == NSS_STATUS_NOTFOUND)
- *h_errnop = HOST_NOT_FOUND;
- return retval;
- }
-
- if ((size_t) (len + 1) > linebuflen)
- {
- free (result);
- *h_errnop = NETDB_INTERNAL;
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (data->linebuffer, result, len);
- data->linebuffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = parse_line (p, host, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- {
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
-
- if (parse_res == 0 || host->h_addrtype != af)
- {
- *h_errnop = HOST_NOT_FOUND;
- return NSS_STATUS_NOTFOUND;
- }
-
- *h_errnop = NETDB_SUCCESS;
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_gethostbyname_r (const char *name, struct hostent *host,
- char *buffer, size_t buflen, int *h_errnop)
-{
- if (_res.options & RES_USE_INET6)
- {
- enum nss_status status;
-
- status = _nss_nis_gethostbyname2_r (name, AF_INET6, host, buffer, buflen,
- h_errnop);
- if (status == NSS_STATUS_SUCCESS)
- return status;
- }
-
- return _nss_nis_gethostbyname2_r (name, AF_INET, host, buffer, buflen,
- h_errnop);
-}
-
-enum nss_status
-_nss_nis_gethostbyaddr_r (char *addr, int addrlen, int type,
- struct hostent *host, char *buffer, size_t buflen,
- int *h_errnop)
-{
- enum nss_status retval;
- char *domain, *result, *p;
- int len, parse_res;
- char *buf;
- struct parser_data *data = (void *) buffer;
- size_t linebuflen = buffer + buflen - data->linebuffer;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- if (buflen < sizeof *data + 1)
- {
- __set_errno (ERANGE);
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
-
- buf = inet_ntoa (*(struct in_addr *) addr);
-
- retval = yperr2nss (yp_match (domain, "hosts.byaddr", buf,
- strlen (buf), &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- {
- *h_errnop = TRY_AGAIN;
- __set_errno (EAGAIN);
- }
- if (retval == NSS_STATUS_NOTFOUND)
- *h_errnop = HOST_NOT_FOUND;
- return retval;
- }
-
- if ((size_t) (len + 1) > linebuflen)
- {
- free (result);
- __set_errno (ERANGE);
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (data->linebuffer, result, len);
- data->linebuffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = parse_line (p, host, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- {
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
- else if (parse_res == 0)
- {
- *h_errnop = HOST_NOT_FOUND;
- return NSS_STATUS_NOTFOUND;
- }
-
- *h_errnop = NETDB_SUCCESS;
- return NSS_STATUS_SUCCESS;
-}
diff --git a/glibc-compat/nss_nis/nis-netgrp.c b/glibc-compat/nss_nis/nis-netgrp.c
deleted file mode 100644
index da87f1a605..0000000000
--- a/glibc-compat/nss_nis/nis-netgrp.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <ctype.h>
-#include <errno.h>
-#include <bits/libc-lock.h>
-#include <glibc-compat/include/netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <netgroup.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-/* Locks the static variables in this file. */
-__libc_lock_define_initialized (static, lock)
-
-static char *data = NULL;
-static size_t data_size = 0;
-static char *cursor = NULL;;
-
-extern enum nss_status
-_nss_netgroup_parseline (char **cursor, struct __netgrent *result,
- char *buffer, size_t buflen);
-
-enum nss_status
-_nss_nis_setnetgrent (char *group)
-{
- char *domain;
- char *result;
- int len, group_len;
- enum nss_status status;
-
- status = NSS_STATUS_SUCCESS;
-
- if (group[0] == '\0')
- return NSS_STATUS_UNAVAIL;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- __libc_lock_lock (lock);
-
- if (data != NULL)
- {
- free (data);
- data = NULL;
- data_size = 0;
- cursor = NULL;
- }
-
- group_len = strlen (group);
-
- status = yperr2nss (yp_match (domain, "netgroup", group, group_len,
- &result, &len));
- if (status == NSS_STATUS_SUCCESS)
- {
- if (len > 0)
- {
- data = malloc (len + 1);
- data_size = len;
- cursor = strncpy (data, result, len + 1);
- data[len] = '\0';
- free (result);
- }
- else
- status = NSS_STATUS_NOTFOUND;
- }
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-
-enum nss_status
-_nss_nis_endnetgrent (void)
-{
- __libc_lock_lock (lock);
-
- if (data != NULL)
- {
- free (data);
- data = NULL;
- data_size = 0;
- cursor = NULL;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getnetgrent_r (struct __netgrent *result, char *buffer, size_t buflen)
-{
- enum nss_status status;
-
- if (cursor == NULL)
- return NSS_STATUS_NOTFOUND;
-
- __libc_lock_lock (lock);
-
- status = _nss_netgroup_parseline (&cursor, result, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
diff --git a/glibc-compat/nss_nis/nis-network.c b/glibc-compat/nss_nis/nis-network.c
deleted file mode 100644
index 3accc2be41..0000000000
--- a/glibc-compat/nss_nis/nis-network.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <glibc-compat/include/netdb.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-/* Get the declaration of the parser function. */
-#define ENTNAME netent
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-__libc_lock_define_initialized (static, lock)
-
-static bool_t new_start = 1;
-static char *oldkey = NULL;
-static int oldkeylen = 0;
-
-enum nss_status
-_nss_nis_setnetent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_endnetent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-internal_nis_getnetent_r (struct netent *net, char *buffer, size_t buflen,
- int *herrnop)
-{
- struct parser_data *data = (void *) buffer;
- char *domain, *result, *outkey;
- int len, keylen, parse_res;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- /* Get the next entry until we found a correct one. */
- do
- {
- enum nss_status retval;
- char *p;
-
- if (new_start)
- retval = yperr2nss (yp_first (domain, "networks.byname",
- &outkey, &keylen, &result, &len));
- else
- retval = yperr2nss ( yp_next (domain, "networks.byname",
- oldkey, oldkeylen,
- &outkey, &keylen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- {
- *herrnop = NETDB_INTERNAL;
- __set_errno (EAGAIN);
- }
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- *herrnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_netent (p, net, data, buflen);
- if (parse_res == -1 && errno == ERANGE)
- {
- *herrnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
-
- free (oldkey);
- oldkey = outkey;
- oldkeylen = keylen;
- new_start = 0;
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getnetent_r (struct netent *net, char *buffer, size_t buflen,
- int *herrnop)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_getnetent_r (net, buffer, buflen, herrnop);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_getnetbyname_r (const char *name, struct netent *net,
- char *buffer, size_t buflen, int *herrnop)
-{
- enum nss_status retval;
- struct parser_data *data = (void *) buffer;
- char *domain, *result, *p;
- int len, parse_res;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- *herrnop = NETDB_INTERNAL;
- return NSS_STATUS_UNAVAIL;
- }
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- if (buflen < sizeof *data + 1)
- {
- *herrnop = NETDB_INTERNAL;
- __set_errno(ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
- else
- {
- /* Convert name to lowercase. */
- size_t namlen = strlen (name);
- char name2[namlen + 1];
- int i;
-
- for (i = 0; i < namlen; ++i)
- name2[i] = tolower (name[i]);
- name2[i] = '\0';
-
- retval = yperr2nss (yp_match (domain, "networks.byname", name2,
- namlen, &result, &len));
- }
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- {
- __set_errno (EAGAIN);
- *herrnop = NETDB_INTERNAL;
- }
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- *herrnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_netent (p, net, data, buflen);
-
- if (parse_res <= 0)
- {
- *herrnop = NETDB_INTERNAL;
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else
- return NSS_STATUS_NOTFOUND;
- }
- else
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getnetbyaddr_r (unsigned long addr, int type, struct netent *net,
- char *buffer, size_t buflen, int *herrnop)
-{
- struct parser_data *data = (void *) buffer;
- char *domain;
- char *result;
- int len;
- char buf[256];
- int blen;
- struct in_addr in;
- char *p;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- in = inet_makeaddr (addr, 0);
- strcpy (buf, inet_ntoa (in));
- blen = strlen (buf);
-
- while (1)
- {
- enum nss_status retval;
- int parse_res;
-
- retval = yperr2nss (yp_match (domain, "networks.byaddr", buf,
- strlen (buf), &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_NOTFOUND)
- {
- if (buf[blen - 2] == '.' && buf[blen - 1] == '0')
- {
- /* Try again, but with trailing dot(s)
- removed (one by one) */
- buf[blen - 2] = '\0';
- blen -= 2;
- continue;
- }
- else
- return NSS_STATUS_NOTFOUND;
- }
- else
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- *herrnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_netent (p, net, data, buflen);
-
-
- if (parse_res <= 0)
- {
- *herrnop = NETDB_INTERNAL;
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else
- return NSS_STATUS_NOTFOUND;
- }
- else
- return NSS_STATUS_SUCCESS;
- }
-}
diff --git a/glibc-compat/nss_nis/nis-proto.c b/glibc-compat/nss_nis/nis-proto.c
deleted file mode 100644
index 8dff7d3687..0000000000
--- a/glibc-compat/nss_nis/nis-proto.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <glibc-compat/include/netdb.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-/* Get the declaration of the parser function. */
-#define ENTNAME protoent
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-__libc_lock_define_initialized (static, lock)
-
-struct response
-{
- char *val;
- struct response *next;
-};
-
-static struct response *start = NULL;
-static struct response *next = NULL;
-
-static int
-saveit (int instatus, char *inkey, int inkeylen, char *inval,
- int invallen, char *indata)
-{
- if (instatus != YP_TRUE)
- return instatus;
-
- if (inkey && inkeylen > 0 && inval && invallen > 0)
- {
- if (start == NULL)
- {
- start = malloc (sizeof (struct response));
- next = start;
- }
- else
- {
- next->next = malloc (sizeof (struct response));
- next = next->next;
- }
- next->next = NULL;
- next->val = malloc (invallen + 1);
- strncpy (next->val, inval, invallen);
- next->val[invallen] = '\0';
- }
-
- return 0;
-}
-
-enum nss_status
-internal_nis_setprotoent (void)
-{
- char *domainname;
- struct ypall_callback ypcb;
- enum nss_status status;
-
- yp_get_default_domain (&domainname);
-
- while (start != NULL)
- {
- if (start->val != NULL)
- free (start->val);
- next = start;
- start = start->next;
- free (next);
- }
- start = NULL;
-
- ypcb.foreach = saveit;
- ypcb.data = NULL;
- status = yperr2nss (yp_all (domainname, "protocols.bynumber", &ypcb));
- next = start;
-
- return status;
-}
-
-enum nss_status
-_nss_nis_setprotoent (void)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_setprotoent ();
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_endprotoent (void)
-{
- __libc_lock_lock (lock);
-
- while (start != NULL)
- {
- if (start->val != NULL)
- free (start->val);
- next = start;
- start = start->next;
- free (next);
- }
- start = NULL;
- next = NULL;
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-internal_nis_getprotoent_r (struct protoent *proto,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- int parse_res;
-
- if (start == NULL)
- internal_nis_setprotoent ();
-
- /* Get the next entry until we found a correct one. */
- do
- {
- char *p;
-
- if (next == NULL)
- return NSS_STATUS_NOTFOUND;
- p = strncpy (buffer, next->val, buflen);
- next = next->next;
-
- while (isspace (*p))
- ++p;
-
- parse_res = _nss_files_parse_protoent (p, proto, data, buflen);
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getprotoent_r (struct protoent *proto, char *buffer, size_t buflen)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_getprotoent_r (proto, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_getprotobyname_r (const char *name, struct protoent *proto,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *p;
- int len, parse_res;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- retval = yperr2nss (yp_match (domain, "protocols.byname", name,
- strlen (name), &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_protoent (p, proto, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getprotobynumber_r (int number, struct protoent *proto,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *p;
- int len, nlen, parse_res;
- char buf[32];
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- nlen = sprintf (buf, "%d", number);
-
- retval = yperr2nss (yp_match (domain, "protocols.bynumber", buf,
- nlen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_protoent (p, proto, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
diff --git a/glibc-compat/nss_nis/nis-pwd.c b/glibc-compat/nss_nis/nis-pwd.c
deleted file mode 100644
index e18c80d8ac..0000000000
--- a/glibc-compat/nss_nis/nis-pwd.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <glibc-compat/include/pwd.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-/* Get the declaration of the parser function. */
-#define ENTNAME pwent
-#define STRUCTURE passwd
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-/* Protect global state against multiple changers */
-__libc_lock_define_initialized (static, lock)
-
-static bool_t new_start = 1;
-static char *oldkey = NULL;
-static int oldkeylen = 0;
-
-enum nss_status
-_nss_nis_setpwent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_endpwent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-internal_nis_getpwent_r (struct passwd *pwd, char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- char *domain;
- int parse_res;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- /* Get the next entry until we found a correct one. */
- do
- {
- enum nss_status retval;
- char *result, *outkey, *result2, *p;
- int len, keylen, len2;
- size_t namelen;
-
- if (new_start)
- retval = yperr2nss (yp_first (domain, "passwd.byname",
- &outkey, &keylen, &result, &len));
- else
- retval = yperr2nss ( yp_next (domain, "passwd.byname",
- oldkey, oldkeylen,
- &outkey, &keylen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- /* Check for adjunct style secret passwords. They can be
- recognized by a password starting with "##". */
- p = strchr (result, ':');
- if (p != NULL /* This better should be true in all cases. */
- && p[1] == '#' && p[2] == '#'
- && (namelen = p - result,
- yp_match (domain, "passwd.adjunct.byname", result, namelen,
- &result2, &len2)) == YPERR_SUCCESS)
- {
- /* We found a passwd.adjunct entry. Merge encrypted
- password therein into original result. */
- char *encrypted = strchr (result2, ':');
- char *endp, *tmp;
- size_t restlen;
-
- if (encrypted == NULL
- || (endp = strchr (++encrypted, ':')) == NULL
- || (p = strchr (p + 1, ':')) == NULL)
- {
- /* Invalid format of the entry. This never should happen
- unless the data from which the NIS table is generated is
- wrong. We simply ignore it. */
- free (result2);
- goto non_adjunct;
- }
-
- restlen = len - (p - result);
- if ((size_t) (namelen + (endp - encrypted) + restlen + 2) > buflen)
- {
- free (result2);
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- memcpy (buffer, result, namelen);
- tmp = buffer + namelen;
- *tmp++ = ':';
- memcpy (tmp, encrypted, endp - encrypted);
- tmp += endp - encrypted;
- memcpy (tmp, p, restlen + 1);
- p = buffer;
-
- free (result2);
- }
- else
- {
- non_adjunct:
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_pwent (p, pwd, data, buflen);
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
-
- free (oldkey);
- oldkey = outkey;
- oldkeylen = keylen;
- new_start = 0;
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getpwent_r (struct passwd *result, char *buffer, size_t buflen)
-{
- int status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_getpwent_r (result, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_getpwnam_r (const char *name, struct passwd *pwd,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *result2, *p;
- int len, len2, parse_res;
- size_t namelen;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- namelen = strlen (name);
-
- retval = yperr2nss (yp_match (domain, "passwd.byname", name,
- namelen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- /* Check for adjunct style secret passwords. They can be recognized
- by a password starting with "##". */
- p = strchr (result, ':');
- if (p != NULL /* This better should be true in all cases. */
- && p[1] == '#' && p[2] == '#'
- && (namelen = p - result,
- yp_match (domain, "passwd.adjunct.byname", name, namelen,
- &result2, &len2)) == YPERR_SUCCESS)
- {
- /* We found a passwd.adjunct entry. Merge encrypted password
- therein into original result. */
- char *encrypted = strchr (result2, ':');
- char *endp, *tmp;
- size_t restlen;
-
- if (encrypted == NULL
- || (endp = strchr (++encrypted, ':')) == NULL
- || (p = strchr (p + 1, ':')) == NULL)
- {
- /* Invalid format of the entry. This never should happen
- unless the data from which the NIS table is generated is
- wrong. We simply ignore it. */
- free (result2);
- goto non_adjunct;
- }
-
- restlen = len - (p - result);
- if ((size_t) (namelen + (endp - encrypted) + restlen + 2) > buflen)
- {
- free (result2);
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- memcpy (buffer, name, namelen);
- tmp = buffer + namelen;
- *tmp++ = ':';
- memcpy (tmp, encrypted, endp - encrypted);
- tmp += endp - encrypted;
- memcpy (tmp, p, restlen + 1);
- p = buffer;
-
- free (result2);
- }
- else
- {
- non_adjunct:
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- }
-
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_pwent (p, pwd, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getpwuid_r (uid_t uid, struct passwd *pwd,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *p, *result2;
- int len, nlen, parse_res, len2;
- char buf[32];
- size_t namelen;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- nlen = sprintf (buf, "%d", uid);
-
- retval = yperr2nss (yp_match (domain, "passwd.byuid", buf,
- nlen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- /* Check for adjunct style secret passwords. They can be recognized
- by a password starting with "##". */
- p = strchr (result, ':');
- if (p != NULL /* This better should be true in all cases. */
- && p[1] == '#' && p[2] == '#'
- && (namelen = p - result,
- yp_match (domain, "passwd.adjunct.byname", result, namelen,
- &result2, &len2)) == YPERR_SUCCESS)
- {
- /* We found a passwd.adjunct entry. Merge encrypted password
- therein into original result. */
- char *encrypted = strchr (result2, ':');
- char *endp, *tmp;
- size_t restlen;
-
- if (encrypted == NULL
- || (endp = strchr (++encrypted, ':')) == NULL
- || (p = strchr (p + 1, ':')) == NULL)
- {
- /* Invalid format of the entry. This never should happen
- unless the data from which the NIS table is generated is
- wrong. We simply ignore it. */
- free (result2);
- goto non_adjunct;
- }
-
- restlen = len - (p - result);
- if ((size_t) (namelen + (endp - encrypted) + restlen + 2) > buflen)
- {
- free (result2);
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- memcpy (buffer, result, namelen);
- tmp = buffer + namelen;
- *tmp++ = ':';
- memcpy (tmp, encrypted, endp - encrypted);
- tmp += endp - encrypted;
- memcpy (tmp, p, restlen + 1);
- p = buffer;
-
- free (result2);
- }
- else
- {
- non_adjunct:
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- }
-
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_pwent (p, pwd, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
diff --git a/glibc-compat/nss_nis/nis-rpc.c b/glibc-compat/nss_nis/nis-rpc.c
deleted file mode 100644
index b265fcdecb..0000000000
--- a/glibc-compat/nss_nis/nis-rpc.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <glibc-compat/include/netdb.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-/* Get the declaration of the parser function. */
-#define ENTNAME rpcent
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-__libc_lock_define_initialized (static, lock)
-
-struct response_t
-{
- char *val;
- struct response_t *next;
-};
-
-struct intern_t
-{
- struct response_t *start;
- struct response_t *next;
-};
-typedef struct intern_t intern_t;
-
-static intern_t intern = {NULL, NULL};
-
-static int
-saveit (int instatus, char *inkey, int inkeylen, char *inval,
- int invallen, char *indata)
-{
- intern_t *intern = (intern_t *)indata;
-
- if (instatus != YP_TRUE)
- return instatus;
-
- if (inkey && inkeylen > 0 && inval && invallen > 0)
- {
- if (intern->start == NULL)
- {
- intern->start = malloc (sizeof (struct response_t));
- intern->next = intern->start;
- }
- else
- {
- intern->next->next = malloc (sizeof (struct response_t));
- intern->next = intern->next->next;
- }
- intern->next->next = NULL;
- intern->next->val = malloc (invallen + 1);
- strncpy (intern->next->val, inval, invallen);
- intern->next->val[invallen] = '\0';
- }
-
- return 0;
-}
-
-static enum nss_status
-internal_nis_setrpcent (intern_t *intern)
-{
- char *domainname;
- struct ypall_callback ypcb;
- enum nss_status status;
-
- if (yp_get_default_domain (&domainname))
- return NSS_STATUS_UNAVAIL;
-
- while (intern->start != NULL)
- {
- if (intern->start->val != NULL)
- free (intern->start->val);
- intern->next = intern->start;
- intern->start = intern->start->next;
- free (intern->next);
- }
- intern->start = NULL;
-
- ypcb.foreach = saveit;
- ypcb.data = (char *)intern;
- status = yperr2nss (yp_all(domainname, "rpc.bynumber", &ypcb));
- intern->next = intern->start;
-
- return status;
-}
-
-enum nss_status
-_nss_nis_setrpcent (void)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_setrpcent (&intern);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-static enum nss_status
-internal_nis_endrpcent (intern_t *intern)
-{
- while (intern->start != NULL)
- {
- if (intern->start->val != NULL)
- free (intern->start->val);
- intern->next = intern->start;
- intern->start = intern->start->next;
- free (intern->next);
- }
- intern->start = NULL;
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_endrpcent (void)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_endrpcent (&intern);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-static enum nss_status
-internal_nis_getrpcent_r (struct rpcent *rpc, char *buffer, size_t buflen,
- intern_t *data)
-{
- struct parser_data *pdata = (void *) buffer;
- int parse_res;
- char *p;
-
- if (data->start == NULL)
- internal_nis_setrpcent (data);
-
- /* Get the next entry until we found a correct one. */
- do
- {
- if (data->next == NULL)
- return NSS_STATUS_NOTFOUND;
- p = strncpy (buffer, data->next->val, buflen);
- data->next = data->next->next;
- while (isspace (*p))
- ++p;
-
- parse_res = _nss_files_parse_rpcent (p, rpc, pdata, buflen);
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getrpcent_r (struct rpcent *rpc, char *buffer, size_t buflen)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_getrpcent_r (rpc, buffer, buflen, &intern);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_getrpcbyname_r (const char *name, struct rpcent *rpc,
- char *buffer, size_t buflen)
-{
- intern_t data = {NULL, NULL};
- enum nss_status status;
- int found;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- status = internal_nis_setrpcent (&data);
- if (status != NSS_STATUS_SUCCESS)
- return status;
-
- found = 0;
- while (!found &&
- ((status = internal_nis_getrpcent_r (rpc, buffer, buflen, &data))
- == NSS_STATUS_SUCCESS))
- {
- if (strcmp (rpc->r_name, name) == 0)
- found = 1;
- else
- {
- int i = 0;
-
- while (rpc->r_aliases[i] != NULL)
- {
- if (strcmp (rpc->r_aliases[i], name) == 0)
- {
- found = 1;
- break;
- }
- else
- ++i;
- }
- }
- }
-
- internal_nis_endrpcent (&data);
-
- if (!found && status == NSS_STATUS_SUCCESS)
- return NSS_STATUS_NOTFOUND;
- else
- return status;
-}
-
-enum nss_status
-_nss_nis_getrpcbynumber_r (int number, struct rpcent *rpc,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *p;
- int len, nlen, parse_res;
- char buf[32];
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- nlen = sprintf (buf, "%d", number);
-
- retval = yperr2nss (yp_match (domain, "rpc.bynumber", buf,
- nlen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_rpcent (p, rpc, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
diff --git a/glibc-compat/nss_nis/nis-service.c b/glibc-compat/nss_nis/nis-service.c
deleted file mode 100644
index 75b871e440..0000000000
--- a/glibc-compat/nss_nis/nis-service.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <glibc-compat/include/netdb.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-/* Get the declaration of the parser function. */
-#define ENTNAME servent
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-__libc_lock_define_initialized (static, lock)
-
-struct response_t
-{
- char *val;
- struct response_t *next;
-};
-
-struct intern_t
-{
- struct response_t *start;
- struct response_t *next;
-};
-typedef struct intern_t intern_t;
-
-static intern_t intern = { NULL, NULL };
-
-static int
-saveit (int instatus, char *inkey, int inkeylen, char *inval,
- int invallen, char *indata)
-{
- intern_t *intern = (intern_t *) indata;
-
- if (instatus != YP_TRUE)
- return instatus;
-
- if (inkey && inkeylen > 0 && inval && invallen > 0)
- {
- if (intern->start == NULL)
- {
- intern->start = malloc (sizeof (struct response_t));
- intern->next = intern->start;
- }
- else
- {
- intern->next->next = malloc (sizeof (struct response_t));
- intern->next = intern->next->next;
- }
- intern->next->next = NULL;
- intern->next->val = malloc (invallen + 1);
- strncpy (intern->next->val, inval, invallen);
- intern->next->val[invallen] = '\0';
- }
-
- return 0;
-}
-
-static enum nss_status
-internal_nis_setservent (intern_t *intern)
-{
- char *domainname;
- struct ypall_callback ypcb;
- enum nss_status status;
-
- if (yp_get_default_domain (&domainname))
- return NSS_STATUS_UNAVAIL;
-
- while (intern->start != NULL)
- {
- if (intern->start->val != NULL)
- free (intern->start->val);
- intern->next = intern->start;
- intern->start = intern->start->next;
- free (intern->next);
- }
- intern->start = NULL;
-
- ypcb.foreach = saveit;
- ypcb.data = (char *) intern;
- status = yperr2nss (yp_all (domainname, "services.byname", &ypcb));
- intern->next = intern->start;
-
- return status;
-}
-enum nss_status
-_nss_nis_setservent (void)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_setservent (&intern);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-static enum nss_status
-internal_nis_endservent (intern_t * intern)
-{
- while (intern->start != NULL)
- {
- if (intern->start->val != NULL)
- free (intern->start->val);
- intern->next = intern->start;
- intern->start = intern->start->next;
- free (intern->next);
- }
- intern->start = NULL;
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_endservent (void)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_endservent (&intern);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-static enum nss_status
-internal_nis_getservent_r (struct servent *serv, char *buffer,
- size_t buflen, intern_t *data)
-{
- struct parser_data *pdata = (void *) buffer;
- int parse_res;
- char *p;
-
- if (data->start == NULL)
- internal_nis_setservent (data);
-
- /* Get the next entry until we found a correct one. */
- do
- {
- if (data->next == NULL)
- return NSS_STATUS_NOTFOUND;
- p = strncpy (buffer, data->next->val, buflen);
- data->next = data->next->next;
- while (isspace (*p))
- ++p;
-
- parse_res = _nss_files_parse_servent (p, serv, pdata, buflen);
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getservent_r (struct servent *serv, char *buffer, size_t buflen)
-{
- enum nss_status status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_getservent_r (serv, buffer, buflen, &intern);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_getservbyname_r (const char *name, char *protocol,
- struct servent *serv, char *buffer, size_t buflen)
-{
- intern_t data = { NULL, NULL };
- enum nss_status status;
- int found;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- status = internal_nis_setservent (&data);
- if (status != NSS_STATUS_SUCCESS)
- return status;
-
- found = 0;
- while (!found &&
- ((status = internal_nis_getservent_r (serv, buffer, buflen, &data))
- == NSS_STATUS_SUCCESS))
- {
- if (protocol == NULL || strcmp (serv->s_proto, protocol) == 0)
- {
- char **cp;
-
- if (strcmp (serv->s_name, name) == 0)
- found = 1;
- else
- for (cp = serv->s_aliases; *cp; cp++)
- if (strcmp (name, *cp) == 0)
- found = 1;
- }
- }
-
- internal_nis_endservent (&data);
-
- if (!found && status == NSS_STATUS_SUCCESS)
- return NSS_STATUS_NOTFOUND;
- else
- return status;
-}
-
-enum nss_status
-_nss_nis_getservbyport_r (int port, char *protocol, struct servent *serv,
- char *buffer, size_t buflen)
-{
- intern_t data = { NULL, NULL };
- enum nss_status status;
- int found;
-
- if (protocol == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- status = internal_nis_setservent (&data);
- if (status != NSS_STATUS_SUCCESS)
- return status;
-
- found = 0;
- while (!found &&
- ((status = internal_nis_getservent_r (serv, buffer, buflen, &data))
- == NSS_STATUS_SUCCESS))
- {
- if (htons (serv->s_port) == port)
- {
- if (strcmp (serv->s_proto, protocol) == 0)
- {
- found = 1;
- }
- }
- }
-
- internal_nis_endservent (&data);
-
- if (!found && status == NSS_STATUS_SUCCESS)
- return NSS_STATUS_NOTFOUND;
- else
- return status;
-}
diff --git a/glibc-compat/nss_nis/nis-spwd.c b/glibc-compat/nss_nis/nis-spwd.c
deleted file mode 100644
index d7857b2c88..0000000000
--- a/glibc-compat/nss_nis/nis-spwd.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <nss.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <glibc-compat/include/shadow.h>
-#include <bits/libc-lock.h>
-#include <rpcsvc/yp.h>
-#include <rpcsvc/ypclnt.h>
-
-#include "nss-nis.h"
-
-/* Get the declaration of the parser function. */
-#define ENTNAME spent
-#define STRUCTURE spwd
-#define EXTERN_PARSER
-#include "../nss_files/files-parse.c"
-
-/* Protect global state against multiple changers */
-__libc_lock_define_initialized (static, lock)
-
-static bool_t new_start = 1;
-static char *oldkey = NULL;
-static int oldkeylen = 0;
-
-enum nss_status
-_nss_nis_setspent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_endspent (void)
-{
- __libc_lock_lock (lock);
-
- new_start = 1;
- if (oldkey != NULL)
- {
- free (oldkey);
- oldkey = NULL;
- oldkeylen = 0;
- }
-
- __libc_lock_unlock (lock);
-
- return NSS_STATUS_SUCCESS;
-}
-
-static enum nss_status
-internal_nis_getspent_r (struct spwd *sp, char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- char *domain, *result, *outkey;
- int len, keylen, parse_res;
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- /* Get the next entry until we found a correct one. */
- do
- {
- enum nss_status retval;
- char *p;
-
- if (new_start)
- retval = yperr2nss (yp_first (domain, "shadow.byname",
- &outkey, &keylen, &result, &len));
- else
- retval = yperr2nss ( yp_next (domain, "shadow.byname",
- oldkey, oldkeylen,
- &outkey, &keylen, &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_spent (p, sp, data, buflen);
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
-
- free (oldkey);
- oldkey = outkey;
- oldkeylen = keylen;
- new_start = 0;
- }
- while (!parse_res);
-
- return NSS_STATUS_SUCCESS;
-}
-
-enum nss_status
-_nss_nis_getspent_r (struct spwd *result, char *buffer, size_t buflen)
-{
- int status;
-
- __libc_lock_lock (lock);
-
- status = internal_nis_getspent_r (result, buffer, buflen);
-
- __libc_lock_unlock (lock);
-
- return status;
-}
-
-enum nss_status
-_nss_nis_getspnam_r (const char *name, struct spwd *sp,
- char *buffer, size_t buflen)
-{
- struct parser_data *data = (void *) buffer;
- enum nss_status retval;
- char *domain, *result, *p;
- int len, parse_res;
-
- if (name == NULL)
- {
- __set_errno (EINVAL);
- return NSS_STATUS_UNAVAIL;
- }
-
- if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
-
- retval = yperr2nss (yp_match (domain, "shadow.byname", name,
- strlen (name), &result, &len));
-
- if (retval != NSS_STATUS_SUCCESS)
- {
- if (retval == NSS_STATUS_TRYAGAIN)
- __set_errno (EAGAIN);
- return retval;
- }
-
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- __set_errno (ERANGE);
- return NSS_STATUS_TRYAGAIN;
- }
-
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
- while (isspace (*p))
- ++p;
- free (result);
-
- parse_res = _nss_files_parse_spent (p, sp, data, buflen);
-
- if (parse_res == -1 && errno == ERANGE)
- return NSS_STATUS_TRYAGAIN;
- else if (parse_res == 0)
- return NSS_STATUS_NOTFOUND;
-
- return NSS_STATUS_SUCCESS;
-}
diff --git a/glibc-compat/oldfileops.c b/glibc-compat/oldfileops.c
deleted file mode 100644
index 9e11d65be4..0000000000
--- a/glibc-compat/oldfileops.c
+++ /dev/null
@@ -1,774 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
- Written by Per Bothner <bothner@cygnus.com>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-/* This is a compatibility file. If we don't build the libc with
- versioning don't compile this file. */
-
-#ifndef _POSIX_SOURCE
-# define _POSIX_SOURCE
-#endif
-#define _IO_USE_OLD_IO_FILE
-#include "libioP.h"
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-#ifndef __set_errno
-# define __set_errno(Val) errno = (Val)
-#endif
-
-
-#ifdef _LIBC
-# define open(Name, Flags, Prot) __open (Name, Flags, Prot)
-# define close(FD) __close (FD)
-# define lseek(FD, Offset, Whence) __lseek (FD, Offset, Whence)
-# define read(FD, Buf, NBytes) __read (FD, Buf, NBytes)
-# define write(FD, Buf, NBytes) __write (FD, Buf, NBytes)
-#endif
-
-/* An fstream can be in at most one of put mode, get mode, or putback mode.
- Putback mode is a variant of get mode.
-
- In a filebuf, there is only one current position, instead of two
- separate get and put pointers. In get mode, the current position
- is that of gptr(); in put mode that of pptr().
-
- The position in the buffer that corresponds to the position
- in external file system is normally _IO_read_end, except in putback
- mode, when it is _IO_save_end.
- If the field _fb._offset is >= 0, it gives the offset in
- the file as a whole corresponding to eGptr(). (?)
-
- PUT MODE:
- If a filebuf is in put mode, then all of _IO_read_ptr, _IO_read_end,
- and _IO_read_base are equal to each other. These are usually equal
- to _IO_buf_base, though not necessarily if we have switched from
- get mode to put mode. (The reason is to maintain the invariant
- that _IO_read_end corresponds to the external file position.)
- _IO_write_base is non-NULL and usually equal to _IO_base_base.
- We also have _IO_write_end == _IO_buf_end, but only in fully buffered mode.
- The un-flushed character are those between _IO_write_base and _IO_write_ptr.
-
- GET MODE:
- If a filebuf is in get or putback mode, eback() != egptr().
- In get mode, the unread characters are between gptr() and egptr().
- The OS file position corresponds to that of egptr().
-
- PUTBACK MODE:
- Putback mode is used to remember "excess" characters that have
- been sputbackc'd in a separate putback buffer.
- In putback mode, the get buffer points to the special putback buffer.
- The unread characters are the characters between gptr() and egptr()
- in the putback buffer, as well as the area between save_gptr()
- and save_egptr(), which point into the original reserve buffer.
- (The pointers save_gptr() and save_egptr() are the values
- of gptr() and egptr() at the time putback mode was entered.)
- The OS position corresponds to that of save_egptr().
-
- LINE BUFFERED OUTPUT:
- During line buffered output, _IO_write_base==base() && epptr()==base().
- However, ptr() may be anywhere between base() and ebuf().
- This forces a call to filebuf::overflow(int C) on every put.
- If there is more space in the buffer, and C is not a '\n',
- then C is inserted, and pptr() incremented.
-
- UNBUFFERED STREAMS:
- If a filebuf is unbuffered(), the _shortbuf[1] is used as the buffer.
-*/
-
-#define CLOSED_FILEBUF_FLAGS \
- (_IO_IS_FILEBUF+_IO_NO_READS+_IO_NO_WRITES+_IO_TIED_PUT_GET)
-
-
-void
-_IO_old_file_init (fp)
- _IO_FILE *fp;
-{
- /* POSIX.1 allows another file handle to be used to change the position
- of our file descriptor. Hence we actually don't know the actual
- position before we do the first fseek (and until a following fflush). */
- fp->_old_offset = _IO_pos_BAD;
- fp->_IO_file_flags |= CLOSED_FILEBUF_FLAGS;
-
- _IO_link_in(fp);
- fp->_vtable_offset = ((int) sizeof (struct _IO_FILE)
- - (int) sizeof (struct _IO_FILE_complete));
- fp->_fileno = -1;
-}
-
-int
-_IO_old_file_close_it (fp)
- _IO_FILE *fp;
-{
- int write_status, close_status;
- if (!_IO_file_is_open (fp))
- return EOF;
-
- write_status = _IO_old_do_flush (fp);
-
- _IO_unsave_markers(fp);
-
- close_status = _IO_SYSCLOSE (fp);
-
- /* Free buffer. */
- _IO_setb (fp, NULL, NULL, 0);
- _IO_setg (fp, NULL, NULL, NULL);
- _IO_setp (fp, NULL, NULL);
-
- _IO_un_link (fp);
- fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS;
- fp->_fileno = EOF;
- fp->_old_offset = _IO_pos_BAD;
-
- return close_status ? close_status : write_status;
-}
-
-void
-_IO_old_file_finish (fp, dummy)
- _IO_FILE *fp;
- int dummy;
-{
- if (_IO_file_is_open (fp))
- {
- _IO_old_do_flush (fp);
- if (!(fp->_flags & _IO_DELETE_DONT_CLOSE))
- _IO_SYSCLOSE (fp);
- }
- _IO_default_finish (fp, 0);
-}
-
-_IO_FILE *
-_IO_old_file_fopen (fp, filename, mode)
- _IO_FILE *fp;
- const char *filename;
- const char *mode;
-{
- int oflags = 0, omode;
- int read_write, fdesc;
- int oprot = 0666;
- if (_IO_file_is_open (fp))
- return 0;
- switch (*mode++)
- {
- case 'r':
- omode = O_RDONLY;
- read_write = _IO_NO_WRITES;
- break;
- case 'w':
- omode = O_WRONLY;
- oflags = O_CREAT|O_TRUNC;
- read_write = _IO_NO_READS;
- break;
- case 'a':
- omode = O_WRONLY;
- oflags = O_CREAT|O_APPEND;
- read_write = _IO_NO_READS|_IO_IS_APPENDING;
- break;
- default:
- __set_errno (EINVAL);
- return NULL;
- }
- if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+'))
- {
- omode = O_RDWR;
- read_write &= _IO_IS_APPENDING;
- }
- fdesc = open (filename, omode|oflags, oprot);
- if (fdesc < 0)
- return NULL;
- fp->_fileno = fdesc;
- _IO_mask_flags (fp, read_write,_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
- if (read_write & _IO_IS_APPENDING)
- if (_IO_SEEKOFF (fp, (_IO_off_t)0, _IO_seek_end, _IOS_INPUT|_IOS_OUTPUT)
- == _IO_pos_BAD && errno != ESPIPE)
- return NULL;
- _IO_link_in (fp);
- return fp;
-}
-
-_IO_FILE *
-_IO_old_file_attach (fp, fd)
- _IO_FILE *fp;
- int fd;
-{
- if (_IO_file_is_open (fp))
- return NULL;
- fp->_fileno = fd;
- fp->_flags &= ~(_IO_NO_READS+_IO_NO_WRITES);
- fp->_flags |= _IO_DELETE_DONT_CLOSE;
- /* Get the current position of the file. */
- /* We have to do that since that may be junk. */
- fp->_old_offset = _IO_pos_BAD;
- if (_IO_SEEKOFF (fp, (_IO_off_t)0, _IO_seek_cur, _IOS_INPUT|_IOS_OUTPUT)
- == _IO_pos_BAD && errno != ESPIPE)
- return NULL;
- return fp;
-}
-
-_IO_FILE *
-_IO_old_file_setbuf (fp, p, len)
- _IO_FILE *fp;
- char *p;
- _IO_ssize_t len;
-{
- if (_IO_default_setbuf (fp, p, len) == NULL)
- return NULL;
-
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end
- = fp->_IO_buf_base;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
-
- return fp;
-}
-
-static int old_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
-
-/* Write TO_DO bytes from DATA to FP.
- Then mark FP as having empty buffers. */
-
-int
-_IO_old_do_write (fp, data, to_do)
- _IO_FILE *fp;
- const char *data;
- _IO_size_t to_do;
-{
- return (to_do == 0 || old_do_write (fp, data, to_do) == to_do)
- ? 0 : EOF;
-}
-
-static
-int
-old_do_write (fp, data, to_do)
- _IO_FILE *fp;
- const char *data;
- _IO_size_t to_do;
-{
- _IO_size_t count;
- if (fp->_flags & _IO_IS_APPENDING)
- /* On a system without a proper O_APPEND implementation,
- you would need to sys_seek(0, SEEK_END) here, but is
- is not needed nor desirable for Unix- or Posix-like systems.
- Instead, just indicate that offset (before and after) is
- unpredictable. */
- fp->_old_offset = _IO_pos_BAD;
- else if (fp->_IO_read_end != fp->_IO_write_base)
- {
- _IO_pos_t new_pos
- = _IO_SYSSEEK (fp, fp->_IO_write_base - fp->_IO_read_end, 1);
- if (new_pos == _IO_pos_BAD)
- return 0;
- fp->_old_offset = new_pos;
- }
- count = _IO_SYSWRITE (fp, data, to_do);
- if (fp->_cur_column && count)
- fp->_cur_column = _IO_adjust_column (fp->_cur_column - 1, data, count) + 1;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_buf_base;
- fp->_IO_write_end = ((fp->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
- ? fp->_IO_buf_base : fp->_IO_buf_end);
- return count;
-}
-
-int
-_IO_old_file_underflow (fp)
- _IO_FILE *fp;
-{
- _IO_ssize_t count;
-#if 0
- /* SysV does not make this test; take it out for compatibility */
- if (fp->_flags & _IO_EOF_SEEN)
- return (EOF);
-#endif
-
- if (fp->_flags & _IO_NO_READS)
- {
- __set_errno (EBADF);
- return EOF;
- }
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr;
-
- if (fp->_IO_buf_base == NULL)
- _IO_doallocbuf (fp);
-
- /* Flush all line buffered files before reading. */
- /* FIXME This can/should be moved to genops ?? */
- if (fp->_flags & (_IO_LINE_BUF|_IO_UNBUFFERED))
- _IO_flush_all_linebuffered ();
-
- _IO_switch_to_get_mode (fp);
-
- /* This is very tricky. We have to adjust those
- pointers before we call _IO_SYSREAD () since
- we may longjump () out while waiting for
- input. Those pointers may be screwed up. H.J. */
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_buf_base;
- fp->_IO_read_end = fp->_IO_buf_base;
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end
- = fp->_IO_buf_base;
-
- count = _IO_SYSREAD (fp, fp->_IO_buf_base,
- fp->_IO_buf_end - fp->_IO_buf_base);
- if (count <= 0)
- {
- if (count == 0)
- fp->_flags |= _IO_EOF_SEEN;
- else
- fp->_flags |= _IO_ERR_SEEN, count = 0;
- }
- fp->_IO_read_end += count;
- if (count == 0)
- return EOF;
- if (fp->_old_offset != _IO_pos_BAD)
- _IO_pos_adjust (fp->_old_offset, count);
- return *(unsigned char *) fp->_IO_read_ptr;
-}
-
-int
-_IO_old_file_overflow (f, ch)
- _IO_FILE *f;
- int ch;
-{
- if (f->_flags & _IO_NO_WRITES) /* SET ERROR */
- {
- f->_flags |= _IO_ERR_SEEN;
- __set_errno (EBADF);
- return EOF;
- }
- /* If currently reading or no buffer allocated. */
- if ((f->_flags & _IO_CURRENTLY_PUTTING) == 0)
- {
- /* Allocate a buffer if needed. */
- if (f->_IO_write_base == 0)
- {
- _IO_doallocbuf (f);
- _IO_setg (f, f->_IO_buf_base, f->_IO_buf_base, f->_IO_buf_base);
- }
- /* Otherwise must be currently reading.
- If _IO_read_ptr (and hence also _IO_read_end) is at the buffer end,
- logically slide the buffer forwards one block (by setting the
- read pointers to all point at the beginning of the block). This
- makes room for subsequent output.
- Otherwise, set the read pointers to _IO_read_end (leaving that
- alone, so it can continue to correspond to the external position). */
- if (f->_IO_read_ptr == f->_IO_buf_end)
- f->_IO_read_end = f->_IO_read_ptr = f->_IO_buf_base;
- f->_IO_write_ptr = f->_IO_read_ptr;
- f->_IO_write_base = f->_IO_write_ptr;
- f->_IO_write_end = f->_IO_buf_end;
- f->_IO_read_base = f->_IO_read_ptr = f->_IO_read_end;
-
- if (f->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
- f->_IO_write_end = f->_IO_write_ptr;
- f->_flags |= _IO_CURRENTLY_PUTTING;
- }
- if (ch == EOF)
- return _IO_old_do_flush (f);
- if (f->_IO_write_ptr == f->_IO_buf_end ) /* Buffer is really full */
- if (_IO_old_do_flush (f) == EOF)
- return EOF;
- *f->_IO_write_ptr++ = ch;
- if ((f->_flags & _IO_UNBUFFERED)
- || ((f->_flags & _IO_LINE_BUF) && ch == '\n'))
- if (_IO_old_do_flush (f) == EOF)
- return EOF;
- return (unsigned char) ch;
-}
-
-int
-_IO_old_file_sync (fp)
- _IO_FILE *fp;
-{
- _IO_size_t delta;
- int retval = 0;
-
- _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- /* char* ptr = cur_ptr(); */
- if (fp->_IO_write_ptr > fp->_IO_write_base)
- if (_IO_old_do_flush(fp)) return EOF;
- delta = fp->_IO_read_ptr - fp->_IO_read_end;
- if (delta != 0)
- {
-#ifdef TODO
- if (_IO_in_backup (fp))
- delta -= eGptr () - Gbase ();
-#endif
- _IO_off_t new_pos = _IO_SYSSEEK (fp, delta, 1);
- if (new_pos != (_IO_off_t) EOF)
- fp->_IO_read_end = fp->_IO_read_ptr;
-#ifdef ESPIPE
- else if (errno == ESPIPE)
- ; /* Ignore error from unseekable devices. */
-#endif
- else
- retval = EOF;
- }
- if (retval != EOF)
- fp->_old_offset = _IO_pos_BAD;
- /* FIXME: Cleanup - can this be shared? */
- /* setg(base(), ptr, ptr); */
- _IO_funlockfile (fp);
- _IO_cleanup_region_end (0);
- return retval;
-}
-
-_IO_fpos64_t
-_IO_old_file_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off64_t offset;
- int dir;
- int mode;
-{
- _IO_pos_t result;
- _IO_off64_t delta, new_offset;
- long count;
- /* POSIX.1 8.2.3.7 says that after a call the fflush() the file
- offset of the underlying file must be exact. */
- int must_be_exact = (fp->_IO_read_base == fp->_IO_read_end
- && fp->_IO_write_base == fp->_IO_write_ptr);
-
- if (mode == 0)
- dir = _IO_seek_cur, offset = 0; /* Don't move any pointers. */
-
- /* Flush unwritten characters.
- (This may do an unneeded write if we seek within the buffer.
- But to be able to switch to reading, we would need to set
- egptr to ptr. That can't be done in the current design,
- which assumes file_ptr() is eGptr. Anyway, since we probably
- end up flushing when we close(), it doesn't make much difference.)
- FIXME: simulate mem-papped files. */
-
- if (fp->_IO_write_ptr > fp->_IO_write_base || _IO_in_put_mode (fp))
- if (_IO_switch_to_get_mode (fp))
- return EOF;
-
- if (fp->_IO_buf_base == NULL)
- {
- _IO_doallocbuf (fp);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- }
-
- switch (dir)
- {
- case _IO_seek_cur:
- /* Adjust for read-ahead (bytes is buffer). */
- offset -= fp->_IO_read_end - fp->_IO_read_ptr;
- if (fp->_old_offset == _IO_pos_BAD)
- goto dumb;
- /* Make offset absolute, assuming current pointer is file_ptr(). */
- offset += _IO_pos_as_off (fp->_old_offset);
-
- dir = _IO_seek_set;
- break;
- case _IO_seek_set:
- break;
- case _IO_seek_end:
- {
- struct _G_stat64 st;
- if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
- {
- offset += st.st_size;
- dir = _IO_seek_set;
- }
- else
- goto dumb;
- }
- }
- /* At this point, dir==_IO_seek_set. */
-
- /* If destination is within current buffer, optimize: */
- if (fp->_old_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
- && !_IO_in_backup (fp))
- {
- /* Offset relative to start of main get area. */
- _IO_pos_t rel_offset = (offset - fp->_old_offset
- + (fp->_IO_read_end - fp->_IO_read_base));
- if (rel_offset >= 0)
- {
-#if 0
- if (_IO_in_backup (fp))
- _IO_switch_to_main_get_area (fp);
-#endif
- if (rel_offset <= fp->_IO_read_end - fp->_IO_read_base)
- {
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base + rel_offset,
- fp->_IO_read_end);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- goto resync;
- }
-#ifdef TODO
- /* If we have streammarkers, seek forward by reading ahead. */
- if (_IO_have_markers (fp))
- {
- int to_skip = rel_offset
- - (fp->_IO_read_ptr - fp->_IO_read_base);
- if (ignore (to_skip) != to_skip)
- goto dumb;
- goto resync;
- }
-#endif
- }
-#ifdef TODO
- if (rel_offset < 0 && rel_offset >= Bbase () - Bptr ())
- {
- if (!_IO_in_backup (fp))
- _IO_switch_to_backup_area (fp);
- gbump (fp->_IO_read_end + rel_offset - fp->_IO_read_ptr);
- goto resync;
- }
-#endif
- }
-
-#ifdef TODO
- _IO_unsave_markers (fp);
-#endif
-
- if (fp->_flags & _IO_NO_READS)
- goto dumb;
-
- /* Try to seek to a block boundary, to improve kernel page management. */
- new_offset = offset & ~(fp->_IO_buf_end - fp->_IO_buf_base - 1);
- delta = offset - new_offset;
- if (delta > fp->_IO_buf_end - fp->_IO_buf_base)
- {
- new_offset = offset;
- delta = 0;
- }
- result = _IO_SYSSEEK (fp, new_offset, 0);
- if (result < 0)
- return EOF;
- if (delta == 0)
- count = 0;
- else
- {
- count = _IO_SYSREAD (fp, fp->_IO_buf_base,
- (must_be_exact
- ? delta : fp->_IO_buf_end - fp->_IO_buf_base));
- if (count < delta)
- {
- /* We weren't allowed to read, but try to seek the remainder. */
- offset = count == EOF ? delta : delta-count;
- dir = _IO_seek_cur;
- goto dumb;
- }
- }
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base + delta,
- fp->_IO_buf_base + count);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- fp->_old_offset = result + count;
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- return offset;
- dumb:
-
- _IO_unsave_markers (fp);
- result = _IO_SYSSEEK (fp, offset, dir);
- if (result != EOF)
- {
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- fp->_old_offset = result;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- }
- return result;
-
-resync:
- /* We need to do it since it is possible that the file offset in
- the kernel may be changed behind our back. It may happen when
- we fopen a file and then do a fork. One process may access the
- the file and the kernel file offset will be changed. */
- if (fp->_old_offset >= 0)
- _IO_SYSSEEK (fp, fp->_old_offset, 0);
-
- return offset;
-}
-
-_IO_ssize_t
-_IO_old_file_write (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_ssize_t n;
-{
- _IO_ssize_t to_do = n;
- while (to_do > 0)
- {
- _IO_ssize_t count = write (f->_fileno, data, to_do);
- if (count == EOF)
- {
- f->_flags |= _IO_ERR_SEEN;
- break;
- }
- to_do -= count;
- data = (void *) ((char *) data + count);
- }
- n -= to_do;
- if (f->_old_offset >= 0)
- f->_old_offset += n;
- return n;
-}
-
-_IO_size_t
-_IO_old_file_xsputn (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_size_t n;
-{
- register const char *s = (char *) data;
- _IO_size_t to_do = n;
- int must_flush = 0;
- _IO_size_t count;
-
- if (n <= 0)
- return 0;
- /* This is an optimized implementation.
- If the amount to be written straddles a block boundary
- (or the filebuf is unbuffered), use sys_write directly. */
-
- /* First figure out how much space is available in the buffer. */
- count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
- if ((f->_flags & _IO_LINE_BUF) && (f->_flags & _IO_CURRENTLY_PUTTING))
- {
- count = f->_IO_buf_end - f->_IO_write_ptr;
- if (count >= n)
- {
- register const char *p;
- for (p = s + n; p > s; )
- {
- if (*--p == '\n')
- {
- count = p - s + 1;
- must_flush = 1;
- break;
- }
- }
- }
- }
- /* Then fill the buffer. */
- if (count > 0)
- {
- if (count > to_do)
- count = to_do;
- if (count > 20)
- {
- memcpy (f->_IO_write_ptr, s, count);
- s += count;
- }
- else
- {
- register char *p = f->_IO_write_ptr;
- register int i = (int) count;
- while (--i >= 0)
- *p++ = *s++;
- }
- f->_IO_write_ptr += count;
- to_do -= count;
- }
- if (to_do + must_flush > 0)
- {
- _IO_size_t block_size, do_write;
- /* Next flush the (full) buffer. */
- if (__overflow (f, EOF) == EOF)
- return n - to_do;
-
- /* Try to maintain alignment: write a whole number of blocks.
- dont_write is what gets left over. */
- block_size = f->_IO_buf_end - f->_IO_buf_base;
- do_write = to_do - (block_size >= 128 ? to_do % block_size : 0);
-
- if (do_write)
- {
- count = old_do_write (f, s, do_write);
- to_do -= count;
- if (count < do_write)
- return n - to_do;
- }
-
- /* Now write out the remainder. Normally, this will fit in the
- buffer, but it's somewhat messier for line-buffered files,
- so we let _IO_default_xsputn handle the general case. */
- if (to_do)
- to_do -= _IO_default_xsputn (f, s+do_write, to_do);
- }
- return n - to_do;
-}
-
-
-struct _IO_jump_t _IO_old_file_jumps =
-{
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_old_file_finish),
- JUMP_INIT(overflow, _IO_old_file_overflow),
- JUMP_INIT(underflow, _IO_old_file_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_default_pbackfail),
- JUMP_INIT(xsputn, _IO_old_file_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_old_file_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_old_file_setbuf),
- JUMP_INIT(sync, _IO_old_file_sync),
- JUMP_INIT(doallocate, _IO_file_doallocate),
- JUMP_INIT(read, _IO_file_read),
- JUMP_INIT(write, _IO_old_file_write),
- JUMP_INIT(seek, _IO_file_seek),
- JUMP_INIT(close, _IO_file_close),
- JUMP_INIT(stat, _IO_file_stat)
-};
-
-#ifdef SHARED
-symbol_version (_IO_old_do_write, _IO_do_write, GLIBC_2.0);
-symbol_version (_IO_old_file_attach, _IO_file_attach, GLIBC_2.0);
-symbol_version (_IO_old_file_close_it, _IO_file_close_it, GLIBC_2.0);
-symbol_version (_IO_old_file_finish, _IO_file_finish, GLIBC_2.0);
-symbol_version (_IO_old_file_fopen, _IO_file_fopen, GLIBC_2.0);
-symbol_version (_IO_old_file_init, _IO_file_init, GLIBC_2.0);
-symbol_version (_IO_old_file_setbuf, _IO_file_setbuf, GLIBC_2.0);
-symbol_version (_IO_old_file_sync, _IO_file_sync, GLIBC_2.0);
-symbol_version (_IO_old_file_overflow, _IO_file_overflow, GLIBC_2.0);
-symbol_version (_IO_old_file_seekoff, _IO_file_seekoff, GLIBC_2.0);
-symbol_version (_IO_old_file_underflow, _IO_file_underflow, GLIBC_2.0);
-symbol_version (_IO_old_file_write, _IO_file_write, GLIBC_2.0);
-symbol_version (_IO_old_file_xsputn, _IO_file_xsputn, GLIBC_2.0);
-#else
-strong_alias (_IO_old_do_write, _IO_do_write);
-strong_alias (_IO_old_file_attach, _IO_file_attach);
-strong_alias (_IO_old_file_close_it, _IO_file_close_it);
-strong_alias (_IO_old_file_finish, _IO_file_finish);
-strong_alias (_IO_old_file_fopen, _IO_file_fopen);
-strong_alias (_IO_old_file_init, _IO_file_init);
-strong_alias (_IO_old_file_setbuf, _IO_file_setbuf);
-strong_alias (_IO_old_file_sync, _IO_file_sync);
-strong_alias (_IO_old_file_overflow, _IO_file_overflow);
-strong_alias (_IO_old_file_seekoff, _IO_file_seekoff);
-strong_alias (_IO_old_file_underflow, _IO_file_underflow);
-strong_alias (_IO_old_file_write, _IO_file_write);
-strong_alias (_IO_old_file_xsputn, _IO_file_xsputn);
-#endif
diff --git a/glibc-compat/oldiofclose.c b/glibc-compat/oldiofclose.c
deleted file mode 100644
index eadad8adbe..0000000000
--- a/glibc-compat/oldiofclose.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#define _IO_USE_OLD_IO_FILE
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-
-int
-_IO_old_fclose (fp)
- _IO_FILE *fp;
-{
- int status;
-
- CHECK_FILE(fp, EOF);
-
- _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- if (fp->_IO_file_flags & _IO_IS_FILEBUF)
- status = _IO_old_file_close_it (fp);
- else
- status = fp->_flags & _IO_ERR_SEEN ? -1 : 0;
- _IO_FINISH (fp);
- _IO_funlockfile (fp);
- _IO_cleanup_region_end (0);
- if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr)
- {
- fp->_IO_file_flags = 0;
- free(fp);
- }
-
- return status;
-}
-
-strong_alias (_IO_old_fclose, __old_fclose)
-symbol_version (_IO_old_fclose, _IO_fclose, GLIBC_2.0);
-symbol_version (__old_fclose, fclose, GLIBC_2.0);
diff --git a/glibc-compat/oldiofdopen.c b/glibc-compat/oldiofdopen.c
deleted file mode 100644
index 410206412a..0000000000
--- a/glibc-compat/oldiofdopen.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#define _IO_USE_OLD_IO_FILE
-#ifdef __STDC__
-# include <stdlib.h>
-#endif
-#include "libioP.h"
-#include <fcntl.h>
-
-#ifndef _IO_fcntl
-# define _IO_fcntl __fcntl
-#endif
-
-_IO_FILE *
-_IO_old_fdopen (fd, mode)
- int fd;
- const char *mode;
-{
- int read_write;
- int posix_mode = 0;
- struct locked_FILE
- {
- struct _IO_FILE_plus fp;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- } *new_f;
- int fd_flags;
-
- switch (*mode++)
- {
- case 'r':
- read_write = _IO_NO_WRITES;
- break;
- case 'w':
- read_write = _IO_NO_READS;
- break;
- case 'a':
- posix_mode = O_APPEND;
- read_write = _IO_NO_READS|_IO_IS_APPENDING;
- break;
- default:
- MAYBE_SET_EINVAL;
- return NULL;
- }
- if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+'))
- read_write &= _IO_IS_APPENDING;
-#ifdef F_GETFL
- fd_flags = _IO_fcntl (fd, F_GETFL);
-#ifndef O_ACCMODE
-#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
-#endif
- if (fd_flags == -1
- || ((fd_flags & O_ACCMODE) == O_RDONLY && !(read_write & _IO_NO_WRITES))
- || ((fd_flags & O_ACCMODE) == O_WRONLY && !(read_write & _IO_NO_READS)))
- return NULL;
-
- /* The May 93 draft of P1003.4/D14.1 (redesignated as 1003.1b)
- [System Application Program Interface (API) Amendment 1:
- Realtime Extensions], Rationale B.8.3.3
- Open a Stream on a File Descriptor says:
-
- Although not explicitly required by POSIX.1, a good
- implementation of append ("a") mode would cause the
- O_APPEND flag to be set.
-
- (Historical implementations [such as Solaris2] do a one-time
- seek in fdopen.)
-
- However, we do not turn O_APPEND off if the mode is "w" (even
- though that would seem consistent) because that would be more
- likely to break historical programs.
- */
- if ((posix_mode & O_APPEND) && !(fd_flags & O_APPEND))
- {
-#ifdef F_SETFL
- if (_IO_fcntl (fd, F_SETFL, fd_flags | O_APPEND) == -1)
-#endif
- return NULL;
- }
-#endif
-
- new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
- if (new_f == NULL)
- return NULL;
-#ifdef _IO_MTSAFE_IO
- new_f->fp.file._lock = &new_f->lock;
-#endif
- _IO_init (&new_f->fp.file, 0);
- _IO_JUMPS (&new_f->fp) = &_IO_old_file_jumps;
- _IO_old_file_init (&new_f->fp.file);
-#if !_IO_UNIFIED_JUMPTABLES
- new_f->fp.vtable = NULL;
-#endif
- if (_IO_old_file_attach (&new_f->fp.file, fd) == NULL)
- {
- _IO_un_link (&new_f->fp.file);
- free (new_f);
- return NULL;
- }
- new_f->fp.file._flags &= ~_IO_DELETE_DONT_CLOSE;
-
- new_f->fp.file._IO_file_flags =
- _IO_mask_flags (&new_f->fp.file, read_write,
- _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
-
- return (_IO_FILE *) &new_f->fp;
-}
-
-#ifdef SHARED
-strong_alias (_IO_old_fdopen, __old_fdopen)
-symbol_version (_IO_old_fdopen, _IO_fdopen, GLIBC_2.0);
-symbol_version (__old_fdopen, fdopen, GLIBC_2.0);
-#else
-strong_alias (_IO_old_fdopen, _IO_fdopen);
-strong_alias (__old_fdopen, fdopen);
-#endif
diff --git a/glibc-compat/oldiofopen.c b/glibc-compat/oldiofopen.c
deleted file mode 100644
index e2d9a826ce..0000000000
--- a/glibc-compat/oldiofopen.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#define _IO_USE_OLD_IO_FILE
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-
-
-_IO_FILE *
-_IO_old_fopen (filename, mode)
- const char *filename;
- const char *mode;
-{
- struct locked_FILE
- {
- struct _IO_FILE_plus fp;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- } *new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
-
- if (new_f == NULL)
- return NULL;
-#ifdef _IO_MTSAFE_IO
- new_f->fp.file._lock = &new_f->lock;
-#endif
- _IO_init (&new_f->fp.file, 0);
- _IO_JUMPS (&new_f->fp.file) = &_IO_old_file_jumps;
- _IO_old_file_init (&new_f->fp.file);
-#if !_IO_UNIFIED_JUMPTABLES
- new_f->fp.vtable = NULL;
-#endif
- if (_IO_old_file_fopen (&new_f->fp.file, filename, mode) != NULL)
- return (_IO_FILE *) &new_f->fp;
- _IO_un_link (&new_f->fp.file);
- free (new_f);
- return NULL;
-}
-
-#ifdef SHARED
-strong_alias (_IO_old_fopen, __old_fopen)
-symbol_version (_IO_old_fopen, _IO_fopen, GLIBC_2.0);
-symbol_version (__old_fopen, fopen, GLIBC_2.0);
-#else
-strong_alias (_IO_old_fopen, _IO_fopen);
-strong_alias (__old_fopen, fopen);
-#endif
diff --git a/glibc-compat/oldiopopen.c b/glibc-compat/oldiopopen.c
deleted file mode 100644
index 13b5d16c83..0000000000
--- a/glibc-compat/oldiopopen.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Copyright (C) 1998 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
- Written by Per Bothner <bothner@cygnus.com>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#define _IO_USE_OLD_IO_FILE
-#ifndef _POSIX_SOURCE
-# define _POSIX_SOURCE
-#endif
-#include "libioP.h"
-#if _IO_HAVE_SYS_WAIT
-#include <signal.h>
-#include <unistd.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#ifdef _LIBC
-# include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#ifndef _IO_fork
-#ifdef _LIBC
-#define _IO_fork __vfork
-#else
-#define _IO_fork vfork /* defined in libiberty, if needed */
-#endif
-extern _IO_pid_t _IO_fork (void);
-#endif
-
-#endif /* _IO_HAVE_SYS_WAIT */
-
-#ifndef _IO_pipe
-#ifdef _LIBC
-#define _IO_pipe __pipe
-#else
-#define _IO_pipe pipe
-#endif
-extern int _IO_pipe (int des[2]);
-#endif
-
-#ifndef _IO_dup2
-#ifdef _LIBC
-#define _IO_dup2 __dup2
-#else
-#define _IO_dup2 dup2
-#endif
-extern int _IO_dup2 (int fd, int fd2);
-#endif
-
-#ifndef _IO_waitpid
-#ifdef _LIBC
-#define _IO_waitpid __waitpid
-#else
-#define _IO_waitpid waitpid
-#endif
-#endif
-
-#ifndef _IO_execl
-#define _IO_execl execl
-#endif
-#ifndef _IO__exit
-#define _IO__exit _exit
-#endif
-
-#ifndef _IO_close
-#ifdef _LIBC
-#define _IO_close __close
-#else
-#define _IO_close close
-#endif
-#endif
-
-struct _IO_proc_file
-{
- struct _IO_FILE_plus file;
- /* Following fields must match those in class procbuf (procbuf.h) */
- _IO_pid_t pid;
- struct _IO_proc_file *next;
-};
-typedef struct _IO_proc_file _IO_proc_file;
-
-static struct _IO_proc_file *old_proc_file_chain = NULL;
-
-_IO_FILE *
-_IO_old_proc_open (fp, command, mode)
- _IO_FILE *fp;
- const char *command;
- const char *mode;
-{
-#if _IO_HAVE_SYS_WAIT
- volatile int read_or_write;
- volatile int parent_end, child_end;
- int pipe_fds[2];
- _IO_pid_t child_pid;
- if (_IO_file_is_open (fp))
- return NULL;
- if (_IO_pipe (pipe_fds) < 0)
- return NULL;
- if (mode[0] == 'r' && mode[1] == '\0')
- {
- parent_end = pipe_fds[0];
- child_end = pipe_fds[1];
- read_or_write = _IO_NO_WRITES;
- }
- else if (mode[0] == 'w' && mode[1] == '\0')
- {
- parent_end = pipe_fds[1];
- child_end = pipe_fds[0];
- read_or_write = _IO_NO_READS;
- }
- else
- {
- __set_errno (EINVAL);
- return NULL;
- }
- ((_IO_proc_file *) fp)->pid = child_pid = _IO_fork ();
- if (child_pid == 0)
- {
- int child_std_end = mode[0] == 'r' ? 1 : 0;
- _IO_close (parent_end);
- if (child_end != child_std_end)
- {
- _IO_dup2 (child_end, child_std_end);
- _IO_close (child_end);
- }
- /* POSIX.2: "popen() shall ensure that any streams from previous
- popen() calls that remain open in the parent process are closed
- in the new child process." */
- while (old_proc_file_chain)
- {
- _IO_close (_IO_fileno ((_IO_FILE *) old_proc_file_chain));
- old_proc_file_chain = old_proc_file_chain->next;
- }
-
- _IO_execl ("/bin/sh", "sh", "-c", command, (char *) 0);
- _IO__exit (127);
- }
- _IO_close (child_end);
- if (child_pid < 0)
- {
- _IO_close (parent_end);
- return NULL;
- }
- _IO_fileno (fp) = parent_end;
-
- /* Link into old_proc_file_chain. */
- ((_IO_proc_file *) fp)->next = old_proc_file_chain;
- old_proc_file_chain = (_IO_proc_file *) fp;
-
- _IO_mask_flags (fp, read_or_write, _IO_NO_READS|_IO_NO_WRITES);
- return fp;
-#else /* !_IO_HAVE_SYS_WAIT */
- return NULL;
-#endif
-}
-
-_IO_FILE *
-_IO_old_popen (command, mode)
- const char *command;
- const char *mode;
-{
- struct locked_FILE
- {
- struct _IO_proc_file fpx;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- } *new_f;
- _IO_FILE *fp;
-
- new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
- if (new_f == NULL)
- return NULL;
-#ifdef _IO_MTSAFE_IO
- new_f->fpx.file.file._lock = &new_f->lock;
-#endif
- fp = &new_f->fpx.file.file;
- _IO_init (fp, 0);
- _IO_JUMPS (fp) = &_IO_old_proc_jumps;
- _IO_old_file_init (fp);
-#if !_IO_UNIFIED_JUMPTABLES
- new_f->fpx.file.vtable = NULL;
-#endif
- if (_IO_old_proc_open (fp, command, mode) != NULL)
- return fp;
- _IO_un_link (fp);
- free (new_f);
- return NULL;
-}
-
-int
-_IO_old_proc_close (fp)
- _IO_FILE *fp;
-{
- /* This is not name-space clean. FIXME! */
-#if _IO_HAVE_SYS_WAIT
- int wstatus;
- _IO_proc_file **ptr = &old_proc_file_chain;
- _IO_pid_t wait_pid;
- int status = -1;
-
- /* Unlink from old_proc_file_chain. */
- for ( ; *ptr != NULL; ptr = &(*ptr)->next)
- {
- if (*ptr == (_IO_proc_file *) fp)
- {
- *ptr = (*ptr)->next;
- status = 0;
- break;
- }
- }
-
- if (status < 0 || _IO_close (_IO_fileno(fp)) < 0)
- return -1;
- /* POSIX.2 Rationale: "Some historical implementations either block
- or ignore the signals SIGINT, SIGQUIT, and SIGHUP while waiting
- for the child process to terminate. Since this behavior is not
- described in POSIX.2, such implementations are not conforming." */
- do
- {
- wait_pid = _IO_waitpid (((_IO_proc_file *) fp)->pid, &wstatus, 0);
- }
- while (wait_pid == -1 && errno == EINTR);
- if (wait_pid == -1)
- return -1;
- return wstatus;
-#else /* !_IO_HAVE_SYS_WAIT */
- return -1;
-#endif
-}
-
-struct _IO_jump_t _IO_old_proc_jumps = {
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_old_file_finish),
- JUMP_INIT(overflow, _IO_old_file_overflow),
- JUMP_INIT(underflow, _IO_old_file_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_default_pbackfail),
- JUMP_INIT(xsputn, _IO_old_file_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_old_file_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_old_file_setbuf),
- JUMP_INIT(sync, _IO_old_file_sync),
- JUMP_INIT(doallocate, _IO_file_doallocate),
- JUMP_INIT(read, _IO_file_read),
- JUMP_INIT(write, _IO_old_file_write),
- JUMP_INIT(seek, _IO_file_seek),
- JUMP_INIT(close, _IO_old_proc_close),
- JUMP_INIT(stat, _IO_file_stat),
- JUMP_INIT(showmanyc, _IO_default_showmanyc),
- JUMP_INIT(imbue, _IO_default_imbue)
-};
-
-#ifdef SHARED
-strong_alias (_IO_old_popen, __old_popen)
-symbol_version (_IO_old_popen, _IO_popen, GLIBC_2.0);
-symbol_version (__old_popen, popen, GLIBC_2.0);
-symbol_version (_IO_old_proc_open, _IO_proc_open, GLIBC_2.0);
-symbol_version (_IO_old_proc_close, _IO_proc_close, GLIBC_2.0);
-#else
-strong_alias (_IO_old_popen, _IO_popen);
-strong_alias (__old_popen, popen);
-strong_alias (_IO_old_proc_open, _IO_proc_open);
-strong_alias (_IO_old_proc_close, _IO_proc_close);
-#endif
diff --git a/glibc-compat/oldpclose.c b/glibc-compat/oldpclose.c
deleted file mode 100644
index c33e19c431..0000000000
--- a/glibc-compat/oldpclose.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (C) 1998 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#define _IO_USE_OLD_IO_FILE
-#include "libioP.h"
-#include "stdio.h"
-#include <errno.h>
-
-int
-__old_pclose (fp)
- FILE *fp;
-{
-#if 0
- /* Does not actually test that stream was created by popen(). Instead,
- it depends on the filebuf::sys_close() virtual to Do The Right Thing. */
- if (fp is not a proc_file)
- return -1;
-#endif
- return _IO_old_fclose (fp);
-}
-
-#ifdef SHARED
-symbol_version (__old_pclose, pclose, GLIBC_2.0);
-#else
-strong_alias (__old_pclose, pclose);
-#endif
diff --git a/glibc-compat/oldstdfiles.c b/glibc-compat/oldstdfiles.c
deleted file mode 100644
index e9c992b943..0000000000
--- a/glibc-compat/oldstdfiles.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (C) 1993, 1994, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-
-/* This file provides definitions of _IO_stdin, _IO_stdout, and _IO_stderr
- for C code. Compare stdstreams.cc.
- (The difference is that here the vtable field is set to 0,
- so the objects defined are not valid C++ objects. On the other
- hand, we don't need a C++ compiler to build this file.) */
-
-#define _IO_USE_OLD_IO_FILE
-#include "libioP.h"
-
-#ifdef _IO_MTSAFE_IO
-#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD), &_IO_old_file_jumps};
-#else
-#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD), &_IO_old_file_jumps};
-#endif
-
-DEF_STDFILE(_IO_stdin_, 0, 0, _IO_NO_WRITES);
-DEF_STDFILE(_IO_stdout_, 1, &_IO_stdin_.file, _IO_NO_READS);
-DEF_STDFILE(_IO_stderr_, 2, &_IO_stdout_.file,
- _IO_NO_READS+_IO_UNBUFFERED);
-
-#if defined __GNUC__ && __GNUC__ >= 2
-
-#include <stdio.h>
-
-extern const int _IO_stdin_used;
-weak_extern (_IO_stdin_used);
-
-#undef stdin
-#undef stdout
-#undef stderr
-
-extern FILE *stdin;
-extern FILE *stdout;
-extern FILE *stderr;
-
-#ifdef SHARED
-extern
-#endif
-FILE *_IO_list_all;
-
-static void _IO_check_libio (void) __attribute__ ((constructor));
-
-/* This function determines which shared C library the application
- was linked against. We then set up the stdin/stdout/stderr and
- _IO_list_all accordingly. */
-
-static void
-_IO_check_libio ()
-{
-#ifdef SHARED
- if (&_IO_stdin_used == NULL)
-#endif
- {
- /* We are using the old one. */
- _IO_stdin = stdin = &_IO_stdin_.file;
- _IO_stdout = stdout = &_IO_stdout_.file;
- _IO_stderr = stderr = _IO_list_all = &_IO_stderr_.file;
- _IO_stdin->_vtable_offset = _IO_stdout->_vtable_offset =
- _IO_stderr->_vtable_offset = stdin->_vtable_offset =
- stdout->_vtable_offset = stderr->_vtable_offset =
- ((int) sizeof (struct _IO_FILE)
- - (int) sizeof (struct _IO_FILE_complete));
- }
-}
-
-#endif
diff --git a/glibc-compat/oldtmpfile.c b/glibc-compat/oldtmpfile.c
deleted file mode 100644
index 9607bceefe..0000000000
--- a/glibc-compat/oldtmpfile.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 1991, 1993, 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#define _IO_USE_OLD_IO_FILE
-#include <stdio.h>
-#include <unistd.h>
-#include <iolibio.h>
-
-/* This returns a new stream opened on a temporary file (generated
- by tmpnam). The file is opened with mode "w+b" (binary read/write).
- If we couldn't generate a unique filename or the file couldn't
- be opened, NULL is returned. */
-FILE *
-__old_tmpfile (void)
-{
- char buf[FILENAME_MAX];
- int fd;
- FILE *f;
-
- if (__path_search (buf, FILENAME_MAX, NULL, "tmpf", 0))
- return NULL;
- fd = __gen_tempname (buf, 1, 0);
- if (fd < 0)
- return NULL;
-
- /* Note that this relies on the Unix semantics that
- a file is not really removed until it is closed. */
- (void) remove (buf);
-
- if ((f = _IO_old_fdopen (fd, "w+b")) == NULL)
- __close (fd);
-
- return f;
-}
-
-#ifdef SHARED
-symbol_version (__old_tmpfile, tmpfile, GLIBC_2.0);
-#else
-strong_alias (__old_tmpfile, tmpfile);
-#endif
diff --git a/glibc-compat/rpcsvc/yp.h b/glibc-compat/rpcsvc/yp.h
deleted file mode 100644
index 40914c5813..0000000000
--- a/glibc-compat/rpcsvc/yp.h
+++ /dev/null
@@ -1,621 +0,0 @@
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
-#ifndef __RPCSVC_YP_H__
-#define __RPCSVC_YP_H__
-
-#include <rpc/rpc.h>
-
-#define YPMAXRECORD 1024
-#define YPMAXDOMAIN 64
-#define YPMAXMAP 64
-#define YPMAXPEER 64
-
-enum ypstat {
- YP_TRUE = 1,
- YP_NOMORE = 2,
- YP_FALSE = 0,
- YP_NOMAP = -1,
- YP_NODOM = -2,
- YP_NOKEY = -3,
- YP_BADOP = -4,
- YP_BADDB = -5,
- YP_YPERR = -6,
- YP_BADARGS = -7,
- YP_VERS = -8,
-};
-typedef enum ypstat ypstat;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypstat(XDR *, ypstat*);
-#elif __STDC__
-extern bool_t xdr_ypstat(XDR *, ypstat*);
-#else /* Old Style C */
-bool_t xdr_ypstat();
-#endif /* Old Style C */
-
-
-enum ypxfrstat {
- YPXFR_SUCC = 1,
- YPXFR_AGE = 2,
- YPXFR_NOMAP = -1,
- YPXFR_NODOM = -2,
- YPXFR_RSRC = -3,
- YPXFR_RPC = -4,
- YPXFR_MADDR = -5,
- YPXFR_YPERR = -6,
- YPXFR_BADARGS = -7,
- YPXFR_DBM = -8,
- YPXFR_FILE = -9,
- YPXFR_SKEW = -10,
- YPXFR_CLEAR = -11,
- YPXFR_FORCE = -12,
- YPXFR_XFRERR = -13,
- YPXFR_REFUSED = -14,
-};
-typedef enum ypxfrstat ypxfrstat;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypxfrstat(XDR *, ypxfrstat*);
-#elif __STDC__
-extern bool_t xdr_ypxfrstat(XDR *, ypxfrstat*);
-#else /* Old Style C */
-bool_t xdr_ypxfrstat();
-#endif /* Old Style C */
-
-
-typedef char *domainname;
-#ifdef __cplusplus
-extern "C" bool_t xdr_domainname(XDR *, domainname*);
-#elif __STDC__
-extern bool_t xdr_domainname(XDR *, domainname*);
-#else /* Old Style C */
-bool_t xdr_domainname();
-#endif /* Old Style C */
-
-
-typedef char *mapname;
-#ifdef __cplusplus
-extern "C" bool_t xdr_mapname(XDR *, mapname*);
-#elif __STDC__
-extern bool_t xdr_mapname(XDR *, mapname*);
-#else /* Old Style C */
-bool_t xdr_mapname();
-#endif /* Old Style C */
-
-
-typedef char *peername;
-#ifdef __cplusplus
-extern "C" bool_t xdr_peername(XDR *, peername*);
-#elif __STDC__
-extern bool_t xdr_peername(XDR *, peername*);
-#else /* Old Style C */
-bool_t xdr_peername();
-#endif /* Old Style C */
-
-
-typedef struct {
- u_int keydat_len;
- char *keydat_val;
-} keydat;
-#ifdef __cplusplus
-extern "C" bool_t xdr_keydat(XDR *, keydat*);
-#elif __STDC__
-extern bool_t xdr_keydat(XDR *, keydat*);
-#else /* Old Style C */
-bool_t xdr_keydat();
-#endif /* Old Style C */
-
-
-typedef struct {
- u_int valdat_len;
- char *valdat_val;
-} valdat;
-#ifdef __cplusplus
-extern "C" bool_t xdr_valdat(XDR *, valdat*);
-#elif __STDC__
-extern bool_t xdr_valdat(XDR *, valdat*);
-#else /* Old Style C */
-bool_t xdr_valdat();
-#endif /* Old Style C */
-
-
-struct ypmap_parms {
- domainname domain;
- mapname map;
- u_int ordernum;
- peername peer;
-};
-typedef struct ypmap_parms ypmap_parms;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypmap_parms(XDR *, ypmap_parms*);
-#elif __STDC__
-extern bool_t xdr_ypmap_parms(XDR *, ypmap_parms*);
-#else /* Old Style C */
-bool_t xdr_ypmap_parms();
-#endif /* Old Style C */
-
-
-struct ypreq_key {
- domainname domain;
- mapname map;
- keydat key;
-};
-typedef struct ypreq_key ypreq_key;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypreq_key(XDR *, ypreq_key*);
-#elif __STDC__
-extern bool_t xdr_ypreq_key(XDR *, ypreq_key*);
-#else /* Old Style C */
-bool_t xdr_ypreq_key();
-#endif /* Old Style C */
-
-
-struct ypreq_nokey {
- domainname domain;
- mapname map;
-};
-typedef struct ypreq_nokey ypreq_nokey;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypreq_nokey(XDR *, ypreq_nokey*);
-#elif __STDC__
-extern bool_t xdr_ypreq_nokey(XDR *, ypreq_nokey*);
-#else /* Old Style C */
-bool_t xdr_ypreq_nokey();
-#endif /* Old Style C */
-
-
-struct ypreq_xfr {
- ypmap_parms map_parms;
- u_int transid;
- u_int prog;
- u_int port;
-};
-typedef struct ypreq_xfr ypreq_xfr;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypreq_xfr(XDR *, ypreq_xfr*);
-#elif __STDC__
-extern bool_t xdr_ypreq_xfr(XDR *, ypreq_xfr*);
-#else /* Old Style C */
-bool_t xdr_ypreq_xfr();
-#endif /* Old Style C */
-
-
-struct ypresp_val {
- ypstat stat;
- valdat val;
-};
-typedef struct ypresp_val ypresp_val;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_val(XDR *, ypresp_val*);
-#elif __STDC__
-extern bool_t xdr_ypresp_val(XDR *, ypresp_val*);
-#else /* Old Style C */
-bool_t xdr_ypresp_val();
-#endif /* Old Style C */
-
-
-struct ypresp_key_val {
- ypstat stat;
-#ifdef STUPID_SUN_BUG
- /* This is the form as distributed by Sun. But even the Sun NIS
- servers expect the values in the other order. So their
- implementation somehow must change the order internally. We
- don't want to follow this bad example since the user should be
- able to use rpcgen on this file. */
- keydat key;
- valdat val;
-#else
- valdat val;
- keydat key;
-#endif
-};
-typedef struct ypresp_key_val ypresp_key_val;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_key_val(XDR *, ypresp_key_val*);
-#elif __STDC__
-extern bool_t xdr_ypresp_key_val(XDR *, ypresp_key_val*);
-#else /* Old Style C */
-bool_t xdr_ypresp_key_val();
-#endif /* Old Style C */
-
-
-struct ypresp_master {
- ypstat stat;
- peername peer;
-};
-typedef struct ypresp_master ypresp_master;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_master(XDR *, ypresp_master*);
-#elif __STDC__
-extern bool_t xdr_ypresp_master(XDR *, ypresp_master*);
-#else /* Old Style C */
-bool_t xdr_ypresp_master();
-#endif /* Old Style C */
-
-
-struct ypresp_order {
- ypstat stat;
- u_int ordernum;
-};
-typedef struct ypresp_order ypresp_order;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_order(XDR *, ypresp_order*);
-#elif __STDC__
-extern bool_t xdr_ypresp_order(XDR *, ypresp_order*);
-#else /* Old Style C */
-bool_t xdr_ypresp_order();
-#endif /* Old Style C */
-
-
-struct ypresp_all {
- bool_t more;
- union {
- ypresp_key_val val;
- } ypresp_all_u;
-};
-typedef struct ypresp_all ypresp_all;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_all(XDR *, ypresp_all*);
-#elif __STDC__
-extern bool_t xdr_ypresp_all(XDR *, ypresp_all*);
-#else /* Old Style C */
-bool_t xdr_ypresp_all();
-#endif /* Old Style C */
-
-
-struct ypresp_xfr {
- u_int transid;
- ypxfrstat xfrstat;
-};
-typedef struct ypresp_xfr ypresp_xfr;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_xfr(XDR *, ypresp_xfr*);
-#elif __STDC__
-extern bool_t xdr_ypresp_xfr(XDR *, ypresp_xfr*);
-#else /* Old Style C */
-bool_t xdr_ypresp_xfr();
-#endif /* Old Style C */
-
-
-struct ypmaplist {
- mapname map;
- struct ypmaplist *next;
-};
-typedef struct ypmaplist ypmaplist;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypmaplist(XDR *, ypmaplist*);
-#elif __STDC__
-extern bool_t xdr_ypmaplist(XDR *, ypmaplist*);
-#else /* Old Style C */
-bool_t xdr_ypmaplist();
-#endif /* Old Style C */
-
-
-struct ypresp_maplist {
- ypstat stat;
- ypmaplist *maps;
-};
-typedef struct ypresp_maplist ypresp_maplist;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_maplist(XDR *, ypresp_maplist*);
-#elif __STDC__
-extern bool_t xdr_ypresp_maplist(XDR *, ypresp_maplist*);
-#else /* Old Style C */
-bool_t xdr_ypresp_maplist();
-#endif /* Old Style C */
-
-
-enum yppush_status {
- YPPUSH_SUCC = 1,
- YPPUSH_AGE = 2,
- YPPUSH_NOMAP = -1,
- YPPUSH_NODOM = -2,
- YPPUSH_RSRC = -3,
- YPPUSH_RPC = -4,
- YPPUSH_MADDR = -5,
- YPPUSH_YPERR = -6,
- YPPUSH_BADARGS = -7,
- YPPUSH_DBM = -8,
- YPPUSH_FILE = -9,
- YPPUSH_SKEW = -10,
- YPPUSH_CLEAR = -11,
- YPPUSH_FORCE = -12,
- YPPUSH_XFRERR = -13,
- YPPUSH_REFUSED = -14,
-};
-typedef enum yppush_status yppush_status;
-#ifdef __cplusplus
-extern "C" bool_t xdr_yppush_status(XDR *, yppush_status*);
-#elif __STDC__
-extern bool_t xdr_yppush_status(XDR *, yppush_status*);
-#else /* Old Style C */
-bool_t xdr_yppush_status();
-#endif /* Old Style C */
-
-
-struct yppushresp_xfr {
- u_int transid;
- yppush_status status;
-};
-typedef struct yppushresp_xfr yppushresp_xfr;
-#ifdef __cplusplus
-extern "C" bool_t xdr_yppushresp_xfr(XDR *, yppushresp_xfr*);
-#elif __STDC__
-extern bool_t xdr_yppushresp_xfr(XDR *, yppushresp_xfr*);
-#else /* Old Style C */
-bool_t xdr_yppushresp_xfr();
-#endif /* Old Style C */
-
-
-enum ypbind_resptype {
- YPBIND_SUCC_VAL = 1,
- YPBIND_FAIL_VAL = 2,
-};
-typedef enum ypbind_resptype ypbind_resptype;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypbind_resptype(XDR *, ypbind_resptype*);
-#elif __STDC__
-extern bool_t xdr_ypbind_resptype(XDR *, ypbind_resptype*);
-#else /* Old Style C */
-bool_t xdr_ypbind_resptype();
-#endif /* Old Style C */
-
-
-struct ypbind_binding {
- char ypbind_binding_addr[4];
- char ypbind_binding_port[2];
-};
-typedef struct ypbind_binding ypbind_binding;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypbind_binding(XDR *, ypbind_binding*);
-#elif __STDC__
-extern bool_t xdr_ypbind_binding(XDR *, ypbind_binding*);
-#else /* Old Style C */
-bool_t xdr_ypbind_binding();
-#endif /* Old Style C */
-
-
-struct ypbind_resp {
- ypbind_resptype ypbind_status;
- union {
- u_int ypbind_error;
- ypbind_binding ypbind_bindinfo;
- } ypbind_resp_u;
-};
-typedef struct ypbind_resp ypbind_resp;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypbind_resp(XDR *, ypbind_resp*);
-#elif __STDC__
-extern bool_t xdr_ypbind_resp(XDR *, ypbind_resp*);
-#else /* Old Style C */
-bool_t xdr_ypbind_resp();
-#endif /* Old Style C */
-
-#define YPBIND_ERR_ERR 1
-#define YPBIND_ERR_NOSERV 2
-#define YPBIND_ERR_RESC 3
-
-struct ypbind_setdom {
- domainname ypsetdom_domain;
- ypbind_binding ypsetdom_binding;
- u_int ypsetdom_vers;
-};
-typedef struct ypbind_setdom ypbind_setdom;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypbind_setdom(XDR *, ypbind_setdom*);
-#elif __STDC__
-extern bool_t xdr_ypbind_setdom(XDR *, ypbind_setdom*);
-#else /* Old Style C */
-bool_t xdr_ypbind_setdom();
-#endif /* Old Style C */
-
-
-#define YPPROG ((u_long)100004)
-#define YPVERS ((u_long)2)
-
-#ifdef __cplusplus
-#define YPPROC_NULL ((u_long)0)
-extern "C" void * ypproc_null_2(void *, CLIENT *);
-extern "C" void * ypproc_null_2_svc(void *, struct svc_req *);
-#define YPPROC_DOMAIN ((u_long)1)
-extern "C" bool_t * ypproc_domain_2(domainname *, CLIENT *);
-extern "C" bool_t * ypproc_domain_2_svc(domainname *, struct svc_req *);
-#define YPPROC_DOMAIN_NONACK ((u_long)2)
-extern "C" bool_t * ypproc_domain_nonack_2(domainname *, CLIENT *);
-extern "C" bool_t * ypproc_domain_nonack_2_svc(domainname *, struct svc_req *);
-#define YPPROC_MATCH ((u_long)3)
-extern "C" ypresp_val * ypproc_match_2(ypreq_key *, CLIENT *);
-extern "C" ypresp_val * ypproc_match_2_svc(ypreq_key *, struct svc_req *);
-#define YPPROC_FIRST ((u_long)4)
-extern "C" ypresp_key_val * ypproc_first_2(ypreq_key *, CLIENT *);
-extern "C" ypresp_key_val * ypproc_first_2_svc(ypreq_key *, struct svc_req *);
-#define YPPROC_NEXT ((u_long)5)
-extern "C" ypresp_key_val * ypproc_next_2(ypreq_key *, CLIENT *);
-extern "C" ypresp_key_val * ypproc_next_2_svc(ypreq_key *, struct svc_req *);
-#define YPPROC_XFR ((u_long)6)
-extern "C" ypresp_xfr * ypproc_xfr_2(ypreq_xfr *, CLIENT *);
-extern "C" ypresp_xfr * ypproc_xfr_2_svc(ypreq_xfr *, struct svc_req *);
-#define YPPROC_CLEAR ((u_long)7)
-extern "C" void * ypproc_clear_2(void *, CLIENT *);
-extern "C" void * ypproc_clear_2_svc(void *, struct svc_req *);
-#define YPPROC_ALL ((u_long)8)
-extern "C" ypresp_all * ypproc_all_2(ypreq_nokey *, CLIENT *);
-extern "C" ypresp_all * ypproc_all_2_svc(ypreq_nokey *, struct svc_req *);
-#define YPPROC_MASTER ((u_long)9)
-extern "C" ypresp_master * ypproc_master_2(ypreq_nokey *, CLIENT *);
-extern "C" ypresp_master * ypproc_master_2_svc(ypreq_nokey *, struct svc_req *);
-#define YPPROC_ORDER ((u_long)10)
-extern "C" ypresp_order * ypproc_order_2(ypreq_nokey *, CLIENT *);
-extern "C" ypresp_order * ypproc_order_2_svc(ypreq_nokey *, struct svc_req *);
-#define YPPROC_MAPLIST ((u_long)11)
-extern "C" ypresp_maplist * ypproc_maplist_2(domainname *, CLIENT *);
-extern "C" ypresp_maplist * ypproc_maplist_2_svc(domainname *, struct svc_req *);
-
-#elif __STDC__
-#define YPPROC_NULL ((u_long)0)
-extern void * ypproc_null_2(void *, CLIENT *);
-extern void * ypproc_null_2_svc(void *, struct svc_req *);
-#define YPPROC_DOMAIN ((u_long)1)
-extern bool_t * ypproc_domain_2(domainname *, CLIENT *);
-extern bool_t * ypproc_domain_2_svc(domainname *, struct svc_req *);
-#define YPPROC_DOMAIN_NONACK ((u_long)2)
-extern bool_t * ypproc_domain_nonack_2(domainname *, CLIENT *);
-extern bool_t * ypproc_domain_nonack_2_svc(domainname *, struct svc_req *);
-#define YPPROC_MATCH ((u_long)3)
-extern ypresp_val * ypproc_match_2(ypreq_key *, CLIENT *);
-extern ypresp_val * ypproc_match_2_svc(ypreq_key *, struct svc_req *);
-#define YPPROC_FIRST ((u_long)4)
-extern ypresp_key_val * ypproc_first_2(ypreq_key *, CLIENT *);
-extern ypresp_key_val * ypproc_first_2_svc(ypreq_key *, struct svc_req *);
-#define YPPROC_NEXT ((u_long)5)
-extern ypresp_key_val * ypproc_next_2(ypreq_key *, CLIENT *);
-extern ypresp_key_val * ypproc_next_2_svc(ypreq_key *, struct svc_req *);
-#define YPPROC_XFR ((u_long)6)
-extern ypresp_xfr * ypproc_xfr_2(ypreq_xfr *, CLIENT *);
-extern ypresp_xfr * ypproc_xfr_2_svc(ypreq_xfr *, struct svc_req *);
-#define YPPROC_CLEAR ((u_long)7)
-extern void * ypproc_clear_2(void *, CLIENT *);
-extern void * ypproc_clear_2_svc(void *, struct svc_req *);
-#define YPPROC_ALL ((u_long)8)
-extern ypresp_all * ypproc_all_2(ypreq_nokey *, CLIENT *);
-extern ypresp_all * ypproc_all_2_svc(ypreq_nokey *, struct svc_req *);
-#define YPPROC_MASTER ((u_long)9)
-extern ypresp_master * ypproc_master_2(ypreq_nokey *, CLIENT *);
-extern ypresp_master * ypproc_master_2_svc(ypreq_nokey *, struct svc_req *);
-#define YPPROC_ORDER ((u_long)10)
-extern ypresp_order * ypproc_order_2(ypreq_nokey *, CLIENT *);
-extern ypresp_order * ypproc_order_2_svc(ypreq_nokey *, struct svc_req *);
-#define YPPROC_MAPLIST ((u_long)11)
-extern ypresp_maplist * ypproc_maplist_2(domainname *, CLIENT *);
-extern ypresp_maplist * ypproc_maplist_2_svc(domainname *, struct svc_req *);
-
-#else /* Old Style C */
-#define YPPROC_NULL ((u_long)0)
-extern void * ypproc_null_2();
-extern void * ypproc_null_2_svc();
-#define YPPROC_DOMAIN ((u_long)1)
-extern bool_t * ypproc_domain_2();
-extern bool_t * ypproc_domain_2_svc();
-#define YPPROC_DOMAIN_NONACK ((u_long)2)
-extern bool_t * ypproc_domain_nonack_2();
-extern bool_t * ypproc_domain_nonack_2_svc();
-#define YPPROC_MATCH ((u_long)3)
-extern ypresp_val * ypproc_match_2();
-extern ypresp_val * ypproc_match_2_svc();
-#define YPPROC_FIRST ((u_long)4)
-extern ypresp_key_val * ypproc_first_2();
-extern ypresp_key_val * ypproc_first_2_svc();
-#define YPPROC_NEXT ((u_long)5)
-extern ypresp_key_val * ypproc_next_2();
-extern ypresp_key_val * ypproc_next_2_svc();
-#define YPPROC_XFR ((u_long)6)
-extern ypresp_xfr * ypproc_xfr_2();
-extern ypresp_xfr * ypproc_xfr_2_svc();
-#define YPPROC_CLEAR ((u_long)7)
-extern void * ypproc_clear_2();
-extern void * ypproc_clear_2_svc();
-#define YPPROC_ALL ((u_long)8)
-extern ypresp_all * ypproc_all_2();
-extern ypresp_all * ypproc_all_2_svc();
-#define YPPROC_MASTER ((u_long)9)
-extern ypresp_master * ypproc_master_2();
-extern ypresp_master * ypproc_master_2_svc();
-#define YPPROC_ORDER ((u_long)10)
-extern ypresp_order * ypproc_order_2();
-extern ypresp_order * ypproc_order_2_svc();
-#define YPPROC_MAPLIST ((u_long)11)
-extern ypresp_maplist * ypproc_maplist_2();
-extern ypresp_maplist * ypproc_maplist_2_svc();
-#endif /* Old Style C */
-
-#define YPPUSH_XFRRESPPROG ((u_long)0x40000000)
-#define YPPUSH_XFRRESPVERS ((u_long)1)
-
-#ifdef __cplusplus
-#define YPPUSHPROC_NULL ((u_long)0)
-extern "C" void * yppushproc_null_1(void *, CLIENT *);
-extern "C" void * yppushproc_null_1_svc(void *, struct svc_req *);
-#define YPPUSHPROC_XFRRESP ((u_long)1)
-extern "C" void * yppushproc_xfrresp_1(yppushresp_xfr *, CLIENT *);
-extern "C" void * yppushproc_xfrresp_1_svc(yppushresp_xfr *, struct svc_req *);
-
-#elif __STDC__
-#define YPPUSHPROC_NULL ((u_long)0)
-extern void * yppushproc_null_1(void *, CLIENT *);
-extern void * yppushproc_null_1_svc(void *, struct svc_req *);
-#define YPPUSHPROC_XFRRESP ((u_long)1)
-extern void * yppushproc_xfrresp_1(yppushresp_xfr *, CLIENT *);
-extern void * yppushproc_xfrresp_1_svc(yppushresp_xfr *, struct svc_req *);
-
-#else /* Old Style C */
-#define YPPUSHPROC_NULL ((u_long)0)
-extern void * yppushproc_null_1();
-extern void * yppushproc_null_1_svc();
-#define YPPUSHPROC_XFRRESP ((u_long)1)
-extern void * yppushproc_xfrresp_1();
-extern void * yppushproc_xfrresp_1_svc();
-#endif /* Old Style C */
-
-#define YPBINDPROG ((u_long)100007)
-#define YPBINDVERS ((u_long)2)
-
-#ifdef __cplusplus
-#define YPBINDPROC_NULL ((u_long)0)
-extern "C" void * ypbindproc_null_2(void *, CLIENT *);
-extern "C" void * ypbindproc_null_2_svc(void *, struct svc_req *);
-#define YPBINDPROC_DOMAIN ((u_long)1)
-extern "C" ypbind_resp * ypbindproc_domain_2(domainname *, CLIENT *);
-extern "C" ypbind_resp * ypbindproc_domain_2_svc(domainname *, struct svc_req *);
-#define YPBINDPROC_SETDOM ((u_long)2)
-extern "C" void * ypbindproc_setdom_2(ypbind_setdom *, CLIENT *);
-extern "C" void * ypbindproc_setdom_2_svc(ypbind_setdom *, struct svc_req *);
-
-#elif __STDC__
-#define YPBINDPROC_NULL ((u_long)0)
-extern void * ypbindproc_null_2(void *, CLIENT *);
-extern void * ypbindproc_null_2_svc(void *, struct svc_req *);
-#define YPBINDPROC_DOMAIN ((u_long)1)
-extern ypbind_resp * ypbindproc_domain_2(domainname *, CLIENT *);
-extern ypbind_resp * ypbindproc_domain_2_svc(domainname *, struct svc_req *);
-#define YPBINDPROC_SETDOM ((u_long)2)
-extern void * ypbindproc_setdom_2(ypbind_setdom *, CLIENT *);
-extern void * ypbindproc_setdom_2_svc(ypbind_setdom *, struct svc_req *);
-
-#else /* Old Style C */
-#define YPBINDPROC_NULL ((u_long)0)
-extern void * ypbindproc_null_2();
-extern void * ypbindproc_null_2_svc();
-#define YPBINDPROC_DOMAIN ((u_long)1)
-extern ypbind_resp * ypbindproc_domain_2();
-extern ypbind_resp * ypbindproc_domain_2_svc();
-#define YPBINDPROC_SETDOM ((u_long)2)
-extern void * ypbindproc_setdom_2();
-extern void * ypbindproc_setdom_2_svc();
-#endif /* Old Style C */
-
-#endif /* !__RPCSVC_YP_H__ */
diff --git a/glibc-compat/rpcsvc/ypclnt.h b/glibc-compat/rpcsvc/ypclnt.h
deleted file mode 100644
index 5c1ac389b5..0000000000
--- a/glibc-compat/rpcsvc/ypclnt.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-** Copyright (c) 1996 Thorsten Kukuk, Germany
-**
-** This library is free software; you can redistribute it and/or
-** modify it under the terms of the GNU Library General Public
-** License as published by the Free Software Foundation; either
-** version 2 of the License, or (at your option) any later version.
-**
-** This library is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-** Library General Public License for more details.
-**
-** You should have received a copy of the GNU Library General Public
-** License along with this library; if not, write to the Free
-** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-**
-** Author: Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
-**
-*/
-
-#ifndef __RPCSVC_YPCLNT_H__
-#define __RPCSVC_YPCLNT_H__
-
-#include <features.h>
-
-/* some defines */
-#define YPERR_SUCCESS 0 /* There is no error */
-#define YPERR_BADARGS 1 /* Args to function are bad */
-#define YPERR_RPC 2 /* RPC failure */
-#define YPERR_DOMAIN 3 /* Can't bind to a server with this domain */
-#define YPERR_MAP 4 /* No such map in server's domain */
-#define YPERR_KEY 5 /* No such key in map */
-#define YPERR_YPERR 6 /* Internal yp server or client error */
-#define YPERR_RESRC 7 /* Local resource allocation failure */
-#define YPERR_NOMORE 8 /* No more records in map database */
-#define YPERR_PMAP 9 /* Can't communicate with portmapper */
-#define YPERR_YPBIND 10 /* Can't communicate with ypbind */
-#define YPERR_YPSERV 11 /* Can't communicate with ypserv */
-#define YPERR_NODOM 12 /* Local domain name not set */
-#define YPERR_BADDB 13 /* yp data base is bad */
-#define YPERR_VERS 14 /* YP version mismatch */
-#define YPERR_ACCESS 15 /* Access violation */
-#define YPERR_BUSY 16 /* Database is busy */
-
-/* Types of update operations */
-#define YPOP_CHANGE 1 /* change, do not add */
-#define YPOP_INSERT 2 /* add, do not change */
-#define YPOP_DELETE 3 /* delete this entry */
-#define YPOP_STORE 4 /* add, or change */
-
-__BEGIN_DECLS
-
-/* struct ypall_callback * is the arg which must be passed to yp_all */
-struct ypall_callback
- {
- int (*foreach) (int __status, char *__key, int __keylen,
- char *__val, int __vallen, char *__data);
- char *data;
- };
-
-/* External NIS client function references. */
-extern int yp_bind (__const char *) __THROW;
-extern void yp_unbind (__const char *) __THROW;
-extern int yp_get_default_domain (char **) __THROW;
-extern int yp_match (__const char *, __const char *, __const char *,
- __const int, char **, int *) __THROW;
-extern int yp_first (__const char *, __const char *, char **,
- int *, char **, int *) __THROW;
-extern int yp_next (__const char *, __const char *, __const char *,
- __const int, char **, int *, char **, int *) __THROW;
-extern int yp_master (__const char *, __const char *, char **) __THROW;
-extern int yp_order (__const char *, __const char *, unsigned int *) __THROW;
-extern int yp_all (__const char *, __const char *,
- __const struct ypall_callback *) __THROW;
-extern __const char *yperr_string (__const int) __THROW;
-extern __const char *ypbinderr_string (__const int) __THROW;
-extern int ypprot_err (__const int) __THROW;
-extern int yp_update (char *, char *, unsigned, char *,
- int, char *, int) __THROW;
-#if 0
-extern int yp_maplist (__const char *, struct ypmaplist **) __THROW;
-#endif
-
-/* Exist only under BSD and Linux systems */
-extern int __yp_check (char **) __THROW;
-
-__END_DECLS
-
-#endif /* __RPCSVC_YPCLNT_H__ */
diff --git a/glibc-compat/shlib-versions b/glibc-compat/shlib-versions
deleted file mode 100644
index 8b0e2e06e2..0000000000
--- a/glibc-compat/shlib-versions
+++ /dev/null
@@ -1,19 +0,0 @@
-# Interface revision of the compat nss_* modules.
-#
-# This must match NSS_SHLIB_REVISION in nss/nsswitch.h,
-# which determines the library names used for service
-# names given in /etc/nsswitch.conf.
-alpha.*-.*-linux.* libnss1_files=1.1
-alpha.*-.*-linux.* libnss1_dns=1.1
-alpha.*-.*-linux.* libnss1_db=1.1
-alpha.*-.*-linux.* libnss1_compat=1.1
-alpha.*-.*-linux.* libnss1_nis=1.1
-.*-.*-.* libnss1_files=1
-.*-.*-.* libnss1_db=1
-.*-.*-.* libnss1_dns=1
-.*-.*-.* libnss1_compat=1
-.*-.*-.* libnss1_nis=1
-
-# The libNoVersion revision number
-.*-.*-.* libNoVersion=1
-
diff --git a/glibc-compat/stubs.c b/glibc-compat/stubs.c
deleted file mode 100644
index 6c796d1c78..0000000000
--- a/glibc-compat/stubs.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * STAT stuff that breaks Applix
- */
-
-#include <sys/stat.h>
-
-/* 1 of 3: _xstat */
-int
-_xstat (int vers, const char *name, struct stat *buf)
-{
- return __xstat (vers, name, buf);
-}
-
-/* 2 of 3: _fxstat */
-int
-_fxstat (int vers, int fd, struct stat *buf)
-{
- return __fxstat (vers, fd, buf);
-}
-
-/* 3 of 3: _lxstat */
-int
-_lxstat (int vers, const char *name, struct stat *buf)
-{
- return __lxstat (vers, name, buf);
-}
-
-
-/*
- * __setjmp stuff that breaks again Applix
- */
-#include <setjmp.h>
-
-int __setjmp(jmp_buf env)
-{
- return _setjmp(env);
-}
-
-
-/*
- * __setfpucw break several math packages that ahve not heard of
- * the standard _FPU_SETCW() way of setting the control word for the FPU
- */
-#include <fpu_control.h>
-void __setfpucw(fpu_control_t cw)
-{
- _FPU_SETCW(cw);
-}
-
-
-/* Register FUNC to be executed by `exit'. */
-int
-atexit (void (*func) (void))
-{
- int __cxa_atexit (void (*func) (void *), void *arg, void *d);
- return __cxa_atexit ((void (*) (void *)) func, 0, 0);
-}