nss_files: Move into libc
authorFlorian Weimer <fweimer@redhat.com>
Wed, 7 Jul 2021 16:33:52 +0000 (18:33 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Wed, 7 Jul 2021 16:33:52 +0000 (18:33 +0200)
This is the first step towards fixing bug 27959.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
include/libc-symbols.h
include/netdb.h
include/nss_files.h
nss/Makefile
nss/Versions
nss/nss_files/files-alias.c
nss/nss_files/files-hosts.c
nss/nss_files/files-netgrp.c
nss/nss_files/files-network.c
nss/nss_files/files-parse.c
nss/nss_readline.c

index 127ea65..d41ecf4 100644 (file)
@@ -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...) \
index 82e102f..4dcdbb8 100644 (file)
@@ -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);               \
index 7bf1951..dd0081a 100644 (file)
@@ -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)
 
index 271a0e7..7259e83 100644 (file)
@@ -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';\
index 7b040b4..e551524 100644 (file)
@@ -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;
index 9624b62..75d91e0 100644 (file)
@@ -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
index 1dd51d1..894b85d 100644 (file)
@@ -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.  */
index f8c821c..be9c72a 100644 (file)
@@ -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
index 9cd7d7d..75c9f8a 100644 (file)
@@ -21,8 +21,7 @@
 #include <netdb.h>
 #include <stdint.h>
 #include <nss.h>
-
-NSS_DECLARE_MODULE_FUNCTIONS (files)
+#include <nss_files.h>
 
 #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;
 
  })
index 68c51c7..997eac5 100644 (file)
@@ -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
 
 
index 4b3ecbc..a2f397a 100644 (file)
@@ -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;