Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: remove old NIS code
- X-seq: zsh-workers 49606
- From: Oliver Kiddle <opk@xxxxxxx>
- To: Zsh workers <zsh-workers@xxxxxxx>
- Subject: PATCH: remove old NIS code
- Date: Fri, 26 Nov 2021 14:05:16 +0100
- Archived-at: <https://zsh.org/workers/49606>
- List-id: <zsh-workers.zsh.org>
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 ----------------------------------------
Messages sorted by:
Reverse Date,
Date,
Thread,
Author