diff options
-rw-r--r-- | server/external/libpcre.m4 | 8 | ||||
-rw-r--r-- | server/man/sssd.conf.5.xml | 7 | ||||
-rw-r--r-- | server/util/usertools.c | 14 |
3 files changed, 27 insertions, 2 deletions
diff --git a/server/external/libpcre.m4 b/server/external/libpcre.m4 index bda7a6b6..5917c8cf 100644 --- a/server/external/libpcre.m4 +++ b/server/external/libpcre.m4 @@ -3,7 +3,13 @@ AC_SUBST(PCRE_OBJ) AC_SUBST(PCRE_LIBS) AC_SUBST(PCRE_CFLAGS) -PKG_CHECK_MODULES(PCRE, libpcre >= 7) +PKG_CHECK_MODULES(PCRE, libpcre) +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])]) AC_CHECK_HEADERS(pcre.h) AC_CHECK_LIB(pcre, pcre_compile, [ PCRE_LIBS="-lpcre" ], [AC_MSG_ERROR([PCRE is required])]) diff --git a/server/man/sssd.conf.5.xml b/server/man/sssd.conf.5.xml index 6c6a310c..f4cb87a1 100644 --- a/server/man/sssd.conf.5.xml +++ b/server/man/sssd.conf.5.xml @@ -137,6 +137,13 @@ which translates to "the name is everything up to the <quote>@</quote> sign, the domain everything after that" </para> + <para> + PLEASE NOTE: the support for non-unique named + subpatterns is not available on all plattforms + (e.g. RHEL5 and SLES10). Only plattforms with + libpcre version 7 or higher can support non-unique + named subpatterns. + </para> </listitem> </varlistentry> <varlistentry> diff --git a/server/util/usertools.c b/server/util/usertools.c index 220b52cb..21348391 100644 --- a/server/util/usertools.c +++ b/server/util/usertools.c @@ -29,6 +29,12 @@ #define NAMES_CONFIG "config/names" +#ifdef HAVE_LIBPCRE_LESSER_THAN_7 +#define NAME_DOMAIN_PATTERN_OPTIONS (PCRE_EXTENDED) +#else +#define NAME_DOMAIN_PATTERN_OPTIONS (PCRE_DUPNAMES | PCRE_EXTENDED) +#endif + char *get_username_from_uid(TALLOC_CTX *mem_ctx, uid_t uid) { char *username; @@ -63,6 +69,12 @@ int sss_names_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb, struct sss_names ret = ENOMEM; goto done; } +#ifdef HAVE_LIBPCRE_LESSER_THAN_7 + DEBUG(2, ("This binary was build with a version of libpcre that does " + "not support non-unique named subpatterns.\n")); + DEBUG(2, ("Please make sure that your pattern [%s] only contains " + "subpatterns with a unique name.\n", ctx->re_pattern)); +#endif } ret = confdb_get_string(cdb, ctx, NAMES_CONFIG, @@ -78,7 +90,7 @@ int sss_names_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb, struct sss_names } ctx->re = pcre_compile2(ctx->re_pattern, - PCRE_DUPNAMES | PCRE_EXTENDED, + NAME_DOMAIN_PATTERN_OPTIONS, &errval, &errstr, &errpos, NULL); if (!ctx->re) { DEBUG(1, ("Invalid Regular Expression pattern at position %d." |