1
0
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:
Christian Ambach 2013-06-18 16:30:31 +02:00 committed by Michael Adam
parent 212baedcd5
commit 2d2d13ee61
4 changed files with 25 additions and 15 deletions

View File

@ -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);

View File

@ -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 */

View File

@ -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 *)

View File

@ -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;
}