summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/providers/ipa/ipa_s2n_exop.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/providers/ipa/ipa_s2n_exop.c b/src/providers/ipa/ipa_s2n_exop.c
index e7c2d9bb9..a9c2f1ae3 100644
--- a/src/providers/ipa/ipa_s2n_exop.c
+++ b/src/providers/ipa/ipa_s2n_exop.c
@@ -1748,6 +1748,7 @@ static errno_t ipa_s2n_save_objects(struct sss_domain_info *dom,
char **del_groups_dns;
bool in_transaction = false;
int tret;
+ struct sysdb_attrs *gid_override_attrs = NULL;
tmp_ctx = talloc_new(NULL);
if (tmp_ctx == NULL) {
@@ -1939,7 +1940,16 @@ static errno_t ipa_s2n_save_objects(struct sss_domain_info *dom,
if (ret == EOK || ret == ENOENT) {
if ((orig_gid != 0 && orig_gid != attrs->a.user.pw_gid)
|| attrs->a.user.pw_uid != attrs->a.user.pw_gid) {
- ret = sysdb_attrs_add_uint32(attrs->sysdb_attrs,
+
+ gid_override_attrs = sysdb_new_attrs(tmp_ctx);
+ if (gid_override_attrs == NULL) {
+ DEBUG(SSSDBG_OP_FAILURE,
+ "sysdb_new_attrs failed.\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = sysdb_attrs_add_uint32(gid_override_attrs,
SYSDB_GIDNUM,
attrs->a.user.pw_gid);
if (ret != EOK) {
@@ -1973,6 +1983,15 @@ static errno_t ipa_s2n_save_objects(struct sss_domain_info *dom,
goto done;
}
+ if (gid_override_attrs != NULL) {
+ ret = sysdb_set_user_attr(dom, name, gid_override_attrs,
+ SYSDB_MOD_REP);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_OP_FAILURE, "sysdb_set_user_attr failed.\n");
+ goto done;
+ }
+ }
+
if (attrs->response_type == RESP_USER_GROUPLIST) {
ret = get_sysdb_grouplist(tmp_ctx, dom->sysdb, dom, name,
&sysdb_grouplist);