[SSSD] [PATCH] Add provider specific default regular expressions

Sumit Bose sbose at redhat.com
Thu Sep 20 09:07:43 UTC 2012


On Thu, Sep 20, 2012 at 10:19:38AM +0200, Pavel Březina wrote:
> On 09/19/2012 09:49 PM, Sumit Bose wrote:
> >Hi,
> >
> >this patch add specific default values for the regular expression to
> >split user names for the AD and IPA provider. In a perfect patch the
> >ID provider itself would report back what he would like to use as a
> >regular expression, but all solutions I could think of would require
> >some bigger changes to the startup process which are not suitable at
> >this stage of the 1.9 development. So I picked a more direct solution.
> >
> >bye,
> >Sumit
> >
> >@@ -130,6 +191,8 @@ int sss_names_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb,
> >  #endif
> >      }
> >
> >+    DEBUG(SSSDBG_TRACE_INTERNAL, ("Using re [%s].\n", ctx->re_pattern));
> >+
> >      ret = confdb_get_string(cdb, ctx, conf_path,
> >                              CONFDB_FULL_NAME_FORMAT, NULL, &ctx->fq_fmt);
> >      if (ret != EOK) goto done;
> >-- 1.7.7.6
> 
> Hi,
> can you consider using a lower debug level here? Maybe
> SSSDBG_CONF_SETTINGS? I think this information can be useful when
> helping customers, so we should make sure it is present in the logs.

sure, makes sense. New version attached.

> 
> Otherwise the code looks good.

Thank you for the review.

bye,
Sumit
> _______________________________________________
> sssd-devel mailing list
> sssd-devel at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
-------------- next part --------------
From becceae299e53ae15aa76364c94e2d993696d79e Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose at redhat.com>
Date: Wed, 19 Sep 2012 21:28:28 +0200
Subject: [PATCH] Add provider specific default regular expressions

Fixes https://fedorahosted.org/sssd/ticket/1524
---
 src/util/usertools.c |   63 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 63 insertions(+), 0 deletions(-)

diff --git a/src/util/usertools.c b/src/util/usertools.c
index ea640fb30a9fd427d1cd90e8873c4e5fff45e403..56340abb5ae72e1216b584c48e7540121f4df61b 100644
--- a/src/util/usertools.c
+++ b/src/util/usertools.c
@@ -75,6 +75,58 @@ static int sss_names_ctx_destructor(struct sss_names_ctx *snctx)
     return 0;
 }
 
+#define IPA_AD_DEFAULT_RE "(((?P<domain>[^\\\\]+)\\\\(?P<name>.+$))|" \
+                         "((?P<name>[^@]+)@(?P<domain>.+$))|" \
+                         "(^(?P<name>[^@\\\\]+)$))"
+
+static errno_t get_id_provider_default_re(TALLOC_CTX *mem_ctx,
+                                          struct confdb_ctx *cdb,
+                                          const char *conf_path,
+                                          char **re_pattern)
+{
+    int ret;
+    size_t c;
+    char *id_provider = NULL;
+
+    struct provider_default_re {
+        const char *name;
+        const char *re;
+    } provider_default_re[] = {{"ipa", IPA_AD_DEFAULT_RE},
+                               {"ad", IPA_AD_DEFAULT_RE},
+                               {NULL, NULL}};
+
+    ret = confdb_get_string(cdb, mem_ctx, conf_path, CONFDB_DOMAIN_ID_PROVIDER,
+                            NULL, &id_provider);
+    if (ret != EOK) {
+        DEBUG(SSSDBG_OP_FAILURE, ("Failed to read ID provider " \
+                                  "from conf db.\n"));
+        ret = ret;
+        goto done;
+    }
+
+    if (id_provider == NULL) {
+        *re_pattern = NULL;
+    } else {
+        for (c = 0; provider_default_re[c].name != NULL; c++) {
+            if (strcmp(id_provider, provider_default_re[c].name) == 0) {
+                *re_pattern = talloc_strdup(mem_ctx, provider_default_re[c].re);
+                if (*re_pattern == NULL) {
+                    DEBUG(SSSDBG_OP_FAILURE, ("talloc_strdup failed.\n"));
+                    ret = ENOMEM;
+                    goto done;
+                }
+                break;
+            }
+        }
+    }
+
+    ret = EOK;
+
+done:
+    talloc_free(id_provider);
+    return ret;
+}
+
 int sss_names_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb,
                    const char *domain, struct sss_names_ctx **out)
 {
@@ -113,6 +165,15 @@ int sss_names_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb,
         if (ret != EOK) goto done;
     }
 
+    if (ctx->re_pattern == NULL) {
+        ret = get_id_provider_default_re(ctx, cdb, conf_path, &ctx->re_pattern);
+        if (ret != EOK) {
+            DEBUG(SSSDBG_OP_FAILURE, ("Failed to get provider default regular " \
+                                      "expression for domain [%s].\n", domain));
+            goto done;
+        }
+    }
+
     if (!ctx->re_pattern) {
         ctx->re_pattern = talloc_strdup(ctx,
                                 "(?P<name>[^@]+)@?(?P<domain>[^@]*$)");
@@ -130,6 +191,8 @@ int sss_names_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb,
 #endif
     }
 
+    DEBUG(SSSDBG_CONF_SETTINGS, ("Using re [%s].\n", ctx->re_pattern));
+
     ret = confdb_get_string(cdb, ctx, conf_path,
                             CONFDB_FULL_NAME_FORMAT, NULL, &ctx->fq_fmt);
     if (ret != EOK) goto done;
-- 
1.7.7.6



More information about the sssd-devel mailing list