summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/external/libpcre.m48
-rw-r--r--server/man/sssd.conf.5.xml7
-rw-r--r--server/util/usertools.c14
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."