URL: https://github.com/SSSD/sssd/pull/5754 Author: alexey-tikhonov Title: #5754: Sources cleanup. Action: synchronized
To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/5754/head:pr5754 git checkout pr5754
From 6fa01285075beca5160473ef19d48d402e8072e8 Mon Sep 17 00:00:00 2001 From: Alexey Tikhonov <atikh...@redhat.com> Date: Wed, 18 Aug 2021 18:33:02 +0200 Subject: [PATCH 1/2] BUILD: get rid of PCRE support :relnote: This release removes pcre1 support. pcre2 is used unconditionally. Resolves: https://github.com/SSSD/sssd/issues/5768 --- contrib/ci/deps.sh | 2 +- contrib/ci/sssd.supp | 12 ----- src/external/libpcre.m4 | 38 +++------------ src/util/sss_regexp.c | 105 +--------------------------------------- src/util/sss_regexp.h | 25 +++------- src/util/usertools.c | 19 -------- 6 files changed, 15 insertions(+), 186 deletions(-) diff --git a/contrib/ci/deps.sh b/contrib/ci/deps.sh index ec471533d9..400fd91912 100644 --- a/contrib/ci/deps.sh +++ b/contrib/ci/deps.sh @@ -127,7 +127,7 @@ if [[ "$DISTRO_BRANCH" == -debian-* ]]; then libnl-3-dev libnl-route-3-dev libpam0g-dev - libpcre3-dev + libpcre2-dev libpopt-dev libsasl2-dev libselinux1-dev diff --git a/contrib/ci/sssd.supp b/contrib/ci/sssd.supp index 0c61e08468..6d5a9f8aff 100644 --- a/contrib/ci/sssd.supp +++ b/contrib/ci/sssd.supp @@ -59,18 +59,6 @@ } # False positive - pcre_free is called in sss_names_ctx_destructor -{ - sssd-leak-sss_names - Memcheck:Leak - fun:malloc - fun:pcre_compile2 - fun:sss_regexp_pcre1_compile - fun:sss_regexp_new - fun:sss_names_init_from_args - ... -} - -# And the same, as above, for pcre2 { sssd-leak-sss_names_pcre2 Memcheck:Leak diff --git a/src/external/libpcre.m4 b/src/external/libpcre.m4 index f8a997ddf3..d4d50e8b02 100644 --- a/src/external/libpcre.m4 +++ b/src/external/libpcre.m4 @@ -6,11 +6,6 @@ PKG_CHECK_MODULES( [libpcre2-8], [ found_libpcre=yes - AC_DEFINE( - [HAVE_LIBPCRE2], - 1, - [Define if libpcre2 is present] - ) AC_DEFINE( [PCRE2_CODE_UNIT_WIDTH], 8, @@ -18,36 +13,17 @@ PKG_CHECK_MODULES( ) ], [ - PKG_CHECK_MODULES( - [PCRE], - [libpcre], - [ - found_libpcre=yes - PKG_CHECK_EXISTS( - libpcre >= 7, - [AC_MSG_NOTICE([PCRE version is 7 or higher])], - [ - AC_MSG_NOTICE([PCRE version is below 7]) - AC_DEFINE( - [HAVE_LIBPCRE_LESSER_THAN_7], - 1, - [Define if libpcre version is less than 7] - ) - ] - ) - ], - [found_libpcre=no] - ) + found_libpcre=no ] ) SSS_AC_EXPAND_LIB_DIR() AS_IF([test x"$found_libpcre" != xyes], - [AC_CHECK_HEADERS([pcre.h], - [AC_CHECK_LIB([pcre], - [pcre_compile], - [PCRE_LIBS="-L$sss_extra_libdir -lpcre"], - [AC_MSG_ERROR([No usable PCRE library found])], + [AC_CHECK_HEADERS([pcre2.h], + [AC_CHECK_LIB([libpcre2-8], + [pcre2_compile], + [PCRE_LIBS="-L$sss_extra_libdir -lpcre2-8"], + [AC_MSG_ERROR([No usable PCRE2 library found])], [-L$sss_extra_libdir])], - [AC_MSG_ERROR([pcre header files are not installed])])] + [AC_MSG_ERROR([pcre2 header files are not installed])])] ) diff --git a/src/util/sss_regexp.c b/src/util/sss_regexp.c index 1439c8c455..3fc1a7b8b3 100644 --- a/src/util/sss_regexp.c +++ b/src/util/sss_regexp.c @@ -32,7 +32,6 @@ #define EOK 0 #endif -#ifdef HAVE_LIBPCRE2 /* * sss_regexp with pcre2 */ @@ -124,102 +123,13 @@ static int sss_regexp_pcre2_get_named_substring(sss_regexp_t *self, return rc; } -#else /* !HAVE_LIBPCRE2 */ -/* - * sss_regexp with pcre - */ -struct _sss_regexp_t { - pcre *re; - int ovector[SSS_REGEXP_OVEC_SIZE]; - const char *matched_string; - const char *subject; -}; - -static int sss_regexp_pcre1_destroy(sss_regexp_t *self) -{ - if (self->re) { - pcre_free(self->re); - } - if (self->matched_string) { - pcre_free_substring(self->matched_string); - } - return 0; -} - -static int sss_regexp_pcre1_compile(sss_regexp_t *self, - const char *pattern, - int options) -{ - int errorcode; - const char *errormsg; - int erroroffset; - - self->re = pcre_compile2(pattern, - options, - &errorcode, - &errormsg, - &erroroffset, - NULL); - if (self->re == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, "Invalid Regular Expression pattern " - "at position %d. (Error: %d [%s])\n", erroroffset, errorcode, errormsg); - return errorcode; - } - return EOK; -} - -static int sss_regexp_pcre1_match(sss_regexp_t *self, - const char *subject, - int startoffset, - int options) -{ - if (!self->re) { - return SSS_REGEXP_ERROR_NOMATCH; - } - self->subject = subject; - return pcre_exec(self->re, - NULL, - subject, - strlen(subject), - startoffset, - options, - self->ovector, - SSS_REGEXP_OVEC_SIZE); -} - -static int sss_regexp_pcre1_get_named_substring(sss_regexp_t *self, - const char *name, - const char **value) -{ - int rc; - - if (self->matched_string) { - pcre_free_substring(self->matched_string); - self->matched_string = NULL; - } - rc = pcre_get_named_substring(self->re, - self->subject, - self->ovector, - SSS_REGEXP_OVEC_SIZE, - name, - &self->matched_string); - *value = self->matched_string; - return rc; -} - -#endif /* !HAVE_LIBPCRE2 */ - /* * sss_regexp talloc destructor */ static int sss_regexp_destroy(sss_regexp_t *self) { if (!self) return 0; -#ifdef HAVE_LIBPCRE2 return sss_regexp_pcre2_destroy(self); -#else - return sss_regexp_pcre1_destroy(self); -#endif } /* @@ -239,15 +149,9 @@ int sss_regexp_new(TALLOC_CTX *mem_ctx, } talloc_set_destructor(self, sss_regexp_destroy); -#ifdef HAVE_LIBPCRE2 ret = sss_regexp_pcre2_compile(self, pattern, options); -#else - ret = sss_regexp_pcre1_compile(self, - pattern, - options); -#endif if (ret != EOK) { talloc_free(self); self = NULL; @@ -266,11 +170,7 @@ int sss_regexp_match(sss_regexp_t *self, { if (!self || !self->re || !subject) return SSS_REGEXP_ERROR_NOMATCH; -#ifdef HAVE_LIBPCRE2 return sss_regexp_pcre2_match(self, subject, startoffset, options); -#else - return sss_regexp_pcre1_match(self, subject, startoffset, options); -#endif } @@ -285,9 +185,6 @@ int sss_regexp_get_named_substring(sss_regexp_t *self, *value = NULL; return SSS_REGEXP_ERROR_NOMATCH; } -#ifdef HAVE_LIBPCRE2 + return sss_regexp_pcre2_get_named_substring(self, name, value); -#else - return sss_regexp_pcre1_get_named_substring(self, name, value); -#endif } diff --git a/src/util/sss_regexp.h b/src/util/sss_regexp.h index 6ecc38fec6..2b29361b37 100644 --- a/src/util/sss_regexp.h +++ b/src/util/sss_regexp.h @@ -30,25 +30,12 @@ /* regexp class */ typedef struct _sss_regexp_t sss_regexp_t; -#ifdef HAVE_LIBPCRE2 -# include <pcre2.h> -# define SSS_REGEXP_ERROR_NOMATCH PCRE2_ERROR_NOMATCH -# define SSS_REGEXP_ERROR_NOMEMORY PCRE2_ERROR_NOMEMORY -# define SSS_REGEXP_NOTEMPTY PCRE2_NOTEMPTY -# define SSS_REGEXP_EXTENDED PCRE2_EXTENDED -# define SSS_REGEXP_DUPNAMES PCRE2_DUPNAMES -#else /* ! HAVE_LIBPCRE2 */ -# include <pcre.h> -# define SSS_REGEXP_ERROR_NOMATCH PCRE_ERROR_NOMATCH -# define SSS_REGEXP_ERROR_NOMEMORY PCRE_ERROR_NOMEMORY -# define SSS_REGEXP_NOTEMPTY PCRE_NOTEMPTY -# define SSS_REGEXP_EXTENDED PCRE_EXTENDED -# ifdef HAVE_LIBPCRE_LESSER_THAN_7 -# define SSS_REGEXP_DUPNAMES 0 -# else -# define SSS_REGEXP_DUPNAMES PCRE_DUPNAMES -# endif -#endif /* HAVE_LIBPCRE2 */ +#include <pcre2.h> +#define SSS_REGEXP_ERROR_NOMATCH PCRE2_ERROR_NOMATCH +#define SSS_REGEXP_ERROR_NOMEMORY PCRE2_ERROR_NOMEMORY +#define SSS_REGEXP_NOTEMPTY PCRE2_NOTEMPTY +#define SSS_REGEXP_EXTENDED PCRE2_EXTENDED +#define SSS_REGEXP_DUPNAMES PCRE2_DUPNAMES /* how to use sss_regexp: * diff --git a/src/util/usertools.c b/src/util/usertools.c index c2adc64fea..8c2ed4e2de 100644 --- a/src/util/usertools.c +++ b/src/util/usertools.c @@ -63,14 +63,6 @@ static errno_t get_id_provider_default_re(TALLOC_CTX *mem_ctx, const char *conf_path, char **re_pattern) { -#ifdef HAVE_LIBPCRE_LESSER_THAN_7 - DEBUG(SSSDBG_MINOR_FAILURE, - "The libpcre version on this system is too old. Only " - "the user@DOMAIN name fully qualified name format will " - "be supported\n"); - *re_pattern = NULL; - return EOK; -#else int ret; size_t c; char *id_provider = NULL; @@ -111,7 +103,6 @@ static errno_t get_id_provider_default_re(TALLOC_CTX *mem_ctx, done: talloc_free(id_provider); return ret; -#endif } static errno_t sss_fqnames_init(struct sss_names_ctx *nctx, const char *fq_fmt) @@ -236,16 +227,6 @@ int sss_names_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb, ret = ENOMEM; goto done; } -#ifdef HAVE_LIBPCRE_LESSER_THAN_7 - } else { - DEBUG(SSSDBG_OP_FAILURE, - "This binary was build with a version of libpcre that does " - "not support non-unique named subpatterns.\n"); - DEBUG(SSSDBG_OP_FAILURE, - "Please make sure that your pattern [%s] only contains " - "subpatterns with a unique name and uses " - "the Python syntax (?P<name>).\n", re_pattern); -#endif } if (conf_path != NULL) { From 6e0afe6bba799a3a869f3cebb55c161a1d547c20 Mon Sep 17 00:00:00 2001 From: Alexey Tikhonov <atikh...@redhat.com> Date: Wed, 18 Aug 2021 19:53:44 +0200 Subject: [PATCH 2/2] UNICODE: drop support of glib2 for Unicode processing :relnote: This release drops support of `--with-unicode-lib` configure option. `libunistring` will be used unconditionally for Unicode processing. Resolves: https://github.com/SSSD/sssd/issues/5767 --- configure.ac | 12 ++------- contrib/ci/deps.sh | 2 ++ contrib/sssd.spec.in | 3 ++- src/conf_macros.m4 | 20 --------------- src/external/glib.m4 | 11 --------- src/util/sss_tc_utf8.c | 34 +++----------------------- src/util/sss_utf8.c | 55 ------------------------------------------ 7 files changed, 10 insertions(+), 127 deletions(-) delete mode 100644 src/external/glib.m4 diff --git a/configure.ac b/configure.ac index c14a59eef1..60bcdfe832 100644 --- a/configure.ac +++ b/configure.ac @@ -238,16 +238,8 @@ AM_CONDITIONAL([BUILD_WITH_LIBSECRET], AM_CONDITIONAL([BUILD_WITH_LIBCURL], [test x"$have_curlopt_unix_sockpath" = xyes]) -WITH_UNICODE_LIB -AS_IF([test x$unicode_lib = xlibunistring], [ - m4_include([src/external/libunistring.m4]) - AC_DEFINE_UNQUOTED(HAVE_LIBUNISTRING, 1, [Using libunistring for unicode]) - UNICODE_LIBS=$UNISTRING_LIBS -], [ - m4_include([src/external/glib.m4]) - AC_DEFINE_UNQUOTED(HAVE_GLIB2, 1, [Using glib2 for unicode]) - UNICODE_LIBS=$GLIB2_LIBS -]) +m4_include([src/external/libunistring.m4]) +UNICODE_LIBS=$UNISTRING_LIBS AC_SUBST(UNICODE_LIBS) WITH_LIBNL diff --git a/contrib/ci/deps.sh b/contrib/ci/deps.sh index 400fd91912..a053b51493 100644 --- a/contrib/ci/deps.sh +++ b/contrib/ci/deps.sh @@ -48,6 +48,7 @@ if [[ "$DISTRO_BRANCH" == -redhat-* ]]; then curl-devel krb5-server krb5-workstation + libunistring-devel ) if [[ "$DISTRO_BRANCH" == -redhat-fedora-31* || @@ -175,6 +176,7 @@ if [[ "$DISTRO_BRANCH" == -debian-* ]]; then gnutls-bin softhsm2 libp11-kit-dev + libunistring-dev ) DEPS_INTGCHECK_SATISFIED=true fi diff --git a/contrib/sssd.spec.in b/contrib/sssd.spec.in index e2877b64b1..df75652aa1 100644 --- a/contrib/sssd.spec.in +++ b/contrib/sssd.spec.in @@ -79,7 +79,6 @@ BuildRequires: findutils BuildRequires: gcc BuildRequires: gdm-pam-extensions-devel BuildRequires: gettext-devel -BuildRequires: glib2-devel # required for p11_child smartcard tests BuildRequires: gnutls-utils BuildRequires: jansson-devel @@ -98,6 +97,8 @@ BuildRequires: libtalloc-devel BuildRequires: libtdb-devel BuildRequires: libtevent-devel BuildRequires: libtool +BuildRequires: libunistring +BuildRequires: libunistring-devel BuildRequires: libuuid-devel BuildRequires: libxml2 BuildRequires: libxslt diff --git a/src/conf_macros.m4 b/src/conf_macros.m4 index 0a1e6dd8fc..b77f8a3797 100644 --- a/src/conf_macros.m4 +++ b/src/conf_macros.m4 @@ -592,26 +592,6 @@ AC_ARG_ENABLE([all-experimental-features], [build_all_experimental_features=no]) -AC_DEFUN([WITH_UNICODE_LIB], - [ AC_ARG_WITH([unicode-lib], - [AC_HELP_STRING([--with-unicode-lib=<library>], - [Which library to use for Unicode processing (libunistring, glib2) [glib2]] - ) - ] - ) - unicode_lib="glib2" - if test x"$with_unicode_lib" != x; then - unicode_lib=$with_unicode_lib - fi - - if test x"$unicode_lib" != x"libunistring" -a x"$unicode_lib" != x"glib2"; then - AC_MSG_ERROR([Unsupported Unicode library]) - fi - - AM_CONDITIONAL([WITH_LIBUNISTRING], test x"$unicode_lib" = x"libunistring") - AM_CONDITIONAL([WITH_GLIB], test x"$unicode_lib" = x"glib2") - ]) - AC_DEFUN([WITH_APP_LIBS], [ AC_ARG_WITH([app-libs], [AC_HELP_STRING([--with-app-libs=<path>], diff --git a/src/external/glib.m4 b/src/external/glib.m4 deleted file mode 100644 index 3db25136b6..0000000000 --- a/src/external/glib.m4 +++ /dev/null @@ -1,11 +0,0 @@ -PKG_CHECK_MODULES([GLIB2],[glib-2.0]) - -if test x$has_glib2 != xno; then - SAFE_LIBS="$LIBS" - LIBS="$GLIB2_LIBS" - - AC_CHECK_FUNC([g_utf8_validate], - AC_DEFINE([HAVE_G_UTF8_VALIDATE], [1], - [Define if g_utf8_validate exists])) - LIBS="$SAFE_LIBS" -fi diff --git a/src/util/sss_tc_utf8.c b/src/util/sss_tc_utf8.c index 518a61a203..75d5c7136a 100644 --- a/src/util/sss_tc_utf8.c +++ b/src/util/sss_tc_utf8.c @@ -20,47 +20,21 @@ #include "config.h" -#ifdef HAVE_LIBUNISTRING #include <stdlib.h> #include <unistr.h> -#elif defined(HAVE_GLIB2) -#include <glib.h> -#endif +#include <unicase.h> #include <talloc.h> #include "util/util.h" -#ifdef HAVE_LIBUNISTRING -static void sss_utf8_free(char *ptr) -{ - free(ptr); -} -#elif defined(HAVE_GLIB2) -static void sss_utf8_free(char *ptr) -{ - g_free(ptr); -} -#else -#error No unicode library -#endif - /* Expects and returns NULL-terminated string; * result must be freed with sss_utf8_free() */ -#ifdef HAVE_LIBUNISTRING -static char *sss_utf8_tolower(const char *s) +static inline char *sss_utf8_tolower(const char *s) { size_t llen; - return u8_tolower((const uint8_t *)s, strlen(s) + 1, NULL, NULL, NULL, &llen); -} -#elif defined(HAVE_GLIB2) -static char *sss_utf8_tolower(const char *s) -{ - return g_utf8_strdown((const gchar *)s, -1); + return (char *)u8_tolower((const uint8_t *)s, strlen(s) + 1, NULL, NULL, NULL, &llen); } -#else -#error No unicode library -#endif char *sss_tc_utf8_str_tolower(TALLOC_CTX *mem_ctx, const char *s) { @@ -70,7 +44,7 @@ char *sss_tc_utf8_str_tolower(TALLOC_CTX *mem_ctx, const char *s) lower = sss_utf8_tolower(s); if (lower) { ret = talloc_strdup(mem_ctx, lower); - sss_utf8_free(lower); + free(lower); } return ret; diff --git a/src/util/sss_utf8.c b/src/util/sss_utf8.c index 57e2ea38e9..ac2c1ff7e1 100644 --- a/src/util/sss_utf8.c +++ b/src/util/sss_utf8.c @@ -25,17 +25,12 @@ #include <string.h> #include <errno.h> -#ifdef HAVE_LIBUNISTRING #include <stdlib.h> #include <unistr.h> #include <unicase.h> -#elif defined(HAVE_GLIB2) -#include <glib.h> -#endif #include "sss_utf8.h" -#ifdef HAVE_LIBUNISTRING bool sss_utf8_check(const uint8_t *s, size_t n) { if (u8_check(s, n) == NULL) { @@ -44,17 +39,6 @@ bool sss_utf8_check(const uint8_t *s, size_t n) return false; } -#elif defined(HAVE_GLIB2) -bool sss_utf8_check(const uint8_t *s, size_t n) -{ - return g_utf8_validate((const gchar *)s, n, NULL); -} - -#else -#error No unicode library -#endif - -#ifdef HAVE_LIBUNISTRING errno_t sss_utf8_case_eq(const uint8_t *s1, const uint8_t *s2) { @@ -87,45 +71,6 @@ errno_t sss_utf8_case_eq(const uint8_t *s1, const uint8_t *s2) return ENOMATCH; } -#elif defined(HAVE_GLIB2) -errno_t sss_utf8_case_eq(const uint8_t *s1, const uint8_t *s2) -{ - gchar *gs1; - gchar *gs2; - gssize n1, n2; - gint gret; - errno_t ret; - - n1 = g_utf8_strlen((const gchar *)s1, -1); - n2 = g_utf8_strlen((const gchar *)s2, -1); - - gs1 = g_utf8_casefold((const gchar *)s1, n1); - if (gs1 == NULL) { - return ENOMEM; - } - - gs2 = g_utf8_casefold((const gchar *)s2, n2); - if (gs2 == NULL) { - return ENOMEM; - } - - gret = g_utf8_collate(gs1, gs2); - if (gret == 0) { - ret = EOK; - } else { - ret = ENOMATCH; - } - - g_free(gs1); - g_free(gs2); - - return ret; -} - -#else -#error No unicode library -#endif - bool sss_string_equal(bool cs, const char *s1, const char *s2) { if (cs) {
_______________________________________________ sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedorahosted.org/archives/list/sssd-devel@lists.fedorahosted.org Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure