git: 6cf646c7a526 - main - security/sssd: implement detection of mempcpy at configure-time

From: Mikhail Teterin <mi_at_FreeBSD.org>
Date: Wed, 23 Feb 2022 05:04:42 UTC
The branch main has been updated by mi:

URL: https://cgit.FreeBSD.org/ports/commit/?id=6cf646c7a526c6c4ca21b2faa9c10b3970f72850

commit 6cf646c7a526c6c4ca21b2faa9c10b3970f72850
Author:     Mikhail Teterin <mi@FreeBSD.org>
AuthorDate: 2022-02-23 04:59:36 +0000
Commit:     Mikhail Teterin <mi@FreeBSD.org>
CommitDate: 2022-02-23 04:59:36 +0000

    security/sssd: implement detection of mempcpy at configure-time
    
    Newer versions of FreeBSD provide mempcpy, which conflicts with the port's
    own implementation -- meant for the older versions.
    
    While here, fix compilation with newer Python -- not just 3.7 -- and relax
    the requirement for Python-version. This necessitated bumping PORTREVISION --
    because the default Python is 3.8 nowadays.
    
    Also, define TEST_TARGET -- and fix one of the test to compile. This needs
    further work, however.
    
    PR:     257866
---
 security/sssd/Makefile                             |  6 ++--
 security/sssd/files/patch-configure.ac             | 25 +++++++++++--
 security/sssd/files/patch-src__external__python.m4 |  9 +++++
 .../patch-src__tests__cmocka__test_negcache_2.c    | 42 ++++++++++++++++++++++
 ...__util__crypto__libcrypto__crypto_sha512crypt.c |  4 ++-
 ...patch-src__util__crypto__nss__nss_sha512crypt.c |  4 ++-
 6 files changed, 83 insertions(+), 7 deletions(-)

diff --git a/security/sssd/Makefile b/security/sssd/Makefile
index 3e6f3d311f3a..7df225a4d755 100644
--- a/security/sssd/Makefile
+++ b/security/sssd/Makefile
@@ -2,7 +2,7 @@
 
 PORTNAME=	sssd
 PORTVERSION=	1.16.5
-PORTREVISION=	4
+PORTREVISION=	5
 CATEGORIES=	security
 MASTER_SITES=	https://releases.pagure.org/SSSD/${PORTNAME}/
 
@@ -60,8 +60,10 @@ PLIST_SUB=	PYTHON_VER=${PYTHON_VER}
 MAKE_ENV+=	LINGUAS="bg de eu es fr hu id it ja nb nl pl pt ru sv tg tr uk zh_CN zh_TW"
 SUB_FILES=	pkg-message
 
+TEST_TARGET=	check
+
 USES=		autoreconf cpe gettext gmake iconv libtool pathfix pkgconfig \
-		python:3.7 shebangfix gssapi:mit
+		python:3.6+ shebangfix gssapi:mit
 USE_LDCONFIG=	yes
 USE_OPENLDAP=	yes
 INSTALL_TARGET=	install-strip
diff --git a/security/sssd/files/patch-configure.ac b/security/sssd/files/patch-configure.ac
index 4139f9c873e5..b62547432984 100644
--- a/security/sssd/files/patch-configure.ac
+++ b/security/sssd/files/patch-configure.ac
@@ -1,4 +1,4 @@
---- configure.ac.orig	2020-03-17 13:31:28 UTC
+--- configure.ac	2020-03-17 13:31:28 UTC
 +++ configure.ac
 @@ -44,8 +44,6 @@ AM_CONDITIONAL([HAVE_GCC], [test "$ac_cv_prog_gcc" = y
  AC_CHECK_HEADERS(stdint.h dlfcn.h)
@@ -9,10 +9,29 @@
  m4_include([src/build_macros.m4])
  BUILD_WITH_SHARED_BUILD_DIR
  
-@@ -356,8 +354,8 @@ them please use argument --without-python3-bindings wh
+@@ -62,4 +60,18 @@
+
+ AM_CONDITIONAL([HAVE_PTHREAD], [test x"$HAVE_PTHREAD" != "x"])
++
++saved_CFLAGS="$CFLAGS"
++CFLAGS="-Werror"
++AC_COMPILE_IFELSE(
++    [AC_LANG_PROGRAM([[#include <string.h>]],
++        [[(void)mempcpy(NULL, NULL, 0);]])],
++    [AC_DEFINE([HAVE_MEMPCPY], [1], [mempcpy() available])
++     HAVE_MEMPCPY=1
++    ],
++    [AC_MSG_WARN([mempcpy() not found, will use private implementation])])
++
++CFLAGS="$saved_CFLAGS"
++
++AM_CONDITIONAL([HAVE_MEMPCPY], [test x"$HAVE_MEMPCPY" != "x"])
+
+ # Check library for the timer_create function
+@@ -356,8 +358,8 @@ them please use argument --without-python3-bindings wh
      AM_CHECK_PYTHON_HEADERS([],
                              AC_MSG_ERROR([Could not find python3 headers]))
- 
+
 -    AC_SUBST([py3execdir], [$pyexecdir])
 -    AC_SUBST([python3dir], [$pythondir])
 +    AC_SUBST([py3execdir], [$(eval echo $pyexecdir)])
diff --git a/security/sssd/files/patch-src__external__python.m4 b/security/sssd/files/patch-src__external__python.m4
new file mode 100644
index 000000000000..8453814e053c
--- /dev/null
+++ b/security/sssd/files/patch-src__external__python.m4
@@ -0,0 +1,9 @@
+--- src/external/python.m4	2020-03-17 09:31:28.000000000 -0400
++++ src/external/python.m4	2022-02-22 22:55:04.425467000 -0500
+@@ -37,5 +37,5 @@
+         PYTHON_DLOPEN_LIB="` $PYTHON_CONFIG --libs --embed | grep -o -- '-lpython@<:@^ @:>@*' |sed -e 's/^-l/lib/'`"
+         if test x"$PYTHON_DLOPEN_LIB" != x; then
+-            python_lib_path="` $PYTHON_CONFIG --ldflags | grep -o -- '-L/@<:@^ @:>@*' | sed -e 's/^-L//'`"
++            python_lib_path="` $PYTHON_CONFIG --ldflags | sed -n 's/.*-L\(@<:@^ @:>@*\).*/\1/p'`"
+             if test x"$python_lib_path" != x; then
+                 PYTHON_DLOPEN_LIB=$python_lib_path"/"$PYTHON_DLOPEN_LIB
diff --git a/security/sssd/files/patch-src__tests__cmocka__test_negcache_2.c b/security/sssd/files/patch-src__tests__cmocka__test_negcache_2.c
new file mode 100644
index 000000000000..81e1790c4ce6
--- /dev/null
+++ b/security/sssd/files/patch-src__tests__cmocka__test_negcache_2.c
@@ -0,0 +1,42 @@
+--- src/tests/cmocka/test_negcache_2.c	2020-03-17 09:31:28.000000000 -0400
++++ src/tests/cmocka/test_negcache_2.c	2022-02-22 23:48:57.315866000 -0500
+@@ -116,12 +116,8 @@
+ {
+     int i;
+-    FILE *passwd_file;
+     const struct passwd *pwd;
+ 
+-    passwd_file = fopen("/etc/passwd", "r");
+-    assert_non_null(passwd_file);
+-
+     for (i = 0; i < 2; /*no-op*/) {
+-        pwd = fgetpwent(passwd_file);
++        pwd = getpwent();
+         assert_non_null(pwd);
+         if (pwd->pw_uid == 0) {
+@@ -135,5 +131,4 @@
+     }
+ 
+-    fclose(passwd_file);
+ }
+ 
+@@ -141,12 +136,8 @@
+ {
+     int i;
+-    FILE *group_file;
+     const struct group *grp;
+ 
+-    group_file = fopen("/etc/group", "r");
+-    assert_non_null(group_file);
+-
+     for (i = 0; i < 2; /* no-op */) {
+-        grp = fgetgrent(group_file);
++        grp = getgrent();
+         assert_non_null(grp);
+         if (grp->gr_gid == 0) {
+@@ -160,5 +151,4 @@
+     }
+ 
+-    fclose(group_file);
+ }
+ 
diff --git a/security/sssd/files/patch-src__util__crypto__libcrypto__crypto_sha512crypt.c b/security/sssd/files/patch-src__util__crypto__libcrypto__crypto_sha512crypt.c
index 323eef4fb139..dbea252ea1cd 100644
--- a/security/sssd/files/patch-src__util__crypto__libcrypto__crypto_sha512crypt.c
+++ b/security/sssd/files/patch-src__util__crypto__libcrypto__crypto_sha512crypt.c
@@ -2,15 +2,17 @@ diff --git src/util/crypto/libcrypto/crypto_sha512crypt.c src/util/crypto/libcry
 index 2275ccd96..c1e418917 100644
 --- src/util/crypto/libcrypto/crypto_sha512crypt.c
 +++ src/util/crypto/libcrypto/crypto_sha512crypt.c
-@@ -30,6 +30,11 @@
+@@ -30,6 +30,13 @@
  
  #include "sss_openssl.h"
  
++#ifndef HAVE_MEMPCPY
 +void *
 +mempcpy (void *dest, const void *src, size_t n)
 +{
 +  return (char *) memcpy (dest, src, n) + n;
 +}
++#endif /* HAVE_MEMPCPY */
  
  /* Define our magic string to mark salt for SHA512 "encryption" replacement. */
  const char sha512_salt_prefix[] = "$6$";
diff --git a/security/sssd/files/patch-src__util__crypto__nss__nss_sha512crypt.c b/security/sssd/files/patch-src__util__crypto__nss__nss_sha512crypt.c
index aa1efee665b3..fbce0c0e298f 100644
--- a/security/sssd/files/patch-src__util__crypto__nss__nss_sha512crypt.c
+++ b/security/sssd/files/patch-src__util__crypto__nss__nss_sha512crypt.c
@@ -2,15 +2,17 @@ diff --git src/util/crypto/nss/nss_sha512crypt.c src/util/crypto/nss/nss_sha512c
 index 4d0594d9f..49801222d 100644
 --- src/util/crypto/nss/nss_sha512crypt.c
 +++ src/util/crypto/nss/nss_sha512crypt.c
-@@ -29,6 +29,12 @@
+@@ -29,6 +29,14 @@
  #include <sechash.h>
  #include <pk11func.h>
  
++#ifndef HAVE_MEMPCPY
 +static void *
 +mempcpy (void *dest, const void *src, size_t n)
 +{
 +  return (char *) memcpy (dest, src, n) + n;
 +}
++#endif /* HAVE_MEMPCPY */
 +
  /* Define our magic string to mark salt for SHA512 "encryption" replacement. */
  const char sha512_salt_prefix[] = "$6$";