]> granicus.if.org Git - python/commitdiff
Issue #20306: The pw_gecos and pw_passwd fields are not required by POSIX.
authorStefan Krah <skrah@bytereef.org>
Mon, 25 Apr 2016 23:09:18 +0000 (01:09 +0200)
committerStefan Krah <skrah@bytereef.org>
Mon, 25 Apr 2016 23:09:18 +0000 (01:09 +0200)
If they aren't present, set them to an empty string.

Modules/pwdmodule.c
configure
configure.ac
pyconfig.h.in

index 281c30b26ee88f3715e036d2d607a77a95700964..c5032562e61cb548b9fd1c37f7cd5efb85570587 100644 (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);
 
index ee8a8fcbb1655419103ca1805a0bad24e39ad5f0..a961f3971218c8949164ff103626aa61b5c563ad 100755 (executable)
--- a/configure
+++ b/configure
@@ -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
 
 
index 7a6b5be211d6c4f177c7aabaff2cd47b8c8aad8e..bfd2b0405148118a77ae2c1b753e122ebe47d0b2 100644 (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,[
index d432a821a575c32d61fea9cab87dfaf3a9c111af..b51bd56fd62366726693929f2e8b10e94707637b 100644 (file)
 /* 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