[SSSD] [PATCH] Remove service groups

Sumit Bose sbose at redhat.com
Tue Jun 1 09:41:03 UTC 2010


Hi,

this patch removes the service groups from the IPA access provider
because with working memberOf attributed for the service objects they
are not necessary anymore.

For your convenience I have attached patches for the master and the 1.2
branch.

bye,
Sumit
-------------- next part --------------
From 5ba0fe3f3067f9c502bed898328d49652f05a053 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose at redhat.com>
Date: Mon, 31 May 2010 17:24:36 +0200
Subject: [PATCH] Remove service groups

Because the memberOf attribute is now set for the service objects we do
not need to fetch the service groups separately anymore.
---
 src/providers/ipa/ipa_access.c |  198 ++--------------------------------------
 src/providers/ipa/ipa_access.h |    2 -
 2 files changed, 7 insertions(+), 193 deletions(-)

diff --git a/src/providers/ipa/ipa_access.c b/src/providers/ipa/ipa_access.c
index 01e4fff..2db5dd7 100644
--- a/src/providers/ipa/ipa_access.c
+++ b/src/providers/ipa/ipa_access.c
@@ -50,19 +50,16 @@
 #define IPA_CN "cn"
 #define IPA_MEMBER_SERVICE "memberService"
 #define IPA_SERVICE_CATEGORY "serviceCategory"
-#define IPA_SERVICEGROUP_MEMBER "member"
 
 #define IPA_HOST_BASE_TMPL "cn=computers,cn=accounts,%s"
 #define IPA_HBAC_BASE_TMPL "cn=hbac,%s"
 #define IPA_SERVICES_BASE_TMPL "cn=hbacservices,cn=accounts,%s"
-#define IPA_SERVICEGROUPS_BASE_TMPL "cn=hbacservicegroups,cn=accounts,%s"
 
 #define SYSDB_HBAC_BASE_TMPL "cn=hbac,"SYSDB_TMPL_CUSTOM_BASE
 
 #define HBAC_RULES_SUBDIR "hbac_rules"
 #define HBAC_HOSTS_SUBDIR "hbac_hosts"
 #define HBAC_SERVICES_SUBDIR "hbac_services"
-#define HBAC_SERVICEGROUPS_SUBDIR "hbac_servicegroups"
 
 static errno_t msgs2attrs_array(TALLOC_CTX *mem_ctx, size_t count,
                                 struct ldb_message **msgs,
@@ -120,19 +117,11 @@ struct hbac_get_service_data_state {
     struct sysdb_attrs **services_reply_list;
     size_t services_reply_count;
 
-    char *servicegroups_filter;
-    char *servicegroups_search_base;
-    const char **servicegroups_attrs;
-    struct sysdb_attrs **servicegroups_reply_list;
-    size_t servicegroups_reply_count;
-
     size_t current_item;
 };
 
 static void hbac_get_services_connect_done(struct tevent_req *subreq);
 static void hbac_services_get_done(struct tevent_req *subreq);
-static void hbac_get_servicegroups(struct tevent_req *req);
-static void hbac_servicegroups_get_done(struct tevent_req *subreq);
 
 struct tevent_req *hbac_get_service_data_send(TALLOC_CTX *memctx,
                                               struct tevent_context *ev,
@@ -163,12 +152,6 @@ struct tevent_req *hbac_get_service_data_send(TALLOC_CTX *memctx,
     state->services_reply_list = NULL;
     state->services_reply_count = 0;
 
-    state->servicegroups_filter = NULL;
-    state->servicegroups_search_base = NULL;
-    state->servicegroups_attrs = NULL;
-    state->servicegroups_reply_list = NULL;
-    state->servicegroups_reply_count = 0;
-
     state->current_item = 0;
 
     state->services_search_base = talloc_asprintf(state, IPA_SERVICES_BASE_TMPL,
@@ -220,7 +203,7 @@ struct tevent_req *hbac_get_service_data_send(TALLOC_CTX *memctx,
             DEBUG(1, ("msgs2attrs_array failed.\n"));
             goto fail;
         }
-        hbac_get_servicegroups(req);
+        tevent_req_done(req);
         tevent_req_post(req, ev);
         return req;
     }
@@ -310,130 +293,22 @@ static void hbac_services_get_done(struct tevent_req *subreq)
     struct hbac_get_service_data_state *state = tevent_req_data(req,
                                             struct hbac_get_service_data_state);
     int ret;
-
-    ret = sdap_get_generic_recv(subreq, state, &state->services_reply_count,
-                                &state->services_reply_list);
-    talloc_zfree(subreq);
-    if (ret != EOK) {
-        tevent_req_error(req, ret);
-        return;
-    }
-
-    hbac_get_servicegroups(req);
-    return;
-}
-
-static void hbac_get_servicegroups(struct tevent_req *req)
-{
-    struct hbac_get_service_data_state *state = tevent_req_data(req,
-                                            struct hbac_get_service_data_state);
-    int ret;
-    struct ldb_message **msgs;
-    struct tevent_req *subreq;
-
-    state->servicegroups_search_base = talloc_asprintf(state,
-                                                    IPA_SERVICEGROUPS_BASE_TMPL,
-                                                    state->basedn);
-    if (state->servicegroups_search_base == NULL) {
-        DEBUG(1, ("Failed to create service groups search base.\n"));
-        ret = ENOMEM;
-        goto fail;
-    }
-
-    state->servicegroups_attrs = talloc_array(state, const char *, 8);
-    if (state->servicegroups_attrs == NULL) {
-        DEBUG(1, ("Failed to allocate servicegroup attribute list.\n"));
-        ret = ENOMEM;
-        goto fail;
-    }
-    state->servicegroups_attrs[0] = IPA_CN;
-    state->servicegroups_attrs[1] = IPA_SERVICEGROUP_MEMBER;
-    state->servicegroups_attrs[2] = SYSDB_ORIG_DN;
-    state->servicegroups_attrs[3] = IPA_UNIQUE_ID;
-    state->servicegroups_attrs[4] = IPA_MEMBEROF;
-    state->servicegroups_attrs[5] = SYSDB_ORIG_MEMBEROF;
-    state->servicegroups_attrs[6] = OBJECTCLASS;
-    state->servicegroups_attrs[7] = NULL;
-
-    state->servicegroups_filter = talloc_asprintf(state,
-                                           "(objectclass=ipaHBACServiceGroup)");
-    if (state->servicegroups_filter == NULL) {
-        ret = ENOMEM;
-        goto fail;
-    }
-
-    DEBUG(9, ("Services filter: [%s].\n", state->servicegroups_filter));
-
-    if (state->offline) {
-        ret = sysdb_search_custom(state, state->sysdb,
-                                  state->sdap_ctx->be->domain,
-                                  state->servicegroups_filter,
-                                  HBAC_SERVICEGROUPS_SUBDIR,
-                                  state->servicegroups_attrs,
-                                  &state->servicegroups_reply_count, &msgs);
-        if (ret) {
-            DEBUG(1, ("sysdb_search_custom failed.\n"));
-            goto fail;
-        }
-
-        ret = msgs2attrs_array(state, state->servicegroups_reply_count, msgs,
-                               &state->servicegroups_reply_list);
-        talloc_zfree(msgs);
-        if (ret != EOK) {
-            DEBUG(1, ("msgs2attrs_array failed.\n"));
-            goto fail;
-        }
-        tevent_req_done(req);
-        return;
-    }
-
-    subreq = sdap_get_generic_send(state, state->ev,
-                                   state->sdap_ctx->opts,
-                                   state->sdap_ctx->gsh,
-                                   state->servicegroups_search_base,
-                                   LDAP_SCOPE_SUB,
-                                   state->servicegroups_filter,
-                                   state->servicegroups_attrs,
-                                   NULL, 0);
-
-    if (subreq == NULL) {
-        DEBUG(1, ("sdap_get_generic_send failed.\n"));
-        ret = ENOMEM;
-        goto fail;
-    }
-
-    tevent_req_set_callback(subreq, hbac_servicegroups_get_done, req);
-    return;
-
-fail:
-    tevent_req_error(req, ret);
-    return;
-}
-
-static void hbac_servicegroups_get_done(struct tevent_req *subreq)
-{
-    struct tevent_req *req = tevent_req_callback_data(subreq,
-                                                      struct tevent_req);
-    struct hbac_get_service_data_state *state = tevent_req_data(req,
-                                            struct hbac_get_service_data_state);
-    int ret;
     bool in_transaction = false;
     struct ldb_dn *base_dn;
     int i;
     struct ldb_message_element *el;
     char *object_name;
 
-    ret = sdap_get_generic_recv(subreq, state,
-                                &state->servicegroups_reply_count,
-                                &state->servicegroups_reply_list);
+
+    ret = sdap_get_generic_recv(subreq, state, &state->services_reply_count,
+                                &state->services_reply_list);
     talloc_zfree(subreq);
     if (ret != EOK) {
         tevent_req_error(req, ret);
         return;
     }
 
-    if ((state->services_reply_count == 0 &&
-         state->servicegroups_reply_count == 0)|| state->offline) {
+    if (state->services_reply_count == 0 || state->offline) {
         tevent_req_done(req);
         return;
     }
@@ -460,20 +335,6 @@ static void hbac_servicegroups_get_done(struct tevent_req *subreq)
         goto fail;
     }
 
-    base_dn = sysdb_custom_subtree_dn(state->sysdb, state,
-                                      state->sdap_ctx->be->domain->name,
-                                      HBAC_SERVICEGROUPS_SUBDIR);
-    if (base_dn == NULL) {
-        ret = ENOMEM;
-        goto fail;
-    }
-
-    ret = sysdb_delete_recursive(state, state->sysdb, base_dn, true);
-    if (ret) {
-        DEBUG(1, ("sysdb_delete_recursive failed.\n"));
-        goto fail;
-    }
-
     for (i = 0; i < state->services_reply_count; i++) {
         ret = sysdb_attrs_get_el(state->services_reply_list[i], IPA_UNIQUE_ID,
                                  &el);
@@ -509,41 +370,6 @@ static void hbac_servicegroups_get_done(struct tevent_req *subreq)
             goto fail;
         }
     }
-    for (i = 0; i < state->servicegroups_reply_count; i++) {
-        ret = sysdb_attrs_get_el(state->servicegroups_reply_list[i],
-                                 IPA_UNIQUE_ID, &el);
-        if (ret != EOK) {
-            DEBUG(1, ("sysdb_attrs_get_el failed.\n"));
-            goto fail;
-        }
-        if (el->num_values == 0) {
-            ret = EINVAL;
-            goto fail;
-        }
-        object_name = talloc_strndup(state, (const char *)el->values[0].data,
-                                     el->values[0].length);
-        if (object_name == NULL) {
-            ret = ENOMEM;
-            goto fail;
-        }
-        DEBUG(9, ("Object name: [%s].\n", object_name));
-
-        ret = sysdb_attrs_replace_name(state->servicegroups_reply_list[i],
-                                       IPA_MEMBEROF, SYSDB_ORIG_MEMBEROF);
-        if (ret != EOK) {
-            DEBUG(1, ("sysdb_attrs_replace_name failed.\n"));
-            goto fail;
-        }
-
-        ret = sysdb_store_custom(state, state->sysdb,
-                                 state->sdap_ctx->be->domain, object_name,
-                                 HBAC_SERVICEGROUPS_SUBDIR,
-                                 state->servicegroups_reply_list[i]);
-        if (ret) {
-            DEBUG(1, ("sysdb_store_custom failed.\n"));
-            goto fail;
-        }
-    }
 
     ret = sysdb_transaction_commit(state->sysdb);
     if (ret) {
@@ -566,9 +392,7 @@ fail:
 static int hbac_get_service_data_recv(struct tevent_req *req,
                                   TALLOC_CTX *memctx,
                                   size_t *hbac_services_count,
-                                  struct sysdb_attrs ***hbac_services_list,
-                                  size_t *hbac_servicegroups_count,
-                                  struct sysdb_attrs ***hbac_servicegroups_list)
+                                  struct sysdb_attrs ***hbac_services_list)
 {
     struct hbac_get_service_data_state *state = tevent_req_data(req,
                                             struct hbac_get_service_data_state);
@@ -582,12 +406,6 @@ static int hbac_get_service_data_recv(struct tevent_req *req,
         talloc_steal(memctx, state->services_reply_list[i]);
     }
 
-    *hbac_servicegroups_count = state->servicegroups_reply_count;
-    *hbac_servicegroups_list = talloc_steal(memctx,
-                                               state->servicegroups_reply_list);
-    for (i = 0; i < state->servicegroups_reply_count; i++) {
-        talloc_steal(memctx, state->servicegroups_reply_list[i]);
-    }
     return EOK;
 }
 
@@ -2155,9 +1973,7 @@ static void hbac_get_service_data_done(struct tevent_req *req)
 
     ret = hbac_get_service_data_recv(req, hbac_ctx,
                                      &hbac_ctx->hbac_services_count,
-                                     &hbac_ctx->hbac_services_list,
-                                     &hbac_ctx->hbac_servicegroups_count,
-                                     &hbac_ctx->hbac_servicegroups_list);
+                                     &hbac_ctx->hbac_services_list);
     talloc_zfree(req);
     if (ret != EOK) {
         goto failed;
diff --git a/src/providers/ipa/ipa_access.h b/src/providers/ipa/ipa_access.h
index e3e0c4f..514afc0 100644
--- a/src/providers/ipa/ipa_access.h
+++ b/src/providers/ipa/ipa_access.h
@@ -62,8 +62,6 @@ struct hbac_ctx {
     char *ldap_basedn;
     struct sysdb_attrs **hbac_services_list;
     size_t hbac_services_count;
-    struct sysdb_attrs **hbac_servicegroups_list;
-    size_t hbac_servicegroups_count;
 };
 
 void ipa_access_handler(struct be_req *be_req);
-- 
1.7.0.1

-------------- next part --------------
From e1efa2ea6209c349abbc22f490bf3de251253dc6 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose at redhat.com>
Date: Tue, 1 Jun 2010 10:29:18 +0200
Subject: [PATCH] Remove service groups

Because the memberOf attribute is now set for the service objects we do
not need to fetch the service groups separately anymore.
---
 src/providers/ipa/ipa_access.c |  271 +---------------------------------------
 src/providers/ipa/ipa_access.h |    2 -
 2 files changed, 6 insertions(+), 267 deletions(-)

diff --git a/src/providers/ipa/ipa_access.c b/src/providers/ipa/ipa_access.c
index c90d63a..2fc2fcc 100644
--- a/src/providers/ipa/ipa_access.c
+++ b/src/providers/ipa/ipa_access.c
@@ -50,19 +50,16 @@
 #define IPA_CN "cn"
 #define IPA_MEMBER_SERVICE "memberService"
 #define IPA_SERVICE_CATEGORY "serviceCategory"
-#define IPA_SERVICEGROUP_MEMBER "member"
 
 #define IPA_HOST_BASE_TMPL "cn=computers,cn=accounts,%s"
 #define IPA_HBAC_BASE_TMPL "cn=hbac,%s"
 #define IPA_SERVICES_BASE_TMPL "cn=hbacservices,cn=accounts,%s"
-#define IPA_SERVICEGROUPS_BASE_TMPL "cn=hbacservicegroups,cn=accounts,%s"
 
 #define SYSDB_HBAC_BASE_TMPL "cn=hbac,"SYSDB_TMPL_CUSTOM_BASE
 
 #define HBAC_RULES_SUBDIR "hbac_rules"
 #define HBAC_HOSTS_SUBDIR "hbac_hosts"
 #define HBAC_SERVICES_SUBDIR "hbac_services"
-#define HBAC_SERVICEGROUPS_SUBDIR "hbac_servicegroups"
 
 static errno_t msgs2attrs_array(TALLOC_CTX *mem_ctx, size_t count,
                                 struct ldb_message **msgs,
@@ -120,25 +117,15 @@ struct hbac_get_service_data_state {
     struct sysdb_attrs **services_reply_list;
     size_t services_reply_count;
 
-    char *servicegroups_filter;
-    char *servicegroups_search_base;
-    const char **servicegroups_attrs;
-    struct sysdb_attrs **servicegroups_reply_list;
-    size_t servicegroups_reply_count;
-
     size_t current_item;
 };
 
 static void hbac_get_services_connect_done(struct tevent_req *subreq);
 static void hbac_services_get_done(struct tevent_req *subreq);
-static void hbac_servicegroups_get_done(struct tevent_req *subreq);
 static void hbac_service_data_sysdb_transaction_started(struct tevent_req *subreq);
 static void hbac_services_delete_done(struct tevent_req *subreq);
-static void hbac_servicegroups_delete_done(struct tevent_req *subreq);
 static void hbac_service_store_prepare(struct tevent_req *req);
 static void hbac_service_store_done(struct tevent_req *subreq);
-static void hbac_servicegroup_store_prepare(struct tevent_req *req);
-static void hbac_servicegroup_store_done(struct tevent_req *subreq);
 
 struct tevent_req *hbac_get_service_data_send(TALLOC_CTX *memctx,
                                               struct tevent_context *ev,
@@ -168,12 +155,6 @@ struct tevent_req *hbac_get_service_data_send(TALLOC_CTX *memctx,
     state->services_reply_list = NULL;
     state->services_reply_count = 0;
 
-    state->servicegroups_filter = NULL;
-    state->servicegroups_search_base = NULL;
-    state->servicegroups_attrs = NULL;
-    state->servicegroups_reply_list = NULL;
-    state->servicegroups_reply_count = 0;
-
     state->current_item = 0;
 
     state->services_search_base = talloc_asprintf(state, IPA_SERVICES_BASE_TMPL,
@@ -334,114 +315,7 @@ static void hbac_services_get_done(struct tevent_req *subreq)
         }
     }
 
-    state->servicegroups_search_base = talloc_asprintf(state,
-                                                    IPA_SERVICEGROUPS_BASE_TMPL,
-                                                    state->basedn);
-    if (state->servicegroups_search_base == NULL) {
-        DEBUG(1, ("Failed to create service groups search base.\n"));
-        ret = ENOMEM;
-        goto fail;
-    }
-
-    state->servicegroups_attrs = talloc_array(state, const char *, 8);
-    if (state->servicegroups_attrs == NULL) {
-        DEBUG(1, ("Failed to allocate servicegroup attribute list.\n"));
-        ret = ENOMEM;
-        goto fail;
-    }
-    state->servicegroups_attrs[0] = IPA_CN;
-    state->servicegroups_attrs[1] = IPA_SERVICEGROUP_MEMBER;
-    state->servicegroups_attrs[2] = SYSDB_ORIG_DN;
-    state->servicegroups_attrs[3] = IPA_UNIQUE_ID;
-    state->servicegroups_attrs[4] = IPA_MEMBEROF;
-    state->servicegroups_attrs[5] = SYSDB_ORIG_MEMBEROF;
-    state->servicegroups_attrs[6] = OBJECTCLASS;
-    state->servicegroups_attrs[7] = NULL;
-
-    state->servicegroups_filter = talloc_asprintf(state,
-                                           "(objectclass=ipaHBACServiceGroup)");
-    if (state->servicegroups_filter == NULL) {
-        ret = ENOMEM;
-        goto fail;
-    }
-
-    DEBUG(9, ("Services filter: [%s].\n", state->servicegroups_filter));
-
-    if (state->offline) {
-        subreq = sysdb_search_custom_send(state, state->ev, state->sysdb, NULL,
-                                          state->sdap_ctx->be->domain,
-                                          state->servicegroups_filter,
-                                          HBAC_SERVICEGROUPS_SUBDIR,
-                                          state->servicegroups_attrs);
-        if (subreq == NULL) {
-            DEBUG(1, ("sysdb_search_custom_send failed.\n"));
-            ret = ENOMEM;
-            goto fail;
-        }
-
-        tevent_req_set_callback(subreq, hbac_servicegroups_get_done, req);
-
-        return;
-    }
-
-    subreq = sdap_get_generic_send(state, state->ev,
-                                   state->sdap_ctx->opts,
-                                   state->sdap_ctx->gsh,
-                                   state->servicegroups_search_base,
-                                   LDAP_SCOPE_SUB,
-                                   state->servicegroups_filter,
-                                   state->servicegroups_attrs,
-                                   NULL, 0);
-
-    if (subreq == NULL) {
-        DEBUG(1, ("sdap_get_generic_send failed.\n"));
-        ret = ENOMEM;
-        goto fail;
-    }
-
-    tevent_req_set_callback(subreq, hbac_servicegroups_get_done, req);
-    return;
-
-fail:
-    tevent_req_error(req, ret);
-    return;
-}
-
-static void hbac_servicegroups_get_done(struct tevent_req *subreq)
-{
-    struct tevent_req *req = tevent_req_callback_data(subreq,
-                                                      struct tevent_req);
-    struct hbac_get_service_data_state *state = tevent_req_data(req,
-                                            struct hbac_get_service_data_state);
-    int ret;
-    struct ldb_message **msgs;
-
-    if (state->offline) {
-        ret = sysdb_search_custom_recv(subreq, state,
-                                       &state->servicegroups_reply_count, &msgs);
-    } else {
-        ret = sdap_get_generic_recv(subreq, state,
-                                    &state->servicegroups_reply_count,
-                                    &state->servicegroups_reply_list);
-    }
-    talloc_zfree(subreq);
-    if (ret != EOK) {
-        tevent_req_error(req, ret);
-        return;
-    }
-
-    if (state->offline) {
-        ret = msgs2attrs_array(state, state->servicegroups_reply_count, msgs,
-                               &state->servicegroups_reply_list);
-        talloc_zfree(msgs);
-        if (ret != EOK) {
-            DEBUG(1, ("msgs2attrs_array failed.\n"));
-            goto fail;
-        }
-    }
-
-    if ((state->services_reply_count == 0 &&
-         state->servicegroups_reply_count == 0)|| state->offline) {
+    if (state->services_reply_count == 0 || state->offline) {
         tevent_req_done(req);
         return;
     }
@@ -507,46 +381,6 @@ static void hbac_services_delete_done(struct tevent_req *subreq)
     struct hbac_get_service_data_state *state = tevent_req_data(req,
                                             struct hbac_get_service_data_state);
     int ret;
-    struct ldb_dn *servicegroups_base_dn;
-
-    ret = sysdb_delete_recursive_recv(subreq);
-    talloc_zfree(subreq);
-    if (ret != EOK) {
-        tevent_req_error(req, ret);
-        return;
-    }
-
-    servicegroups_base_dn = sysdb_custom_subtree_dn(state->sysdb, state,
-                                           state->sdap_ctx->be->domain->name,
-                                           HBAC_SERVICEGROUPS_SUBDIR);
-    if (servicegroups_base_dn == NULL) {
-        ret = ENOMEM;
-        goto fail;
-    }
-
-    DEBUG(9, ("Trying to delete [%s].\n", ldb_dn_get_linearized(servicegroups_base_dn)));
-    subreq = sysdb_delete_recursive_send(state, state->ev, state->handle,
-                                         servicegroups_base_dn, true);
-    if (subreq == NULL) {
-        DEBUG(1, ("sysdb_delete_recursive_send failed.\n"));
-        ret = ENOMEM;
-        goto fail;
-    }
-    tevent_req_set_callback(subreq, hbac_servicegroups_delete_done, req);
-    return;
-
-fail:
-    tevent_req_error(req, ret);
-    return;
-}
-
-static void hbac_servicegroups_delete_done(struct tevent_req *subreq)
-{
-    struct tevent_req *req = tevent_req_callback_data(subreq,
-                                                      struct tevent_req);
-    struct hbac_get_service_data_state *state = tevent_req_data(req,
-                                            struct hbac_get_service_data_state);
-    int ret;
 
     ret = sysdb_delete_recursive_recv(subreq);
     talloc_zfree(subreq);
@@ -614,90 +448,6 @@ static void hbac_service_store_prepare(struct tevent_req *req)
         return;
     }
 
-    state->current_item = 0;
-    hbac_servicegroup_store_prepare(req);
-
-    return;
-
-fail:
-    tevent_req_error(req, ret);
-    return;
-}
-
-static void hbac_service_store_done(struct tevent_req *subreq)
-{
-    struct tevent_req *req = tevent_req_callback_data(subreq,
-                                                      struct tevent_req);
-    struct hbac_get_service_data_state *state = tevent_req_data(req,
-                                            struct hbac_get_service_data_state);
-    int ret;
-
-    ret = sysdb_store_custom_recv(subreq);
-    talloc_zfree(subreq);
-    if (ret != EOK) {
-        tevent_req_error(req, ret);
-        return;
-    }
-
-    state->current_item++;
-    hbac_service_store_prepare(req);
-}
-
-static void hbac_servicegroup_store_prepare(struct tevent_req *req)
-{
-    struct hbac_get_service_data_state *state = tevent_req_data(req,
-                                            struct hbac_get_service_data_state);
-    int ret;
-    struct ldb_message_element *el;
-    struct tevent_req *subreq;
-    char *object_name;
-
-    if (state->current_item < state->servicegroups_reply_count) {
-
-/* TODO: I would prefer IPA_UNIQUE_ID but currently it is not available */
-        ret = sysdb_attrs_get_el(state->servicegroups_reply_list[state->current_item],
-                                 IPA_CN, &el);
-        if (ret != EOK) {
-            DEBUG(1, ("sysdb_attrs_get_el failed.\n"));
-            goto fail;
-        }
-        if (el->num_values == 0) {
-            ret = EINVAL;
-            goto fail;
-        }
-        object_name = talloc_strndup(state, (const char *)el->values[0].data,
-                                     el->values[0].length);
-        if (object_name == NULL) {
-            ret = ENOMEM;
-            goto fail;
-        }
-        DEBUG(9, ("Object name: [%s].\n", object_name));
-
-        ret = sysdb_attrs_replace_name(
-                           state->servicegroups_reply_list[state->current_item],
-                           IPA_MEMBEROF, SYSDB_ORIG_MEMBEROF);
-        if (ret != EOK) {
-            DEBUG(1, ("sysdb_attrs_replace_name failed.\n"));
-            goto fail;
-        }
-
-        subreq = sysdb_store_custom_send(state, state->ev,
-                                         state->handle,
-                                         state->sdap_ctx->be->domain,
-                                         object_name,
-                                         HBAC_SERVICEGROUPS_SUBDIR,
-                                         state->servicegroups_reply_list[state->current_item]);
-
-        if (subreq == NULL) {
-            DEBUG(1, ("sysdb_store_custom_send failed.\n"));
-            ret = ENOMEM;
-            goto fail;
-        }
-
-        tevent_req_set_callback(subreq, hbac_servicegroup_store_done, req);
-        return;
-    }
-
     subreq = sysdb_transaction_commit_send(state, state->ev, state->handle);
     if (subreq == NULL) {
         DEBUG(1, ("sysdb_transaction_commit_send failed.\n"));
@@ -706,6 +456,7 @@ static void hbac_servicegroup_store_prepare(struct tevent_req *req)
     }
     tevent_req_set_callback(subreq, sysdb_transaction_complete, req);
 
+
     return;
 
 fail:
@@ -713,7 +464,7 @@ fail:
     return;
 }
 
-static void hbac_servicegroup_store_done(struct tevent_req *subreq)
+static void hbac_service_store_done(struct tevent_req *subreq)
 {
     struct tevent_req *req = tevent_req_callback_data(subreq,
                                                       struct tevent_req);
@@ -729,15 +480,13 @@ static void hbac_servicegroup_store_done(struct tevent_req *subreq)
     }
 
     state->current_item++;
-    hbac_servicegroup_store_prepare(req);
+    hbac_service_store_prepare(req);
 }
 
 static int hbac_get_service_data_recv(struct tevent_req *req,
                                   TALLOC_CTX *memctx,
                                   size_t *hbac_services_count,
-                                  struct sysdb_attrs ***hbac_services_list,
-                                  size_t *hbac_servicegroups_count,
-                                  struct sysdb_attrs ***hbac_servicegroups_list)
+                                  struct sysdb_attrs ***hbac_services_list)
 {
     struct hbac_get_service_data_state *state = tevent_req_data(req,
                                             struct hbac_get_service_data_state);
@@ -751,12 +500,6 @@ static int hbac_get_service_data_recv(struct tevent_req *req,
         talloc_steal(memctx, state->services_reply_list[i]);
     }
 
-    *hbac_servicegroups_count = state->servicegroups_reply_count;
-    *hbac_servicegroups_list = talloc_steal(memctx,
-                                               state->servicegroups_reply_list);
-    for (i = 0; i < state->servicegroups_reply_count; i++) {
-        talloc_steal(memctx, state->servicegroups_reply_list[i]);
-    }
     return EOK;
 }
 
@@ -2558,9 +2301,7 @@ static void hbac_get_service_data_done(struct tevent_req *req)
 
     ret = hbac_get_service_data_recv(req, hbac_ctx,
                                      &hbac_ctx->hbac_services_count,
-                                     &hbac_ctx->hbac_services_list,
-                                     &hbac_ctx->hbac_servicegroups_count,
-                                     &hbac_ctx->hbac_servicegroups_list);
+                                     &hbac_ctx->hbac_services_list);
     talloc_zfree(req);
     if (ret != EOK) {
         goto fail;
diff --git a/src/providers/ipa/ipa_access.h b/src/providers/ipa/ipa_access.h
index e3e0c4f..514afc0 100644
--- a/src/providers/ipa/ipa_access.h
+++ b/src/providers/ipa/ipa_access.h
@@ -62,8 +62,6 @@ struct hbac_ctx {
     char *ldap_basedn;
     struct sysdb_attrs **hbac_services_list;
     size_t hbac_services_count;
-    struct sysdb_attrs **hbac_servicegroups_list;
-    size_t hbac_servicegroups_count;
 };
 
 void ipa_access_handler(struct be_req *be_req);
-- 
1.7.0.1



More information about the sssd-devel mailing list