Issue #20306: The pw_gecos and pw_passwd fields are not required by POSIX.

If they aren't present, set them to an empty string.
This commit is contained in:
Stefan Krah 2016-04-26 01:09:18 +02:00
parent 8e1da5823b
commit 267b639a26
4 changed files with 45 additions and 0 deletions

View File

@ -75,10 +75,18 @@ mkpwent(struct passwd *p)
#define SETS(i,val) sets(v, i, val)
SETS(setIndex++, p->pw_name);
#if defined(HAVE_STRUCT_PASSWD_PW_PASSWD)
SETS(setIndex++, p->pw_passwd);
#else
SETS(setIndex++, "");
#endif
PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromUid(p->pw_uid));
PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromGid(p->pw_gid));
#if defined(HAVE_STRUCT_PASSWD_PW_GECOS)
SETS(setIndex++, p->pw_gecos);
#else
SETS(setIndex++, "");
#endif
SETS(setIndex++, p->pw_dir);
SETS(setIndex++, p->pw_shell);

27
configure vendored
View File

@ -12916,6 +12916,33 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
fi
ac_fn_c_check_member "$LINENO" "struct passwd" "pw_gecos" "ac_cv_member_struct_passwd_pw_gecos" "
#include <sys/types.h>
#include <pwd.h>
"
if test "x$ac_cv_member_struct_passwd_pw_gecos" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_STRUCT_PASSWD_PW_GECOS 1
_ACEOF
fi
ac_fn_c_check_member "$LINENO" "struct passwd" "pw_passwd" "ac_cv_member_struct_passwd_pw_passwd" "
#include <sys/types.h>
#include <pwd.h>
"
if test "x$ac_cv_member_struct_passwd_pw_passwd" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_STRUCT_PASSWD_PW_PASSWD 1
_ACEOF
fi

View File

@ -3762,6 +3762,10 @@ AC_CHECK_MEMBERS([struct stat.st_flags])
AC_CHECK_MEMBERS([struct stat.st_gen])
AC_CHECK_MEMBERS([struct stat.st_birthtime])
AC_CHECK_MEMBERS([struct stat.st_blocks])
AC_CHECK_MEMBERS([struct passwd.pw_gecos, struct passwd.pw_passwd], [], [], [[
#include <sys/types.h>
#include <pwd.h>
]])
AC_MSG_CHECKING(for time.h that defines altzone)
AC_CACHE_VAL(ac_cv_header_time_altzone,[

View File

@ -916,6 +916,12 @@
/* Define to 1 if you have the <stropts.h> header file. */
#undef HAVE_STROPTS_H
/* Define to 1 if `pw_gecos' is a member of `struct passwd'. */
#undef HAVE_STRUCT_PASSWD_PW_GECOS
/* Define to 1 if `pw_passwd' is a member of `struct passwd'. */
#undef HAVE_STRUCT_PASSWD_PW_PASSWD
/* Define to 1 if `st_birthtime' is a member of `struct stat'. */
#undef HAVE_STRUCT_STAT_ST_BIRTHTIME