From: Jaroslav Jindrak Date: Thu, 4 May 2023 20:41:02 +0000 (+0200) Subject: configure: check whether fgetpwent_r is available before marking xprefix_getpwnam_r... X-Git-Tag: 4.14.0-rc1~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cc0aaaa18f0571af8121757c2213eda92424358e;p=thirdparty%2Fshadow.git configure: check whether fgetpwent_r is available before marking xprefix_getpwnam_r as reentrant --- diff --git a/configure.ac b/configure.ac index d75b99ff5..4b40be726 100644 --- a/configure.ac +++ b/configure.ac @@ -678,6 +678,8 @@ if test "$with_skey" = "yes"; then ]])],[AC_DEFINE(SKEY_BSD_STYLE, 1, [Define to support newer BSD S/Key API])],[]) fi +AC_CHECK_FUNC(fgetpwent_r, [AC_DEFINE(HAVE_FGETPWENT_R, 1, [Defined to 1 if you have the declaration of 'fgetpwent_r'])]) + AC_DEFINE_UNQUOTED(SHELL, ["$SHELL"], [The default shell.]) AM_GNU_GETTEXT_VERSION([0.19]) diff --git a/lib/prototypes.h b/lib/prototypes.h index 747899b7d..c9e7dce28 100644 --- a/lib/prototypes.h +++ b/lib/prototypes.h @@ -324,8 +324,10 @@ extern struct group *prefix_getgrnam(const char *name); extern struct group *prefix_getgrgid(gid_t gid); extern struct passwd *prefix_getpwuid(uid_t uid); extern struct passwd *prefix_getpwnam(const char* name); +#if HAVE_FGETPWENT_R extern int prefix_getpwnam_r(const char* name, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result); +#endif extern struct spwd *prefix_getspnam(const char* name); extern struct group *prefix_getgr_nam_gid(const char *grname); extern void prefix_setpwent(void); diff --git a/libmisc/prefix_flag.c b/libmisc/prefix_flag.c index 60bc5207e..adab9974c 100644 --- a/libmisc/prefix_flag.c +++ b/libmisc/prefix_flag.c @@ -238,6 +238,7 @@ extern struct passwd *prefix_getpwnam(const char* name) return getpwnam(name); } } +#if HAVE_FGETPWENT_R extern int prefix_getpwnam_r(const char* name, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result) { @@ -259,6 +260,7 @@ extern int prefix_getpwnam_r(const char* name, struct passwd* pwd, return getpwnam_r(name, pwd, buf, buflen, result); } } +#endif extern struct spwd *prefix_getspnam(const char* name) { if (spw_db_file) { diff --git a/libmisc/xprefix_getpwnam.c b/libmisc/xprefix_getpwnam.c index 44466290f..cec01062b 100644 --- a/libmisc/xprefix_getpwnam.c +++ b/libmisc/xprefix_getpwnam.c @@ -35,7 +35,7 @@ #define ARG_TYPE const char * #define ARG_NAME name #define DUP_FUNCTION __pw_dup -#define HAVE_FUNCTION_R 1 +#define HAVE_FUNCTION_R HAVE_FGETPWENT_R #include "xgetXXbyYY.c"