zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: remove old NIS code
@ 2021-11-26 13:05 Oliver Kiddle
  0 siblings, 0 replies; only message in thread
From: Oliver Kiddle @ 2021-11-26 13:05 UTC (permalink / raw)
  To: Zsh workers

There's a fair amount of old #ifdefs and autoconf stuff that was added
for ancient systems on which zsh has probably long ago ceased to build.
Much of this isn't easy to isolate and identify but where we can,
cleaning it up can help simplify the code.

This patch removes NIS-specific routines for getting usernames, uids
etc. Note that this does not in any way prevent zsh from working with
NIS. Unix systems acquired things like NSS and support for generic
sources of user data long ago. So getpwuid() etc work just fine with
NIS.

Code for parsing /etc/passwd directly apparently even exists as a
fallback on only the HAVE_NIS side of #else which seems somewhat
curious.

Oliver

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 ----------------------------------------


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-26 13:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-26 13:05 PATCH: remove old NIS code Oliver Kiddle

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).