s4:samldb LDB module - "samldb_check_primaryGroupID" - support RID derivation from...
[samba.git] / source4 / dsdb / samdb / ldb_modules / samldb.c
index a8a9f23079c94795b8fdeaf5d33c68156b85f3bd..7fa27e8a91fae6d8fbba60a9db4c1f14c8fd2b53 100644 (file)
@@ -259,7 +259,11 @@ static int samldb_check_primaryGroupID(struct samldb_ctx *ac)
 
        rid = samdb_result_uint(ac->msg, "primaryGroupID", (uint32_t) -1);
        if (rid == (uint32_t) -1) {
-               rid = DOMAIN_RID_USERS;
+               uint32_t uac = samdb_result_uint(ac->msg, "userAccountControl",
+                                                0);
+
+               rid = ds_uf2prim_group_rid(uac);
+
                ret = samdb_msg_add_uint(ldb, ac->msg, ac->msg,
                                         "primaryGroupID", rid);
                if (ret != LDB_SUCCESS) {
@@ -1313,14 +1317,17 @@ static int samldb_delete(struct ldb_module *module, struct ldb_request *req)
        }
 
        ac = samldb_ctx_init(module, req);
-       if (ac == NULL)
+       if (ac == NULL) {
                return ldb_operr(ldb_module_get_ctx(module));
+       }
 
        ret = samldb_prim_group_users_check(ac);
        if (ret != LDB_SUCCESS) {
                return ret;
        }
 
+       talloc_free(ac);
+
        return ldb_next_request(module, req);
 }