From 6212bb67f4695962748a5981e1b9fea105af74f6 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Wed, 7 Jul 2021 18:33:52 +0200 Subject: [PATCH] nss_files: Move into libc This is the first step towards fixing bug 27959. Reviewed-by: Adhemerval Zanella --- include/libc-symbols.h | 23 ----------------------- include/netdb.h | 2 +- include/nss_files.h | 10 +++++----- nss/Makefile | 13 +++++-------- nss/Versions | 13 +++++++++---- nss/nss_files/files-alias.c | 10 +++++----- nss/nss_files/files-hosts.c | 7 ++++--- nss/nss_files/files-netgrp.c | 6 +++--- nss/nss_files/files-network.c | 5 ++--- nss/nss_files/files-parse.c | 8 +------- nss/nss_readline.c | 4 ++-- 11 files changed, 37 insertions(+), 64 deletions(-) diff --git a/include/libc-symbols.h b/include/libc-symbols.h index 127ea65..d41ecf4 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -798,29 +798,6 @@ for linking") # define libdl_hidden_data_ver(local, name) #endif -#if IS_IN (libnss_files) -# define libnss_files_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) -# define libnss_files_hidden_tls_proto(name, attrs...) \ - hidden_tls_proto (name, ##attrs) -# define libnss_files_hidden_def(name) hidden_def (name) -# define libnss_files_hidden_weak(name) hidden_weak (name) -# define libnss_files_hidden_ver(local, name) hidden_ver (local, name) -# define libnss_files_hidden_data_def(name) hidden_data_def (name) -# define libnss_files_hidden_tls_def(name) hidden_tls_def (name) -# define libnss_files_hidden_data_weak(name) hidden_data_weak (name) -# define libnss_files_hidden_data_ver(local, name) hidden_data_ver(local, name) -#else -# define libnss_files_hidden_proto(name, attrs...) -# define libnss_files_hidden_tls_proto(name, attrs...) -# define libnss_files_hidden_def(name) -# define libnss_files_hidden_weak(name) -# define libnss_files_hidden_ver(local, name) -# define libnss_files_hidden_data_def(name) -# define libnss_files_hidden_tls_def(name) -# define libnss_files_hidden_data_weak(name) -# define libnss_files_hidden_data_ver(local, name) -#endif - #if IS_IN (libnsl) # define libnsl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define libnsl_hidden_tls_proto(name, attrs...) \ diff --git a/include/netdb.h b/include/netdb.h index 82e102f..4dcdbb8 100644 --- a/include/netdb.h +++ b/include/netdb.h @@ -217,7 +217,7 @@ extern enum nss_status _nss_netgroup_parseline (char **cursor, struct __netgrent *result, char *buffer, size_t buflen, int *errnop); -libnss_files_hidden_proto (_nss_netgroup_parseline) +libc_hidden_proto (_nss_netgroup_parseline) #define DECLARE_NSS_PROTOTYPES(service) \ extern enum nss_status _nss_ ## service ## _setprotoent (int); \ diff --git a/include/nss_files.h b/include/nss_files.h index 7bf1951..dd0081a 100644 --- a/include/nss_files.h +++ b/include/nss_files.h @@ -124,13 +124,13 @@ extern nss_files_parse_line _nss_files_parse_servent; extern nss_files_parse_line _nss_files_parse_sgent; extern nss_files_parse_line _nss_files_parse_spent; -libnss_files_hidden_proto (_nss_files_parse_etherent) +libc_hidden_proto (_nss_files_parse_etherent) libc_hidden_proto (_nss_files_parse_grent) -libnss_files_hidden_proto (_nss_files_parse_netent) -libnss_files_hidden_proto (_nss_files_parse_protoent) +libc_hidden_proto (_nss_files_parse_netent) +libc_hidden_proto (_nss_files_parse_protoent) libc_hidden_proto (_nss_files_parse_pwent) -libnss_files_hidden_proto (_nss_files_parse_rpcent) -libnss_files_hidden_proto (_nss_files_parse_servent) +libc_hidden_proto (_nss_files_parse_rpcent) +libc_hidden_proto (_nss_files_parse_servent) libc_hidden_proto (_nss_files_parse_sgent) libc_hidden_proto (_nss_files_parse_spent) diff --git a/nss/Makefile b/nss/Makefile index 271a0e7..7259e83 100644 --- a/nss/Makefile +++ b/nss/Makefile @@ -98,9 +98,11 @@ subdir-dirs = $(services:%=nss_%) vpath %.c $(subdir-dirs) ../locale/programs ../intl -libnss_files-routines := $(addprefix files-, \ - $(filter-out key, $(databases))) \ - files-initgroups files-init +routines += \ + $(addprefix files-, $(filter-out key, $(databases))) \ + files-init \ + files-initgroups \ + # routines libnss_db-dbs := $(addprefix db-,\ $(filter-out hosts network key alias,\ @@ -116,12 +118,9 @@ libnss_compat-routines := $(addprefix compat-,grp pwd spwd initgroups) \ install-others += $(inst_vardbdir)/Makefile # Build static module into libc if requested -libnss_files-inhibit-o = $(filter-out .os,$(object-suffixes)) libnss_db-inhibit-o = $(filter-out .os,$(object-suffixes)) libnss_compat-inhibit-o = $(filter-out .os,$(object-suffixes)) ifeq ($(build-static-nss),yes) -routines += $(libnss_files-routines) -static-only-routines += $(libnss_files-routines) tests-static += tst-nss-static endif extra-test-objs += nss_test1.os nss_test2.os @@ -138,8 +137,6 @@ libnss-libc = $(common-objpfx)linkobj/libc.so # for new links: $(services:%=$(objpfx)libnss_%.so): libc-for-link = $(libnss-libc) -$(objpfx)libnss_db.so: $(objpfx)libnss_files.so - $(libnss_db-dbs:%=$(objpfx)%.c): $(objpfx)db-%.c: nss_files/files-%.c @rm -f $@.new (echo '#define EXTERN_PARSER';\ diff --git a/nss/Versions b/nss/Versions index 7b040b4..e551524 100644 --- a/nss/Versions +++ b/nss/Versions @@ -23,11 +23,8 @@ libc { __nss_files_data_open; __nss_files_data_put; __nss_files_data_setent; - } -} -libnss_files { - GLIBC_PRIVATE { + # Routines formerly in libnss_files.so.2. _nss_files_setaliasent; _nss_files_endaliasent; _nss_files_getaliasbyname_r; @@ -113,6 +110,14 @@ libnss_files { } } +libnss_files { + GLIBC_PRIVATE { + # Keep a version node (with a synthesized local: * directive) so that + # __bss_* symbols are hidden on targets that need it. + __libnss_files_version_placeholder; + } +} + libnss_db { GLIBC_PRIVATE { _nss_db_setetherent; diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c index 9624b62..75d91e0 100644 --- a/nss/nss_files/files-alias.c +++ b/nss/nss_files/files-alias.c @@ -98,7 +98,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result, /* Read the first line. It must contain the alias name and possibly some alias names. */ first_unused[room_left - 1] = '\xff'; - line = fgets_unlocked (first_unused, room_left, stream); + line = __fgets_unlocked (first_unused, room_left, stream); if (line == NULL) /* Nothing to read. */ break; @@ -187,7 +187,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result, /* If the file does not exist we simply ignore the statement. */ if (listfile != NULL - && (old_line = strdup (line)) != NULL) + && (old_line = __strdup (line)) != NULL) { while (! feof_unlocked (listfile)) { @@ -199,8 +199,8 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result, } first_unused[room_left - 1] = '\xff'; - line = fgets_unlocked (first_unused, room_left, - listfile); + line = __fgets_unlocked (first_unused, room_left, + listfile); if (line == NULL) break; if (first_unused[room_left - 1] != '\xff') @@ -302,7 +302,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result, /* The just read character is a white space and so can be ignored. */ first_unused[room_left - 1] = '\xff'; - line = fgets_unlocked (first_unused, room_left, stream); + line = __fgets_unlocked (first_unused, room_left, stream); if (line == NULL) { /* Continuation line without any data and diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c index 1dd51d1..894b85d 100644 --- a/nss/nss_files/files-hosts.c +++ b/nss/nss_files/files-hosts.c @@ -57,12 +57,13 @@ LINE_PARSER STRING_FIELD (addr, isspace, 1); /* Parse address. */ - if (inet_pton (af == AF_UNSPEC ? AF_INET : af, addr, entdata->host_addr) + if (__inet_pton (af == AF_UNSPEC ? AF_INET : af, addr, entdata->host_addr) > 0) af = af == AF_UNSPEC ? AF_INET : af; else { - if (af == AF_INET && inet_pton (AF_INET6, addr, entdata->host_addr) > 0) + if (af == AF_INET + && __inet_pton (AF_INET6, addr, entdata->host_addr) > 0) { if (IN6_IS_ADDR_V4MAPPED (entdata->host_addr)) memcpy (entdata->host_addr, entdata->host_addr + 12, INADDRSZ); @@ -76,7 +77,7 @@ LINE_PARSER return 0; } else if (af == AF_UNSPEC - && inet_pton (AF_INET6, addr, entdata->host_addr) > 0) + && __inet_pton (AF_INET6, addr, entdata->host_addr) > 0) af = AF_INET6; else /* Illegal address: ignore line. */ diff --git a/nss/nss_files/files-netgrp.c b/nss/nss_files/files-netgrp.c index f8c821c..be9c72a 100644 --- a/nss/nss_files/files-netgrp.c +++ b/nss/nss_files/files-netgrp.c @@ -32,7 +32,7 @@ NSS_DECLARE_MODULE_FUNCTIONS (files) #define DATAFILE "/etc/netgroup" -libnss_files_hidden_proto (_nss_files_endnetgrent) +libc_hidden_proto (_nss_files_endnetgrent) #define EXPAND(needed) \ do \ @@ -164,7 +164,7 @@ _nss_files_endnetgrent (struct __netgrent *result) result->cursor = NULL; return NSS_STATUS_SUCCESS; } -libnss_files_hidden_def (_nss_files_endnetgrent) +libc_hidden_def (_nss_files_endnetgrent) static char * strip_whitespace (char *str) @@ -279,7 +279,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result, return status; } -libnss_files_hidden_def (_nss_netgroup_parseline) +libc_hidden_def (_nss_netgroup_parseline) enum nss_status diff --git a/nss/nss_files/files-network.c b/nss/nss_files/files-network.c index 9cd7d7d..75c9f8a 100644 --- a/nss/nss_files/files-network.c +++ b/nss/nss_files/files-network.c @@ -21,8 +21,7 @@ #include #include #include - -NSS_DECLARE_MODULE_FUNCTIONS (files) +#include #define ENTNAME netent #define DATABASE "networks" @@ -71,7 +70,7 @@ LINE_PARSER *cp = '\0'; addr = newp; } - result->n_net = inet_network (addr); + result->n_net = __inet_network (addr); result->n_addrtype = AF_INET; }) diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c index 68c51c7..997eac5 100644 --- a/nss/nss_files/files-parse.c +++ b/nss/nss_files/files-parse.c @@ -74,13 +74,7 @@ struct parser_data /* 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) -# if IS_IN (libc) -/* We are defining one of the functions that actually lives in libc - because it is used to implement fget*ent and suchlike. */ -# define nss_files_parse_hidden_def(name) libc_hidden_def (name) -# else -# define nss_files_parse_hidden_def(name) libnss_files_hidden_def (name) -# endif +# define nss_files_parse_hidden_def(name) libc_hidden_def (name) #endif diff --git a/nss/nss_readline.c b/nss/nss_readline.c index 4b3ecbc..a2f397a 100644 --- a/nss/nss_readline.c +++ b/nss/nss_readline.c @@ -40,7 +40,7 @@ __nss_readline (FILE *fp, char *buf, size_t len, off64_t *poffset) *poffset = __ftello64 (fp); buf[len - 1] = '\xff'; /* Marker to recognize truncation. */ - if (fgets_unlocked (buf, len, fp) == NULL) + if (__fgets_unlocked (buf, len, fp) == NULL) { if (feof_unlocked (fp)) { @@ -61,7 +61,7 @@ __nss_readline (FILE *fp, char *buf, size_t len, off64_t *poffset) line on the next call. */ return __nss_readline_seek (fp, *poffset); - /* fgets_unlocked succeeded. */ + /* __fgets_unlocked succeeded. */ /* Remove leading whitespace. */ char *p = buf; -- 2.7.4