Mostly debugging improvements. For example sudo output looks like:

[sudosrv_get_rules_send] (0x0400): Running initgroups for [user-1]
[cache_req_send] (0x0400): Cache Request [Initgroups by name #1]: New request [cache_req_send] (0x0400): Cache Request [Initgroups by name #1]: Parsing input name [user-1] [sss_parse_name_for_domains] (0x0200): name 'user-1' matched without domain, user is user-1 [cache_req_input_set_name] (0x0400): Cache Request [Initgroups by name #1]: Setting name [user-1] [cache_req_select_domains] (0x0400): Cache Request [Initgroups by name #1]: Performing a multi-domain search [cache_req_input_set_domain] (0x0400): Cache Request [Initgroups by name #1]: Using domain [LDAP] [cache_req_check_ncache] (0x0400): Cache Request [Initgroups by name #1]: Checking negative cache for [user-1@LDAP] [sss_ncache_check_str] (0x2000): Checking negative cache for [NCE/USER/LDAP/user-1] [cache_req_get_object] (0x0200): Cache Request [Initgroups by name #1]: Requesting info for [user-1@LDAP] [cache_req_cache_check] (0x0400): Cache Request [Initgroups by name #1]: [user-1@LDAP] entry is valid [cache_req_done] (0x0400): Cache Request [Initgroups by name #1]: Finished: Success

It is now very simple to lookup messages for specific cache_req.

From cfea190c5a2412ff55560af69a761f61d6343d95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrez...@redhat.com>
Date: Fri, 12 Feb 2016 11:58:32 +0100
Subject: [PATCH 1/6] cache_req: bring together search parameters

This way it is more clear that the string parameters should not
be misued when adding a new one.
---
 src/responder/common/responder_cache_req.c | 118 ++++++++++++++---------------
 1 file changed, 59 insertions(+), 59 deletions(-)

diff --git a/src/responder/common/responder_cache_req.c b/src/responder/common/responder_cache_req.c
index 2344b0f09c6c4242ff3f769ae565f21c1d2b3e3b..385927625d744906fe6fc06b32d35677fc87456c 100644
--- a/src/responder/common/responder_cache_req.c
+++ b/src/responder/common/responder_cache_req.c
@@ -70,12 +70,15 @@ struct cache_req_input {
     enum cache_req_type type;
 
     /* Provided input. */
-    const char *orig_name;
-    uint32_t id;
-    const char *cert;
-
-    /* Parsed name or UPN. */
-    const char *name;
+    struct {
+        struct {
+            const char *input;  /* Original input. */
+            const char *name;   /* Parsed name or UPN. */
+            const char *lookup; /* Converted per domain rules. */
+        } name;
+        uint32_t id;
+        const char *cert;
+    } data;
 
     /* Data Provider request type resolved from @type.
      * FIXME: This is currently needed for data provider calls. We should
@@ -85,11 +88,6 @@ struct cache_req_input {
     /* Domain related informations. */
     struct sss_domain_info *domain;
 
-    /* Name sanitized according to domain rules such as case sensitivity and
-     * replacement of space character. This needs to be set up for each
-     * domain separately. */
-    const char *dom_objname;
-
     /* Fully qualified object name used in debug messages. */
     const char *debug_fqn;
     /* Time when the request started. Useful for by-filter lookups */
@@ -127,8 +125,8 @@ cache_req_input_create(TALLOC_CTX *mem_ctx,
             goto fail;
         }
 
-        input->orig_name = talloc_strdup(input, name);
-        if (input->orig_name == NULL) {
+        input->data.name.input = talloc_strdup(input, name);
+        if (input->data.name.input == NULL) {
             goto fail;
         }
         break;
@@ -138,8 +136,8 @@ cache_req_input_create(TALLOC_CTX *mem_ctx,
             goto fail;
         }
 
-        input->cert = talloc_strdup(input, cert);
-        if (input->cert == NULL) {
+        input->data.cert = talloc_strdup(input, cert);
+        if (input->data.cert == NULL) {
             goto fail;
         }
         break;
@@ -150,7 +148,7 @@ cache_req_input_create(TALLOC_CTX *mem_ctx,
             goto fail;
         }
 
-        input->id = id;
+        input->data.id = id;
         break;
     }
 
@@ -203,8 +201,8 @@ cache_req_input_set_name(struct cache_req_input *input,
         return ENOMEM;
     }
 
-    talloc_zfree(input->name);
-    input->name = dup_name;
+    talloc_zfree(input->data.name.name);
+    input->data.name.name = dup_name;
 
     return EOK;
 }
@@ -224,7 +222,7 @@ cache_req_input_set_domain(struct cache_req_input *input,
         return ENOMEM;
     }
 
-    talloc_zfree(input->dom_objname);
+    talloc_zfree(input->data.name.lookup);
     talloc_zfree(input->debug_fqn);
 
     switch (input->type) {
@@ -235,13 +233,14 @@ cache_req_input_set_domain(struct cache_req_input *input,
     case CACHE_REQ_GROUP_BY_FILTER:
     case CACHE_REQ_INITGROUPS:
     case CACHE_REQ_INITGROUPS_BY_UPN:
-        if (input->name == NULL) {
-            DEBUG(SSSDBG_CRIT_FAILURE, "Bug: input->name is NULL?\n");
+        if (input->data.name.name == NULL) {
+            DEBUG(SSSDBG_CRIT_FAILURE, "Bug: parsed name is NULL?\n");
             ret = ERR_INTERNAL;
             goto done;
         }
 
-        name = sss_get_cased_name(tmp_ctx, input->name, domain->case_sensitive);
+        name = sss_get_cased_name(tmp_ctx, input->data.name.name,
+                                  domain->case_sensitive);
         if (name == NULL) {
             ret = ENOMEM;
             goto done;
@@ -262,7 +261,7 @@ cache_req_input_set_domain(struct cache_req_input *input,
         break;
 
     case CACHE_REQ_USER_BY_ID:
-        debug_fqn = talloc_asprintf(tmp_ctx, "UID:%d@%s", input->id, domain->name);
+        debug_fqn = talloc_asprintf(tmp_ctx, "UID:%d@%s", input->data.id, domain->name);
         if (debug_fqn == NULL) {
             ret = ENOMEM;
             goto done;
@@ -270,7 +269,7 @@ cache_req_input_set_domain(struct cache_req_input *input,
         break;
 
     case CACHE_REQ_GROUP_BY_ID:
-        debug_fqn = talloc_asprintf(tmp_ctx, "GID:%d@%s", input->id, domain->name);
+        debug_fqn = talloc_asprintf(tmp_ctx, "GID:%d@%s", input->data.id, domain->name);
         if (debug_fqn == NULL) {
             ret = ENOMEM;
             goto done;
@@ -280,7 +279,7 @@ cache_req_input_set_domain(struct cache_req_input *input,
         /* certificates might be quite long, only use the last 10 charcters
          * for logging */
         debug_fqn = talloc_asprintf(tmp_ctx, "CERT:%s@%s",
-                                    get_last_x_chars(input->cert, 10),
+                                    get_last_x_chars(input->data.cert, 10),
                                     domain->name);
         if (debug_fqn == NULL) {
             ret = ENOMEM;
@@ -290,7 +289,7 @@ cache_req_input_set_domain(struct cache_req_input *input,
     }
 
     input->domain = domain;
-    input->dom_objname = talloc_steal(input, name);
+    input->data.name.lookup = talloc_steal(input, name);
     input->debug_fqn = talloc_steal(input, debug_fqn);
 
     ret = EOK;
@@ -318,7 +317,8 @@ cache_req_input_assume_upn(struct cache_req_input *input)
     errno_t ret;
     bool bret;
 
-    if (input->orig_name == NULL || strchr(input->orig_name, '@') == NULL) {
+    if (input->data.name.input == NULL
+            || strchr(input->data.name.input, '@') == NULL) {
         return false;
     }
 
@@ -337,14 +337,14 @@ cache_req_input_assume_upn(struct cache_req_input *input)
     }
 
     if (bret == true) {
-        ret = cache_req_input_set_name(input, input->orig_name);
+        ret = cache_req_input_set_name(input, input->data.name.input);
         if (ret != EOK) {
             DEBUG(SSSDBG_CRIT_FAILURE,
                   "cache_req_input_set_orig_name() failed\n");
             return false;
         }
 
-        DEBUG(SSSDBG_TRACE_FUNC, "Assuming UPN %s\n", input->orig_name);
+        DEBUG(SSSDBG_TRACE_FUNC, "Assuming UPN %s\n", input->data.name.input);
     }
 
     return bret;
@@ -362,20 +362,20 @@ static errno_t cache_req_check_ncache(struct cache_req_input *input,
     case CACHE_REQ_INITGROUPS:
     case CACHE_REQ_INITGROUPS_BY_UPN:
         ret = sss_ncache_check_user(ncache, neg_timeout,
-                                    input->domain, input->dom_objname);
+                                    input->domain, input->data.name.lookup);
         break;
     case CACHE_REQ_GROUP_BY_NAME:
         ret = sss_ncache_check_group(ncache, neg_timeout,
-                                     input->domain, input->dom_objname);
+                                     input->domain, input->data.name.lookup);
         break;
     case CACHE_REQ_USER_BY_ID:
-        ret = sss_ncache_check_uid(ncache, neg_timeout, NULL, input->id);
+        ret = sss_ncache_check_uid(ncache, neg_timeout, NULL, input->data.id);
         break;
     case CACHE_REQ_GROUP_BY_ID:
-        ret = sss_ncache_check_gid(ncache, neg_timeout, NULL, input->id);
+        ret = sss_ncache_check_gid(ncache, neg_timeout, NULL, input->data.id);
         break;
     case CACHE_REQ_USER_BY_CERT:
-        ret = sss_ncache_check_cert(ncache, neg_timeout, input->cert);
+        ret = sss_ncache_check_cert(ncache, neg_timeout, input->data.cert);
         break;
     case CACHE_REQ_USER_BY_FILTER:
     case CACHE_REQ_GROUP_BY_FILTER:
@@ -402,11 +402,11 @@ static void cache_req_add_to_ncache(struct cache_req_input *input,
     case CACHE_REQ_INITGROUPS:
     case CACHE_REQ_INITGROUPS_BY_UPN:
         ret = sss_ncache_set_user(ncache, false, input->domain,
-                                  input->dom_objname);
+                                  input->data.name.lookup);
         break;
     case CACHE_REQ_GROUP_BY_NAME:
         ret = sss_ncache_set_group(ncache, false, input->domain,
-                                   input->dom_objname);
+                                   input->data.name.lookup);
         break;
     case CACHE_REQ_USER_BY_FILTER:
     case CACHE_REQ_GROUP_BY_FILTER:
@@ -452,13 +452,13 @@ static void cache_req_add_to_ncache_global(struct cache_req_input *input,
         ret = EOK;
         break;
     case CACHE_REQ_USER_BY_ID:
-        ret = sss_ncache_set_uid(ncache, false, NULL, input->id);
+        ret = sss_ncache_set_uid(ncache, false, NULL, input->data.id);
         break;
     case CACHE_REQ_GROUP_BY_ID:
-        ret = sss_ncache_set_gid(ncache, false, NULL, input->id);
+        ret = sss_ncache_set_gid(ncache, false, NULL, input->data.id);
         break;
     case CACHE_REQ_USER_BY_CERT:
-        ret = sss_ncache_set_cert(ncache, false, input->cert);
+        ret = sss_ncache_set_cert(ncache, false, input->data.cert);
         break;
     }
 
@@ -486,53 +486,53 @@ static errno_t cache_req_get_object(TALLOC_CTX *mem_ctx,
     case CACHE_REQ_USER_BY_NAME:
         one_item_only = true;
         ret = sysdb_getpwnam_with_views(mem_ctx, input->domain,
-                                        input->dom_objname, &result);
+                                        input->data.name.lookup, &result);
         break;
     case CACHE_REQ_USER_BY_UPN:
         one_item_only = true;
         ret = sysdb_getpwupn(mem_ctx, input->domain,
-                             input->dom_objname, &result);
+                             input->data.name.lookup, &result);
         break;
     case CACHE_REQ_USER_BY_ID:
         one_item_only = true;
         ret = sysdb_getpwuid_with_views(mem_ctx, input->domain,
-                                        input->id, &result);
+                                        input->data.id, &result);
         break;
     case CACHE_REQ_GROUP_BY_NAME:
         one_item_only = true;
         ret = sysdb_getgrnam_with_views(mem_ctx, input->domain,
-                                        input->dom_objname, &result);
+                                        input->data.name.lookup, &result);
         break;
     case CACHE_REQ_GROUP_BY_ID:
         one_item_only = true;
         ret = sysdb_getgrgid_with_views(mem_ctx, input->domain,
-                                        input->id, &result);
+                                        input->data.id, &result);
         break;
     case CACHE_REQ_INITGROUPS:
         one_item_only = false;
         ret = sysdb_initgroups_with_views(mem_ctx, input->domain,
-                                          input->dom_objname, &result);
+                                          input->data.name.lookup, &result);
         break;
     case CACHE_REQ_INITGROUPS_BY_UPN:
         one_item_only = false;
         ret = sysdb_initgroups_by_upn(mem_ctx, input->domain,
-                                      input->dom_objname, &result);
+                                      input->data.name.lookup, &result);
         break;
     case CACHE_REQ_USER_BY_CERT:
         one_item_only = true;
         ret = sysdb_search_user_by_cert(mem_ctx, input->domain,
-                                        input->cert, &result);
+                                        input->data.cert, &result);
         break;
     case CACHE_REQ_USER_BY_FILTER:
         one_item_only = false;
         ret = updated_users_by_filter(mem_ctx, input->domain,
-                                      input->dom_objname, input->req_start,
+                                      input->data.name.lookup, input->req_start,
                                       &result);
         break;
     case CACHE_REQ_GROUP_BY_FILTER:
         one_item_only = false;
         ret = updated_groups_by_filter(mem_ctx, input->domain,
-                                       input->dom_objname, input->req_start,
+                                       input->data.name.lookup, input->req_start,
                                        &result);
         break;
     }
@@ -601,8 +601,8 @@ static void cache_req_dpreq_params(TALLOC_CTX *mem_ctx,
     uint32_t id = 0;
     errno_t ret;
 
-    *_id = input->id;
-    *_string = input->dom_objname;
+    *_id = input->data.id;
+    *_string = input->data.name.lookup;
     *_flag = NULL;
 
     if (cache_req_input_is_upn(input)) {
@@ -611,7 +611,7 @@ static void cache_req_dpreq_params(TALLOC_CTX *mem_ctx,
     }
 
     if (input->type == CACHE_REQ_USER_BY_CERT) {
-        *_string = input->cert;
+        *_string = input->data.cert;
         return;
     }
 
@@ -652,7 +652,7 @@ static void cache_req_dpreq_params(TALLOC_CTX *mem_ctx,
        break;
     case CACHE_REQ_INITGROUPS:
         ret = sysdb_getpwnam_with_views(NULL, input->domain,
-                                        input->dom_objname, &user);
+                                        input->data.name.lookup, &user);
         if (ret != EOK || user == NULL || user->count != 1) {
             /* Case where the user is not found has been already handled. If
              * this is not OK, it is an error. */
@@ -962,9 +962,9 @@ struct tevent_req *cache_req_send(TALLOC_CTX *mem_ctx,
     state->cache_refresh_percent = cache_refresh_percent;
     state->input = input;
 
-    if (state->input->orig_name != NULL && domain == NULL) {
+    if (state->input->data.name.input != NULL && domain == NULL) {
         /* Parse input name first, since it may contain domain name. */
-        subreq = sss_parse_inp_send(state, rctx, input->orig_name);
+        subreq = sss_parse_inp_send(state, rctx, input->data.name.input);
         if (subreq == NULL) {
             ret = ENOMEM;
             goto immediately;
@@ -972,8 +972,8 @@ struct tevent_req *cache_req_send(TALLOC_CTX *mem_ctx,
 
         tevent_req_set_callback(subreq, cache_req_input_parsed, req);
     } else {
-        if (input->orig_name != NULL) {
-            ret = cache_req_input_set_name(input, input->orig_name);
+        if (input->data.name.input != NULL) {
+            ret = cache_req_input_set_name(input, input->data.name.input);
             if (ret != EOK) {
                 goto immediately;
             }
@@ -1175,10 +1175,10 @@ errno_t cache_req_recv(TALLOC_CTX *mem_ctx,
     TEVENT_REQ_RETURN_ON_ERROR(req);
 
     if (_name != NULL) {
-        if (state->input->dom_objname == NULL) {
+        if (state->input->data.name.lookup == NULL) {
             *_name = NULL;
         } else {
-            name = talloc_strdup(mem_ctx, state->input->name);
+            name = talloc_strdup(mem_ctx, state->input->data.name.name);
             if (name == NULL) {
                 return ENOMEM;
             }
-- 
2.1.0

From 4869d859b8fb66c5461011e38c980ca4b3ca8742 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrez...@redhat.com>
Date: Fri, 12 Feb 2016 12:12:12 +0100
Subject: [PATCH 2/6] cache_req: fix typo in debug message

---
 src/responder/common/responder_cache_req.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/responder/common/responder_cache_req.c b/src/responder/common/responder_cache_req.c
index 385927625d744906fe6fc06b32d35677fc87456c..6d4053375195017ed44d606102069f0112f84d79 100644
--- a/src/responder/common/responder_cache_req.c
+++ b/src/responder/common/responder_cache_req.c
@@ -340,7 +340,7 @@ cache_req_input_assume_upn(struct cache_req_input *input)
         ret = cache_req_input_set_name(input, input->data.name.input);
         if (ret != EOK) {
             DEBUG(SSSDBG_CRIT_FAILURE,
-                  "cache_req_input_set_orig_name() failed\n");
+                  "cache_req_input_set_name() failed\n");
             return false;
         }
 
-- 
2.1.0

From b802940e1ac0ebe622aa68b59bfd0d2757e52390 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrez...@redhat.com>
Date: Fri, 12 Feb 2016 12:20:04 +0100
Subject: [PATCH 3/6] cache_req: break cache_req_input_create into more
 functions

---
 src/responder/common/responder_cache_req.c | 69 ++++++++++++++++++++----------
 1 file changed, 46 insertions(+), 23 deletions(-)

diff --git a/src/responder/common/responder_cache_req.c b/src/responder/common/responder_cache_req.c
index 6d4053375195017ed44d606102069f0112f84d79..8e9010fe58ccee5111ec00af3efc09b2f3f2c81d 100644
--- a/src/responder/common/responder_cache_req.c
+++ b/src/responder/common/responder_cache_req.c
@@ -94,24 +94,13 @@ struct cache_req_input {
     time_t req_start;
 };
 
-struct cache_req_input *
-cache_req_input_create(TALLOC_CTX *mem_ctx,
-                       enum cache_req_type type,
-                       const char *name,
-                       uint32_t id,
-                       const char *cert)
+static errno_t
+cache_req_input_set_data(struct cache_req_input *input,
+                         enum cache_req_type type,
+                         uint32_t id,
+                         const char *name,
+                         const char *cert)
 {
-    struct cache_req_input *input;
-
-    input = talloc_zero(mem_ctx, struct cache_req_input);
-    if (input == NULL) {
-        return NULL;
-    }
-
-    input->type = type;
-    input->req_start = time(NULL);
-
-    /* Check that input parameters match selected type. */
     switch (input->type) {
     case CACHE_REQ_USER_BY_NAME:
     case CACHE_REQ_USER_BY_UPN:
@@ -122,37 +111,42 @@ cache_req_input_create(TALLOC_CTX *mem_ctx,
     case CACHE_REQ_INITGROUPS_BY_UPN:
         if (name == NULL) {
             DEBUG(SSSDBG_CRIT_FAILURE, "Bug: name cannot be NULL!\n");
-            goto fail;
+            return ERR_INTERNAL;
         }
 
         input->data.name.input = talloc_strdup(input, name);
         if (input->data.name.input == NULL) {
-            goto fail;
+            return ENOMEM;
         }
         break;
     case CACHE_REQ_USER_BY_CERT:
         if (cert == NULL) {
             DEBUG(SSSDBG_CRIT_FAILURE, "Bug: certificate cannot be NULL!\n");
-            goto fail;
+            return ERR_INTERNAL;
         }
 
         input->data.cert = talloc_strdup(input, cert);
         if (input->data.cert == NULL) {
-            goto fail;
+            return ENOMEM;
         }
         break;
     case CACHE_REQ_USER_BY_ID:
     case CACHE_REQ_GROUP_BY_ID:
         if (id == 0) {
             DEBUG(SSSDBG_CRIT_FAILURE, "Bug: id cannot be 0!\n");
-            goto fail;
+            return ERR_INTERNAL;
         }
 
         input->data.id = id;
         break;
     }
 
-    /* Resolve Data Provider request type. */
+    return EOK;
+}
+
+static void
+cache_req_input_set_dp(struct cache_req_input *input, enum cache_req_type type)
+{
     switch (type) {
     case CACHE_REQ_USER_BY_NAME:
     case CACHE_REQ_USER_BY_UPN:
@@ -183,6 +177,35 @@ cache_req_input_create(TALLOC_CTX *mem_ctx,
         break;
     }
 
+    return;
+}
+
+struct cache_req_input *
+cache_req_input_create(TALLOC_CTX *mem_ctx,
+                       enum cache_req_type type,
+                       const char *name,
+                       uint32_t id,
+                       const char *cert)
+{
+    struct cache_req_input *input;
+    errno_t ret;
+
+    input = talloc_zero(mem_ctx, struct cache_req_input);
+    if (input == NULL) {
+        return NULL;
+    }
+
+    input->type = type;
+    input->req_start = time(NULL);
+
+    ret = cache_req_input_set_data(input, type, id, name, cert);
+    if (ret != EOK) {
+        DEBUG(SSSDBG_CRIT_FAILURE, "Unable to set input data!\n");
+        goto fail;
+    }
+
+    cache_req_input_set_dp(input, type);
+
     return input;
 
 fail:
-- 
2.1.0

From d39326417dadc637878a4e595d0b3d8d82ad3060 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrez...@redhat.com>
Date: Fri, 12 Feb 2016 12:26:16 +0100
Subject: [PATCH 4/6] cache_req: rename debug_fqn to debugobj

It is not always a name.
---
 src/responder/common/responder_cache_req.c | 42 ++++++++++++++++--------------
 1 file changed, 22 insertions(+), 20 deletions(-)

diff --git a/src/responder/common/responder_cache_req.c b/src/responder/common/responder_cache_req.c
index 8e9010fe58ccee5111ec00af3efc09b2f3f2c81d..679f7aa37853ffd29a14fe6ede16e1839faeb106 100644
--- a/src/responder/common/responder_cache_req.c
+++ b/src/responder/common/responder_cache_req.c
@@ -89,7 +89,7 @@ struct cache_req_input {
     struct sss_domain_info *domain;
 
     /* Fully qualified object name used in debug messages. */
-    const char *debug_fqn;
+    const char *debugobj;
     /* Time when the request started. Useful for by-filter lookups */
     time_t req_start;
 };
@@ -237,7 +237,7 @@ cache_req_input_set_domain(struct cache_req_input *input,
 {
     TALLOC_CTX *tmp_ctx = NULL;
     const char *name = NULL;
-    const char *debug_fqn = NULL;
+    const char *debugobj = NULL;
     errno_t ret;
 
     tmp_ctx = talloc_new(NULL);
@@ -246,7 +246,7 @@ cache_req_input_set_domain(struct cache_req_input *input,
     }
 
     talloc_zfree(input->data.name.lookup);
-    talloc_zfree(input->debug_fqn);
+    talloc_zfree(input->debugobj);
 
     switch (input->type) {
     case CACHE_REQ_USER_BY_NAME:
@@ -275,8 +275,8 @@ cache_req_input_set_domain(struct cache_req_input *input,
             goto done;
         }
 
-        debug_fqn = talloc_asprintf(tmp_ctx, "%s@%s", name, domain->name);
-        if (debug_fqn == NULL) {
+        debugobj = talloc_asprintf(tmp_ctx, "%s@%s", name, domain->name);
+        if (debugobj == NULL) {
             ret = ENOMEM;
             goto done;
         }
@@ -284,16 +284,18 @@ cache_req_input_set_domain(struct cache_req_input *input,
         break;
 
     case CACHE_REQ_USER_BY_ID:
-        debug_fqn = talloc_asprintf(tmp_ctx, "UID:%d@%s", input->data.id, domain->name);
-        if (debug_fqn == NULL) {
+        debugobj = talloc_asprintf(tmp_ctx, "UID:%d@%s",
+                                   input->data.id, domain->name);
+        if (debugobj == NULL) {
             ret = ENOMEM;
             goto done;
         }
         break;
 
     case CACHE_REQ_GROUP_BY_ID:
-        debug_fqn = talloc_asprintf(tmp_ctx, "GID:%d@%s", input->data.id, domain->name);
-        if (debug_fqn == NULL) {
+        debugobj = talloc_asprintf(tmp_ctx, "GID:%d@%s",
+                                   input->data.id, domain->name);
+        if (debugobj == NULL) {
             ret = ENOMEM;
             goto done;
         }
@@ -301,10 +303,10 @@ cache_req_input_set_domain(struct cache_req_input *input,
     case CACHE_REQ_USER_BY_CERT:
         /* certificates might be quite long, only use the last 10 charcters
          * for logging */
-        debug_fqn = talloc_asprintf(tmp_ctx, "CERT:%s@%s",
-                                    get_last_x_chars(input->data.cert, 10),
-                                    domain->name);
-        if (debug_fqn == NULL) {
+        debugobj = talloc_asprintf(tmp_ctx, "CERT:%s@%s",
+                                   get_last_x_chars(input->data.cert, 10),
+                                   domain->name);
+        if (debugobj == NULL) {
             ret = ENOMEM;
             goto done;
         }
@@ -313,7 +315,7 @@ cache_req_input_set_domain(struct cache_req_input *input,
 
     input->domain = domain;
     input->data.name.lookup = talloc_steal(input, name);
-    input->debug_fqn = talloc_steal(input, debug_fqn);
+    input->debugobj = talloc_steal(input, debugobj);
 
     ret = EOK;
 
@@ -408,7 +410,7 @@ static errno_t cache_req_check_ncache(struct cache_req_input *input,
 
     if (ret == EEXIST) {
         DEBUG(SSSDBG_TRACE_FUNC, "[%s] does not exist (negative cache)\n",
-              input->debug_fqn);
+              input->debugobj);
     }
 
     return ret;
@@ -447,7 +449,7 @@ static void cache_req_add_to_ncache(struct cache_req_input *input,
 
     if (ret != EOK) {
         DEBUG(SSSDBG_MINOR_FAILURE, "Cannot set negcache for [%s] [%d]: %s\n",
-              input->debug_fqn, ret, sss_strerror(ret));
+              input->debugobj, ret, sss_strerror(ret));
 
         /* not fatal */
     }
@@ -487,7 +489,7 @@ static void cache_req_add_to_ncache_global(struct cache_req_input *input,
 
     if (ret != EOK) {
         DEBUG(SSSDBG_MINOR_FAILURE, "Cannot set negcache for [%s] [%d]: %s\n",
-              input->debug_fqn, ret, sss_strerror(ret));
+              input->debugobj, ret, sss_strerror(ret));
 
         /* not fatal */
     }
@@ -503,7 +505,7 @@ static errno_t cache_req_get_object(TALLOC_CTX *mem_ctx,
     bool one_item_only = false;
     errno_t ret = ERR_INTERNAL;
 
-    DEBUG(SSSDBG_FUNC_DATA, "Requesting info for [%s]\n", input->debug_fqn);
+    DEBUG(SSSDBG_FUNC_DATA, "Requesting info for [%s]\n", input->debugobj);
 
     switch (input->type) {
     case CACHE_REQ_USER_BY_NAME:
@@ -801,7 +803,7 @@ static errno_t cache_req_cache_search(struct tevent_req *req)
 
     /* One result found */
     DEBUG(SSSDBG_TRACE_FUNC, "Returning info for [%s]\n",
-          state->input->debug_fqn);
+          state->input->debugobj);
     return EOK;
 }
 
@@ -913,7 +915,7 @@ static void cache_req_cache_done(struct tevent_req *subreq)
 
     /* One result found */
     DEBUG(SSSDBG_TRACE_FUNC, "Returning info for [%s]\n",
-          state->input->debug_fqn);
+          state->input->debugobj);
 
     tevent_req_done(req);
 }
-- 
2.1.0

From 48c9ed0e2dd5c4248a302c681b85c1df937e0e1a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrez...@redhat.com>
Date: Fri, 12 Feb 2016 13:12:34 +0100
Subject: [PATCH 5/6] cache_req: improve debugging

Each debug message is matched to a specific request, this way it
will be easier to follow the request flow especially when paralel
request are running.
---
 src/responder/common/responder.h           |   2 +
 src/responder/common/responder_cache_req.c | 190 +++++++++++++++++++++--------
 src/responder/common/responder_cache_req.h |   1 +
 src/responder/ifp/ifpsrv_cmd.c             |   6 +-
 4 files changed, 149 insertions(+), 50 deletions(-)

diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h
index 3b70b69e4718539a139c7b8889addce2e58f626b..1fa6fc60c62986a9b58c19f97c00e3ad0efc728e 100644
--- a/src/responder/common/responder.h
+++ b/src/responder/common/responder.h
@@ -113,6 +113,8 @@ struct resp_ctx {
     char *default_domain;
     char override_space;
 
+    uint32_t cache_req_num;
+
     void *pvt_ctx;
 
     bool shutting_down;
diff --git a/src/responder/common/responder_cache_req.c b/src/responder/common/responder_cache_req.c
index 679f7aa37853ffd29a14fe6ede16e1839faeb106..e160b86ce1d72542568f01710bddb500ab184557 100644
--- a/src/responder/common/responder_cache_req.c
+++ b/src/responder/common/responder_cache_req.c
@@ -28,6 +28,10 @@
 #include "responder/common/responder_cache_req.h"
 #include "providers/data_provider.h"
 
+#define CACHE_REQ_DEBUG(level, input, fmt, ...) \
+    DEBUG(level, "Cache Request [%s #%u]: " fmt, \
+          (input)->reqname, (input)->reqid, ##__VA_ARGS__)
+
 static errno_t updated_users_by_filter(TALLOC_CTX *mem_ctx,
                                        struct sss_domain_info *domain,
                                        const char *name_filter,
@@ -88,8 +92,11 @@ struct cache_req_input {
     /* Domain related informations. */
     struct sss_domain_info *domain;
 
-    /* Fully qualified object name used in debug messages. */
+    /* Debug information */
+    uint32_t reqid;
+    const char *reqname;
     const char *debugobj;
+
     /* Time when the request started. Useful for by-filter lookups */
     time_t req_start;
 };
@@ -180,8 +187,49 @@ cache_req_input_set_dp(struct cache_req_input *input, enum cache_req_type type)
     return;
 }
 
+static void
+cache_req_input_set_reqname(struct cache_req_input *input,
+                            enum cache_req_type type)
+{
+    switch (type) {
+    case CACHE_REQ_USER_BY_NAME:
+        input->reqname = "User by name";
+        break;
+    case CACHE_REQ_USER_BY_UPN:
+        input->reqname = "User by UPN";
+        break;
+    case CACHE_REQ_USER_BY_ID:
+        input->reqname = "User by ID";
+        break;
+    case CACHE_REQ_GROUP_BY_NAME:
+        input->reqname = "Group by name";
+        break;
+    case CACHE_REQ_GROUP_BY_ID:
+        input->reqname = "Group by ID";
+        break;
+    case CACHE_REQ_INITGROUPS:
+        input->reqname = "Initgroups by name";
+        break;
+    case CACHE_REQ_INITGROUPS_BY_UPN:
+        input->reqname = "Initgroups by UPN";
+        break;
+    case CACHE_REQ_USER_BY_CERT:
+        input->reqname = "User by certificate";
+        break;
+    case CACHE_REQ_USER_BY_FILTER:
+        input->reqname = "User by filter";
+        break;
+    case CACHE_REQ_GROUP_BY_FILTER:
+        input->reqname = "Group by filter";
+        break;
+    }
+
+    return;
+}
+
 struct cache_req_input *
 cache_req_input_create(TALLOC_CTX *mem_ctx,
+                       struct resp_ctx *rctx,
                        enum cache_req_type type,
                        const char *name,
                        uint32_t id,
@@ -198,12 +246,16 @@ cache_req_input_create(TALLOC_CTX *mem_ctx,
     input->type = type;
     input->req_start = time(NULL);
 
+    /* It is perfectly fine to just overflow here. */
+    input->reqid = rctx->cache_req_num++;
+
     ret = cache_req_input_set_data(input, type, id, name, cert);
     if (ret != EOK) {
         DEBUG(SSSDBG_CRIT_FAILURE, "Unable to set input data!\n");
         goto fail;
     }
 
+    cache_req_input_set_reqname(input, type);
     cache_req_input_set_dp(input, type);
 
     return input;
@@ -219,6 +271,8 @@ cache_req_input_set_name(struct cache_req_input *input,
 {
     const char *dup_name;
 
+    CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, input, "Setting name [%s]\n", name);
+
     dup_name = talloc_strdup(input, name);
     if (dup_name == NULL) {
         return ENOMEM;
@@ -245,6 +299,9 @@ cache_req_input_set_domain(struct cache_req_input *input,
         return ENOMEM;
     }
 
+    CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, input,
+                    "Using domain [%s]\n", domain->name);
+
     talloc_zfree(input->data.name.lookup);
     talloc_zfree(input->debugobj);
 
@@ -369,7 +426,8 @@ cache_req_input_assume_upn(struct cache_req_input *input)
             return false;
         }
 
-        DEBUG(SSSDBG_TRACE_FUNC, "Assuming UPN %s\n", input->data.name.input);
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, input, "Assuming UPN [%s]\n",
+                        input->data.name.input);
     }
 
     return bret;
@@ -381,6 +439,9 @@ static errno_t cache_req_check_ncache(struct cache_req_input *input,
 {
     errno_t ret = ERR_INTERNAL;
 
+    CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, input, "Checking negative cache "
+                    "for [%s]\n", input->debugobj);
+
     switch (input->type) {
     case CACHE_REQ_USER_BY_NAME:
     case CACHE_REQ_USER_BY_UPN:
@@ -409,8 +470,8 @@ static errno_t cache_req_check_ncache(struct cache_req_input *input,
     }
 
     if (ret == EEXIST) {
-        DEBUG(SSSDBG_TRACE_FUNC, "[%s] does not exist (negative cache)\n",
-              input->debugobj);
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, input, "[%s] does not exist "
+                        "(negative cache)\n", input->debugobj);
     }
 
     return ret;
@@ -421,6 +482,9 @@ static void cache_req_add_to_ncache(struct cache_req_input *input,
 {
     errno_t ret = ERR_INTERNAL;
 
+    CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, input, "Adding [%s] to "
+                    "negative cache\n", input->debugobj);
+
     switch (input->type) {
     case CACHE_REQ_USER_BY_NAME:
     case CACHE_REQ_USER_BY_UPN:
@@ -448,8 +512,9 @@ static void cache_req_add_to_ncache(struct cache_req_input *input,
     }
 
     if (ret != EOK) {
-        DEBUG(SSSDBG_MINOR_FAILURE, "Cannot set negcache for [%s] [%d]: %s\n",
-              input->debugobj, ret, sss_strerror(ret));
+        CACHE_REQ_DEBUG(SSSDBG_MINOR_FAILURE, input,
+                        "Cannot set negative cache for [%s] [%d]: %s\n",
+                        input->debugobj, ret, sss_strerror(ret));
 
         /* not fatal */
     }
@@ -462,6 +527,9 @@ static void cache_req_add_to_ncache_global(struct cache_req_input *input,
 {
     errno_t ret = ERR_INTERNAL;
 
+    CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, input, "Adding [%s] to global "
+                    "negative cache\n", input->debugobj);
+
     switch (input->type) {
     case CACHE_REQ_USER_BY_FILTER:
     case CACHE_REQ_GROUP_BY_FILTER:
@@ -488,8 +556,9 @@ static void cache_req_add_to_ncache_global(struct cache_req_input *input,
     }
 
     if (ret != EOK) {
-        DEBUG(SSSDBG_MINOR_FAILURE, "Cannot set negcache for [%s] [%d]: %s\n",
-              input->debugobj, ret, sss_strerror(ret));
+        CACHE_REQ_DEBUG(SSSDBG_MINOR_FAILURE, input, "Cannot set negcache for "
+                        "[%s] [%d]: %s\n", input->debugobj,
+                        ret, sss_strerror(ret));
 
         /* not fatal */
     }
@@ -505,7 +574,8 @@ static errno_t cache_req_get_object(TALLOC_CTX *mem_ctx,
     bool one_item_only = false;
     errno_t ret = ERR_INTERNAL;
 
-    DEBUG(SSSDBG_FUNC_DATA, "Requesting info for [%s]\n", input->debugobj);
+    CACHE_REQ_DEBUG(SSSDBG_FUNC_DATA, input, "Requesting info for [%s]\n",
+                    input->debugobj);
 
     switch (input->type) {
     case CACHE_REQ_USER_BY_NAME:
@@ -569,8 +639,9 @@ static errno_t cache_req_get_object(TALLOC_CTX *mem_ctx,
         goto done;
     } else if (one_item_only && result->count > 1) {
         ret = ERR_INTERNAL;
-        DEBUG(SSSDBG_CRIT_FAILURE, "Multiple objects were found when"
-              "sysdb search expected only one!\n");
+        CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, input,
+                        "Multiple objects were found when "
+                        "sysdb search expected only one!\n");
         goto done;
     }
 
@@ -681,8 +752,9 @@ static void cache_req_dpreq_params(TALLOC_CTX *mem_ctx,
         if (ret != EOK || user == NULL || user->count != 1) {
             /* Case where the user is not found has been already handled. If
              * this is not OK, it is an error. */
-            DEBUG(SSSDBG_CRIT_FAILURE, "Unable to match initgroups user "
-                  "[%d]: %s\n", ret, sss_strerror(ret));
+            CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, input,
+                            "Unable to match initgroups user [%d]: %s\n",
+                            ret, sss_strerror(ret));
             break;
         }
 
@@ -790,8 +862,9 @@ static errno_t cache_req_cache_search(struct tevent_req *req)
 
     ret = cache_req_get_object(state, state->input, &state->result);
     if (ret != EOK && ret != ENOENT) {
-        DEBUG(SSSDBG_CRIT_FAILURE, "Failed to make request to our cache "
-              "[%d]: %s\n", ret, sss_strerror(ret));
+        CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, state->input, "Failed to make "
+                        "request to our cache [%d]: %s\n",
+                        ret, sss_strerror(ret));
         return ret;
     }
 
@@ -802,8 +875,8 @@ static errno_t cache_req_cache_search(struct tevent_req *req)
     }
 
     /* One result found */
-    DEBUG(SSSDBG_TRACE_FUNC, "Returning info for [%s]\n",
-          state->input->debugobj);
+    CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                    "Returning info for [%s]\n", state->input->debugobj);
     return EOK;
 }
 
@@ -826,13 +899,16 @@ static errno_t cache_req_cache_check(struct tevent_req *req)
 
     switch (ret) {
     case EOK:
-        DEBUG(SSSDBG_TRACE_FUNC, "Cached entry is valid, returning...\n");
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                        "[%s] entry is valid\n", state->input->debugobj);
         return EOK;
     case EAGAIN:
         /* Out of band update. The calling function will return the cached
          * entry immediately. No callback is required. */
 
-        DEBUG(SSSDBG_TRACE_FUNC, "Performing midpoint cache update\n");
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                        "Performing midpoint cache update of [%s]\n",
+                        state->input->debugobj);
 
         subreq = sss_dp_get_account_send(state, state->rctx,
                                          state->input->domain, true,
@@ -842,8 +918,6 @@ static errno_t cache_req_cache_check(struct tevent_req *req)
             DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory sending out-of-band "
                                        "data provider request\n");
             /* This is non-fatal, so we'll continue here */
-        } else {
-            DEBUG(SSSDBG_TRACE_FUNC, "Updating cache out-of-band\n");
         }
 
         return EOK;
@@ -851,6 +925,10 @@ static errno_t cache_req_cache_check(struct tevent_req *req)
         /* Cache miss or the cache is expired. We need to get the updated
          * information before returning it. */
 
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                        "Looking up [%s] in data provider\n",
+                        state->input->debugobj);
+
         subreq = sss_dp_get_account_send(state, state->rctx,
                                          state->input->domain, true,
                                          state->input->dp_type,
@@ -865,8 +943,8 @@ static errno_t cache_req_cache_check(struct tevent_req *req)
         return EAGAIN;
     default:
         /* error */
-        DEBUG(SSSDBG_CRIT_FAILURE, "Error checking cache [%d]: %s\n",
-                                   ret, sss_strerror(ret));
+        CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, state->input, "Error checking "
+                        "cache [%d]: %s\n", ret, sss_strerror(ret));
         return ret;
     }
 }
@@ -886,15 +964,14 @@ static void cache_req_cache_done(struct tevent_req *subreq)
     ret = sss_dp_get_account_recv(state, subreq, &err_maj, &err_min, &err_msg);
     talloc_zfree(subreq);
     if (ret != EOK) {
-        DEBUG(SSSDBG_OP_FAILURE, "Could not get account info [%d]: %s\n",
-                                 ret, sss_strerror(ret));
+        CACHE_REQ_DEBUG(SSSDBG_OP_FAILURE, state->input,
+                        "Could not get account info [%d]: %s\n",
+                        ret, sss_strerror(ret));
     }
 
     if (err_maj) {
-        DEBUG(SSSDBG_MINOR_FAILURE,
-              "Unable to get information from Data Provider\n"
-              "Error: %u, %u, %s\n"
-              "Will try to return what we have in cache\n",
+        CACHE_REQ_DEBUG(SSSDBG_MINOR_FAILURE, state->input,
+              "Data Provider Error: %u, %u, %s (will return cached data)\n",
               (unsigned int)err_maj, (unsigned int)err_min, err_msg);
     }
 
@@ -904,8 +981,9 @@ static void cache_req_cache_done(struct tevent_req *subreq)
         cache_req_add_to_ncache(state->input, state->ncache);
         ret = ENOENT;
     } else if (ret != EOK) {
-        DEBUG(SSSDBG_CRIT_FAILURE, "Failed to make request to our cache "
-              "[%d]: %s\n", ret, sss_strerror(ret));
+        CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, state->input,
+                        "Failed to make request to our cache [%d]: %s\n",
+                        ret, sss_strerror(ret));
     }
 
     if (ret != EOK) {
@@ -914,8 +992,9 @@ static void cache_req_cache_done(struct tevent_req *subreq)
     }
 
     /* One result found */
-    DEBUG(SSSDBG_TRACE_FUNC, "Returning info for [%s]\n",
-          state->input->debugobj);
+    CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                    "Returning %u results for [%s]\n", state->result->count,
+                    state->input->debugobj);
 
     tevent_req_done(req);
 }
@@ -980,6 +1059,8 @@ struct tevent_req *cache_req_send(TALLOC_CTX *mem_ctx,
         return NULL;
     }
 
+    CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, input, "New request\n");
+
     state->ev = ev;
     state->rctx = rctx;
     state->ncache = ncache;
@@ -989,6 +1070,9 @@ struct tevent_req *cache_req_send(TALLOC_CTX *mem_ctx,
 
     if (state->input->data.name.input != NULL && domain == NULL) {
         /* Parse input name first, since it may contain domain name. */
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, input, "Parsing input name [%s]\n",
+                        input->data.name.input);
+
         subreq = sss_parse_inp_send(state, rctx, input->data.name.input);
         if (subreq == NULL) {
             ret = ENOMEM;
@@ -1073,7 +1157,9 @@ static errno_t cache_req_select_domains(struct tevent_req *req,
     state = tevent_req_data(req, struct cache_req_state);
 
     if (domain != NULL) {
-        /* single-domain search */
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                        "Performing a single domain search\n");
+
         state->domain = responder_get_domain(state->rctx, domain);
         if (state->domain == NULL) {
             return ERR_DOMAIN_NOT_FOUND;
@@ -1081,7 +1167,9 @@ static errno_t cache_req_select_domains(struct tevent_req *req,
 
         state->check_next = false;
     } else {
-        /* multi-domain search */
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                        "Performing a multi-domain search\n");
+
         state->domain = state->rctx->domains;
         state->check_next = true;
     }
@@ -1163,6 +1251,8 @@ static void cache_req_done(struct tevent_req *subreq)
     ret = cache_req_cache_recv(state, subreq, &state->result);
     talloc_zfree(subreq);
     if (ret == EOK) {
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                        "Finished: Success\n");
         tevent_req_done(req);
         return;
     }
@@ -1174,12 +1264,16 @@ static void cache_req_done(struct tevent_req *subreq)
             return;
         }
 
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                        "Finished: Not found\n");
         tevent_req_error(req, ret);
         return;
     }
 
     ret = cache_req_next_domain(req);
     if (ret != EAGAIN) {
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->input,
+                        "Finished: Error %d: %s\n", ret, sss_strerror(ret));
         tevent_req_error(req, ret);
     }
 
@@ -1258,8 +1352,8 @@ cache_req_user_by_name_send(TALLOC_CTX *mem_ctx,
 {
     struct cache_req_input *input;
 
-    input = cache_req_input_create(mem_ctx, CACHE_REQ_USER_BY_NAME, name, 0,
-                                   NULL);
+    input = cache_req_input_create(mem_ctx, rctx, CACHE_REQ_USER_BY_NAME,
+                                   name, 0, NULL);
     if (input == NULL) {
         return NULL;
     }
@@ -1281,8 +1375,8 @@ cache_req_user_by_id_send(TALLOC_CTX *mem_ctx,
 {
     struct cache_req_input *input;
 
-    input = cache_req_input_create(mem_ctx, CACHE_REQ_USER_BY_ID, NULL, uid,
-                                   NULL);
+    input = cache_req_input_create(mem_ctx, rctx, CACHE_REQ_USER_BY_ID,
+                                   NULL, uid, NULL);
     if (input == NULL) {
         return NULL;
     }
@@ -1304,7 +1398,7 @@ cache_req_user_by_cert_send(TALLOC_CTX *mem_ctx,
 {
     struct cache_req_input *input;
 
-    input = cache_req_input_create(mem_ctx, CACHE_REQ_USER_BY_CERT,
+    input = cache_req_input_create(mem_ctx, rctx, CACHE_REQ_USER_BY_CERT,
                                    NULL, 0, pem_cert);
     if (input == NULL) {
         return NULL;
@@ -1327,8 +1421,8 @@ cache_req_group_by_name_send(TALLOC_CTX *mem_ctx,
 {
     struct cache_req_input *input;
 
-    input = cache_req_input_create(mem_ctx, CACHE_REQ_GROUP_BY_NAME, name, 0,
-                                   NULL);
+    input = cache_req_input_create(mem_ctx, rctx, CACHE_REQ_GROUP_BY_NAME,
+                                   name, 0, NULL);
     if (input == NULL) {
         return NULL;
     }
@@ -1350,8 +1444,8 @@ cache_req_group_by_id_send(TALLOC_CTX *mem_ctx,
 {
     struct cache_req_input *input;
 
-    input = cache_req_input_create(mem_ctx, CACHE_REQ_GROUP_BY_ID, NULL, gid,
-                                   NULL);
+    input = cache_req_input_create(mem_ctx, rctx, CACHE_REQ_GROUP_BY_ID,
+                                   NULL, gid, NULL);
     if (input == NULL) {
         return NULL;
     }
@@ -1373,8 +1467,8 @@ cache_req_initgr_by_name_send(TALLOC_CTX *mem_ctx,
 {
     struct cache_req_input *input;
 
-    input = cache_req_input_create(mem_ctx, CACHE_REQ_INITGROUPS, name, 0,
-                                   NULL);
+    input = cache_req_input_create(mem_ctx, rctx, CACHE_REQ_INITGROUPS,
+                                   name, 0, NULL);
     if (input == NULL) {
         return NULL;
     }
@@ -1393,7 +1487,7 @@ cache_req_user_by_filter_send(TALLOC_CTX *mem_ctx,
 {
     struct cache_req_input *input;
 
-    input = cache_req_input_create(mem_ctx, CACHE_REQ_USER_BY_FILTER,
+    input = cache_req_input_create(mem_ctx, rctx, CACHE_REQ_USER_BY_FILTER,
                                    filter, 0, NULL);
     if (input == NULL) {
         return NULL;
@@ -1412,7 +1506,7 @@ cache_req_group_by_filter_send(TALLOC_CTX *mem_ctx,
 {
     struct cache_req_input *input;
 
-    input = cache_req_input_create(mem_ctx, CACHE_REQ_GROUP_BY_FILTER,
+    input = cache_req_input_create(mem_ctx, rctx, CACHE_REQ_GROUP_BY_FILTER,
                                    filter, 0, NULL);
     if (input == NULL) {
         return NULL;
diff --git a/src/responder/common/responder_cache_req.h b/src/responder/common/responder_cache_req.h
index 474d42647586c044925c83a0641200d065862b87..59926ac58de4079b7cc3507efc369b2aa7d3548a 100644
--- a/src/responder/common/responder_cache_req.h
+++ b/src/responder/common/responder_cache_req.h
@@ -44,6 +44,7 @@ struct cache_req_input;
 
 struct cache_req_input *
 cache_req_input_create(TALLOC_CTX *mem_ctx,
+                       struct resp_ctx *rctx,
                        enum cache_req_type type,
                        const char *name,
                        uint32_t id,
diff --git a/src/responder/ifp/ifpsrv_cmd.c b/src/responder/ifp/ifpsrv_cmd.c
index ab6156fd6c92e8fd8176da6664cd6b79eb3f5a97..9edad77c7edb2e057d98250d8846a31fdd2bf45a 100644
--- a/src/responder/ifp/ifpsrv_cmd.c
+++ b/src/responder/ifp/ifpsrv_cmd.c
@@ -496,11 +496,13 @@ ifp_user_get_attr_lookup(struct tevent_req *subreq)
 
     switch (state->search_type) {
     case SSS_DP_USER:
-        input = cache_req_input_create(state, CACHE_REQ_USER_BY_NAME,
+        input = cache_req_input_create(state, state->rctx,
+                                       CACHE_REQ_USER_BY_NAME,
                                        state->name, 0, NULL);
         break;
     case SSS_DP_INITGROUPS:
-        input = cache_req_input_create(state, CACHE_REQ_INITGROUPS,
+        input = cache_req_input_create(state, state->rctx,
+                                       CACHE_REQ_INITGROUPS,
                                        state->name, 0, NULL);
         break;
     default:
-- 
2.1.0

_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org

Reply via email to