diff options
author | Roland McGrath <roland@gnu.org> | 1996-07-02 19:35:40 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1996-07-02 19:35:40 +0000 |
commit | 96bda0ea44eb94e0284e91f20ba9733ae63f26a5 (patch) | |
tree | d588be55a83c556ac5e617a680fbf53186c9bbb1 /nss/nss_files | |
parent | ffee131630368bc2600747346d0b03025cbca6ee (diff) | |
download | glibc-96bda0ea44eb94e0284e91f20ba9733ae63f26a5.tar glibc-96bda0ea44eb94e0284e91f20ba9733ae63f26a5.tar.gz glibc-96bda0ea44eb94e0284e91f20ba9733ae63f26a5.tar.bz2 glibc-96bda0ea44eb94e0284e91f20ba9733ae63f26a5.zip |
* 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.
Diffstat (limited to 'nss/nss_files')
-rw-r--r-- | nss/nss_files/files-XXX.c | 10 | ||||
-rw-r--r-- | nss/nss_files/files-ethers.c | 9 | ||||
-rw-r--r-- | nss/nss_files/files-grp.c | 16 | ||||
-rw-r--r-- | nss/nss_files/files-hosts.c | 18 | ||||
-rw-r--r-- | nss/nss_files/files-network.c | 6 | ||||
-rw-r--r-- | nss/nss_files/files-parse.c | 21 | ||||
-rw-r--r-- | nss/nss_files/files-proto.c | 8 | ||||
-rw-r--r-- | nss/nss_files/files-pwd.c | 16 | ||||
-rw-r--r-- | nss/nss_files/files-rpc.c | 8 | ||||
-rw-r--r-- | nss/nss_files/files-service.c | 8 |
10 files changed, 66 insertions, 54 deletions
diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c index b9c3579d5b..7fa87c098a 100644 --- a/nss/nss_files/files-XXX.c +++ b/nss/nss_files/files-XXX.c @@ -27,13 +27,15 @@ 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. */ -#define ENTNAME_r CONCAT(ENTNAME,_r) +#define ENTNAME_r CONCAT(ENTNAME,_r) + +#define DATAFILE "/etc/" DATABASE #ifdef NEED_H_ERRNO #define H_ERRNO_PROTO , int *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, \ diff --git a/nss/nss_files/files-ethers.c b/nss/nss_files/files-ethers.c index b66a3c3d04..70f7d07dbd 100644 --- a/nss/nss_files/files-ethers.c +++ b/nss/nss_files/files-ethers.c @@ -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) diff --git a/nss/nss_files/files-grp.c b/nss/nss_files/files-grp.c index 580dfbe3eb..8e047b6475 100644 --- a/nss/nss_files/files-grp.c +++ b/nss/nss_files/files-grp.c @@ -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); - -#include "files-XXX.c" +#define EXTERN_PARSER +#include "files-parse.c" +#include GENERIC -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; diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c index 19a0075ecf..bc9eaa39a5 100644 --- a/nss/nss_files/files-hosts.c +++ b/nss/nss_files/files-hosts.c @@ -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)) diff --git a/nss/nss_files/files-network.c b/nss/nss_files/files-network.c index c6cd718dd2..acfbc3198c 100644 --- a/nss/nss_files/files-network.c +++ b/nss/nss_files/files-network.c @@ -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! */ diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c index a9c461ef46..8930780f1f 100644 --- a/nss/nss_files/files-parse.c +++ b/nss/nss_files/files-parse.c @@ -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 diff --git a/nss/nss_files/files-proto.c b/nss/nss_files/files-proto.c index ef5a7c2560..3cc14e7859 100644 --- a/nss/nss_files/files-proto.c +++ b/nss/nss_files/files-proto.c @@ -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; diff --git a/nss/nss_files/files-pwd.c b/nss/nss_files/files-pwd.c index 6b39116a44..9732bc6f23 100644 --- a/nss/nss_files/files-pwd.c +++ b/nss/nss_files/files-pwd.c @@ -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); - -#include "files-XXX.c" +#define EXTERN_PARSER +#include "files-parse.c" +#include GENERIC -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; diff --git a/nss/nss_files/files-rpc.c b/nss/nss_files/files-rpc.c index f8bef451fa..0ad1e21848 100644 --- a/nss/nss_files/files-rpc.c +++ b/nss/nss_files/files-rpc.c @@ -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; diff --git a/nss/nss_files/files-service.c b/nss/nss_files/files-service.c index f0dba50fe6..5dea476208 100644 --- a/nss/nss_files/files-service.c +++ b/nss/nss_files/files-service.c @@ -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; |