]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Move nss_compat from nis to nss subdir and install it unconditionally
authorAndreas Schwab <schwab@suse.de>
Mon, 2 Oct 2017 12:30:46 +0000 (14:30 +0200)
committerAndreas Schwab <schwab@suse.de>
Wed, 4 Oct 2017 12:20:48 +0000 (14:20 +0200)
This has been tested that local lookup still works with and
without an installed libnss_nis, and that NIS lookup works when
libnss_nis is available.

ChangeLog
nis/Makefile
nis/Versions
nss/Makefile
nss/Versions
nss/nss_compat/compat-grp.c [moved from nis/nss_compat/compat-grp.c with 97% similarity]
nss/nss_compat/compat-initgroups.c [moved from nis/nss_compat/compat-initgroups.c with 98% similarity]
nss/nss_compat/compat-pwd.c [moved from nis/nss_compat/compat-pwd.c with 99% similarity]
nss/nss_compat/compat-spwd.c [moved from nis/nss_compat/compat-spwd.c with 98% similarity]
nss/nss_compat/nisdomain.c [new file with mode: 0644]
nss/nss_compat/nisdomain.h [new file with mode: 0644]

index 55295ba48e50704cc57b5b1b172b1c59cef7199e..da2728a43c0fdfbe4c6987db81c778c342714247 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2017-10-04  Andreas Schwab  <schwab@suse.de>
+
+       * nis/Makefile (services): Remove compat.
+       (libnss_compat-routines, libnss_compat-inhibit-o): Don't define.
+       ($(objpfx)libnss_compat.so): Remove rule.
+       * nis/Versions (libnss_compat): Remove.
+       * nss/Makefile (services): Add compat.
+       (libnss_compat-routines, libnss_compat-inhibit-o): Define.
+       * nss/Versions (libnss_compat): Define.
+       * nss/nss_compat/compat-grp.c: Moved here from nis/nss_compat.
+       Don't include <rpc/types.h>.  Replace bool_t by bool.
+       * nss/nss_compat/compat-initgroups.c: Likewise.
+       * nss/nss_compat/compat-pwd.c: Likewise.  Include "nisdomain.h"
+       instead of <rpcsrv/ypclnt.h>.
+       (getpwent_next_nss_netgr): Use __nss_get_default_domain instead of
+       yp_get_default_domain.
+       * nss/nss_compat/compat-pwd.c: Likewise.
+       (getspent_next_nss_netgr): Use __nss_get_default_domain instead of
+       yp_get_default_domain.
+       * nss/nss_compat/nisdomain.c: New file.
+       * nss/nss_compat/nisdomain.h: Likewise.
+
 2017-10-04  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
        [BZ #22244]
index 6b6f5ee72c80ec3534ccf913f4ad4a143de0c7c9..023916f44642ccfadc7e6bc8d9b5fb90b3701673 100644 (file)
@@ -33,7 +33,7 @@ databases             = proto service hosts network grp pwd rpc ethers \
                          spwd netgrp alias publickey
 
 # Specify rules for the nss_* modules.
-services               := nis nisplus compat
+services               := nis nisplus
 endif
 
 extra-libs             = libnsl
@@ -63,9 +63,6 @@ libnsl-routines = yp_xdr ypclnt ypupdate_xdr \
                  nis_clone_res nss-default
 
 ifeq ($(build-obsolete-nsl),yes)
-libnss_compat-routines := $(addprefix compat-,grp pwd spwd initgroups)
-libnss_compat-inhibit-o        = $(filter-out .os,$(object-suffixes))
-
 libnss_nis-routines    := $(addprefix nis-,$(databases)) nis-initgroups \
                           nss-nis
 libnss_nis-inhibit-o   = $(filter-out .os,$(object-suffixes))
@@ -79,7 +76,6 @@ include ../Rules
 
 
 ifeq ($(build-obsolete-nsl),yes)
-$(objpfx)libnss_compat.so: $(objpfx)libnsl.so$(libnsl.so-version)
 $(objpfx)libnss_nis.so: $(objpfx)libnsl.so$(libnsl.so-version) \
                        $(common-objpfx)nss/libnss_files.so
 $(objpfx)libnss_nisplus.so: $(objpfx)libnsl.so$(libnsl.so-version)
index ef9a5124174ec0e88fd93cd73f2b289e7e869f5f..90d3d9dfaa3d853b2b12e0930af433b74bb10819 100644 (file)
@@ -63,17 +63,6 @@ libnsl {
   }
 }
 
-libnss_compat {
-  GLIBC_PRIVATE {
-    _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_setgrent; _nss_compat_setpwent; _nss_compat_setspent;
-    _nss_compat_initgroups_dyn;
-  }
-}
-
 libnss_nis {
   GLIBC_PRIVATE {
     _nss_nis_endaliasent; _nss_nis_endetherent; _nss_nis_endgrent;
index c9a5200f96648c91799516f84147bf4e7577e190..f27bed11fc65b72dc7ffa50c6840c7caa8c3147e 100644 (file)
@@ -72,7 +72,7 @@ tests += tst-cancel-getpwuid_r
 endif
 
 # Specify rules for the nss_* modules.  We have some services.
-services               := files db
+services               := files db compat
 
 extra-libs             = $(services:%=libnss_%)
 # These libraries will be built in the `others' pass rather than
@@ -95,11 +95,15 @@ libnss_db-routines  := $(libnss_db-dbs) db-open db-init hash-string
 generated              += $(filter-out db-alias.c db-netgrp.c, \
                                        $(addsuffix .c,$(libnss_db-dbs)))
 
+libnss_compat-routines := $(addprefix compat-,grp pwd spwd initgroups) \
+                          nisdomain
+
 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)
index 50268ed9b59eb6cf520243c6c5cb23240dd1d51f..7694998f1d5e366d203e576a42f618585deba093 100644 (file)
@@ -162,3 +162,14 @@ libnss_db {
     _nss_db_init;
   }
 }
+
+libnss_compat {
+  GLIBC_PRIVATE {
+    _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_setgrent; _nss_compat_setpwent; _nss_compat_setspent;
+    _nss_compat_initgroups_dyn;
+  }
+}
similarity index 97%
rename from nis/nss_compat/compat-grp.c
rename to nss/nss_compat/compat-grp.c
index 0381458c0c0b914380dfc1e24fd664ce14c0c088..4d51fc95ed9321cd62d1f50aa4772dcd3bdb9576 100644 (file)
@@ -24,7 +24,6 @@
 #include <nsswitch.h>
 #include <stdio_ext.h>
 #include <string.h>
-#include <rpc/types.h>
 #include <libc-lock.h>
 #include <kernel-features.h>
 
@@ -58,21 +57,21 @@ struct blacklist_t
 
 struct ent_t
 {
-  bool_t files;
+  bool files;
   enum nss_status setent_status;
   FILE *stream;
   struct blacklist_t blacklist;
 };
 typedef struct ent_t ent_t;
 
-static ent_t ext_ent = { TRUE, NSS_STATUS_SUCCESS, NULL, { NULL, 0, 0 }};
+static ent_t ext_ent = { true, NSS_STATUS_SUCCESS, 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 bool in_blacklist (const char *, int, ent_t *);
 
 /* Initialize the NSS interface/functions. The calling function must
    hold the lock.  */
@@ -94,7 +93,7 @@ internal_setgrent (ent_t *ent, int stayopen, int needent)
 {
   enum nss_status status = NSS_STATUS_SUCCESS;
 
-  ent->files = TRUE;
+  ent->files = true;
 
   if (ent->blacklist.data != NULL)
     {
@@ -321,7 +320,7 @@ getgrent_next_file (struct group *result, ent_t *ent,
       /* +:... */
       if (result->gr_name[0] == '+' && result->gr_name[1] == '\0')
        {
-         ent->files = FALSE;
+         ent->files = false;
 
          return getgrent_next_nss (result, ent, buffer, buflen, errnop);
        }
@@ -466,7 +465,7 @@ enum nss_status
 _nss_compat_getgrnam_r (const char *name, struct group *grp,
                        char *buffer, size_t buflen, int *errnop)
 {
-  ent_t ent = { TRUE, NSS_STATUS_SUCCESS, NULL, { NULL, 0, 0 }};
+  ent_t ent = { true, NSS_STATUS_SUCCESS, NULL, { NULL, 0, 0 }};
   enum nss_status result;
 
   if (name[0] == '-' || name[0] == '+')
@@ -598,7 +597,7 @@ enum nss_status
 _nss_compat_getgrgid_r (gid_t gid, struct group *grp,
                        char *buffer, size_t buflen, int *errnop)
 {
-  ent_t ent = { TRUE, NSS_STATUS_SUCCESS, NULL, { NULL, 0, 0 }};
+  ent_t ent = { true, NSS_STATUS_SUCCESS, NULL, { NULL, 0, 0 }};
   enum nss_status result;
 
   __libc_lock_lock (lock);
@@ -665,15 +664,15 @@ blacklist_store_name (const char *name, ent_t *ent)
   return;
 }
 
-/* returns TRUE if ent->blacklist contains name, else FALSE */
-static bool_t
+/* Return whether ent->blacklist contains name.  */
+static bool
 in_blacklist (const char *name, int namelen, ent_t *ent)
 {
   char buf[namelen + 3];
   char *cp;
 
   if (ent->blacklist.data == NULL)
-    return FALSE;
+    return false;
 
   buf[0] = '|';
   cp = stpcpy (&buf[1], name);
similarity index 98%
rename from nis/nss_compat/compat-initgroups.c
rename to nss/nss_compat/compat-initgroups.c
index 795213448c7c98b732b2cedc3136f33533f73c01..c1a9301a3b0c3ee007510646153eac70227e643c 100644 (file)
@@ -24,7 +24,6 @@
 #include <stdio_ext.h>
 #include <string.h>
 #include <unistd.h>
-#include <rpc/types.h>
 #include <sys/param.h>
 #include <nsswitch.h>
 #include <libc-lock.h>
@@ -79,7 +78,7 @@ typedef struct ent_t ent_t;
 
 /* Prototypes for local functions.  */
 static void blacklist_store_name (const char *, ent_t *);
-static int in_blacklist (const char *, int, ent_t *);
+static bool in_blacklist (const char *, int, ent_t *);
 
 /* Initialize the NSS interface/functions. The calling function must
    hold the lock.  */
@@ -558,15 +557,15 @@ blacklist_store_name (const char *name, ent_t *ent)
   return;
 }
 
-/* returns TRUE if ent->blacklist contains name, else FALSE */
-static bool_t
+/* Return whether ent->blacklist contains name.  */
+static bool
 in_blacklist (const char *name, int namelen, ent_t *ent)
 {
   char buf[namelen + 3];
   char *cp;
 
   if (ent->blacklist.data == NULL)
-    return FALSE;
+    return false;
 
   buf[0] = '|';
   cp = stpcpy (&buf[1], name);
similarity index 99%
rename from nis/nss_compat/compat-pwd.c
rename to nss/nss_compat/compat-pwd.c
index 0583a10b84a2f53ea610bc4c4f2e2a1a1c78707a..b16eef5d44b09e45efc825b285757df7114b27f7 100644 (file)
 #include <pwd.h>
 #include <stdio_ext.h>
 #include <string.h>
-#include <rpc/types.h>
-#include <rpcsvc/ypclnt.h>
 #include <libc-lock.h>
 #include <kernel-features.h>
 
 #include "netgroup.h"
+#include "nisdomain.h"
 
 static service_user *ni;
 static enum nss_status (*nss_setpwent) (int stayopen);
@@ -82,7 +81,7 @@ __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 bool in_blacklist (const char *, int, ent_t *);
 
 /* Initialize the NSS interface/functions. The calling function must
    hold the lock.  */
@@ -346,7 +345,7 @@ getpwent_next_nss_netgr (const char *name, struct passwd *result, ent_t *ent,
       if (domain != NULL)
        {
          if (curdomain == NULL
-             && yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
+             && __nss_get_default_domain (&curdomain) != 0)
            {
              __internal_endnetgrent (&ent->netgrdata);
              ent->netgroup = false;
@@ -1114,15 +1113,15 @@ blacklist_store_name (const char *name, ent_t *ent)
   return;
 }
 
-/* Returns TRUE if ent->blacklist contains name, else FALSE.  */
-static bool_t
+/* Returns whether ent->blacklist contains name.  */
+static bool
 in_blacklist (const char *name, int namelen, ent_t *ent)
 {
   char buf[namelen + 3];
   char *cp;
 
   if (ent->blacklist.data == NULL)
-    return FALSE;
+    return false;
 
   buf[0] = '|';
   cp = stpcpy (&buf[1], name);
similarity index 98%
rename from nis/nss_compat/compat-spwd.c
rename to nss/nss_compat/compat-spwd.c
index eec3af3d15af148b7fa23ef464153f057457ee36..8a875472fa6d3a0e23d2f438c09aacd959443934 100644 (file)
 #include <shadow.h>
 #include <stdio_ext.h>
 #include <string.h>
-#include <rpc/types.h>
-#include <rpcsvc/ypclnt.h>
 #include <libc-lock.h>
 #include <kernel-features.h>
 
 #include "netgroup.h"
+#include "nisdomain.h"
 
 static service_user *ni;
 static enum nss_status (*nss_setspent) (int stayopen);
@@ -79,7 +78,7 @@ __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 bool in_blacklist (const char *, int, ent_t *);
 
 /* Initialize the NSS interface/functions. The calling function must
    hold the lock.  */
@@ -306,7 +305,7 @@ getspent_next_nss_netgr (const char *name, struct spwd *result, ent_t *ent,
       if (domain != NULL)
        {
          if (curdomain == NULL
-             && yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
+             && __nss_get_default_domain (&curdomain) != 0)
            {
              __internal_endnetgrent (&ent->netgrdata);
              ent->netgroup = false;
@@ -840,8 +839,8 @@ blacklist_store_name (const char *name, ent_t *ent)
 }
 
 
-/* Returns TRUE if ent->blacklist contains name, else FALSE.  */
-static bool_t
+/* Returns whether ent->blacklist contains name.  */
+static bool
 in_blacklist (const char *name, int namelen, ent_t *ent)
 {
   char buf[namelen + 3];
diff --git a/nss/nss_compat/nisdomain.c b/nss/nss_compat/nisdomain.c
new file mode 100644 (file)
index 0000000..220ae27
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 2017 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 Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <libc-lock.h>
+#include "nisdomain.h"
+
+#define MAXDOMAINNAMELEN 1024
+
+static char domainname[MAXDOMAINNAMELEN];
+
+__libc_lock_define_initialized (static, domainname_lock)
+
+int
+__nss_get_default_domain (char **outdomain)
+{
+  int result = 0;
+  *outdomain = NULL;
+
+  __libc_lock_lock (domainname_lock);
+
+  if (domainname[0] != '\0')
+    {
+      if (getdomainname (domainname, MAXDOMAINNAMELEN) < 0)
+       result = errno;
+      else if (strcmp (domainname, "(none)") == 0)
+       {
+         /* If domainname is not set, some systems will return "(none)" */
+         domainname[0] = '\0';
+         result = ENOENT;
+       }
+      else
+       *outdomain = domainname;
+    }
+  else
+    *outdomain = domainname;
+
+  __libc_lock_unlock (domainname_lock);
+
+  return result;
+}
diff --git a/nss/nss_compat/nisdomain.h b/nss/nss_compat/nisdomain.h
new file mode 100644 (file)
index 0000000..314f3f7
--- /dev/null
@@ -0,0 +1,20 @@
+/* Copyright (C) 2017 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 Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Set OUTDOMAIN to a pointer to the current NIS domain name, or NULL if
+   not set.  Return zero on success, an error number on failure.  */
+extern int __nss_get_default_domain (char **outdomain);