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
From 5ba0fe3f3067f9c502bed898328d49652f05a053 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sb...@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

From e1efa2ea6209c349abbc22f490bf3de251253dc6 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sb...@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

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

Reply via email to