From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 22294 invoked from network); 26 Nov 2021 13:05:37 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 26 Nov 2021 13:05:37 -0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Message-ID:Date:Content-ID: Content-Type:MIME-Version:Subject:To:From:Reply-To:Cc: Content-Transfer-Encoding:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References; bh=ilRxW0yM817bp26YrRYjb3pgRVjzQ9HCdOwYH9rD110=; b=hJieitR+q2KvoJn7yuMpIQCQMH eth+Q809DXSPowGm2sDN5kr2zIUeHND3FXBbeQ5Qr6Q8PwgN48ofa2yFUPRz6QIYvvE/MGGnYIPXm QSEfoSzu2gLzjton3SHT0tqoWSHDceyGMH5w9+X3qL8YX2nfGtDvlf2vawlMongSZSPETweIB2bns pJkdZ7RI/VTUUvVJ2UZVB8wCWMX6JDypoC6dXjAJByLBVW+rxTgjODLdzo90NsTHLh08DppDZb/Tl Tb2rsvcAMEzvZB7kTqBCvGMAgPvf05ZXKNOYuaxagbyMGQX4XMIj5D0XE7Kgb/3eAcl+zRmPNnuj3 ZuBvAJYw==; Received: from authenticated user by zero.zsh.org with local id 1mqav2-000LSj-Rg; Fri, 26 Nov 2021 13:05:36 +0000 Received: from authenticated user by zero.zsh.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) id 1mqauk-000LAr-16; Fri, 26 Nov 2021 13:05:18 +0000 Received: from [192.168.178.21] (helo=hydra) by mail.kiddle.eu with esmtp(Exim 4.94.2) (envelope-from ) id 1mqaui-000Oo9-R9 for zsh-workers@zsh.org; Fri, 26 Nov 2021 14:05:17 +0100 From: Oliver Kiddle To: Zsh workers Subject: PATCH: remove old NIS code MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <95363.1637931916.1@hydra> Date: Fri, 26 Nov 2021 14:05:16 +0100 Message-ID: <95364-1637931916.838312@ZxKi.WhOp.LTgx> X-Seq: 49606 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: 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 -#else -# ifdef HAVE_NIS -# include -# include -# include -# include -# 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 ----------------------------------------