1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-07-16 18:31:28 +02:00

49606: remove old NIS-specific code for retrieving user data

This commit is contained in:
Oliver Kiddle 2021-11-28 20:55:02 +01:00
parent 926a1a7296
commit 07c77dad50
4 changed files with 4 additions and 156 deletions

View file

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

View file

@ -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;
}
}

View file

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

View file

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