Module Name:    src
Committed By:   snj
Date:           Mon Sep 11 04:43:23 UTC 2017

Modified Files:
        src/crypto/external/bsd/heimdal/dist [netbsd-6]: configure.ac
        src/crypto/external/bsd/heimdal/dist/kcm [netbsd-6]: client.c config.c
        src/crypto/external/bsd/heimdal/dist/lib/gssapi/mech [netbsd-6]:
            gss_pname_to_uid.c
        src/crypto/external/bsd/heimdal/dist/lib/hx509 [netbsd-6]: softp11.c
        src/crypto/external/bsd/heimdal/dist/lib/krb5 [netbsd-6]: config_file.c
            get_default_principal.c kuserok.c
        src/crypto/external/bsd/heimdal/dist/lib/roken [netbsd-6]: getxxyyy.c
            roken.h.in
        src/crypto/external/bsd/heimdal/include [netbsd-6]: config.h roken.h
Added Files:
        src/crypto/external/bsd/heimdal/dist/cf [netbsd-6]:
            check-getpwuid_r-posix.m4

Log Message:
Pull up following revision(s) (requested by mlelstv in ticket #1503):
        crypto/external/bsd/heimdal/include/config.h: revision 1.9
        crypto/external/bsd/heimdal/dist/lib/gssapi/mech/gss_pname_to_uid.c: 
revision 1.3
        crypto/external/bsd/heimdal/dist/lib/roken/getxxyyy.c: revision 1.3
        crypto/external/bsd/heimdal/dist/configure.ac: revision 1.3
        crypto/external/bsd/heimdal/dist/kcm/config.c: revision 1.3
        crypto/external/bsd/heimdal/dist/lib/krb5/kuserok.c: revision 1.3
        crypto/external/bsd/heimdal/dist/cf/check-getpwuid_r-posix.m4: revision 
1.1
        crypto/external/bsd/heimdal/include/roken.h: revision 1.8
        crypto/external/bsd/heimdal/dist/lib/krb5/get_default_principal.c: 
revision 1.3
        crypto/external/bsd/heimdal/dist/lib/hx509/softp11.c: revision 1.3
        crypto/external/bsd/heimdal/dist/kcm/client.c: revision 1.3
        crypto/external/bsd/heimdal/dist/lib/krb5/config_file.c: revision 1.3
        crypto/external/bsd/heimdal/dist/lib/roken/roken.h.in: revision 1.5
always use rk_getpwnam_r...
--
This is why we have libroken...
--
Use getpwuid_r instead of getpwuid, so that we don't trash getpw*() internal
buffers.
kde does (kdm/client/backend.c):
    p = getpwnam();
    pam_setcred() (which calls getpwuid in pam_afslog);
    setusercontext(...,p,p->pw_uid,...) (now with trashed p data...)


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1.6.1 -r1.1.1.1.6.2 \
    src/crypto/external/bsd/heimdal/dist/configure.ac
cvs rdiff -u -r0 -r1.1.6.2 \
    src/crypto/external/bsd/heimdal/dist/cf/check-getpwuid_r-posix.m4
cvs rdiff -u -r1.1.1.1.6.1 -r1.1.1.1.6.2 \
    src/crypto/external/bsd/heimdal/dist/kcm/client.c \
    src/crypto/external/bsd/heimdal/dist/kcm/config.c
cvs rdiff -u -r1.2.12.2 -r1.2.12.3 \
    src/crypto/external/bsd/heimdal/dist/lib/gssapi/mech/gss_pname_to_uid.c
cvs rdiff -u -r1.1.1.1.6.1 -r1.1.1.1.6.2 \
    src/crypto/external/bsd/heimdal/dist/lib/hx509/softp11.c
cvs rdiff -u -r1.1.1.1.6.1 -r1.1.1.1.6.2 \
    src/crypto/external/bsd/heimdal/dist/lib/krb5/config_file.c \
    src/crypto/external/bsd/heimdal/dist/lib/krb5/get_default_principal.c \
    src/crypto/external/bsd/heimdal/dist/lib/krb5/kuserok.c
cvs rdiff -u -r1.2.22.2 -r1.2.22.3 \
    src/crypto/external/bsd/heimdal/dist/lib/roken/getxxyyy.c
cvs rdiff -u -r1.2.6.1 -r1.2.6.2 \
    src/crypto/external/bsd/heimdal/dist/lib/roken/roken.h.in
cvs rdiff -u -r1.4.2.1 -r1.4.2.2 \
    src/crypto/external/bsd/heimdal/include/config.h
cvs rdiff -u -r1.3.6.1 -r1.3.6.2 \
    src/crypto/external/bsd/heimdal/include/roken.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/crypto/external/bsd/heimdal/dist/configure.ac
diff -u src/crypto/external/bsd/heimdal/dist/configure.ac:1.1.1.1.6.1 src/crypto/external/bsd/heimdal/dist/configure.ac:1.1.1.1.6.2
--- src/crypto/external/bsd/heimdal/dist/configure.ac:1.1.1.1.6.1	Wed Aug 30 07:10:48 2017
+++ src/crypto/external/bsd/heimdal/dist/configure.ac	Mon Sep 11 04:43:22 2017
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_REVISION($Revision: 1.1.1.1.6.1 $)
+AC_REVISION($Revision: 1.1.1.1.6.2 $)
 AC_PREREQ(2.62)
 test -z "$CFLAGS" && CFLAGS="-g"
 AC_INIT([Heimdal],[7.99.1],[https://github.com/heimdal/heimdal/issues])
@@ -514,6 +514,7 @@ KRB_CAPABILITIES
 rk_DLADDR
 
 AC_CHECK_GETPWNAM_R_POSIX
+AC_CHECK_GETPWUID_R_POSIX
 
 dnl detect doors on solaris
 if test "$enable_pthread_support" != no; then

Index: src/crypto/external/bsd/heimdal/dist/kcm/client.c
diff -u src/crypto/external/bsd/heimdal/dist/kcm/client.c:1.1.1.1.6.1 src/crypto/external/bsd/heimdal/dist/kcm/client.c:1.1.1.1.6.2
--- src/crypto/external/bsd/heimdal/dist/kcm/client.c:1.1.1.1.6.1	Wed Aug 30 07:10:50 2017
+++ src/crypto/external/bsd/heimdal/dist/kcm/client.c	Mon Sep 11 04:43:22 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: client.c,v 1.1.1.1.6.1 2017/08/30 07:10:50 snj Exp $	*/
+/*	$NetBSD: client.c,v 1.1.1.1.6.2 2017/09/11 04:43:22 snj Exp $	*/
 
 /*
  * Copyright (c) 2005, PADL Software Pty Ltd.
@@ -174,8 +174,10 @@ kcm_ccache_new_client(krb5_context conte
 	if (matches == 0)
 	    matches = sscanf(name,"%ld",&uid);
 	if (matches == 1) {
-	    struct passwd *pwd = getpwuid(uid);
-	    if (pwd != NULL) {
+	    struct passwd pw, *pwd = NULL;
+	    char pwbuf[2048];
+
+	    if (rk_getpwuid_r(getuid(), &pw, pwbuf, sizeof(pwbuf), &pwd) == 0) {
 		gid_t gid = pwd->pw_gid;
 		kcm_chown(context, client, ccache, uid, gid);
 	    }
Index: src/crypto/external/bsd/heimdal/dist/kcm/config.c
diff -u src/crypto/external/bsd/heimdal/dist/kcm/config.c:1.1.1.1.6.1 src/crypto/external/bsd/heimdal/dist/kcm/config.c:1.1.1.1.6.2
--- src/crypto/external/bsd/heimdal/dist/kcm/config.c:1.1.1.1.6.1	Wed Aug 30 07:10:50 2017
+++ src/crypto/external/bsd/heimdal/dist/kcm/config.c	Mon Sep 11 04:43:22 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: config.c,v 1.1.1.1.6.1 2017/08/30 07:10:50 snj Exp $	*/
+/*	$NetBSD: config.c,v 1.1.1.1.6.2 2017/09/11 04:43:22 snj Exp $	*/
 
 /*
  * Copyright (c) 2005, PADL Software Pty Ltd.
@@ -159,28 +159,33 @@ static int parse_owners(kcm_ccache ccach
 {
     uid_t uid = 0;
     gid_t gid = 0;
-    struct passwd *pw;
     struct group *gr;
     int uid_p = 0;
     int gid_p = 0;
+    struct passwd pw, *pwd = NULL;
+    char pwbuf[2048];
 
     if (system_user != NULL) {
 	if (isdigit((unsigned char)system_user[0])) {
-	    pw = getpwuid(atoi(system_user));
+	    if (rk_getpwuid_r(atoi(system_user), &pw, pwbuf, sizeof(pwbuf),
+		&pwd) != 0)
+		    pwd = NULL;
 	} else {
-	    pw = getpwnam(system_user);
+	    if (rk_getpwnam_r(system_user, &pw, pwbuf, sizeof(pwbuf),
+		&pwd) != 0)
+		    pwd = NULL;
 	}
-	if (pw == NULL) {
+	if (pwd == NULL) {
 	    return errno;
 	}
 
-	system_user = strdup(pw->pw_name);
+	system_user = strdup(pwd->pw_name);
 	if (system_user == NULL) {
 	    return ENOMEM;
 	}
 
-	uid = pw->pw_uid; uid_p = 1;
-	gid = pw->pw_gid; gid_p = 1;
+	uid = pwd->pw_uid; uid_p = 1;
+	gid = pwd->pw_gid; gid_p = 1;
     }
 
     if (system_group != NULL) {

Index: src/crypto/external/bsd/heimdal/dist/lib/gssapi/mech/gss_pname_to_uid.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/gssapi/mech/gss_pname_to_uid.c:1.2.12.2 src/crypto/external/bsd/heimdal/dist/lib/gssapi/mech/gss_pname_to_uid.c:1.2.12.3
--- src/crypto/external/bsd/heimdal/dist/lib/gssapi/mech/gss_pname_to_uid.c:1.2.12.2	Wed Aug 30 07:10:54 2017
+++ src/crypto/external/bsd/heimdal/dist/lib/gssapi/mech/gss_pname_to_uid.c	Mon Sep 11 04:43:22 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: gss_pname_to_uid.c,v 1.2.12.2 2017/08/30 07:10:54 snj Exp $	*/
+/*	$NetBSD: gss_pname_to_uid.c,v 1.2.12.3 2017/09/11 04:43:22 snj Exp $	*/
 
 /*
  * Copyright (c) 2011, PADL Software Pty Ltd.
@@ -150,12 +150,8 @@ gss_pname_to_uid(OM_uint32 *minor_status
     OM_uint32 major, tmpMinor;
     gss_buffer_desc localname = GSS_C_EMPTY_BUFFER;
     char *szLocalname;
-#ifdef POSIX_GETPWNAM_R
     char pwbuf[2048];
     struct passwd pw, *pwd;
-#else
-    struct passwd *pwd;
-#endif
 
     major = gss_localname(minor_status, pname, mech_type, &localname);
     if (GSS_ERROR(major))
@@ -171,12 +167,8 @@ gss_pname_to_uid(OM_uint32 *minor_status
     memcpy(szLocalname, localname.value, localname.length);
     szLocalname[localname.length] = '\0';
 
-#ifdef POSIX_GETPWNAM_R
-    if (getpwnam_r(szLocalname, &pw, pwbuf, sizeof(pwbuf), &pwd) != 0)
+    if (rk_getpwnam_r(szLocalname, &pw, pwbuf, sizeof(pwbuf), &pwd) != 0)
         pwd = NULL;
-#else
-    pwd = getpwnam(szLocalname);
-#endif
 
     gss_release_buffer(&tmpMinor, &localname);
     free(szLocalname);

Index: src/crypto/external/bsd/heimdal/dist/lib/hx509/softp11.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/hx509/softp11.c:1.1.1.1.6.1 src/crypto/external/bsd/heimdal/dist/lib/hx509/softp11.c:1.1.1.1.6.2
--- src/crypto/external/bsd/heimdal/dist/lib/hx509/softp11.c:1.1.1.1.6.1	Wed Aug 30 07:10:59 2017
+++ src/crypto/external/bsd/heimdal/dist/lib/hx509/softp11.c	Mon Sep 11 04:43:22 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: softp11.c,v 1.1.1.1.6.1 2017/08/30 07:10:59 snj Exp $	*/
+/*	$NetBSD: softp11.c,v 1.1.1.1.6.2 2017/09/11 04:43:22 snj Exp $	*/
 
 /*
  * Copyright (c) 2004 - 2008 Kungliga Tekniska Högskolan
@@ -833,9 +833,11 @@ get_config_file_for_user(void)
         home = getenv("HOME");
     }
     if (fn == NULL && home == NULL) {
-        struct passwd *pw = getpwuid(getuid());
-        if(pw != NULL)
-            home = pw->pw_dir;
+	struct passwd pw, *pwd = NULL;
+	char pwbuf[2048];
+
+	if (rk_getpwuid_r(getuid(), &pw, pwbuf, sizeof(pwbuf), &pwd) == 0)
+            home = pwd->pw_dir;
     }
     if (fn == NULL) {
         if (home) {

Index: src/crypto/external/bsd/heimdal/dist/lib/krb5/config_file.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/krb5/config_file.c:1.1.1.1.6.1 src/crypto/external/bsd/heimdal/dist/lib/krb5/config_file.c:1.1.1.1.6.2
--- src/crypto/external/bsd/heimdal/dist/lib/krb5/config_file.c:1.1.1.1.6.1	Wed Aug 30 07:11:00 2017
+++ src/crypto/external/bsd/heimdal/dist/lib/krb5/config_file.c	Mon Sep 11 04:43:22 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: config_file.c,v 1.1.1.1.6.1 2017/08/30 07:11:00 snj Exp $	*/
+/*	$NetBSD: config_file.c,v 1.1.1.1.6.2 2017/09/11 04:43:22 snj Exp $	*/
 
 /*
  * Copyright (c) 1997 - 2004 Kungliga Tekniska Högskolan
@@ -441,9 +441,11 @@ krb5_config_parse_file_multi (krb5_conte
 	    home = getenv("HOME");
 
 	if (home == NULL) {
-	    struct passwd *pw = getpwuid(getuid());
-	    if(pw != NULL)
-		home = pw->pw_dir;
+	    struct passwd pw, *pwd = NULL;
+	    char pwbuf[2048];
+
+	    if (rk_getpwuid_r(getuid(), &pw, pwbuf, sizeof(pwbuf), &pwd) == 0)
+		home = pwd->pw_dir;
 	}
 	if (home) {
 	    int aret;
Index: src/crypto/external/bsd/heimdal/dist/lib/krb5/get_default_principal.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/krb5/get_default_principal.c:1.1.1.1.6.1 src/crypto/external/bsd/heimdal/dist/lib/krb5/get_default_principal.c:1.1.1.1.6.2
--- src/crypto/external/bsd/heimdal/dist/lib/krb5/get_default_principal.c:1.1.1.1.6.1	Wed Aug 30 07:11:01 2017
+++ src/crypto/external/bsd/heimdal/dist/lib/krb5/get_default_principal.c	Mon Sep 11 04:43:22 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: get_default_principal.c,v 1.1.1.1.6.1 2017/08/30 07:11:01 snj Exp $	*/
+/*	$NetBSD: get_default_principal.c,v 1.1.1.1.6.2 2017/09/11 04:43:22 snj Exp $	*/
 
 /*
  * Copyright (c) 1997 - 2001 Kungliga Tekniska Högskolan
@@ -78,9 +78,11 @@ _krb5_get_default_principal_local (krb5_
 	else
 	    ret = krb5_make_principal(context, princ, NULL, "root", NULL);
     } else {
-	struct passwd *pw = getpwuid(uid);
-	if(pw != NULL)
-	    user = pw->pw_name;
+	struct passwd pw, *pwd = NULL;
+	char pwbuf[2048];
+
+	if (rk_getpwuid_r(uid, &pw, pwbuf, sizeof(pwbuf), &pwd) == 0)
+	    user = pwd->pw_name;
 	else {
 	    user = get_env_user();
 	    if(user == NULL)
Index: src/crypto/external/bsd/heimdal/dist/lib/krb5/kuserok.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/krb5/kuserok.c:1.1.1.1.6.1 src/crypto/external/bsd/heimdal/dist/lib/krb5/kuserok.c:1.1.1.1.6.2
--- src/crypto/external/bsd/heimdal/dist/lib/krb5/kuserok.c:1.1.1.1.6.1	Wed Aug 30 07:11:01 2017
+++ src/crypto/external/bsd/heimdal/dist/lib/krb5/kuserok.c	Mon Sep 11 04:43:22 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: kuserok.c,v 1.1.1.1.6.1 2017/08/30 07:11:01 snj Exp $	*/
+/*	$NetBSD: kuserok.c,v 1.1.1.1.6.2 2017/09/11 04:43:22 snj Exp $	*/
 
 /*
  * Copyright (c) 1997 - 2005 Kungliga Tekniska Högskolan
@@ -625,7 +625,7 @@ kuserok_user_k5login_plug_f(void *plug_c
 	if (!_krb5_homedir_access(context))
 	    return KRB5_PLUGIN_NO_HANDLE;
 
-	if (getpwnam_r(luser, &pw, pwbuf, sizeof(pwbuf), &pwd) != 0) {
+	if (rk_getpwnam_r(luser, &pw, pwbuf, sizeof(pwbuf), &pwd) != 0) {
 	    krb5_set_error_message(context, errno, "User unknown (getpwnam_r())");
 	    return KRB5_PLUGIN_NO_HANDLE;
 	}

Index: src/crypto/external/bsd/heimdal/dist/lib/roken/getxxyyy.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/roken/getxxyyy.c:1.2.22.2 src/crypto/external/bsd/heimdal/dist/lib/roken/getxxyyy.c:1.2.22.3
--- src/crypto/external/bsd/heimdal/dist/lib/roken/getxxyyy.c:1.2.22.2	Wed Aug 30 07:11:03 2017
+++ src/crypto/external/bsd/heimdal/dist/lib/roken/getxxyyy.c	Mon Sep 11 04:43:22 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: getxxyyy.c,v 1.2.22.2 2017/08/30 07:11:03 snj Exp $	*/
+/*	$NetBSD: getxxyyy.c,v 1.2.22.3 2017/09/11 04:43:22 snj Exp $	*/
 
 /*
  * Copyright (c) 2011 Kungliga Tekniska Högskolan
@@ -39,30 +39,18 @@
 
 #ifdef TEST_GETXXYYY
 #undef rk_getpwnam_r
+#undef rk_getpwuid_r
 
 ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
 rk_getpwnam_r(const char *, struct passwd *, char *, size_t, struct passwd **);
+ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
+rk_getpwuid_r(uid_t, struct passwd *, char *, size_t, struct passwd **);
 #endif
 
-#if !defined(POSIX_GETPWNAM_R) || defined(TEST_GETXXYYY)
-
-/*
- * At least limit the race between threads
- */
-
-ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
-rk_getpwnam_r(const char *name, struct passwd *pwd, char *buffer,
-	      size_t bufsize, struct passwd **result)
+#if !defined(POSIX_GETPWUID_R) || !defined(POSIX_GETPWNAM_R) || defined(TEST_GETXXYYY)
+static void
+copypw(struct passwd *pwd, char *buffer, size_t bufsize, const struct passwd *p)
 {
-     struct passwd *p;
-     size_t slen, n = 0;
-     
-     *result = NULL;
-
-     p = getpwnam(name);
-     if(p == NULL)
-	 return (errno = ENOENT);
-	 
      memset(pwd, 0, sizeof(*pwd));
 
 #define APPEND(el)					\
@@ -83,6 +71,53 @@ do {							\
      APPEND(pw_gecos);
      APPEND(pw_dir);
      APPEND(pw_shell);
+}
+
+#if !defined(POSIX_GETPWUID_R) || defined(TEST_GETXXYYY)
+/*
+ * At least limit the race between threads
+ */
+
+ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
+rk_getpwnam_r(const char *name, struct passwd *pwd, char *buffer,
+	      size_t bufsize, struct passwd **result)
+{
+     struct passwd *p;
+     size_t slen, n = 0;
+     
+     *result = NULL;
+
+     p = getpwnam(name);
+     if(p == NULL)
+	 return (errno = ENOENT);
+	 
+     copypw(pwd, buffer, bufsize, p);
+
+     *result = pwd;
+
+     return 0;
+}
+
+#if !defined(POSIX_GETPWNAM_R) || defined(TEST_GETXXYYY)
+
+/*
+ * At least limit the race between threads
+ */
+
+ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
+rk_getpwnam_r(const char *name, struct passwd *pwd, char *buffer,
+	      size_t bufsize, struct passwd **result)
+{
+     struct passwd *p;
+     size_t slen, n = 0;
+     
+     *result = NULL;
+
+     p = getpwnam(name);
+     if(p == NULL)
+	 return (errno = ENOENT);
+	 
+     copypw(pwd, buffer, bufsize, p);
 
      *result = pwd;
 
@@ -133,6 +168,18 @@ main(int argc, char **argv)
     if (ret == 0)
 	errx(1, "rk_getpwnam_r no user");
 
+    ret = rk_getpwuid_r(0, &pwd, buf, sizeof(buf), &result);
+    if (ret)
+	errx(1, "rk_getpwuid_r");
+    print_result(result);
+
+    ret = rk_getpwuid_r(0, &pwd, buf, 1, &result);
+    if (ret == 0)
+	errx(1, "rk_getpwuid_r too small buf");
+
+    ret = rk_getpwuid_r(-1234, &pwd, buf, sizeof(buf), &result);
+    if (ret == 0)
+	errx(1, "rk_getpwuid_r no user");
     return 0;
 }
 

Index: src/crypto/external/bsd/heimdal/dist/lib/roken/roken.h.in
diff -u src/crypto/external/bsd/heimdal/dist/lib/roken/roken.h.in:1.2.6.1 src/crypto/external/bsd/heimdal/dist/lib/roken/roken.h.in:1.2.6.2
--- src/crypto/external/bsd/heimdal/dist/lib/roken/roken.h.in:1.2.6.1	Wed Aug 30 07:11:03 2017
+++ src/crypto/external/bsd/heimdal/dist/lib/roken/roken.h.in	Mon Sep 11 04:43:22 2017
@@ -650,6 +650,13 @@ ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
 rk_getpwnam_r(const char *, struct passwd *, char *, size_t, struct passwd **);
 #endif
 
+#ifdef POSIX_GETPWUID_R
+#define rk_getpwuid_r(_u, _pw, _b, _sz, _pwd) getpwuid_r(_u, _pw, _b, _sz, _pwd)
+#else
+ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
+rk_getpwuid_r(uid_t, struct passwd *, char *, size_t, struct passwd **);
+#endif
+
 ROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL get_default_username (void);
 
 #ifndef HAVE_SETEUID

Index: src/crypto/external/bsd/heimdal/include/config.h
diff -u src/crypto/external/bsd/heimdal/include/config.h:1.4.2.1 src/crypto/external/bsd/heimdal/include/config.h:1.4.2.2
--- src/crypto/external/bsd/heimdal/include/config.h:1.4.2.1	Wed Aug 30 07:11:08 2017
+++ src/crypto/external/bsd/heimdal/include/config.h	Mon Sep 11 04:43:22 2017
@@ -471,6 +471,9 @@ static /**/const char *const rcsid[] = {
 /* Define to 1 if you have the `getpwnam_r' function. */
 #define HAVE_GETPWNAM_R 1
 
+/* Define to 1 if you have the `getpwuid_r' function. */
+#define HAVE_GETPWUID_R 1
+
 /* Define to 1 if you have the `getrlimit' function. */
 #define HAVE_GETRLIMIT 1
 
@@ -1470,6 +1473,9 @@ static /**/const char *const rcsid[] = {
 /* Define if getpwnam_r has POSIX flavour. */
 #define POSIX_GETPWNAM_R 1
 
+/* Define if getpwuid_r has POSIX flavour. */
+#define POSIX_GETPWUID_R 1
+
 /* Define if you have the readline package. */
 /* #undef READLINE */
 

Index: src/crypto/external/bsd/heimdal/include/roken.h
diff -u src/crypto/external/bsd/heimdal/include/roken.h:1.3.6.1 src/crypto/external/bsd/heimdal/include/roken.h:1.3.6.2
--- src/crypto/external/bsd/heimdal/include/roken.h:1.3.6.1	Wed Aug 30 07:11:08 2017
+++ src/crypto/external/bsd/heimdal/include/roken.h	Mon Sep 11 04:43:22 2017
@@ -159,6 +159,7 @@ ROKEN_LIB_FUNCTION struct passwd * ROKEN
 ROKEN_LIB_FUNCTION struct passwd * ROKEN_LIB_CALL k_getpwuid (uid_t);
 
 #define rk_getpwnam_r(_n, _pw, _b, _sz, _pwd) getpwnam_r(_n, _pw, _b, _sz, _pwd)
+#define rk_getpwuid_r(_u, _pw, _b, _sz, _pwd) getpwuid_r(_u, _pw, _b, _sz, _pwd)
 
 ROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL get_default_username (void);
 

Added files:

Index: src/crypto/external/bsd/heimdal/dist/cf/check-getpwuid_r-posix.m4
diff -u /dev/null src/crypto/external/bsd/heimdal/dist/cf/check-getpwuid_r-posix.m4:1.1.6.2
--- /dev/null	Mon Sep 11 04:43:23 2017
+++ src/crypto/external/bsd/heimdal/dist/cf/check-getpwuid_r-posix.m4	Mon Sep 11 04:43:22 2017
@@ -0,0 +1,40 @@
+dnl Id
+dnl
+dnl check for getpwuid_r, and if it's posix or not
+
+AC_DEFUN([AC_CHECK_GETPWUID_R_POSIX],[
+AC_FIND_FUNC_NO_LIBS(getpwuid_r,c_r)
+if test "$ac_cv_func_getpwuid_r" = yes; then
+	AC_CACHE_CHECK(if getpwuid_r is posix,ac_cv_func_getpwuid_r_posix,
+	ac_libs="$LIBS"
+	LIBS="$LIBS $LIB_getpwuid_r"
+	AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#define _POSIX_PTHREAD_SEMANTICS
+#include <pwd.h>
+int main(int argc, char **argv)
+{
+	struct passwd pw, *pwd;
+	return getpwuid_r(0, &pw, 0, 0, &pwd) < 0;
+}
+]])],[ac_cv_func_getpwuid_r_posix=yes],[ac_cv_func_getpwuid_r_posix=no],[:])
+LIBS="$ac_libs")
+	AC_CACHE_CHECK(if _POSIX_PTHREAD_SEMANTICS is needed,ac_cv_func_getpwuid_r_posix_def,
+	ac_libs="$LIBS"
+	LIBS="$LIBS $LIB_getpwuid_r"
+	AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <pwd.h>
+int main(int argc, char **argv)
+{
+	struct passwd pw, *pwd;
+	return getpwuid_r(0, &pw, 0, 0, &pwd) < 0;
+}
+]])],[ac_cv_func_getpwuid_r_posix_def=no],[ac_cv_func_getpwuid_r_posix_def=yes],[:])
+LIBS="$ac_libs")
+if test "$ac_cv_func_getpwuid_r_posix" = yes; then
+	AC_DEFINE(POSIX_GETPWUID_R, 1, [Define if getpwuid_r has POSIX flavour.])
+fi
+if test "$ac_cv_func_getpwuid_r_posix" = yes -a "$ac_cv_func_getpwuid_r_posix_def" = yes; then
+	AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Define to get POSIX getpwuid_r in some systems.])
+fi
+fi
+])

Reply via email to