From 4f001512cdc5fdf27981ffee7e110a6818a978d7 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 16 Oct 2002 09:41:42 +0000 Subject: Create group mappings on the fly. Volker (This used to be commit e2fc1de34aaf875a7003f9d15d5f8ecf159130fb) --- source3/groupdb/mapping.c | 40 ++++++++++++++++++++++++---------------- source3/passdb/passdb.c | 2 +- 2 files changed, 25 insertions(+), 17 deletions(-) (limited to 'source3') diff --git a/source3/groupdb/mapping.c b/source3/groupdb/mapping.c index 0f05316949..d78582e7e5 100644 --- a/source3/groupdb/mapping.c +++ b/source3/groupdb/mapping.c @@ -1048,34 +1048,42 @@ Returns a GROUP_MAP struct based on the gid. BOOL get_group_from_gid(gid_t gid, GROUP_MAP *map, BOOL with_priv) { struct group *grp; + fstring name; + DOM_SID sid; + fstring string_sid; + PRIVILEGE_SET priv_set; if(!init_group_mapping()) { DEBUG(0,("failed to initialize group mapping")); return(False); } - if ( (grp=getgrgid(gid)) == NULL) - return False; + if (get_group_map_from_gid(gid, map, with_priv)) + return True; - /* - * make a group map from scratch if doesn't exist. - */ - if (!get_group_map_from_gid(gid, map, with_priv)) { - map->gid=gid; - map->sid_name_use=SID_NAME_ALIAS; - map->systemaccount=PR_ACCESS_FROM_NETWORK; - init_privilege(&map->priv_set); + /* There is no mapping, create one on the fly. This is just + interim, we need a RID allocator in the passdb backend. */ - /* interim solution until we have a last RID allocated */ + if ((grp=getgrgid(gid)) != NULL) { + slprintf(name, sizeof(name), "Group %s", grp->gr_name); + } else { + slprintf(name, sizeof(name), "Group %d", gid); + } - sid_copy(&map->sid, get_global_sam_sid()); - sid_append_rid(&map->sid, pdb_gid_to_group_rid(gid)); + /* interim solution until we have a last RID allocated */ - fstrcpy(map->nt_name, grp->gr_name); - fstrcpy(map->comment, "Local Unix Group"); + sid_copy(&sid, get_global_sam_sid()); + sid_append_rid(&sid, pdb_gid_to_group_rid(gid)); + sid_to_string(string_sid, &sid); + init_privilege(&priv_set); + + if (!add_initial_entry(gid, string_sid, SID_NAME_DOM_GRP, + name, "Local Unix Group", + priv_set, PR_ACCESS_FROM_NETWORK)) { + return False; } - return True; + return get_group_map_from_gid(gid, map, with_priv); } diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c index 9402f0c94c..dfaf7c88be 100644 --- a/source3/passdb/passdb.c +++ b/source3/passdb/passdb.c @@ -897,7 +897,7 @@ DOM_SID *local_gid_to_sid(DOM_SID *psid, gid_t gid) sid_copy(psid, get_global_sam_sid()); - if (get_group_map_from_gid(gid, &map, MAPPING_WITHOUT_PRIV)) { + if (get_group_from_gid(gid, &map, MAPPING_WITHOUT_PRIV)) { sid_copy(psid, &map.sid); } else { -- cgit