* nss/nss_files/files-network.c: Pass empty for new DB_LOOKUP args.

(DATABASE): Define this instead of DATAFILE.
	* nss/nss_files/files-hosts.c: Likewise.
	(hostbyname): Use LOOKUP_NAME macro.

	* nss/nss_db/db-XXX.c: New file.
	* nss/Makefile (services): Add db.
	(libnss_db-inhibit-o): New variable.
	(libnss_db-routines): New variable.
	(distribute): Append db-XXX.c.
	(libnss_db.so): Depend on libdb.so and libnss_files.so.
	($(libnss_db-routines:%=$(objpfx)%.c)): New static pattern rule.

	* nss/nss_files/files-XXX.c (DB_LOOKUP): Add KEYSIZE and KEYPATTERN
	args, ignored.
	(DATAFILE): New macro.
	* nss/nss_files/files-parse.c (GENERIC): If undefined, define to
	"files-XXX.c".
	* nss/nss_files/files-rpc.c: Include GENERIC instead of "files-XXX.c".
	Pass db key args to DB_LOOKUP.
	(DATAFILE): Macro removed.
	(DATABASE): New macro replaces it, lacks "/etc/" prefix.
	* nss/nss_files/files-service.c: Likewise.
	* nss/nss_files/files-pwd.c: Likewise.
	* nss/nss_files/files-proto.c: Likewise.
	* nss/nss_files/files-grp.c: Likewise.
	* nss/nss_files/files-ethers.c: Likewise.

	* elf/linux-compat.c: File removed.
	* elf/Makefile (distribute): Remove linux-compat.c.
	(ld-linux.so.1): Remove target and associated variables.

	* sunrpc/xdr.c: Remove malloc decl.
	* sunrpc/portmap.c: Likewise.

	* sunrpc/svc_tcp.c (abort): Don't declare.  Instead define as macro
	casting abort to fn returning bool_t.

	* nss/nss_files/files-parse.c [EXTERN_PARSER]: Do an extern decl of
	the parser function.
	[EXTERN_PARSER] (LINE_PARSER): Define to empty.
	* nss/nss_files/files-pwd.c (EXTERN_PARSER): Define it.
	* nss/nss_files/files-grp.c: Likewise.

	* Makeconfig (BUILD_CC): If undefined, define to $(CC).

	* sunrpc/rpc/types.h: Include stdlib.h instead of declaring malloc.

	* Makeconfig (built-program-cmd): Use $(rtld-installed-name) in place
	of ld.so so lookups for that soname find it.

	* nss/Makefile (libnss_dns.so): Depend on libresolv.so.
	(resobjdir, LDLIBS-nss_dns.so): Variables removed.
This commit is contained in:
Roland McGrath 1996-07-02 19:35:40 +00:00
parent ffee131630
commit 96bda0ea44
20 changed files with 357 additions and 123 deletions

View File

@ -1,5 +1,59 @@
Tue Jul 2 10:44:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/nss_files/files-network.c: Pass empty for new DB_LOOKUP args.
(DATABASE): Define this instead of DATAFILE.
* nss/nss_files/files-hosts.c: Likewise.
(hostbyname): Use LOOKUP_NAME macro.
* nss/nss_db/db-XXX.c: New file.
* nss/Makefile (services): Add db.
(libnss_db-inhibit-o): New variable.
(libnss_db-routines): New variable.
(distribute): Append db-XXX.c.
(libnss_db.so): Depend on libdb.so and libnss_files.so.
($(libnss_db-routines:%=$(objpfx)%.c)): New static pattern rule.
* nss/nss_files/files-XXX.c (DB_LOOKUP): Add KEYSIZE and KEYPATTERN
args, ignored.
(DATAFILE): New macro.
* nss/nss_files/files-parse.c (GENERIC): If undefined, define to
"files-XXX.c".
* nss/nss_files/files-rpc.c: Include GENERIC instead of "files-XXX.c".
Pass db key args to DB_LOOKUP.
(DATAFILE): Macro removed.
(DATABASE): New macro replaces it, lacks "/etc/" prefix.
* nss/nss_files/files-service.c: Likewise.
* nss/nss_files/files-pwd.c: Likewise.
* nss/nss_files/files-proto.c: Likewise.
* nss/nss_files/files-grp.c: Likewise.
* nss/nss_files/files-ethers.c: Likewise.
* elf/linux-compat.c: File removed.
* elf/Makefile (distribute): Remove linux-compat.c.
(ld-linux.so.1): Remove target and associated variables.
* sunrpc/xdr.c: Remove malloc decl.
* sunrpc/portmap.c: Likewise.
* sunrpc/svc_tcp.c (abort): Don't declare. Instead define as macro
casting abort to fn returning bool_t.
* nss/nss_files/files-parse.c [EXTERN_PARSER]: Do an extern decl of
the parser function.
[EXTERN_PARSER] (LINE_PARSER): Define to empty.
* nss/nss_files/files-pwd.c (EXTERN_PARSER): Define it.
* nss/nss_files/files-grp.c: Likewise.
* Makeconfig (BUILD_CC): If undefined, define to $(CC).
* sunrpc/rpc/types.h: Include stdlib.h instead of declaring malloc.
* Makeconfig (built-program-cmd): Use $(rtld-installed-name) in place
of ld.so so lookups for that soname find it.
* nss/Makefile (libnss_dns.so): Depend on libresolv.so.
(resobjdir, LDLIBS-nss_dns.so): Variables removed.
* pwd/fgetpwent.c: Don't include ../nss/nss_files/files-parse.c to
define parse_line function.
(parse_line): #define to _nss_files_parse_pwent and

View File

@ -362,7 +362,7 @@ define built-program-cmd
LD_LIBRARY_PATH=$(rpath-link)$(patsubst -Wl$(comma)-rpath-link=%,:%,\
$(filter -Wl$(comma)-rpath-link=%,\
$(sysdep-LDFLAGS))) \
$(elf-objpfx)ld.so $(built-program-file)
$(elf-objpfx)$(rtld-installed-name) $(built-program-file)
endef
endif
@ -489,6 +489,10 @@ endif
+gnu-stabs = $(shell echo>&2 '*** BARF ON ME')
ifndef BUILD_CC
BUILD_CC = $(CC)
endif
ifneq ($(BUILD_CC),$(CC))
cross-compiling := yes
else

View File

@ -34,7 +34,7 @@ elide-routines.so = $(dl-routines) dl-support
# interpreter and operating independent of libc.
rtld-routines := rtld $(dl-routines) dl-sysdep dl-minimal
distribute = $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
soinit.c sofini.c ldd.sh.in linux-compat.c
soinit.c sofini.c ldd.sh.in
extra-libs = libdl
libdl-routines := dlopen dlclose dlsym dlerror dladdr
@ -50,13 +50,6 @@ generated = librtld.so dl-allobjs.so
install-others = $(slibdir)/$(rtld-installed-name)
install-bin = ldd
ifneq (,$(filter linux% linux,$(config-os)))
extra-objs += linux-compat.so
install-others += $(slibdir)/ld-linux.so.1
lib-noranlib: $(objpfx)ld-linux.so.1
endif
endif
include ../Rules
@ -83,8 +76,6 @@ $(objpfx)librtld.so: $(objpfx)dl-allobjs.so \
$(objpfx)ld.so: $(objpfx)librtld.so
$(rtld-link) -Wl,-soname=$(rtld-installed-name)
$(objpfx)ld-linux.so.1: $(objpfx)librtld.so
$(rtld-link) -Wl,-soname=ld-linux.so.1
define rtld-link
$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
@ -102,19 +93,18 @@ $(objpfx)$(rtld-installed-name): $(objpfx)ld.so
ln -s $(<F) $@
endif
# The Linux-compatible dynamic linker shared object is just the same
# with one object file of compatibility initialization code added.
$(objpfx)ld-linux.so.1: $(objpfx)linux-compat.so
# Specify the dependencies of libdl.so; its commands come from the generic
# rule to build a shared library.
$(objpfx)libdl.so: $(objpfx)libdl_pic.a $(common-objpfx)libc.so $(objpfx)ld.so
$(slibdir)/$(rtld-installed-name): $(objpfx)ld.so; $(do-install-program)
$(slibdir)/ld-linux.so.1: $(objpfx)ld-linux.so.1; $(do-install-program)
$(objpfx)ldd: ldd.sh.in Makefile
sed 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' < $< > $@.new
chmod 555 $@.new
mv -f $@.new $@
# muwahaha
$(objpfx)libdl.so: $(objpfx)eval.so

View File

@ -1,41 +0,0 @@
/* Initializer for Linux-compatible dynamic linker `/lib/ld-linux.so.1'.
Copyright (C) 1995, 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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <link.h>
#include <stdlib.h>
/* This function will be the DT_INIT initializer for the ld-linux.so.1
shared object. This is called from rtld.c before shlib initializers.
The old Linux ELF startup code expects the dynamic linker to magically
call atexit to arrange for shared object finalizers to run. (The
ABI-compliant startup code does this itself.) We build a compatible
version of the dynamic linker to install as /lib/ld-linux.so.1, the
name old Linux ELF binaries use. */
void
_init (void)
{
const ElfW(Sym) *ref = NULL;
struct link_map *scope[2] = { _dl_loaded, NULL };
ElfW(Addr) loadbase = _dl_lookup_symbol ("atexit", &ref, scope,
"<ld-linux.so.1 initialization>",
0, 1);
(*(__typeof (atexit) *) (loadbase + ref->st_value)) (&_dl_fini);
}

View File

@ -31,7 +31,7 @@ routines = nsswitch $(addsuffix -lookup,$(databases))
databases = proto service hosts network grp pwd rpc ethers
# Specify rules for the nss_* modules. We have some services.
services := files dns
services := files dns db
extra-libs = $(services:%=libnss_%)
@ -45,12 +45,26 @@ distribute += files-XXX.c files-parse.c
libnss_dns-routines := dns-host dns-network
libnss_db-routines := $(addprefix db-,$(filter-out hosts network,\
$(databases)))
distribute += db-XXX.c
libnss_files-inhibit-o = $(filter-out .so,$(object-suffixes))
libnss_dns-inhibit-o = $(filter-out .so,$(object-suffixes))
libnss_db-inhibit-o = $(filter-out .so,$(object-suffixes))
include ../Rules
resobjdir := $(firstword $(objdir) $(patsubst ../$(subdir),.,$(..)resolv))
LDLIBS-nss_dns.so = -L$(resobjdir) -Wl,-rpath-link=$(resobjdir) -lresolv
$(objpfx)libnss_dns.so: $(firstword $(objdir) $(..)resolv)/libresolv.so
$(objpfx)libnss_db.so: $(firstword $(objdir) $(..)db)/libdb.so \
$(objpfx)libnss_files.so
$(libnss_db-routines:%=$(objpfx)%.c): $(objpfx)db-%.c: nss_files/files-%.c
@rm -f $@.new
(echo '#define EXTERN_PARSER';\
echo '#define GENERIC "../nss_db/db-XXX.c"';\
echo '#include <$<>') > $@.new
mv -f $@.new $@

203
nss/nss_db/db-XXX.c Normal file
View File

@ -0,0 +1,203 @@
/* Common code for DB-based databases in nss_db module.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <db.h>
#include <fcntl.h>
#include <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 -- 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
#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 DB *db;
static int keep_db;
static unsigned int entidx; /* Index for `getENTNAME'. */
/* Open database file if not already opened. */
static int
internal_setent (int stayopen)
{
int status = NSS_STATUS_SUCCESS;
if (db == NULL)
{
db = dbopen (DBFILE, O_RDONLY, 0, DB_BTREE, NULL);
if (db == NULL)
status = NSS_STATUS_UNAVAIL;
}
/* Remember STAYOPEN flag. */
if (db != NULL)
keep_db |= stayopen;
return status;
}
/* Thread-safe, exported version of that. */
int
CONCAT(_nss_files_set,ENTNAME) (int stayopen)
{
int status;
__libc_lock_lock (lock);
status = internal_setent (stayopen);
/* Reset the sequential index. */
entidx = 0;
__libc_lock_unlock (lock);
return status;
}
/* Close the database file. */
static void
internal_endent (void)
{
if (db != NULL)
{
(*db->close) (db);
db = NULL;
}
}
/* Thread-safe, exported version of that. */
int
CONCAT(_nss_files_end,ENTNAME) (void)
{
__libc_lock_lock (lock);
internal_endent ();
/* 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 (const DBT *key, struct STRUCTURE *result,
void *buffer, int buflen H_ERRNO_PROTO)
{
enum nss_status status;
DBT value;
/* Open the database. */
internal_setent (keep_db);
/* Succeed iff it matches a value that parses correctly. */
status = (((*db->get) (db, key, &value, 0) == 0 &&
parse_line (value.data, result, buffer, buflen) == 0)
? NSS_STATUS_SUCCESS : NSS_STATUS_NOTFOUND);
if (! keep_db)
internal_endent ();
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_files_get##name##_r (proto, \
struct STRUCTURE *result, \
char *buffer, int buflen H_ERRNO_PROTO) \
{ \
DBT key; \
enum nss_status status; \
const size_t size = (keysize); \
key.data = __alloca (size); \
key.size = KEYPRINTF keypattern; \
__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_files_get,ENTNAME_r) (struct STRUCTURE *result,
char *buffer, int buflen H_ERRNO_PROTO)
{
/* Return next entry in host file. */
enum nss_status status;
char buf[20];
DBT key;
__libc_lock_lock (lock);
key.size = 1 + snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
status = lookup (&key, result, buffer, buflen H_ERRNO_ARG);
__libc_lock_unlock (lock);
return status;
}

View File

@ -27,7 +27,7 @@ Cambridge, MA 02139, USA. */
ENTNAME -- database name of the structure and functions (hostent, pwent).
STRUCTURE -- struct name, define only if not ENTNAME (passwd, group).
DATAFILE -- string of the database file's name.
DATABASE -- string of the database file's name ("hosts", "passwd").
NEED_H_ERRNO - defined iff an arg `int *herrnop' is used.
MIDLINE_COMMENTS - defined iff # before \n terminates a database line.
@ -35,6 +35,8 @@ Cambridge, MA 02139, USA. */
#define ENTNAME_r CONCAT(ENTNAME,_r)
#define DATAFILE "/etc/" DATABASE
#ifdef NEED_H_ERRNO
#define H_ERRNO_PROTO , int *herrnop
#define H_ERRNO_ARG , herrnop
@ -194,13 +196,15 @@ CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result,
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, break_if_match, proto...) \
#define DB_LOOKUP(name, keysize, keypattern, break_if_match, proto...) \
enum nss_status \
_nss_files_get##name##_r (proto, \
struct STRUCTURE *result, \

View File

@ -30,7 +30,7 @@ struct etherent
struct etherent_data {};
#define ENTNAME etherent
#define DATAFILE "/etc/ethers"
#define DATABASE "ethers"
#include "files-parse.c"
LINE_PARSER
("#",
@ -56,15 +56,16 @@ LINE_PARSER
)
#include "files-XXX.c"
#include GENERIC
DB_LOOKUP (hostton,
DB_LOOKUP (hostton, 1 + strlen (name), (".%s", name),
{
if (strcmp (result->e_name, name) == 0)
break;
}, const char *name)
DB_LOOKUP (ntohost,
DB_LOOKUP (ntohost, 7, ("=%c%c%c%c%c%c",
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]),
{
if (memcmp (&result->e_addr, addr,
sizeof (struct ether_addr)) == 0)

View File

@ -21,26 +21,22 @@ Cambridge, MA 02139, USA. */
#define STRUCTURE group
#define ENTNAME grent
#define DATAFILE "/etc/group"
#define DATABASE "group"
struct grent_data {};
#define TRAILING_LIST_MEMBER gr_mem
#define TRAILING_LIST_SEPARATOR_P(c) ((c) == ',')
#include "files-parse.c"
/* Our parser function is already defined in fgetgrent.c, so use that.
to parse lines from the database file. */
extern int parse_line (char *line, struct STRUCTURE *result,
void *buffer, int buflen);
#define EXTERN_PARSER
#include "files-parse.c"
#include GENERIC
#include "files-XXX.c"
DB_LOOKUP (grnam,
DB_LOOKUP (grnam, 1 + strlen (name), (".%s", name),
{
if (! strcmp (name, result->gr_name))
break;
}, const char *name)
DB_LOOKUP (grgid,
DB_LOOKUP (grgid, 20, ("=%lu", (unsigned long int) gid),
{
if (result->gr_gid == gid)
break;

View File

@ -30,7 +30,7 @@ Cambridge, MA 02139, USA. */
#define ENTNAME hostent
#define DATAFILE _PATH_HOSTS
#define DATABASE "hosts"
#define ENTDATA hostent_data
struct hostent_data
@ -93,19 +93,11 @@ LINE_PARSER
#include "files-XXX.c"
DB_LOOKUP (hostbyname,
{
char **ap;
if (! strcmp (name, result->h_name))
break;
for (ap = result->h_aliases; *ap; ++ap)
if (! strcmp (name, *ap))
break;
if (*ap)
break;
}, const char *name)
DB_LOOKUP (hostbyname, ,,
LOOKUP_NAME (h_name, h_aliases),
const char *name)
DB_LOOKUP (hostbyaddr,
DB_LOOKUP (hostbyaddr, ,,
{
if (result->h_addrtype == type && result->h_length == len &&
! memcmp (addr, result->h_addr_list[0], len))

View File

@ -22,7 +22,7 @@ Cambridge, MA 02139, USA. */
#include <netdb.h>
#define ENTNAME netent
#define DATAFILE _PATH_NETWORKS
#define DATABASE "networks"
struct netent_data {};
@ -43,11 +43,11 @@ LINE_PARSER
#include "files-XXX.c"
DB_LOOKUP (netbyname,
DB_LOOKUP (netbyname, ,,
LOOKUP_NAME (n_name, n_aliases),
const char *name)
DB_LOOKUP (netbyaddr,
DB_LOOKUP (netbyaddr, ,,
{
if (result->n_addrtype == type && result->n_net == net)
/* Bingo! */

View File

@ -52,6 +52,19 @@ struct parser_data
#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, int 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, \
@ -167,6 +180,9 @@ parse_list (char *line, struct parser_data *data, int datalen)
return list;
}
#endif /* EXTERN_PARSER */
#define LOOKUP_NAME(nameelt, aliaselt) \
{ \
char **ap; \
@ -180,3 +196,8 @@ parse_list (char *line, struct parser_data *data, int datalen)
}
#endif
/* This is defined by db-*.c to include "../nss_db/db-XXX.c" instead. */
#ifndef GENERIC
#define GENERIC "files-XXX.c"
#endif

View File

@ -21,7 +21,7 @@ Cambridge, MA 02139, USA. */
#define ENTNAME protoent
#define DATAFILE _PATH_PROTOCOLS
#define DATABASE "protocols"
struct protoent_data {};
@ -34,13 +34,13 @@ LINE_PARSER
INT_FIELD (result->p_proto, isspace, 1, 10,);
)
#include "files-XXX.c"
#include GENERIC
DB_LOOKUP (protobyname,
DB_LOOKUP (protobyname, 1 + strlen (name), (".%s", name),
LOOKUP_NAME (p_name, p_aliases),
const char *name)
DB_LOOKUP (protobynumber,
DB_LOOKUP (protobynumber, 20, ("=%d", proto),
{
if (result->p_proto == proto)
break;

View File

@ -21,24 +21,22 @@ Cambridge, MA 02139, USA. */
#define STRUCTURE passwd
#define ENTNAME pwent
#define DATAFILE "/etc/passwd"
#define DATABASE "passwd"
struct pwent_data {};
#include "files-parse.c"
/* Our parser function is already defined in fgetpwent.c, so use that.
/* Our parser function is already defined in fgetpwent.c, so use that
to parse lines from the database file. */
extern int parse_line (char *line, struct STRUCTURE *result,
void *buffer, int buflen);
#define EXTERN_PARSER
#include "files-parse.c"
#include GENERIC
#include "files-XXX.c"
DB_LOOKUP (pwnam,
DB_LOOKUP (pwnam, 1 + strlen (name), (".%s", name),
{
if (! strcmp (name, result->pw_name))
break;
}, const char *name)
DB_LOOKUP (pwuid,
DB_LOOKUP (pwuid, 20, ("=%lu", (unsigned long int) uid),
{
if (result->pw_uid == uid)
break;

View File

@ -21,7 +21,7 @@ Cambridge, MA 02139, USA. */
#define ENTNAME rpcent
#define DATAFILE "/etc/rpc"
#define DATABASE "rpc"
struct rpcent_data {};
@ -34,13 +34,13 @@ LINE_PARSER
INT_FIELD (result->r_number, isspace, 1, 10,);
)
#include "files-XXX.c"
#include GENERIC
DB_LOOKUP (rpcbyname,
DB_LOOKUP (rpcbyname, 1 + strlen (name), (".%s", name),
LOOKUP_NAME (r_name, r_aliases),
const char *name)
DB_LOOKUP (rpcbynumber,
DB_LOOKUP (rpcbynumber, 20, ("=%d", number),
{
if (result->r_number == number)
break;

View File

@ -22,7 +22,7 @@ Cambridge, MA 02139, USA. */
#define ENTNAME servent
#define DATAFILE _PATH_SERVICES
#define DATABASE "services"
struct servent_data {};
@ -37,13 +37,13 @@ LINE_PARSER
STRING_FIELD (result->s_proto, isspace, 1);
)
#include "files-XXX.c"
#include GENERIC
DB_LOOKUP (servbyname,
DB_LOOKUP (servbyname, 1 + strlen (name), (".%s", name),
LOOKUP_NAME (s_name, s_aliases),
const char *name)
DB_LOOKUP (servbyport,
DB_LOOKUP (servbyport, 20, ("=%d", port),
{
if (result->s_port == port)
break;

View File

@ -50,7 +50,6 @@ static char sccsid[] = "@(#)portmap.c 1.32 87/08/06 Copyr 1984 Sun Micro";
#include <sys/wait.h>
#include <sys/signal.h>
char *malloc();
int reg_service();
void reap();
struct pmaplist *pmaplist;

View File

@ -44,7 +44,7 @@
# define NULL 0
#endif
extern char *malloc();
#include <stdlib.h> /* For malloc decl. */
#define mem_alloc(bsize) malloc(bsize)
#define mem_free(ptr, bsize) free(ptr)

View File

@ -45,7 +45,7 @@ static char sccsid[] = "@(#)svc_tcp.c 1.21 87/08/11 Copyr 1984 Sun Micro";
#include <rpc/rpc.h>
#include <sys/socket.h>
#include <errno.h>
extern bool_t abort();
#define abort ((bool_t (*) ()) abort)
extern errno;
/*

View File

@ -43,7 +43,6 @@ static char sccsid[] = "@(#)xdr.c 1.35 87/08/12";
#include <stdio.h>
#include <limits.h>
char *malloc();
#include <rpc/types.h>
#include <rpc/xdr.h>