diff options
| -rw-r--r-- | source3/groupdb/mapping.c | 40 | ||||
| -rw-r--r-- | source3/passdb/passdb.c | 2 | 
2 files changed, 25 insertions, 17 deletions
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 {  | 
