⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapping.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
	if ( getgrgid(map->gid) == NULL) {		return False;	}	return True;}/****************************************************************************Returns a GROUP_MAP struct based on the gid.****************************************************************************/BOOL get_group_from_gid(gid_t gid, GROUP_MAP *map){	BOOL ret;	if(!init_group_mapping()) {		DEBUG(0,("failed to initialize group mapping\n"));		return(False);	}	if ( getgrgid(gid) == NULL)		return False;	become_root();	ret = pdb_getgrgid(map, gid);	unbecome_root();		if ( !ret ) {		return False;	}		return True;}/**************************************************************************** Create a UNIX group on demand.****************************************************************************/int smb_create_group(char *unix_group, gid_t *new_gid){	pstring add_script;	int 	ret = -1;	int 	fd = 0;		*new_gid = 0;	/* defer to scripts */		if ( *lp_addgroup_script() ) {		pstrcpy(add_script, lp_addgroup_script());		pstring_sub(add_script, "%g", unix_group);		ret = smbrun(add_script, (new_gid!=NULL) ? &fd : NULL);		DEBUG(ret ? 0 : 3,("smb_create_group: Running the command `%s' gave %d\n",add_script,ret));		if (ret != 0)			return ret;					if (fd != 0) {			fstring output;			*new_gid = 0;			if (read(fd, output, sizeof(output)) > 0) {				*new_gid = (gid_t)strtoul(output, NULL, 10);			}						close(fd);		}	}	if (*new_gid == 0) {		struct group *grp = getgrnam(unix_group);		if (grp != NULL)			*new_gid = grp->gr_gid;	}				return ret;	}/**************************************************************************** Delete a UNIX group on demand.****************************************************************************/int smb_delete_group(char *unix_group){	pstring del_script;	int ret;	/* defer to scripts */		if ( *lp_delgroup_script() ) {		pstrcpy(del_script, lp_delgroup_script());		pstring_sub(del_script, "%g", unix_group);		ret = smbrun(del_script,NULL);		DEBUG(ret ? 0 : 3,("smb_delete_group: Running the command `%s' gave %d\n",del_script,ret));		return ret;	}			return -1;}/**************************************************************************** Set a user's primary UNIX group.****************************************************************************/int smb_set_primary_group(const char *unix_group, const char* unix_user){	pstring add_script;	int ret;	/* defer to scripts */		if ( *lp_setprimarygroup_script() ) {		pstrcpy(add_script, lp_setprimarygroup_script());		all_string_sub(add_script, "%g", unix_group, sizeof(add_script));		all_string_sub(add_script, "%u", unix_user, sizeof(add_script));		ret = smbrun(add_script,NULL);		flush_pwnam_cache();		DEBUG(ret ? 0 : 3,("smb_set_primary_group: "			 "Running the command `%s' gave %d\n",add_script,ret));		return ret;	}	return -1;}/**************************************************************************** Add a user to a UNIX group.****************************************************************************/int smb_add_user_group(char *unix_group, char *unix_user){	pstring add_script;	int ret;	/* defer to scripts */		if ( *lp_addusertogroup_script() ) {		pstrcpy(add_script, lp_addusertogroup_script());		pstring_sub(add_script, "%g", unix_group);		pstring_sub(add_script, "%u", unix_user);		ret = smbrun(add_script,NULL);		DEBUG(ret ? 0 : 3,("smb_add_user_group: Running the command `%s' gave %d\n",add_script,ret));		return ret;	}		return -1;}/**************************************************************************** Delete a user from a UNIX group****************************************************************************/int smb_delete_user_group(const char *unix_group, const char *unix_user){	pstring del_script;	int ret;	/* defer to scripts */		if ( *lp_deluserfromgroup_script() ) {		pstrcpy(del_script, lp_deluserfromgroup_script());		pstring_sub(del_script, "%g", unix_group);		pstring_sub(del_script, "%u", unix_user);		ret = smbrun(del_script,NULL);		DEBUG(ret ? 0 : 3,("smb_delete_user_group: Running the command `%s' gave %d\n",del_script,ret));		return ret;	}		return -1;}NTSTATUS pdb_default_getgrsid(struct pdb_methods *methods, GROUP_MAP *map,				 DOM_SID sid){	return get_group_map_from_sid(sid, map) ?		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_default_getgrgid(struct pdb_methods *methods, GROUP_MAP *map,				 gid_t gid){	return get_group_map_from_gid(gid, map) ?		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_default_getgrnam(struct pdb_methods *methods, GROUP_MAP *map,				 const char *name){	return get_group_map_from_ntname(name, map) ?		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_default_add_group_mapping_entry(struct pdb_methods *methods,						GROUP_MAP *map){	return add_mapping_entry(map, TDB_INSERT) ?		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_default_update_group_mapping_entry(struct pdb_methods *methods,						   GROUP_MAP *map){	return add_mapping_entry(map, TDB_REPLACE) ?		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_default_delete_group_mapping_entry(struct pdb_methods *methods,						   DOM_SID sid){	return group_map_remove(&sid) ?		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_default_enum_group_mapping(struct pdb_methods *methods,					   enum SID_NAME_USE sid_name_use,					   GROUP_MAP **pp_rmap, size_t *p_num_entries,					   BOOL unix_only){	return enum_group_mapping(sid_name_use, pp_rmap, p_num_entries, unix_only) ?		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_default_find_alias(struct pdb_methods *methods,				const char *name, DOM_SID *sid){	GROUP_MAP map;	if (!pdb_getgrnam(&map, name))		return NT_STATUS_NO_SUCH_ALIAS;	if ((map.sid_name_use != SID_NAME_WKN_GRP) &&	    (map.sid_name_use != SID_NAME_ALIAS))		return NT_STATUS_OBJECT_TYPE_MISMATCH;	sid_copy(sid, &map.sid);	return NT_STATUS_OK;}NTSTATUS pdb_default_create_alias(struct pdb_methods *methods,				  const char *name, uint32 *rid){	DOM_SID sid;	enum SID_NAME_USE type;	uint32 new_rid;	gid_t gid;	GROUP_MAP map;	if (lookup_name(get_global_sam_name(), name, &sid, &type))		return NT_STATUS_ALIAS_EXISTS;	if (!winbind_allocate_rid_and_gid(&new_rid, &gid))		return NT_STATUS_ACCESS_DENIED;	sid_copy(&sid, get_global_sam_sid());	sid_append_rid(&sid, new_rid);	map.gid = gid;	sid_copy(&map.sid, &sid);	map.sid_name_use = SID_NAME_ALIAS;	fstrcpy(map.nt_name, name);	fstrcpy(map.comment, "");	if (!pdb_add_group_mapping_entry(&map)) {		DEBUG(0, ("Could not add group mapping entry for alias %s\n",			  name));		return NT_STATUS_ACCESS_DENIED;	}	*rid = new_rid;	return NT_STATUS_OK;}NTSTATUS pdb_default_delete_alias(struct pdb_methods *methods,				  const DOM_SID *sid){	return pdb_delete_group_mapping_entry(*sid) ?		NT_STATUS_OK : NT_STATUS_ACCESS_DENIED;}NTSTATUS pdb_default_get_aliasinfo(struct pdb_methods *methods,				   const DOM_SID *sid,				   struct acct_info *info){	GROUP_MAP map;	if (!pdb_getgrsid(&map, *sid))		return NT_STATUS_NO_SUCH_ALIAS;	fstrcpy(info->acct_name, map.nt_name);	fstrcpy(info->acct_desc, map.comment);	sid_peek_rid(&map.sid, &info->rid);	return NT_STATUS_OK;}NTSTATUS pdb_default_set_aliasinfo(struct pdb_methods *methods,				   const DOM_SID *sid,				   struct acct_info *info){	GROUP_MAP map;	if (!pdb_getgrsid(&map, *sid))		return NT_STATUS_NO_SUCH_ALIAS;	fstrcpy(map.comment, info->acct_desc);	if (!pdb_update_group_mapping_entry(&map))		return NT_STATUS_ACCESS_DENIED;	return NT_STATUS_OK;}NTSTATUS pdb_default_add_aliasmem(struct pdb_methods *methods,				  const DOM_SID *alias, const DOM_SID *member){	return add_aliasmem(alias, member);}NTSTATUS pdb_default_del_aliasmem(struct pdb_methods *methods,				  const DOM_SID *alias, const DOM_SID *member){	return del_aliasmem(alias, member);}NTSTATUS pdb_default_enum_aliasmem(struct pdb_methods *methods,				   const DOM_SID *alias, DOM_SID **pp_members,				   size_t *p_num_members){	return enum_aliasmem(alias, pp_members, p_num_members);}NTSTATUS pdb_default_alias_memberships(struct pdb_methods *methods,				       TALLOC_CTX *mem_ctx,				       const DOM_SID *domain_sid,				       const DOM_SID *members,				       size_t num_members,				       uint32 **pp_alias_rids,				       size_t *p_num_alias_rids){	DOM_SID *alias_sids;	size_t i, num_alias_sids;	NTSTATUS result;	alias_sids = NULL;	num_alias_sids = 0;	result = alias_memberships(members, num_members,				   &alias_sids, &num_alias_sids);	if (!NT_STATUS_IS_OK(result))		return result;	*pp_alias_rids = TALLOC_ARRAY(mem_ctx, uint32, num_alias_sids);	if (*pp_alias_rids == NULL)		return NT_STATUS_NO_MEMORY;	*p_num_alias_rids = 0;	for (i=0; i<num_alias_sids; i++) {		if (!sid_peek_check_rid(domain_sid, &alias_sids[i],					&(*pp_alias_rids)[*p_num_alias_rids]))			continue;		*p_num_alias_rids += 1;	}	SAFE_FREE(alias_sids);	return NT_STATUS_OK;}/********************************************************************** no ops for passdb backends that don't implement group mapping *********************************************************************/NTSTATUS pdb_nop_getgrsid(struct pdb_methods *methods, GROUP_MAP *map,				 DOM_SID sid){	return NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_nop_getgrgid(struct pdb_methods *methods, GROUP_MAP *map,				 gid_t gid){	return NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_nop_getgrnam(struct pdb_methods *methods, GROUP_MAP *map,				 const char *name){	return NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_nop_add_group_mapping_entry(struct pdb_methods *methods,						GROUP_MAP *map){	return NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_nop_update_group_mapping_entry(struct pdb_methods *methods,						   GROUP_MAP *map){	return NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_nop_delete_group_mapping_entry(struct pdb_methods *methods,						   DOM_SID sid){	return NT_STATUS_UNSUCCESSFUL;}NTSTATUS pdb_nop_enum_group_mapping(struct pdb_methods *methods,					   enum SID_NAME_USE sid_name_use,					   GROUP_MAP **rmap, size_t *num_entries,					   BOOL unix_only){	return NT_STATUS_UNSUCCESSFUL;}/**************************************************************************** These need to be redirected through pdb_interface.c****************************************************************************/BOOL pdb_get_dom_grp_info(const DOM_SID *sid, struct acct_info *info){	GROUP_MAP map;	BOOL res;	become_root();	res = get_domain_group_from_sid(*sid, &map);	unbecome_root();	if (!res)		return False;	fstrcpy(info->acct_name, map.nt_name);	fstrcpy(info->acct_desc, map.comment);	sid_peek_rid(sid, &info->rid);	return True;}BOOL pdb_set_dom_grp_info(const DOM_SID *sid, const struct acct_info *info){	GROUP_MAP map;	if (!get_domain_group_from_sid(*sid, &map))		return False;	fstrcpy(map.nt_name, info->acct_name);	fstrcpy(map.comment, info->acct_desc);	return pdb_update_group_mapping_entry(&map);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -