about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Src/hashnameddir.c123
-rw-r--r--Src/utils.c2
-rw-r--r--configure.ac32
4 files changed, 4 insertions, 156 deletions
diff --git a/ChangeLog b/ChangeLog
index bf1f88b03..f9ae6a3bb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2021-11-28  Oliver Kiddle  <opk@zsh.org>
 
+	* 49606: Src/hashnameddir.c, Src/utils.c, configure.ac: remove old
+	NIS-specific code for retrieving user data
+
 	* 49602: Src/params.c: only set LOGCHECK from the watch module
 
 	* 49601: Src/hist.c, Test/W01history.ztst: don't create
diff --git a/Src/hashnameddir.c b/Src/hashnameddir.c
index cbd1344ef..bab7b64b2 100644
--- a/Src/hashnameddir.c
+++ b/Src/hashnameddir.c
@@ -42,17 +42,6 @@
 /* Named Directory Hash Table Functions */
 /****************************************/
 
-#ifdef HAVE_NIS_PLUS
-# include <rpcsvc/nis.h>
-#else
-# ifdef HAVE_NIS
-#  include	<rpc/types.h>
-#  include	<rpc/rpc.h>
-#  include	<rpcsvc/ypclnt.h>
-#  include	<rpcsvc/yp_prot.h>
-# endif
-#endif
-
 /* hash table containing named directories */
 
 /**/
@@ -102,122 +91,11 @@ emptynameddirtable(HashTable ht)
 /* Add all the usernames in the password file/database *
  * to the named directories table.                     */
 
-#ifdef HAVE_NIS_PLUS
-static int
-add_userdir(nis_name table, nis_object *object, void *userdata)
-{
-    if (object->zo_data.objdata_u.en_data.en_cols.en_cols_len >= 6) {
-	static char name[40], dir[PATH_MAX + 1];
-	register entry_col *ec =
-	    object->zo_data.objdata_u.en_data.en_cols.en_cols_val;
-	register int nl = minimum(ec[0].ec_value.ec_value_len, 39);
-	register int dl = minimum(ec[5].ec_value.ec_value_len, PATH_MAX);
-
-	memcpy(name, ec[0].ec_value.ec_value_val, nl);
-	name[nl] = '\0';
-	memcpy(dir, ec[5].ec_value.ec_value_val, dl);
-	dir[dl] = '\0';
-
-	adduserdir(name, dir, ND_USERNAME, 1);
-    }
-    return 0;
-}
-#else
-# ifdef HAVE_NIS
-static int
-add_userdir(int status, char *key, int keylen, char *val, int vallen, char *dummy)
-{
-    char *p, *d, *de;
-
-    if (status != YP_TRUE)
-	return 1;
-
-    if (vallen > keylen && *(p = val + keylen) == ':') {
-	*p++ = '\0';
-	for (de = val + vallen - 1; *de != ':' && de > val; de--);
-	if (de > val) {
-	    *de = '\0';
-	    if ((d = strrchr(p, ':'))) {
-		if (*++d && val[0])
-		    adduserdir(val, d, ND_USERNAME, 1);
-	    }
-	}
-    }
-    return 0;
-}
-# endif /* HAVE_NIS */
-#endif  /* HAVE_NIS_PLUS */
-
 /**/
 static void
 fillnameddirtable(UNUSED(HashTable ht))
 {
     if (!allusersadded) {
-#if defined(HAVE_NIS) || defined(HAVE_NIS_PLUS)
-	FILE *pwf;
-	char buf[BUFSIZ], *p, *d, *de;
-	int skipping, oldct = nameddirtab->ct, usepwf = 1;
-
-# ifndef HAVE_NIS_PLUS
-	char domain[YPMAXDOMAIN];
-	struct ypall_callback cb;
-
-	/* Get potential matches from NIS and cull those without local accounts */
-	if (getdomainname(domain, YPMAXDOMAIN) == 0) {
-	    cb.foreach = (int (*)()) add_userdir;
-	    cb.data = NULL;
-	    yp_all(domain, PASSWD_MAP, &cb);
-    }
-# else  /* HAVE_NIS_PLUS */
-	/* Maybe we should turn this string into a #define'd constant...? */
-
-	nis_list("passwd.org_dir", EXPAND_NAME|ALL_RESULTS|FOLLOW_LINKS|FOLLOW_PATH,
-		 add_userdir, 0);
-# endif
-	if (nameddirtab->ct == oldct) {
-	    /* Using NIS or NIS+ didn't add any user directories. This seems
-	     * fishy, so we fall back to using getpwent(). If we don't have
-	     * that, we only use the passwd file. */
-#ifdef USE_GETPWENT
-	    struct passwd *pw;
-
-	    setpwent();
-
-	    /* loop through the password file/database *
-	     * and add all entries returned.           */
-	    while ((pw = getpwent()) && !errflag)
-		adduserdir(pw->pw_name, pw->pw_dir, ND_USERNAME, 1);
-
-	    endpwent();
-	    usepwf = 0;
-#endif /* USE_GETPWENT */
-	}
-	if (usepwf) {
-	    /* Don't forget the non-NIS matches from the flat passwd file */
-	    if ((pwf = fopen(PASSWD_FILE, "r")) != NULL) {
-		skipping = 0;
-		while (fgets(buf, BUFSIZ, pwf) != NULL) {
-		    if (strchr(buf, '\n') != NULL) {
-			if (!skipping) {
-			    if ((p = strchr(buf, ':')) != NULL) {
-				*p++ = '\0';
-				if ((de = strrchr(p, ':'))) {
-				    *de = '\0';
-				    if ((d = strrchr(p, ':'))) {
-					if (*++d && buf[0])
-					    adduserdir(buf, d, ND_USERNAME, 1);
-				    }
-				}
-			    }
-			} else
-			    skipping = 0;
-		    } else
-			skipping = 1;
-		}
-		fclose(pwf);
-	    }
-	}
-#else  /* no NIS or NIS_PLUS */
 #ifdef USE_GETPWENT
 	struct passwd *pw;
 
@@ -230,7 +108,6 @@ fillnameddirtable(UNUSED(HashTable ht))
 
 	endpwent();
 #endif /* USE_GETPWENT */
-#endif
 	allusersadded = 1;
     }
 }
diff --git a/Src/utils.c b/Src/utils.c
index 8adab2bd7..f9127c70c 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -1108,7 +1108,7 @@ substnamedir(char *s)
 
 /* Returns the current username.  It caches the username *
  * and uid to try to avoid requerying the password files *
- * or NIS/NIS+ database.                                 */
+ * or other source.                                      */
 
 /**/
 uid_t cached_uid;
diff --git a/configure.ac b/configure.ac
index 297a7482f..1af5a2854 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2071,38 +2071,6 @@ AH_TEMPLATE([HAVE_PRCTL],
 AC_CHECK_FUNC(prctl,AC_DEFINE(HAVE_PRCTL),
 AC_SEARCH_LIBS(prctl,c,AC_DEFINE(HAVE_PRCTL)))
 
-dnl -------------
-dnl CHECK FOR NIS
-dnl -------------
-AH_TEMPLATE([HAVE_NIS],
-[Define to 1 if you have NIS.])
-AC_CACHE_CHECK(for NIS, zsh_cv_sys_nis,
-[test -f /usr/bin/ypcat && /usr/bin/ypcat passwd.byname > /dev/null 2>&1 && \
-zsh_cv_sys_nis=yes || zsh_cv_sys_nis=no])
-if test x$zsh_cv_sys_nis = xyes; then
-  AC_DEFINE(HAVE_NIS)
-dnl RPC is removed from glibc-2.26 and replaced by libtirpc
-  AC_CHECK_HEADER(rpc/rpc.h, [],
-  [test -f /usr/include/tirpc/rpc/rpc.h && \
-   CPPFLAGS="$CPPFLAGS -I/usr/include/tirpc"])
-dnl Some systems (Solaris 2.x, Linux Redhat 5.x) require
-dnl libnsl (Network Services Library) to find yp_all
-  AC_SEARCH_LIBS(yp_all, nsl)
-fi
-
-dnl -----------------
-dnl CHECK FOR NISPLUS
-dnl -----------------
-AH_TEMPLATE([HAVE_NIS_PLUS],
-[Define to 1 if you have NISPLUS.])
-AC_CACHE_CHECK(for NIS+, zsh_cv_sys_nis_plus,
-[test x$ac_cv_func_nis_list = xyes && test -f /usr/bin/nisls && \
- /usr/bin/nisls > /dev/null 2>&1 && \
-zsh_cv_sys_nis_plus=yes || zsh_cv_sys_nis_plus=no])
-if test x$zsh_cv_sys_nis_plus = xyes; then
-  AC_DEFINE(HAVE_NIS_PLUS)
-fi
-
 dnl ----------------------------------------
 dnl CHECK FOR LOCATION OF {U,W}TMP{,X} FILES
 dnl ----------------------------------------