mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
s3:passdb add a gid argument to pdb_create_builtin_alias
make it possible to skip the allocation of a new gid from winbind by specifying the gid to be used Signed-off-by: Christian Ambach <ambi@samba.org> Reviewed-by: Michael Adam <obnox@samba.org>
This commit is contained in:
parent
212baedcd5
commit
2d2d13ee61
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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 *)
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user