mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-11-28 15:21:03 +01:00
49606: remove old NIS-specific code for retrieving user data
This commit is contained in:
parent
926a1a7296
commit
07c77dad50
4 changed files with 4 additions and 156 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue