Blame SOURCES/0055-sysdb-do-not-use-objectClass-for-users-and-groups.patch

ced1f5
From e4ba8c5c6c08f86d51485d49c27635d7079efe13 Mon Sep 17 00:00:00 2001
ced1f5
From: Sumit Bose <sbose@redhat.com>
ced1f5
Date: Wed, 8 Nov 2017 15:14:58 +0100
ced1f5
Subject: [PATCH 55/57] sysdb: do not use objectClass for users and groups
ced1f5
MIME-Version: 1.0
ced1f5
Content-Type: text/plain; charset=UTF-8
ced1f5
Content-Transfer-Encoding: 8bit
ced1f5
ced1f5
The majority of the object in the SSSD cache are users and groups. If
ced1f5
there are many user and groups in the cache the index objects of the
ced1f5
objectclass attributes 'user' and 'group' become  large because the
ced1f5
must hold references to all objects of those object classes.
ced1f5
ced1f5
As a result the management of these index objects becomes costly because
ced1f5
they must be parsed and split apart quite often. Additionally they are
ced1f5
mostly useless because user and groups are lookup up by more specific
ced1f5
attributes in general.
ced1f5
ced1f5
Only when enumerating all user or groups this kind of index might be
ced1f5
useful.
ced1f5
ced1f5
There are two way of removing this kind of index from the user and group
ced1f5
objects. Either by removing objectClass from the list of indexes and add
ced1f5
a new attribute to all other type of object we want and index for. Or by
ced1f5
replacing objectClass with a different attribute for the user and group
ced1f5
objects. After some testing I think the latter one is the more reliable
ced1f5
one and implemented it in this patch.
ced1f5
ced1f5
Related to https://pagure.io/SSSD/sssd/issue/3503
ced1f5
ced1f5
Reviewed-by: Fabiano FidĂȘncio <fidencio@redhat.com>
ced1f5
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
ced1f5
(cherry picked from commit 0e238c259c066cf997aaa940d33d6bda96c15925)
ced1f5
---
ced1f5
 src/db/sysdb.h                                     | 10 ++--
ced1f5
 src/db/sysdb_init.c                                |  5 +-
ced1f5
 src/db/sysdb_ops.c                                 |  6 +--
ced1f5
 src/db/sysdb_search.c                              | 11 +++--
ced1f5
 src/db/sysdb_upgrade.c                             |  4 ++
ced1f5
 src/ldb_modules/memberof.c                         |  6 +--
ced1f5
 src/providers/ad/ad_pac.c                          |  2 +-
ced1f5
 src/providers/ipa/ipa_id.c                         |  9 ++--
ced1f5
 src/providers/ipa/ipa_subdomains_ext_groups.c      |  2 +-
ced1f5
 src/providers/ipa/ipa_subdomains_id.c              |  2 +-
ced1f5
 src/providers/krb5/krb5_renew_tgt.c                |  3 +-
ced1f5
 src/providers/ldap/ldap_id_cleanup.c               |  2 +-
ced1f5
 src/providers/ldap/sdap_async_groups.c             |  8 ++--
ced1f5
 src/providers/ldap/sdap_async_initgroups.c         |  2 +-
ced1f5
 src/providers/ldap/sdap_async_initgroups_ad.c      |  2 +-
ced1f5
 src/providers/ldap/sdap_async_nested_groups.c      |  2 +-
ced1f5
 .../common/cache_req/plugins/cache_req_common.c    |  2 +-
ced1f5
 src/responder/ifp/ifp_cache.c                      |  4 +-
ced1f5
 src/responder/ifp/ifp_groups.c                     |  4 +-
ced1f5
 src/responder/ifp/ifp_users.c                      |  2 +-
ced1f5
 src/responder/nss/nss_cmd.c                        |  2 +-
ced1f5
 src/responder/nss/nss_protocol_grent.c             |  2 +-
ced1f5
 src/responder/nss/nss_protocol_sid.c               |  4 +-
ced1f5
 src/tests/cmocka/test_ad_common.c                  |  2 +-
ced1f5
 src/tests/cmocka/test_ipa_subdomains_server.c      | 54 ++++++++++++++++------
ced1f5
 src/tests/sysdb-tests.c                            | 20 +++++---
ced1f5
 src/tools/sssctl/sssctl_cache.c                    |  3 +-
ced1f5
 27 files changed, 110 insertions(+), 65 deletions(-)
ced1f5
ced1f5
diff --git a/src/db/sysdb.h b/src/db/sysdb.h
ced1f5
index 4192f9085d941814eccd2ac60ce8fb6d4e1bfa67..fd18ecefed2b2c5f35060fa47fd160a8968e073b 100644
ced1f5
--- a/src/db/sysdb.h
ced1f5
+++ b/src/db/sysdb.h
ced1f5
@@ -192,9 +192,10 @@
ced1f5
 
ced1f5
 #define SYSDB_NEXTID_FILTER "("SYSDB_NEXTID"=*)"
ced1f5
 
ced1f5
-#define SYSDB_UC "objectclass="SYSDB_USER_CLASS
ced1f5
-#define SYSDB_GC "objectclass="SYSDB_GROUP_CLASS
ced1f5
-#define SYSDB_NC "objectclass="SYSDB_NETGROUP_CLASS
ced1f5
+#define SYSDB_OBJECTCATEGORY "objectCategory"
ced1f5
+#define SYSDB_UC SYSDB_OBJECTCATEGORY"="SYSDB_USER_CLASS
ced1f5
+#define SYSDB_GC SYSDB_OBJECTCATEGORY"="SYSDB_GROUP_CLASS
ced1f5
+#define SYSDB_NC SYSDB_OBJECTCLASS"="SYSDB_NETGROUP_CLASS
ced1f5
 #define SYSDB_MPGC "|("SYSDB_UC")("SYSDB_GC")"
ced1f5
 
ced1f5
 #define SYSDB_PWNAM_FILTER "(&("SYSDB_UC")(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))"
ced1f5
@@ -227,7 +228,8 @@
ced1f5
 #define SYSDB_DEFAULT_ATTRS SYSDB_LAST_UPDATE, \
ced1f5
                             SYSDB_CACHE_EXPIRE, \
ced1f5
                             SYSDB_INITGR_EXPIRE, \
ced1f5
-                            SYSDB_OBJECTCLASS
ced1f5
+                            SYSDB_OBJECTCLASS, \
ced1f5
+                            SYSDB_OBJECTCATEGORY
ced1f5
 
ced1f5
 #define SYSDB_PW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
ced1f5
                         SYSDB_GIDNUM, SYSDB_GECOS, \
ced1f5
diff --git a/src/db/sysdb_init.c b/src/db/sysdb_init.c
ced1f5
index e246a165ec1d654dba19aa771ed97bfc3a07f245..44a7918f603fe1368b7d81738666de6bb47b83d0 100644
ced1f5
--- a/src/db/sysdb_init.c
ced1f5
+++ b/src/db/sysdb_init.c
ced1f5
@@ -31,11 +31,12 @@
ced1f5
 #define LDB_MODULES_PATH "LDB_MODULES_PATH"
ced1f5
 
ced1f5
 /* If an entry differs only in these attributes, they are written to
ced1f5
- * the timestamp cache only. In addition, objectclass is added so that
ced1f5
- * we can distinguish between users and groups.
ced1f5
+ * the timestamp cache only. In addition, objectclass/objectcategory is added
ced1f5
+ * so that we can distinguish between users and groups.
ced1f5
  */
ced1f5
 const char *sysdb_ts_cache_attrs[] = {
ced1f5
     SYSDB_OBJECTCLASS,
ced1f5
+    SYSDB_OBJECTCATEGORY,
ced1f5
     SYSDB_LAST_UPDATE,
ced1f5
     SYSDB_CACHE_EXPIRE,
ced1f5
     SYSDB_ORIG_MODSTAMP,
ced1f5
diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c
ced1f5
index 1539c41c93e7d6ebd1e544abbb1707df5578cd72..024683317cab99743681db804f7026c8dbb33a38 100644
ced1f5
--- a/src/db/sysdb_ops.c
ced1f5
+++ b/src/db/sysdb_ops.c
ced1f5
@@ -958,7 +958,7 @@ static struct sysdb_attrs *ts_obj_attrs(TALLOC_CTX *mem_ctx,
ced1f5
         return NULL;
ced1f5
     }
ced1f5
 
ced1f5
-    ret = sysdb_attrs_add_string(attrs, SYSDB_OBJECTCLASS, oc);
ced1f5
+    ret = sysdb_attrs_add_string(attrs, SYSDB_OBJECTCATEGORY, oc);
ced1f5
     if (ret != EOK) {
ced1f5
         talloc_free(attrs);
ced1f5
         return NULL;
ced1f5
@@ -1667,7 +1667,7 @@ int sysdb_add_basic_user(struct sss_domain_info *domain,
ced1f5
         ERROR_OUT(ret, ENOMEM, done);
ced1f5
     }
ced1f5
 
ced1f5
-    ret = sysdb_add_string(msg, SYSDB_OBJECTCLASS, SYSDB_USER_CLASS);
ced1f5
+    ret = sysdb_add_string(msg, SYSDB_OBJECTCATEGORY, SYSDB_USER_CLASS);
ced1f5
     if (ret) goto done;
ced1f5
 
ced1f5
     ret = sysdb_add_string(msg, SYSDB_NAME, name);
ced1f5
@@ -2120,7 +2120,7 @@ int sysdb_add_basic_group(struct sss_domain_info *domain,
ced1f5
         ERROR_OUT(ret, ENOMEM, done);
ced1f5
     }
ced1f5
 
ced1f5
-    ret = sysdb_add_string(msg, SYSDB_OBJECTCLASS, SYSDB_GROUP_CLASS);
ced1f5
+    ret = sysdb_add_string(msg, SYSDB_OBJECTCATEGORY, SYSDB_GROUP_CLASS);
ced1f5
     if (ret) goto done;
ced1f5
 
ced1f5
     ret = sysdb_add_string(msg, SYSDB_NAME, name);
ced1f5
diff --git a/src/db/sysdb_search.c b/src/db/sysdb_search.c
ced1f5
index 8083966900429b268a3b984f1cad3d47d1099198..a6a81e23d257331614085403b4dca8ded860600b 100644
ced1f5
--- a/src/db/sysdb_search.c
ced1f5
+++ b/src/db/sysdb_search.c
ced1f5
@@ -114,10 +114,11 @@ static errno_t merge_msg_ts_attrs(struct sysdb_ctx *sysdb,
ced1f5
         return EIO;
ced1f5
     }
ced1f5
 
ced1f5
-    /* Deliberately start from 1 in order to not merge objectclass and avoid
ced1f5
-     * breaking MPGs where the OC might be made up
ced1f5
+    /* Deliberately start from 2 in order to not merge
ced1f5
+     * objectclass/objectcategory and avoid breaking MPGs where the OC might
ced1f5
+     * be made up
ced1f5
      */
ced1f5
-    for (size_t c = 1; sysdb_ts_cache_attrs[c]; c++) {
ced1f5
+    for (size_t c = 2; sysdb_ts_cache_attrs[c]; c++) {
ced1f5
         ret = merge_ts_attr(ts_msgs[0], sysdb_msg,
ced1f5
                             sysdb_ts_cache_attrs[c], attrs);
ced1f5
         if (ret != EOK) {
ced1f5
@@ -751,7 +752,7 @@ static int mpg_convert(struct ldb_message *msg)
ced1f5
     struct ldb_val *val = NULL;
ced1f5
     int i;
ced1f5
 
ced1f5
-    el = ldb_msg_find_element(msg, "objectClass");
ced1f5
+    el = ldb_msg_find_element(msg, SYSDB_OBJECTCATEGORY);
ced1f5
     if (!el) return EINVAL;
ced1f5
 
ced1f5
     /* see if this is a user to convert to a group */
ced1f5
@@ -2088,7 +2089,7 @@ errno_t sysdb_get_direct_parents(TALLOC_CTX *mem_ctx,
ced1f5
     }
ced1f5
 
ced1f5
     member_filter = talloc_asprintf(tmp_ctx, "(&(%s=%s)(%s=%s))",
ced1f5
-                                    SYSDB_OBJECTCLASS, SYSDB_GROUP_CLASS,
ced1f5
+                                    SYSDB_OBJECTCATEGORY, SYSDB_GROUP_CLASS,
ced1f5
                                     SYSDB_MEMBER, sanitized_dn);
ced1f5
     if (!member_filter) {
ced1f5
         ret = ENOMEM;
ced1f5
diff --git a/src/db/sysdb_upgrade.c b/src/db/sysdb_upgrade.c
ced1f5
index 040c91ca6276e7c51a126eefe034aa5fe9d0433f..365d45f7ebd78523ca9ec4b9c2158cc09acb5489 100644
ced1f5
--- a/src/db/sysdb_upgrade.c
ced1f5
+++ b/src/db/sysdb_upgrade.c
ced1f5
@@ -149,6 +149,7 @@ int sysdb_upgrade_01(struct ldb_context *ldb, const char **ver)
ced1f5
     struct ldb_dn *mem_dn;
ced1f5
     struct ldb_message *msg;
ced1f5
     const struct ldb_val *val;
ced1f5
+    /* No change needed because this version has objectclass group */
ced1f5
     const char *filter = "(&(memberUid=*)(objectclass=group))";
ced1f5
     const char *attrs[] = { "memberUid", NULL };
ced1f5
     const char *mdn;
ced1f5
@@ -1041,6 +1042,7 @@ int sysdb_upgrade_10(struct sysdb_ctx *sysdb, struct sss_domain_info *domain,
ced1f5
     struct ldb_message_element *memberof_el;
ced1f5
     const char *name;
ced1f5
     struct ldb_dn *basedn;
ced1f5
+    /* No change needed because version 10 has objectclass user */
ced1f5
     const char *filter = "(&(objectClass=user)(!(uidNumber=*))(memberOf=*))";
ced1f5
     const char *attrs[] = { "name", "memberof", NULL };
ced1f5
     struct upgrade_ctx *ctx;
ced1f5
@@ -2082,6 +2084,7 @@ static void qualify_users(struct upgrade_ctx *ctx,
ced1f5
                           struct sss_names_ctx *names,
ced1f5
                           struct ldb_dn *base_dn)
ced1f5
 {
ced1f5
+    /* No change needed because this version has objectclass user */
ced1f5
     const char *user_filter = "objectclass=user";
ced1f5
     const char *user_name_attrs[] = { SYSDB_NAME,
ced1f5
                                       SYSDB_NAME_ALIAS,
ced1f5
@@ -2107,6 +2110,7 @@ static void qualify_groups(struct upgrade_ctx *ctx,
ced1f5
                            struct sss_names_ctx *names,
ced1f5
                            struct ldb_dn *base_dn)
ced1f5
 {
ced1f5
+    /* No change needed because this version has objectclass group */
ced1f5
     const char *group_filter = "objectclass=group";
ced1f5
     const char *group_name_attrs[] = { SYSDB_NAME,
ced1f5
                                        SYSDB_NAME_ALIAS,
ced1f5
diff --git a/src/ldb_modules/memberof.c b/src/ldb_modules/memberof.c
ced1f5
index af7147ee7cc9299d4040d63a637373842dcee02a..327a38c5f75afcde1b997796afd1217d45acbde2 100644
ced1f5
--- a/src/ldb_modules/memberof.c
ced1f5
+++ b/src/ldb_modules/memberof.c
ced1f5
@@ -31,7 +31,7 @@
ced1f5
 #define DB_USER_CLASS "user"
ced1f5
 #define DB_GROUP_CLASS "group"
ced1f5
 #define DB_CACHE_EXPIRE "dataExpireTimestamp"
ced1f5
-#define DB_OC "objectClass"
ced1f5
+#define DB_OC "objectCategory"
ced1f5
 
ced1f5
 #ifndef MAX
ced1f5
 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
ced1f5
@@ -3928,7 +3928,7 @@ static int memberof_recompute_task(struct ldb_module *module,
ced1f5
 {
ced1f5
     struct ldb_context *ldb = ldb_module_get_ctx(module);
ced1f5
     static const char *attrs[] = { DB_NAME, DB_MEMBEROF, NULL };
ced1f5
-    static const char *filter = "(objectclass=user)";
ced1f5
+    static const char *filter = "("DB_OC"="DB_USER_CLASS")";
ced1f5
     struct mbof_rcmp_context *ctx;
ced1f5
     struct ldb_request *src_req;
ced1f5
     int ret;
ced1f5
@@ -4035,7 +4035,7 @@ static int mbof_rcmp_search_groups(struct mbof_rcmp_context *ctx)
ced1f5
     struct ldb_context *ldb = ldb_module_get_ctx(ctx->module);
ced1f5
     static const char *attrs[] = { DB_MEMBEROF, DB_MEMBERUID,
ced1f5
                                    DB_NAME, DB_MEMBER, NULL };
ced1f5
-    static const char *filter = "(objectclass=group)";
ced1f5
+    static const char *filter = "("DB_OC"="DB_GROUP_CLASS")";
ced1f5
     struct ldb_request *req;
ced1f5
     int ret;
ced1f5
 
ced1f5
diff --git a/src/providers/ad/ad_pac.c b/src/providers/ad/ad_pac.c
ced1f5
index ed002e1f9bf8f15d5b5d4b1c55392a34d18575e4..6b47462cf79a81b9258e3508914c043432edfed3 100644
ced1f5
--- a/src/providers/ad/ad_pac.c
ced1f5
+++ b/src/providers/ad/ad_pac.c
ced1f5
@@ -31,7 +31,7 @@ static errno_t find_user_entry(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
ced1f5
                                struct dp_id_data *ar,
ced1f5
                                struct ldb_message **_msg)
ced1f5
 {
ced1f5
-    const char *user_attrs[] = { SYSDB_NAME, SYSDB_OBJECTCLASS,
ced1f5
+    const char *user_attrs[] = { SYSDB_NAME, SYSDB_OBJECTCATEGORY,
ced1f5
                                  SYSDB_PAC_BLOB, SYSDB_PAC_BLOB_EXPIRE,
ced1f5
                                  NULL };
ced1f5
     struct ldb_message *msg;
ced1f5
diff --git a/src/providers/ipa/ipa_id.c b/src/providers/ipa/ipa_id.c
ced1f5
index 5044577f0faa95b19de9233240e92aa60f029774..8f8759f64b758aae7e45c88588e97a1bcf16ad79 100644
ced1f5
--- a/src/providers/ipa/ipa_id.c
ced1f5
+++ b/src/providers/ipa/ipa_id.c
ced1f5
@@ -431,7 +431,8 @@ static errno_t ipa_id_get_group_uuids(TALLOC_CTX *mem_ctx,
ced1f5
     }
ced1f5
 
ced1f5
     filter = talloc_asprintf(tmp_ctx,
ced1f5
-                             "(&(objectclass=%s)(!(%s=*))(%s=*))",
ced1f5
+                             "(&(%s=%s)(!(%s=*))(%s=*))",
ced1f5
+                             SYSDB_OBJECTCATEGORY,
ced1f5
                              SYSDB_GROUP_CLASS, SYSDB_OVERRIDE_DN,
ced1f5
                              SYSDB_UUID);
ced1f5
     if (filter == NULL) {
ced1f5
@@ -733,7 +734,7 @@ static void ipa_id_get_account_info_orig_done(struct tevent_req *subreq)
ced1f5
     const char *attrs[] = { SYSDB_NAME,
ced1f5
                             SYSDB_UIDNUM,
ced1f5
                             SYSDB_SID_STR,
ced1f5
-                            SYSDB_OBJECTCLASS,
ced1f5
+                            SYSDB_OBJECTCATEGORY,
ced1f5
                             SYSDB_UUID,
ced1f5
                             SYSDB_GHOST,
ced1f5
                             SYSDB_HOMEDIR,
ced1f5
@@ -819,7 +820,7 @@ static int ipa_id_get_account_info_post_proc_step(struct tevent_req *req)
ced1f5
     struct ipa_id_get_account_info_state *state = tevent_req_data(req,
ced1f5
                                           struct ipa_id_get_account_info_state);
ced1f5
 
ced1f5
-    class = ldb_msg_find_attr_as_string(state->obj_msg, SYSDB_OBJECTCLASS,
ced1f5
+    class = ldb_msg_find_attr_as_string(state->obj_msg, SYSDB_OBJECTCATEGORY,
ced1f5
                                         NULL);
ced1f5
     if (class == NULL) {
ced1f5
         DEBUG(SSSDBG_CRIT_FAILURE, "Cannot find an objectclass.\n");
ced1f5
@@ -957,7 +958,7 @@ static void ipa_id_get_account_info_done(struct tevent_req *subreq)
ced1f5
         goto fail;
ced1f5
     }
ced1f5
 
ced1f5
-    class = ldb_msg_find_attr_as_string(state->obj_msg, SYSDB_OBJECTCLASS,
ced1f5
+    class = ldb_msg_find_attr_as_string(state->obj_msg, SYSDB_OBJECTCATEGORY,
ced1f5
                                         NULL);
ced1f5
     if (class == NULL) {
ced1f5
         DEBUG(SSSDBG_CRIT_FAILURE, "Cannot find an objectclass.\n");
ced1f5
diff --git a/src/providers/ipa/ipa_subdomains_ext_groups.c b/src/providers/ipa/ipa_subdomains_ext_groups.c
ced1f5
index 0359e0dedeef8db0da71d16a6f0044e43a7a9840..9e1d6c3a9bdeda56b421a2dc9198dff0b84c54ce 100644
ced1f5
--- a/src/providers/ipa/ipa_subdomains_ext_groups.c
ced1f5
+++ b/src/providers/ipa/ipa_subdomains_ext_groups.c
ced1f5
@@ -940,7 +940,7 @@ search_user_or_group_by_sid_str(TALLOC_CTX *mem_ctx,
ced1f5
     const char *attrs[] = { SYSDB_NAME,
ced1f5
                             SYSDB_SID_STR,
ced1f5
                             SYSDB_ORIG_DN,
ced1f5
-                            SYSDB_OBJECTCLASS,
ced1f5
+                            SYSDB_OBJECTCATEGORY,
ced1f5
                             SYSDB_CACHE_EXPIRE,
ced1f5
                             NULL };
ced1f5
     TALLOC_CTX *tmp_ctx = NULL;
ced1f5
diff --git a/src/providers/ipa/ipa_subdomains_id.c b/src/providers/ipa/ipa_subdomains_id.c
ced1f5
index 3530af94ef59397db72465fcb0c4a03117a4d8bd..2ba9813a44b4d914d9c2ef7a1a7504546f52954c 100644
ced1f5
--- a/src/providers/ipa/ipa_subdomains_id.c
ced1f5
+++ b/src/providers/ipa/ipa_subdomains_id.c
ced1f5
@@ -888,7 +888,7 @@ apply_subdomain_homedir(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
ced1f5
     struct ldb_message_element *msg_el = NULL;
ced1f5
     size_t c;
ced1f5
 
ced1f5
-    msg_el = ldb_msg_find_element(msg, SYSDB_OBJECTCLASS);
ced1f5
+    msg_el = ldb_msg_find_element(msg, SYSDB_OBJECTCATEGORY);
ced1f5
     if (msg_el == NULL) {
ced1f5
         DEBUG(SSSDBG_OP_FAILURE, "ldb_msg_find_element failed.\n");
ced1f5
         ret = ENOENT;
ced1f5
diff --git a/src/providers/krb5/krb5_renew_tgt.c b/src/providers/krb5/krb5_renew_tgt.c
ced1f5
index ea6b39deb8dacdfa9211058a54a57b6e9f6b7d9d..549c08c6f105276fa9913568c228d3ff627623ae 100644
ced1f5
--- a/src/providers/krb5/krb5_renew_tgt.c
ced1f5
+++ b/src/providers/krb5/krb5_renew_tgt.c
ced1f5
@@ -385,8 +385,7 @@ static errno_t check_ccache_files(struct renew_tgt_ctx *renew_tgt_ctx)
ced1f5
 {
ced1f5
     TALLOC_CTX *tmp_ctx;
ced1f5
     int ret;
ced1f5
-    const char *ccache_filter = "(&("SYSDB_CCACHE_FILE"=*)" \
ced1f5
-                                  "("SYSDB_OBJECTCLASS"="SYSDB_USER_CLASS"))";
ced1f5
+    const char *ccache_filter = "(&("SYSDB_CCACHE_FILE"=*)("SYSDB_UC"))";
ced1f5
     const char *ccache_attrs[] = { SYSDB_CCACHE_FILE, SYSDB_UPN, SYSDB_NAME,
ced1f5
                                    SYSDB_CANONICAL_UPN, NULL };
ced1f5
     size_t msgs_count = 0;
ced1f5
diff --git a/src/providers/ldap/ldap_id_cleanup.c b/src/providers/ldap/ldap_id_cleanup.c
ced1f5
index c85ce45918cf938a95ff85c31bfe0541f9ddd052..8c0f0c18ba587e9bbfec144abe9c172cd5e0465b 100644
ced1f5
--- a/src/providers/ldap/ldap_id_cleanup.c
ced1f5
+++ b/src/providers/ldap/ldap_id_cleanup.c
ced1f5
@@ -438,7 +438,7 @@ static int cleanup_groups(TALLOC_CTX *memctx,
ced1f5
              */
ced1f5
             gid = (gid_t) ldb_msg_find_attr_as_uint(msgs[i], SYSDB_GIDNUM, 0);
ced1f5
             subfilter = talloc_asprintf(tmpctx, "(&(%s=%s)(|(%s=%s)(%s=%lu)))",
ced1f5
-                                        SYSDB_OBJECTCLASS, SYSDB_USER_CLASS,
ced1f5
+                                        SYSDB_OBJECTCATEGORY, SYSDB_USER_CLASS,
ced1f5
                                         SYSDB_MEMBEROF, sanitized_dn,
ced1f5
                                         SYSDB_GIDNUM, (long unsigned) gid);
ced1f5
         } else {
ced1f5
diff --git a/src/providers/ldap/sdap_async_groups.c b/src/providers/ldap/sdap_async_groups.c
ced1f5
index 536e3f13744c5350eed518c9bd35fd89e0899dc6..b1cfb7e4a4c054e5d365da5fca65da27c9ef5461 100644
ced1f5
--- a/src/providers/ldap/sdap_async_groups.c
ced1f5
+++ b/src/providers/ldap/sdap_async_groups.c
ced1f5
@@ -39,7 +39,7 @@ static int sdap_find_entry_by_origDN(TALLOC_CTX *memctx,
ced1f5
                                      bool *_is_group)
ced1f5
 {
ced1f5
     TALLOC_CTX *tmpctx;
ced1f5
-    const char *attrs[] = {SYSDB_OBJECTCLASS,  NULL};
ced1f5
+    const char *attrs[] = {SYSDB_OBJECTCLASS, SYSDB_OBJECTCATEGORY, NULL};
ced1f5
     struct ldb_dn *base_dn;
ced1f5
     char *filter;
ced1f5
     struct ldb_message **msgs;
ced1f5
@@ -90,11 +90,11 @@ static int sdap_find_entry_by_origDN(TALLOC_CTX *memctx,
ced1f5
     }
ced1f5
 
ced1f5
     if (_is_group != NULL) {
ced1f5
-        objectclass = ldb_msg_find_attr_as_string(msgs[0], SYSDB_OBJECTCLASS,
ced1f5
+        objectclass = ldb_msg_find_attr_as_string(msgs[0], SYSDB_OBJECTCATEGORY,
ced1f5
                                                   NULL);
ced1f5
         if (objectclass == NULL) {
ced1f5
-            DEBUG(SSSDBG_OP_FAILURE, "An antry without a %s?\n",
ced1f5
-                  SYSDB_OBJECTCLASS);
ced1f5
+            DEBUG(SSSDBG_OP_FAILURE, "An entry without a %s?\n",
ced1f5
+                  SYSDB_OBJECTCATEGORY);
ced1f5
             ret = EINVAL;
ced1f5
             goto done;
ced1f5
         }
ced1f5
diff --git a/src/providers/ldap/sdap_async_initgroups.c b/src/providers/ldap/sdap_async_initgroups.c
ced1f5
index a33975cde4bc359cfe8395c0de04fd1774b8763d..f8a84474749e08349b539c774d68c876167cfdf1 100644
ced1f5
--- a/src/providers/ldap/sdap_async_initgroups.c
ced1f5
+++ b/src/providers/ldap/sdap_async_initgroups.c
ced1f5
@@ -2341,7 +2341,7 @@ static errno_t rfc2307bis_nested_groups_step(struct tevent_req *req)
ced1f5
     }
ced1f5
 
ced1f5
     ret = sysdb_attrs_get_string(state->groups[state->group_iter],
ced1f5
-                                 SYSDB_OBJECTCLASS, &class);
ced1f5
+                                 SYSDB_OBJECTCATEGORY, &class);
ced1f5
     if (ret == EOK) {
ced1f5
         /* If there is a objectClass attribute the object is coming from the
ced1f5
          * cache and the name attribute of the object already has the primary
ced1f5
diff --git a/src/providers/ldap/sdap_async_initgroups_ad.c b/src/providers/ldap/sdap_async_initgroups_ad.c
ced1f5
index 2831be9776293260aeec0e2ff85160f1938bdb32..61aa69a2dfbe22cac37a5b7fddc07473527e5de5 100644
ced1f5
--- a/src/providers/ldap/sdap_async_initgroups_ad.c
ced1f5
+++ b/src/providers/ldap/sdap_async_initgroups_ad.c
ced1f5
@@ -1606,7 +1606,7 @@ sdap_ad_get_domain_local_groups_parse_parents(TALLOC_CTX *mem_ctx,
ced1f5
         goto done;
ced1f5
     }
ced1f5
 
ced1f5
-    ret = sysdb_attrs_get_string(gr->group, SYSDB_OBJECTCLASS, &class);
ced1f5
+    ret = sysdb_attrs_get_string(gr->group, SYSDB_OBJECTCATEGORY, &class);
ced1f5
     if (ret != EOK) {
ced1f5
         /* If objectclass is missing gr->group is a nested parent found during
ced1f5
          * the nested group lookup. It might not already stored in the cache.
ced1f5
diff --git a/src/providers/ldap/sdap_async_nested_groups.c b/src/providers/ldap/sdap_async_nested_groups.c
ced1f5
index 9271d8cfe38d11fb1ea14960a997f0deee175b27..b1f9753d7cdf5f6e278c54394d4f306cc21a42ab 100644
ced1f5
--- a/src/providers/ldap/sdap_async_nested_groups.c
ced1f5
+++ b/src/providers/ldap/sdap_async_nested_groups.c
ced1f5
@@ -1686,7 +1686,7 @@ static errno_t sdap_nested_group_get_ipa_user(TALLOC_CTX *mem_ctx,
ced1f5
         goto done;
ced1f5
     }
ced1f5
 
ced1f5
-    ret = sysdb_attrs_add_string(user, SYSDB_OBJECTCLASS, SYSDB_USER_CLASS);
ced1f5
+    ret = sysdb_attrs_add_string(user, SYSDB_OBJECTCATEGORY, SYSDB_USER_CLASS);
ced1f5
     if (ret != EOK) {
ced1f5
         goto done;
ced1f5
     }
ced1f5
diff --git a/src/responder/common/cache_req/plugins/cache_req_common.c b/src/responder/common/cache_req/plugins/cache_req_common.c
ced1f5
index b80f310feeebbdbc824db441ff5313632585d3fb..1f86258bc14c7a382712959f24a4ec4c153572d4 100644
ced1f5
--- a/src/responder/common/cache_req/plugins/cache_req_common.c
ced1f5
+++ b/src/responder/common/cache_req/plugins/cache_req_common.c
ced1f5
@@ -53,7 +53,7 @@ cache_req_well_known_sid_msg(TALLOC_CTX *mem_ctx,
ced1f5
         goto done;
ced1f5
     }
ced1f5
 
ced1f5
-    ldberr = ldb_msg_add_string(msg, SYSDB_OBJECTCLASS, SYSDB_GROUP_CLASS);
ced1f5
+    ldberr = ldb_msg_add_string(msg, SYSDB_OBJECTCATEGORY, SYSDB_GROUP_CLASS);
ced1f5
     if (ldberr != LDB_SUCCESS) {
ced1f5
         goto done;
ced1f5
     }
ced1f5
diff --git a/src/responder/ifp/ifp_cache.c b/src/responder/ifp/ifp_cache.c
ced1f5
index 8ea2d8008d40bc0a28f3871b511690af677c5c5e..f84cb14de48b5c86acb027f275edded4eb73e192 100644
ced1f5
--- a/src/responder/ifp/ifp_cache.c
ced1f5
+++ b/src/responder/ifp/ifp_cache.c
ced1f5
@@ -100,7 +100,7 @@ ifp_cache_get_cached_objects(TALLOC_CTX *mem_ctx,
ced1f5
     errno_t ret;
ced1f5
     int ldb_ret;
ced1f5
     int i;
ced1f5
-    const char *attrs[] = {SYSDB_OBJECTCLASS, SYSDB_UIDNUM,
ced1f5
+    const char *attrs[] = {SYSDB_OBJECTCATEGORY, SYSDB_UIDNUM,
ced1f5
                            SYSDB_GIDNUM, NULL};
ced1f5
 
ced1f5
     tmp_ctx = talloc_new(NULL);
ced1f5
@@ -117,7 +117,7 @@ ifp_cache_get_cached_objects(TALLOC_CTX *mem_ctx,
ced1f5
 
ced1f5
     ldb_ret = ldb_search(sysdb_ctx_get_ldb(domain->sysdb), tmp_ctx, &result,
ced1f5
                          base_dn, LDB_SCOPE_SUBTREE, attrs,
ced1f5
-                         "(&(objectClass=%s)(%s=TRUE))", class,
ced1f5
+                         "(&(%s=%s)(%s=TRUE))", SYSDB_OBJECTCATEGORY, class,
ced1f5
                          SYSDB_IFP_CACHED);
ced1f5
     if (ldb_ret != LDB_SUCCESS) {
ced1f5
         DEBUG(SSSDBG_CRIT_FAILURE, "Unable to search the cache\n");
ced1f5
diff --git a/src/responder/ifp/ifp_groups.c b/src/responder/ifp/ifp_groups.c
ced1f5
index 7503254238eafdafbe2d90fbf7416587be49e1b7..b274b8f52d7908165acc10b91a7d6afe638f1a82 100644
ced1f5
--- a/src/responder/ifp/ifp_groups.c
ced1f5
+++ b/src/responder/ifp/ifp_groups.c
ced1f5
@@ -841,7 +841,7 @@ ifp_groups_group_get_members(TALLOC_CTX *mem_ctx,
ced1f5
     int num_groups;
ced1f5
     int i;
ced1f5
     errno_t ret;
ced1f5
-    const char *attrs[] = {SYSDB_OBJECTCLASS, SYSDB_UIDNUM,
ced1f5
+    const char *attrs[] = {SYSDB_OBJECTCATEGORY, SYSDB_UIDNUM,
ced1f5
                            SYSDB_GIDNUM, NULL};
ced1f5
 
ced1f5
     tmp_ctx = talloc_new(NULL);
ced1f5
@@ -888,7 +888,7 @@ ifp_groups_group_get_members(TALLOC_CTX *mem_ctx,
ced1f5
     num_users = 0;
ced1f5
     num_groups = 0;
ced1f5
     for (i = 0; i < num_members; i++) {
ced1f5
-        class = ldb_msg_find_attr_as_string(members[i], SYSDB_OBJECTCLASS,
ced1f5
+        class = ldb_msg_find_attr_as_string(members[i], SYSDB_OBJECTCATEGORY,
ced1f5
                                             NULL);
ced1f5
         if (class == NULL) {
ced1f5
             ret = ERR_INTERNAL;
ced1f5
diff --git a/src/responder/ifp/ifp_users.c b/src/responder/ifp/ifp_users.c
ced1f5
index 86a1f43a2c6e7d785c9d34e350c71f242ff7182f..cb342a245ef6545168a7a60c252505f50576fdf7 100644
ced1f5
--- a/src/responder/ifp/ifp_users.c
ced1f5
+++ b/src/responder/ifp/ifp_users.c
ced1f5
@@ -1441,7 +1441,7 @@ void ifp_users_user_get_extra_attributes(struct sbus_request *sbus_req,
ced1f5
     }
ced1f5
 
ced1f5
     filter = talloc_asprintf(sbus_req, "(&(%s=%s)(%s=%s))",
ced1f5
-                             SYSDB_OBJECTCLASS, SYSDB_USER_CLASS,
ced1f5
+                             SYSDB_OBJECTCATEGORY, SYSDB_USER_CLASS,
ced1f5
                              SYSDB_NAME, name);
ced1f5
     if (filter == NULL) {
ced1f5
         DEBUG(SSSDBG_CRIT_FAILURE, "talloc_asprintf() failed\n");
ced1f5
diff --git a/src/responder/nss/nss_cmd.c b/src/responder/nss/nss_cmd.c
ced1f5
index 545257a0be7e91e9de767a57848bb77c5791db4e..956ee53cb88dd24faaa95ac39c8d9540af66cfb2 100644
ced1f5
--- a/src/responder/nss/nss_cmd.c
ced1f5
+++ b/src/responder/nss/nss_cmd.c
ced1f5
@@ -1148,7 +1148,7 @@ static errno_t nss_cmd_getorigbyname(struct cli_ctx *cli_ctx)
ced1f5
     errno_t ret;
ced1f5
     struct nss_ctx *nss_ctx;
ced1f5
     const char **attrs;
ced1f5
-    static const char *defattrs[] = { SYSDB_NAME, SYSDB_OBJECTCLASS,
ced1f5
+    static const char *defattrs[] = { SYSDB_NAME, SYSDB_OBJECTCATEGORY,
ced1f5
                                       SYSDB_SID_STR,
ced1f5
                                       ORIGINALAD_PREFIX SYSDB_NAME,
ced1f5
                                       ORIGINALAD_PREFIX SYSDB_UIDNUM,
ced1f5
diff --git a/src/responder/nss/nss_protocol_grent.c b/src/responder/nss/nss_protocol_grent.c
ced1f5
index 6f6ae57dd97b000ad3cf174b0f649d46981563e2..3550c3f0d375b305d4dbdf3ea19613696448da35 100644
ced1f5
--- a/src/responder/nss/nss_protocol_grent.c
ced1f5
+++ b/src/responder/nss/nss_protocol_grent.c
ced1f5
@@ -33,7 +33,7 @@ nss_get_grent(TALLOC_CTX *mem_ctx,
ced1f5
     errno_t ret;
ced1f5
 
ced1f5
     /* Check object class. */
ced1f5
-    if (!ldb_msg_check_string_attribute(msg, "objectClass",
ced1f5
+    if (!ldb_msg_check_string_attribute(msg, SYSDB_OBJECTCATEGORY,
ced1f5
                                         SYSDB_GROUP_CLASS)) {
ced1f5
         DEBUG(SSSDBG_MINOR_FAILURE, "Wrong object (%s) found on stack!\n",
ced1f5
               ldb_dn_get_linearized(msg->dn));
ced1f5
diff --git a/src/responder/nss/nss_protocol_sid.c b/src/responder/nss/nss_protocol_sid.c
ced1f5
index 61357c2bf92e2f15d978b64a15ad5bd5aa354445..3f60967d750eea3135257ccb597efaa5aa1e2de3 100644
ced1f5
--- a/src/responder/nss/nss_protocol_sid.c
ced1f5
+++ b/src/responder/nss/nss_protocol_sid.c
ced1f5
@@ -30,9 +30,9 @@ find_sss_id_type(struct ldb_message *msg,
ced1f5
     struct ldb_message_element *el;
ced1f5
     struct ldb_val *val = NULL;
ced1f5
 
ced1f5
-    el = ldb_msg_find_element(msg, SYSDB_OBJECTCLASS);
ced1f5
+    el = ldb_msg_find_element(msg, SYSDB_OBJECTCATEGORY);
ced1f5
     if (el == NULL) {
ced1f5
-        DEBUG(SSSDBG_OP_FAILURE, "Objectclass attribute not found.\n");
ced1f5
+        DEBUG(SSSDBG_OP_FAILURE, "Objectcategory attribute not found.\n");
ced1f5
         return EINVAL;
ced1f5
     }
ced1f5
 
ced1f5
diff --git a/src/tests/cmocka/test_ad_common.c b/src/tests/cmocka/test_ad_common.c
ced1f5
index 3187af1b004cf3d1ffc1746950faa842f3a05fbc..80b3bb5599a95578b7734d5dfcd20a2a7428a084 100644
ced1f5
--- a/src/tests/cmocka/test_ad_common.c
ced1f5
+++ b/src/tests/cmocka/test_ad_common.c
ced1f5
@@ -336,7 +336,7 @@ static void test_ad_get_pac_data_from_user_entry(void **state)
ced1f5
 
ced1f5
     ret = ldb_msg_add_string(user_msg, SYSDB_NAME, "username");
ced1f5
     assert_int_equal(ret, EOK);
ced1f5
-    ret = ldb_msg_add_string(user_msg, SYSDB_OBJECTCLASS, "user");
ced1f5
+    ret = ldb_msg_add_string(user_msg, SYSDB_OBJECTCATEGORY, SYSDB_USER_CLASS);
ced1f5
     assert_int_equal(ret, EOK);
ced1f5
     ret = ldb_msg_add_string(user_msg, SYSDB_PAC_BLOB_EXPIRE, "12345");
ced1f5
     assert_int_equal(ret, EOK);
ced1f5
diff --git a/src/tests/cmocka/test_ipa_subdomains_server.c b/src/tests/cmocka/test_ipa_subdomains_server.c
ced1f5
index eccfc2fe1e2a224b2cec8ea3184796a23d32febe..1e492e86c1caf26d8890bfa37ebb21321afca366 100644
ced1f5
--- a/src/tests/cmocka/test_ipa_subdomains_server.c
ced1f5
+++ b/src/tests/cmocka/test_ipa_subdomains_server.c
ced1f5
@@ -455,6 +455,8 @@ static void test_ipa_server_create_trusts_twoway(struct tevent_req *req)
ced1f5
         tevent_req_callback_data(req, struct trust_test_ctx);
ced1f5
     errno_t ret;
ced1f5
     struct sss_domain_info *child_dom;
ced1f5
+    struct ipa_ad_server_ctx *s_trust;
ced1f5
+    struct ipa_ad_server_ctx *c_trust;
ced1f5
 
ced1f5
     ret = ipa_server_create_trusts_recv(req);
ced1f5
     talloc_zfree(req);
ced1f5
@@ -462,9 +464,18 @@ static void test_ipa_server_create_trusts_twoway(struct tevent_req *req)
ced1f5
 
ced1f5
     /* Trust object should be around now */
ced1f5
     assert_non_null(test_ctx->ipa_ctx->server_mode->trusts);
ced1f5
+    assert_non_null(test_ctx->ipa_ctx->server_mode->trusts->next);
ced1f5
 
ced1f5
+    if (strcmp(test_ctx->ipa_ctx->server_mode->trusts->dom->name,
ced1f5
+               SUBDOM_NAME) == 0) {
ced1f5
+        s_trust = test_ctx->ipa_ctx->server_mode->trusts;
ced1f5
+        c_trust = test_ctx->ipa_ctx->server_mode->trusts->next;
ced1f5
+    } else {
ced1f5
+        s_trust = test_ctx->ipa_ctx->server_mode->trusts->next;
ced1f5
+        c_trust = test_ctx->ipa_ctx->server_mode->trusts;
ced1f5
+    }
ced1f5
     /* Two-way trusts should use the system realm */
ced1f5
-    assert_trust_object(test_ctx->ipa_ctx->server_mode->trusts,
ced1f5
+    assert_trust_object(c_trust,
ced1f5
                         CHILD_NAME,
ced1f5
                         DOM_REALM,
ced1f5
                         CHILD_SID,
ced1f5
@@ -472,9 +483,8 @@ static void test_ipa_server_create_trusts_twoway(struct tevent_req *req)
ced1f5
                         TEST_AUTHID,
ced1f5
                         DOM_REALM);
ced1f5
 
ced1f5
-    assert_non_null(test_ctx->ipa_ctx->server_mode->trusts->next);
ced1f5
 
ced1f5
-    assert_trust_object(test_ctx->ipa_ctx->server_mode->trusts->next,
ced1f5
+    assert_trust_object(s_trust,
ced1f5
                         SUBDOM_NAME,
ced1f5
                         DOM_REALM,
ced1f5
                         SUBDOM_SID,
ced1f5
@@ -523,6 +533,8 @@ static void test_ipa_server_trust_init(void **state)
ced1f5
     errno_t ret;
ced1f5
     struct tevent_timer *timeout_handler;
ced1f5
     struct timeval tv;
ced1f5
+    struct ipa_ad_server_ctx *s_trust;
ced1f5
+    struct ipa_ad_server_ctx *c_trust;
ced1f5
 
ced1f5
     add_test_2way_subdomains(test_ctx);
ced1f5
 
ced1f5
@@ -537,13 +549,21 @@ static void test_ipa_server_trust_init(void **state)
ced1f5
     ret = test_ev_loop(test_ctx->tctx);
ced1f5
     assert_int_equal(ret, ERR_OK);
ced1f5
 
ced1f5
-    assert_non_null(test_ctx->ipa_ctx->server_mode->trusts);
ced1f5
-
ced1f5
     /* Trust object should be around now */
ced1f5
     assert_non_null(test_ctx->ipa_ctx->server_mode->trusts);
ced1f5
+    assert_non_null(test_ctx->ipa_ctx->server_mode->trusts->next);
ced1f5
+
ced1f5
+    if (strcmp(test_ctx->ipa_ctx->server_mode->trusts->dom->name,
ced1f5
+               SUBDOM_NAME) == 0) {
ced1f5
+        s_trust = test_ctx->ipa_ctx->server_mode->trusts;
ced1f5
+        c_trust = test_ctx->ipa_ctx->server_mode->trusts->next;
ced1f5
+    } else {
ced1f5
+        s_trust = test_ctx->ipa_ctx->server_mode->trusts->next;
ced1f5
+        c_trust = test_ctx->ipa_ctx->server_mode->trusts;
ced1f5
+    }
ced1f5
 
ced1f5
     /* Two-way trusts should use the system realm */
ced1f5
-    assert_trust_object(test_ctx->ipa_ctx->server_mode->trusts,
ced1f5
+    assert_trust_object(c_trust,
ced1f5
                         CHILD_NAME,
ced1f5
                         DOM_REALM,
ced1f5
                         CHILD_SID,
ced1f5
@@ -551,9 +571,7 @@ static void test_ipa_server_trust_init(void **state)
ced1f5
                         TEST_AUTHID,
ced1f5
                         DOM_REALM);
ced1f5
 
ced1f5
-    assert_non_null(test_ctx->ipa_ctx->server_mode->trusts->next);
ced1f5
-
ced1f5
-    assert_trust_object(test_ctx->ipa_ctx->server_mode->trusts->next,
ced1f5
+    assert_trust_object(s_trust,
ced1f5
                         SUBDOM_NAME,
ced1f5
                         DOM_REALM,
ced1f5
                         SUBDOM_SID,
ced1f5
@@ -708,6 +726,8 @@ static void test_ipa_server_create_trusts_oneway(struct tevent_req *req)
ced1f5
     struct trust_test_ctx *test_ctx = \
ced1f5
         tevent_req_callback_data(req, struct trust_test_ctx);
ced1f5
     errno_t ret;
ced1f5
+    struct ipa_ad_server_ctx *s_trust;
ced1f5
+    struct ipa_ad_server_ctx *c_trust;
ced1f5
 
ced1f5
     ret = ipa_server_create_trusts_recv(req);
ced1f5
     talloc_zfree(req);
ced1f5
@@ -720,9 +740,19 @@ static void test_ipa_server_create_trusts_oneway(struct tevent_req *req)
ced1f5
 
ced1f5
     /* Trust object should be around now */
ced1f5
     assert_non_null(test_ctx->ipa_ctx->server_mode->trusts);
ced1f5
+    assert_non_null(test_ctx->ipa_ctx->server_mode->trusts->next);
ced1f5
+
ced1f5
+    if (strcmp(test_ctx->ipa_ctx->server_mode->trusts->dom->name,
ced1f5
+               SUBDOM_NAME) == 0) {
ced1f5
+        s_trust = test_ctx->ipa_ctx->server_mode->trusts;
ced1f5
+        c_trust = test_ctx->ipa_ctx->server_mode->trusts->next;
ced1f5
+    } else {
ced1f5
+        s_trust = test_ctx->ipa_ctx->server_mode->trusts->next;
ced1f5
+        c_trust = test_ctx->ipa_ctx->server_mode->trusts;
ced1f5
+    }
ced1f5
 
ced1f5
     assert_trust_object(
ced1f5
-        test_ctx->ipa_ctx->server_mode->trusts,
ced1f5
+        c_trust,
ced1f5
         CHILD_NAME,    /* AD domain name */
ced1f5
         CHILD_REALM,   /* AD realm can be child if SDAP realm is parent's */
ced1f5
         CHILD_SID,
ced1f5
@@ -730,10 +760,8 @@ static void test_ipa_server_create_trusts_oneway(struct tevent_req *req)
ced1f5
         ONEWAY_PRINC,     /* Principal shared with parent AD dom */
ced1f5
         SUBDOM_REALM); /* SDAP realm must be AD root domain */
ced1f5
 
ced1f5
-    assert_non_null(test_ctx->ipa_ctx->server_mode->trusts->next);
ced1f5
-
ced1f5
     /* Here all properties point to the AD domain */
ced1f5
-    assert_trust_object(test_ctx->ipa_ctx->server_mode->trusts->next,
ced1f5
+    assert_trust_object(s_trust,
ced1f5
                         SUBDOM_NAME,
ced1f5
                         SUBDOM_REALM,
ced1f5
                         SUBDOM_SID,
ced1f5
diff --git a/src/tests/sysdb-tests.c b/src/tests/sysdb-tests.c
ced1f5
index 4652661087238c18f7fabb398d054db99f77d6cf..fc9936968bcde8370c7054ba303de4463b35e15a 100644
ced1f5
--- a/src/tests/sysdb-tests.c
ced1f5
+++ b/src/tests/sysdb-tests.c
ced1f5
@@ -503,7 +503,7 @@ static int test_search_all_users(struct test_data *data)
ced1f5
     }
ced1f5
 
ced1f5
     ret = sysdb_search_entry(data, data->ctx->sysdb, base_dn,
ced1f5
-                             LDB_SCOPE_SUBTREE, "objectClass=user",
ced1f5
+                             LDB_SCOPE_SUBTREE, SYSDB_UC,
ced1f5
                              data->attrlist, &data->msgs_count, &data->msgs);
ced1f5
     return ret;
ced1f5
 }
ced1f5
@@ -2219,6 +2219,7 @@ START_TEST (test_sysdb_search_all_users)
ced1f5
     struct test_data *data;
ced1f5
     int ret;
ced1f5
     int i;
ced1f5
+    int j;
ced1f5
     char *uid_str;
ced1f5
 
ced1f5
     /* Setup */
ced1f5
@@ -2253,8 +2254,15 @@ START_TEST (test_sysdb_search_all_users)
ced1f5
                     "wrong number of values, found [%d] expected [1]",
ced1f5
                     data->msgs[i]->elements[0].num_values);
ced1f5
 
ced1f5
-        uid_str = talloc_asprintf(data, "%d", 27010 + i);
ced1f5
-        fail_unless(uid_str != NULL, "talloc_asprintf failed.");
ced1f5
+        for (j = 0; j < data->msgs_count; j++) {
ced1f5
+            uid_str = talloc_asprintf(data, "%d", 27010 + j);
ced1f5
+            fail_unless(uid_str != NULL, "talloc_asprintf failed.");
ced1f5
+            if (strncmp(uid_str,
ced1f5
+                        (char *) data->msgs[i]->elements[0].values[0].data,
ced1f5
+                        data->msgs[i]->elements[0].values[0].length)  == 0) {
ced1f5
+                break;
ced1f5
+            }
ced1f5
+        }
ced1f5
         fail_unless(strncmp(uid_str,
ced1f5
                             (char *) data->msgs[i]->elements[0].values[0].data,
ced1f5
                             data->msgs[i]->elements[0].values[0].length)  == 0,
ced1f5
@@ -4411,7 +4419,7 @@ START_TEST(test_SSS_LDB_SEARCH)
ced1f5
 
ced1f5
     /* Non-empty filter */
ced1f5
     SSS_LDB_SEARCH(ret, test_ctx->sysdb->ldb, test_ctx, &res, group_dn,
ced1f5
-                   LDB_SCOPE_BASE, NULL, "objectClass=group");
ced1f5
+                   LDB_SCOPE_BASE, NULL, SYSDB_GC);
ced1f5
 
ced1f5
     fail_unless(ret == EOK, "SSS_LDB_SEARCH error [%d][%s]",
ced1f5
                 ret, strerror(ret));
ced1f5
@@ -5203,7 +5211,7 @@ START_TEST (test_sysdb_search_return_ENOENT)
ced1f5
 
ced1f5
     ret = sysdb_search_entry(test_ctx, test_ctx->sysdb,
ced1f5
                              user_dn, LDB_SCOPE_SUBTREE,
ced1f5
-                             "objectClass=user", NULL,
ced1f5
+                             SYSDB_UC, NULL,
ced1f5
                              &count, &msgs);
ced1f5
     fail_unless(ret == ENOENT, "sysdb_search_entry failed: %d, %s",
ced1f5
                                ret, strerror(ret));
ced1f5
@@ -5215,7 +5223,7 @@ START_TEST (test_sysdb_search_return_ENOENT)
ced1f5
                             data->username);
ced1f5
     fail_if(user_dn == NULL, "sysdb_user_dn failed");
ced1f5
     SSS_LDB_SEARCH(ret, test_ctx->sysdb->ldb, test_ctx, &res, user_dn,
ced1f5
-                   LDB_SCOPE_BASE, NULL, "objectClass=user");
ced1f5
+                   LDB_SCOPE_BASE, NULL, SYSDB_UC);
ced1f5
 
ced1f5
     fail_unless(ret == ENOENT, "SSS_LDB_SEARCH failed: %d, %s",
ced1f5
                                ret, strerror(ret));
ced1f5
diff --git a/src/tools/sssctl/sssctl_cache.c b/src/tools/sssctl/sssctl_cache.c
ced1f5
index 80f65bb55df42d0b123023bb9b1efdb2353b8e20..42a2a60fd31631b3c86d17ddbdd8027a8468366d 100644
ced1f5
--- a/src/tools/sssctl/sssctl_cache.c
ced1f5
+++ b/src/tools/sssctl/sssctl_cache.c
ced1f5
@@ -335,7 +335,8 @@ static const char *sssctl_create_filter(TALLOC_CTX *mem_ctx,
ced1f5
         talloc_free(filter_value_old);
ced1f5
     }
ced1f5
 
ced1f5
-    filter = talloc_asprintf(mem_ctx, "(&(objectClass=%s)(|(%s=%s)(%s=%s)))",
ced1f5
+    filter = talloc_asprintf(mem_ctx, "(&(%s=%s)(|(%s=%s)(%s=%s)))",
ced1f5
+                             obj_type == CACHED_NETGROUP ? SYSDB_OBJECTCLASS : SYSDB_OBJECTCATEGORY,
ced1f5
                              class, attr_name, filter_value,
ced1f5
                              SYSDB_NAME_ALIAS, filter_value);
ced1f5
 
ced1f5
-- 
ced1f5
2.14.3
ced1f5