summaryrefslogtreecommitdiffstats
path: root/src/db/sysdb_ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/db/sysdb_ops.c')
-rw-r--r--src/db/sysdb_ops.c40
1 files changed, 23 insertions, 17 deletions
diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c
index ba1f6672c..08437f6dd 100644
--- a/src/db/sysdb_ops.c
+++ b/src/db/sysdb_ops.c
@@ -1047,6 +1047,7 @@ int sysdb_add_group(TALLOC_CTX *mem_ctx,
uint32_t id;
time_t now;
int ret;
+ bool posix;
if (domain->id_max != 0 && gid != 0 &&
(gid < domain->id_min || gid > domain->id_max)) {
@@ -1095,22 +1096,6 @@ int sysdb_add_group(TALLOC_CTX *mem_ctx,
ret = sysdb_add_basic_group(tmpctx, ctx, domain, name, gid);
if (ret) goto done;
- if (gid == 0) {
- ret = sysdb_get_new_id(tmpctx, ctx, domain, &id);
- if (ret) goto done;
-
- if (!attrs) {
- attrs = sysdb_new_attrs(tmpctx);
- if (!attrs) {
- ret = ENOMEM;
- goto done;
- }
- }
-
- ret = sysdb_attrs_add_uint32(attrs, SYSDB_GIDNUM, id);
- if (ret) goto done;
- }
-
if (!attrs) {
attrs = sysdb_new_attrs(tmpctx);
if (!attrs) {
@@ -1119,6 +1104,23 @@ int sysdb_add_group(TALLOC_CTX *mem_ctx,
}
}
+ ret = sysdb_attrs_get_bool(attrs, SYSDB_POSIX, &posix);
+ if (ret == ENOENT) {
+ posix = true;
+ ret = sysdb_attrs_add_bool(attrs, SYSDB_POSIX, true);
+ if (ret) goto done;
+ } else if (ret != EOK) {
+ goto done;
+ }
+
+ if (posix && gid == 0) {
+ ret = sysdb_get_new_id(tmpctx, ctx, domain, &id);
+ if (ret) goto done;
+
+ ret = sysdb_attrs_add_uint32(attrs, SYSDB_GIDNUM, id);
+ if (ret) goto done;
+ }
+
now = time(NULL);
ret = sysdb_attrs_add_time_t(attrs, SYSDB_LAST_UPDATE, now);
@@ -1148,7 +1150,8 @@ int sysdb_add_incomplete_group(struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *name,
gid_t gid,
- const char *original_dn)
+ const char *original_dn,
+ bool posix)
{
TALLOC_CTX *tmpctx;
time_t now;
@@ -1179,6 +1182,9 @@ int sysdb_add_incomplete_group(struct sysdb_ctx *ctx,
now-1);
if (ret) goto done;
+ ret = sysdb_attrs_add_bool(attrs, SYSDB_POSIX, posix);
+ if (ret) goto done;
+
if (original_dn) {
ret = sysdb_attrs_add_string(attrs, SYSDB_ORIG_DN, original_dn);
if (ret) goto done;