summaryrefslogtreecommitdiffstats
path: root/src/responder/common/responder_cache_req.c
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2015-01-26 13:10:57 +0100
committerJakub Hrozek <jhrozek@redhat.com>2015-03-13 09:56:10 +0100
commit641d684ee88c6540a4cf1d74d258614f615699fe (patch)
tree81477b8bb44e7942ff3bfee42db5dfc31e806fa1 /src/responder/common/responder_cache_req.c
parent3a5ea81007bd38ce511c37f65cc45d4b6b95ec44 (diff)
downloadsssd-641d684ee88c6540a4cf1d74d258614f615699fe.tar.gz
sssd-641d684ee88c6540a4cf1d74d258614f615699fe.tar.xz
sssd-641d684ee88c6540a4cf1d74d258614f615699fe.zip
cache_req: add support for group by name
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/responder/common/responder_cache_req.c')
-rw-r--r--src/responder/common/responder_cache_req.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/responder/common/responder_cache_req.c b/src/responder/common/responder_cache_req.c
index 5eb23f8dd..e7a9fa348 100644
--- a/src/responder/common/responder_cache_req.c
+++ b/src/responder/common/responder_cache_req.c
@@ -70,6 +70,7 @@ cache_req_input_create(TALLOC_CTX *mem_ctx,
/* Check that input parameters match selected type. */
switch (input->type) {
case CACHE_REQ_USER_BY_NAME:
+ case CACHE_REQ_GROUP_BY_NAME:
case CACHE_REQ_INITGROUPS:
if (name == NULL) {
DEBUG(SSSDBG_CRIT_FAILURE, "Bug: name cannot be NULL!\n");
@@ -98,6 +99,10 @@ cache_req_input_create(TALLOC_CTX *mem_ctx,
input->dp_type = SSS_DP_USER;
break;
+ case CACHE_REQ_GROUP_BY_NAME:
+ input->dp_type = SSS_DP_GROUP;
+ break;
+
case CACHE_REQ_INITGROUPS:
input->dp_type = SSS_DP_INITGROUPS;
break;
@@ -130,6 +135,7 @@ cache_req_input_set_domain(struct cache_req_input *input,
switch (input->type) {
case CACHE_REQ_USER_BY_NAME:
+ case CACHE_REQ_GROUP_BY_NAME:
case CACHE_REQ_INITGROUPS:
name = sss_get_cased_name(tmp_ctx, input->orig_name,
domain->case_sensitive);
@@ -184,6 +190,10 @@ static errno_t cache_req_check_ncache(struct cache_req_input *input,
ret = sss_ncache_check_user(ncache, neg_timeout,
input->domain, input->dom_objname);
break;
+ case CACHE_REQ_GROUP_BY_NAME:
+ ret = sss_ncache_check_group(ncache, neg_timeout,
+ input->domain, input->dom_objname);
+ break;
case CACHE_REQ_USER_BY_ID:
ret = sss_ncache_check_uid(ncache, neg_timeout, input->id);
break;
@@ -212,6 +222,10 @@ static void cache_req_add_to_ncache(struct cache_req_input *input,
ret = sss_ncache_set_user(ncache, false, input->domain,
input->dom_objname);
break;
+ case CACHE_REQ_GROUP_BY_NAME:
+ ret = sss_ncache_set_group(ncache, false, input->domain,
+ input->dom_objname);
+ break;
case CACHE_REQ_USER_BY_ID:
/* Nothing to do. Those types must be unique among all domains so
* the don't contain domain part. Therefore they must be set only
@@ -241,6 +255,7 @@ static void cache_req_add_to_ncache_global(struct cache_req_input *input,
switch (input->type) {
case CACHE_REQ_USER_BY_NAME:
+ case CACHE_REQ_GROUP_BY_NAME:
case CACHE_REQ_INITGROUPS:
/* Nothing to do. Those types are already in ncache for selected
* domains. */
@@ -286,6 +301,11 @@ static errno_t cache_req_get_object(TALLOC_CTX *mem_ctx,
ret = sysdb_getpwuid_with_views(mem_ctx, input->domain,
input->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);
+ break;
case CACHE_REQ_INITGROUPS:
one_item_only = false;
ret = sysdb_initgroups_with_views(mem_ctx, input->domain,
@@ -804,6 +824,28 @@ cache_req_user_by_id_send(TALLOC_CTX *mem_ctx,
}
struct tevent_req *
+cache_req_group_by_name_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct resp_ctx *rctx,
+ struct sss_nc_ctx *ncache,
+ int neg_timeout,
+ int cache_refresh_percent,
+ const char *domain,
+ const char *name)
+{
+ struct cache_req_input *input;
+
+ input = cache_req_input_create(mem_ctx, CACHE_REQ_GROUP_BY_NAME, name, 0);
+ if (input == NULL) {
+ return NULL;
+ }
+
+ return cache_req_steal_input_and_send(mem_ctx, ev, rctx, ncache,
+ neg_timeout, cache_refresh_percent,
+ domain, input);
+}
+
+struct tevent_req *
cache_req_initgr_by_name_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct resp_ctx *rctx,