summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/groupdb/mapping.c34
-rw-r--r--source3/include/passdb.h2
-rw-r--r--source3/passdb/ABI/pdb-0.sigs2
-rw-r--r--source3/passdb/pdb_util.c2
4 files changed, 25 insertions, 15 deletions
diff --git a/source3/groupdb/mapping.c b/source3/groupdb/mapping.c
index c6fcc8aa71..e3d52b70fb 100644
--- a/source3/groupdb/mapping.c
+++ b/source3/groupdb/mapping.c
@@ -790,15 +790,19 @@ NTSTATUS pdb_nop_enum_group_mapping(struct pdb_methods *methods,
return NT_STATUS_UNSUCCESSFUL;
}
-/********************************************************************
- Really just intended to be called by smbd
-********************************************************************/
-
-NTSTATUS pdb_create_builtin_alias(uint32 rid)
+/**
+* @brief Add a new group mapping
+*
+* @param[in] gid gid to use to store the mapping. If gid is 0,
+* new gid will be allocated from winbind
+*
+* @return Normal NTSTATUS return
+*/
+NTSTATUS pdb_create_builtin_alias(uint32 rid, gid_t gid)
{
struct dom_sid sid;
enum lsa_SidType type;
- gid_t gid;
+ gid_t gidformap;
GROUP_MAP *map;
NTSTATUS status;
const char *name = NULL;
@@ -820,15 +824,21 @@ NTSTATUS pdb_create_builtin_alias(uint32 rid)
goto done;
}
- if (!winbind_allocate_gid(&gid)) {
- DEBUG(3, ("pdb_create_builtin_alias: Could not get a gid out of winbind\n"));
- status = NT_STATUS_ACCESS_DENIED;
- goto done;
+ if (gid == 0) {
+ if (!winbind_allocate_gid(&gidformap)) {
+ DEBUG(3, ("pdb_create_builtin_alias: Could not get a "
+ "gid out of winbind\n"));
+ status = NT_STATUS_ACCESS_DENIED;
+ goto done;
+ }
+ } else {
+ gidformap = gid;
}
- DEBUG(10, ("Creating alias %s with gid %u\n", name, (unsigned)gid));
+ DEBUG(10, ("Creating alias %s with gid %u\n", name,
+ (unsigned) gidformap));
- map->gid = gid;
+ map->gid = gidformap;
sid_copy(&map->sid, &sid);
map->sid_name_use = SID_NAME_ALIAS;
map->nt_name = talloc_strdup(map, name);
diff --git a/source3/include/passdb.h b/source3/include/passdb.h
index ae3a968464..637c55a840 100644
--- a/source3/include/passdb.h
+++ b/source3/include/passdb.h
@@ -123,7 +123,7 @@ NTSTATUS pdb_nop_enum_group_mapping(struct pdb_methods *methods,
enum lsa_SidType sid_name_use,
GROUP_MAP **rmap, size_t *num_entries,
bool unix_only);
-NTSTATUS pdb_create_builtin_alias(uint32_t rid);
+NTSTATUS pdb_create_builtin_alias(uint32_t rid, gid_t gid);
/* passdb headers */
diff --git a/source3/passdb/ABI/pdb-0.sigs b/source3/passdb/ABI/pdb-0.sigs
index 9c5c773941..ccb371b207 100644
--- a/source3/passdb/ABI/pdb-0.sigs
+++ b/source3/passdb/ABI/pdb-0.sigs
@@ -74,7 +74,7 @@ pdb_build_fields_present: uint32_t (struct samu *)
pdb_capabilities: uint32_t (void)
pdb_copy_sam_account: bool (struct samu *, struct samu *)
pdb_create_alias: NTSTATUS (const char *, uint32_t *)
-pdb_create_builtin_alias: NTSTATUS (uint32_t)
+pdb_create_builtin_alias: NTSTATUS (uint32_t, gid_t)
pdb_create_dom_group: NTSTATUS (TALLOC_CTX *, const char *, uint32_t *)
pdb_create_user: NTSTATUS (TALLOC_CTX *, const char *, uint32_t, uint32_t *)
pdb_decode_acct_ctrl: uint32_t (const char *)
diff --git a/source3/passdb/pdb_util.c b/source3/passdb/pdb_util.c
index 0ac6594d4c..31fd018e8c 100644
--- a/source3/passdb/pdb_util.c
+++ b/source3/passdb/pdb_util.c
@@ -81,7 +81,7 @@ NTSTATUS pdb_create_builtin(uint32_t rid)
if (!lp_winbind_nested_groups() || !winbind_ping()) {
return NT_STATUS_PROTOCOL_UNREACHABLE;
}
- status = pdb_create_builtin_alias(rid);
+ status = pdb_create_builtin_alias(rid, 0);
}
return status;
}