亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? policydb.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * Implementation of the policy database. * * Author : Stephen Smalley, <sds@epoch.ncsc.mil> *//* Updated: Frank Mayer <mayerf@tresys.com> and Karl MacMillan <kmacmillan@tresys.com> * * 	Added conditional policy language extensions * * Copyright (C) 2003 - 2004 Tresys Technology, LLC *	This program is free software; you can redistribute it and/or modify *  	it under the terms of the GNU General Public License as published by *	the Free Software Foundation, version 2. */#include <linux/kernel.h>#include <linux/slab.h>#include <linux/string.h>#include <linux/errno.h>#include "security.h"#include "policydb.h"#include "conditional.h"#include "mls.h"#define _DEBUG_HASHES#ifdef DEBUG_HASHESstatic char *symtab_name[SYM_NUM] = {	"common prefixes",	"classes",	"roles",	"types",	"users",	mls_symtab_names	"bools"};#endifint policydb_loaded_version;static unsigned int symtab_sizes[SYM_NUM] = {	2,	32,	16,	512,	128,	mls_symtab_sizes	16};struct policydb_compat_info {	int version;	int sym_num;	int ocon_num;};/* These need to be updated if SYM_NUM or OCON_NUM changes */static struct policydb_compat_info policydb_compat[] = {	{		.version        = POLICYDB_VERSION_BASE,		.sym_num        = SYM_NUM - 1,		.ocon_num       = OCON_NUM - 1,	},	{		.version        = POLICYDB_VERSION_BOOL,		.sym_num        = SYM_NUM,		.ocon_num       = OCON_NUM - 1,	},	{		.version        = POLICYDB_VERSION_IPV6,		.sym_num        = SYM_NUM,		.ocon_num       = OCON_NUM,	},	{		.version        = POLICYDB_VERSION_NLCLASS,		.sym_num        = SYM_NUM,		.ocon_num       = OCON_NUM,	},};static struct policydb_compat_info *policydb_lookup_compat(int version){	int i;	struct policydb_compat_info *info = NULL;	for (i = 0; i < sizeof(policydb_compat)/sizeof(*info); i++) {		if (policydb_compat[i].version == version) {			info = &policydb_compat[i];			break;		}	}	return info;}/* * Initialize the role table. */int roles_init(struct policydb *p){	char *key = NULL;	int rc;	struct role_datum *role;	role = kmalloc(sizeof(*role), GFP_KERNEL);	if (!role) {		rc = -ENOMEM;		goto out;	}	memset(role, 0, sizeof(*role));	role->value = ++p->p_roles.nprim;	if (role->value != OBJECT_R_VAL) {		rc = -EINVAL;		goto out_free_role;	}	key = kmalloc(strlen(OBJECT_R)+1,GFP_KERNEL);	if (!key) {		rc = -ENOMEM;		goto out_free_role;	}	strcpy(key, OBJECT_R);	rc = hashtab_insert(p->p_roles.table, key, role);	if (rc)		goto out_free_key;out:	return rc;out_free_key:	kfree(key);out_free_role:	kfree(role);	goto out;}/* * Initialize a policy database structure. */int policydb_init(struct policydb *p){	int i, rc;	memset(p, 0, sizeof(*p));	for (i = 0; i < SYM_NUM; i++) {		rc = symtab_init(&p->symtab[i], symtab_sizes[i]);		if (rc)			goto out_free_symtab;	}	rc = avtab_init(&p->te_avtab);	if (rc)		goto out_free_symtab;	rc = roles_init(p);	if (rc)		goto out_free_avtab;	rc = cond_policydb_init(p);	if (rc)		goto out_free_avtab;out:	return rc;out_free_avtab:	avtab_destroy(&p->te_avtab);out_free_symtab:	for (i = 0; i < SYM_NUM; i++)		hashtab_destroy(p->symtab[i].table);	goto out;}/* * The following *_index functions are used to * define the val_to_name and val_to_struct arrays * in a policy database structure.  The val_to_name * arrays are used when converting security context * structures into string representations.  The * val_to_struct arrays are used when the attributes * of a class, role, or user are needed. */static int common_index(void *key, void *datum, void *datap){	struct policydb *p;	struct common_datum *comdatum;	comdatum = datum;	p = datap;	if (!comdatum->value || comdatum->value > p->p_commons.nprim)		return -EINVAL;	p->p_common_val_to_name[comdatum->value - 1] = key;	return 0;}static int class_index(void *key, void *datum, void *datap){	struct policydb *p;	struct class_datum *cladatum;	cladatum = datum;	p = datap;	if (!cladatum->value || cladatum->value > p->p_classes.nprim)		return -EINVAL;	p->p_class_val_to_name[cladatum->value - 1] = key;	p->class_val_to_struct[cladatum->value - 1] = cladatum;	return 0;}static int role_index(void *key, void *datum, void *datap){	struct policydb *p;	struct role_datum *role;	role = datum;	p = datap;	if (!role->value || role->value > p->p_roles.nprim)		return -EINVAL;	p->p_role_val_to_name[role->value - 1] = key;	p->role_val_to_struct[role->value - 1] = role;	return 0;}static int type_index(void *key, void *datum, void *datap){	struct policydb *p;	struct type_datum *typdatum;	typdatum = datum;	p = datap;	if (typdatum->primary) {		if (!typdatum->value || typdatum->value > p->p_types.nprim)			return -EINVAL;		p->p_type_val_to_name[typdatum->value - 1] = key;	}	return 0;}static int user_index(void *key, void *datum, void *datap){	struct policydb *p;	struct user_datum *usrdatum;	usrdatum = datum;	p = datap;	if (!usrdatum->value || usrdatum->value > p->p_users.nprim)		return -EINVAL;	p->p_user_val_to_name[usrdatum->value - 1] = key;	p->user_val_to_struct[usrdatum->value - 1] = usrdatum;	return 0;}static int (*index_f[SYM_NUM]) (void *key, void *datum, void *datap) ={	common_index,	class_index,	role_index,	type_index,	user_index,	mls_index_f	cond_index_bool};/* * Define the common val_to_name array and the class * val_to_name and val_to_struct arrays in a policy * database structure. * * Caller must clean up upon failure. */int policydb_index_classes(struct policydb *p){	int rc;	p->p_common_val_to_name =		kmalloc(p->p_commons.nprim * sizeof(char *), GFP_KERNEL);	if (!p->p_common_val_to_name) {		rc = -ENOMEM;		goto out;	}	rc = hashtab_map(p->p_commons.table, common_index, p);	if (rc)		goto out;	p->class_val_to_struct =		kmalloc(p->p_classes.nprim * sizeof(*(p->class_val_to_struct)), GFP_KERNEL);	if (!p->class_val_to_struct) {		rc = -ENOMEM;		goto out;	}	p->p_class_val_to_name =		kmalloc(p->p_classes.nprim * sizeof(char *), GFP_KERNEL);	if (!p->p_class_val_to_name) {		rc = -ENOMEM;		goto out;	}	rc = hashtab_map(p->p_classes.table, class_index, p);out:	return rc;}#ifdef DEBUG_HASHESstatic void symtab_hash_eval(struct symtab *s){	int i;	for (i = 0; i < SYM_NUM; i++) {		struct hashtab *h = s[i].table;		struct hashtab_info info;		hashtab_stat(h, &info);		printk(KERN_INFO "%s:  %d entries and %d/%d buckets used, "		       "longest chain length %d\n", symtab_name[i], h->nel,		       info.slots_used, h->size, info.max_chain_len);	}}#endif/* * Define the other val_to_name and val_to_struct arrays * in a policy database structure. * * Caller must clean up on failure. */int policydb_index_others(struct policydb *p){	int i, rc = 0;	printk(KERN_INFO "security:  %d users, %d roles, %d types, %d bools",	       p->p_users.nprim, p->p_roles.nprim, p->p_types.nprim, p->p_bools.nprim);	mls_policydb_index_others(p);	printk("\n");	printk(KERN_INFO "security:  %d classes, %d rules\n",	       p->p_classes.nprim, p->te_avtab.nel);#ifdef DEBUG_HASHES	avtab_hash_eval(&p->te_avtab, "rules");	symtab_hash_eval(p->symtab);#endif	p->role_val_to_struct =		kmalloc(p->p_roles.nprim * sizeof(*(p->role_val_to_struct)),		        GFP_KERNEL);	if (!p->role_val_to_struct) {		rc = -ENOMEM;		goto out;	}	p->user_val_to_struct =		kmalloc(p->p_users.nprim * sizeof(*(p->user_val_to_struct)),		        GFP_KERNEL);	if (!p->user_val_to_struct) {		rc = -ENOMEM;		goto out;	}	if (cond_init_bool_indexes(p)) {		rc = -ENOMEM;		goto out;	}	for (i = SYM_ROLES; i < SYM_NUM; i++) {		p->sym_val_to_name[i] =			kmalloc(p->symtab[i].nprim * sizeof(char *), GFP_KERNEL);		if (!p->sym_val_to_name[i]) {			rc = -ENOMEM;			goto out;		}		rc = hashtab_map(p->symtab[i].table, index_f[i], p);		if (rc)			goto out;	}out:	return rc;}/* * The following *_destroy functions are used to * free any memory allocated for each kind of * symbol data in the policy database. */static int perm_destroy(void *key, void *datum, void *p){	kfree(key);	kfree(datum);	return 0;}static int common_destroy(void *key, void *datum, void *p){	struct common_datum *comdatum;	kfree(key);	comdatum = datum;	hashtab_map(comdatum->permissions.table, perm_destroy, NULL);	hashtab_destroy(comdatum->permissions.table);	kfree(datum);	return 0;}static int class_destroy(void *key, void *datum, void *p){	struct class_datum *cladatum;	struct constraint_node *constraint, *ctemp;	struct constraint_expr *e, *etmp;	kfree(key);	cladatum = datum;	hashtab_map(cladatum->permissions.table, perm_destroy, NULL);	hashtab_destroy(cladatum->permissions.table);	constraint = cladatum->constraints;	while (constraint) {		e = constraint->expr;		while (e) {			ebitmap_destroy(&e->names);			etmp = e;			e = e->next;			kfree(etmp);		}		ctemp = constraint;		constraint = constraint->next;		kfree(ctemp);	}	kfree(cladatum->comkey);	kfree(datum);	return 0;}static int role_destroy(void *key, void *datum, void *p){	struct role_datum *role;	kfree(key);	role = datum;	ebitmap_destroy(&role->dominates);	ebitmap_destroy(&role->types);	kfree(datum);	return 0;}static int type_destroy(void *key, void *datum, void *p){	kfree(key);	kfree(datum);	return 0;}static int user_destroy(void *key, void *datum, void *p){	struct user_datum *usrdatum;	kfree(key);	usrdatum = datum;	ebitmap_destroy(&usrdatum->roles);	mls_user_destroy(usrdatum);	kfree(datum);	return 0;}static int (*destroy_f[SYM_NUM]) (void *key, void *datum, void *datap) ={	common_destroy,	class_destroy,	role_destroy,	type_destroy,	user_destroy,	mls_destroy_f	cond_destroy_bool};void ocontext_destroy(struct ocontext *c, int i){	context_destroy(&c->context[0]);	context_destroy(&c->context[1]);	if (i == OCON_ISID || i == OCON_FS ||	    i == OCON_NETIF || i == OCON_FSUSE)		kfree(c->u.name);	kfree(c);}/* * Free any memory allocated by a policy database structure. */void policydb_destroy(struct policydb *p){	struct ocontext *c, *ctmp;	struct genfs *g, *gtmp;	int i;	for (i = 0; i < SYM_NUM; i++) {		hashtab_map(p->symtab[i].table, destroy_f[i], NULL);		hashtab_destroy(p->symtab[i].table);	}	for (i = 0; i < SYM_NUM; i++) {		if (p->sym_val_to_name[i])			kfree(p->sym_val_to_name[i]);	}	if (p->class_val_to_struct)		kfree(p->class_val_to_struct);	if (p->role_val_to_struct)		kfree(p->role_val_to_struct);	if (p->user_val_to_struct)		kfree(p->user_val_to_struct);	avtab_destroy(&p->te_avtab);	for (i = 0; i < OCON_NUM; i++) {		c = p->ocontexts[i];		while (c) {			ctmp = c;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品尤物av久久免费看| 色婷婷激情一区二区三区| 成人av电影免费在线播放| 欧美性色综合网| 久久精品一区二区三区四区| 亚洲一区二三区| 国产精品亚洲视频| 欧美久久免费观看| 中文字幕亚洲欧美在线不卡| 久久综合综合久久综合| 欧美午夜在线观看| 中文字幕综合网| 国产麻豆精品久久一二三| 555www色欧美视频| 亚洲一卡二卡三卡四卡五卡| 欧美日本韩国一区二区三区视频 | 免费高清不卡av| 99在线热播精品免费| 久久久综合视频| 日本女优在线视频一区二区| 欧美性一区二区| 一区二区在线观看免费| 91丨porny丨中文| 国产精品久久久一本精品| 狠狠色丁香久久婷婷综| 欧美一区二区三区视频在线观看| 一区二区三区中文在线观看| 99热这里都是精品| 中文字幕中文字幕在线一区| 成人免费视频播放| 国产精品午夜在线| 成人性色生活片免费看爆迷你毛片| 久久综合狠狠综合久久激情 | 亚洲精品ww久久久久久p站| 国产麻豆成人精品| 国产亚洲精品7777| 成人午夜在线视频| 国产精品视频一二三| 波多野结衣亚洲一区| 国产精品久线在线观看| 99久久亚洲一区二区三区青草| 国产精品动漫网站| 色域天天综合网| 一区二区三区久久久| 最新久久zyz资源站| 成人免费视频视频在线观看免费| 国产校园另类小说区| youjizz久久| 一区二区三区精品久久久| 欧美亚日韩国产aⅴ精品中极品| 午夜国产精品一区| 欧美sm美女调教| 国产成人av一区二区| 亚洲女厕所小便bbb| 欧美日韩一区二区三区在线| 秋霞成人午夜伦在线观看| 精品国产一区二区三区忘忧草| 国产jizzjizz一区二区| 亚洲日本护士毛茸茸| 7878成人国产在线观看| 韩国欧美国产1区| 自拍偷拍亚洲激情| 欧美乱妇20p| 国产91精品精华液一区二区三区| 亚洲欧美日韩综合aⅴ视频| 欧美日韩日日骚| 国产成人综合亚洲网站| 亚洲黄网站在线观看| 欧美成人性战久久| 91丨九色丨黑人外教| 免费久久99精品国产| 国产精品三级电影| 91精品欧美一区二区三区综合在| 韩国视频一区二区| 亚洲一级二级三级在线免费观看| 精品国产凹凸成av人导航| 91美女片黄在线| 韩国三级中文字幕hd久久精品| 亚洲欧美另类在线| 欧美精品一区二区久久久| 91女神在线视频| 老司机精品视频线观看86| 亚洲欧美乱综合| 国产亚洲欧美日韩在线一区| 欧美女孩性生活视频| caoporn国产精品| 另类小说视频一区二区| 亚洲亚洲精品在线观看| 国产欧美va欧美不卡在线| 91精品麻豆日日躁夜夜躁| 99久久精品国产观看| 国产成人在线看| 久久国产免费看| 亚洲v日本v欧美v久久精品| 亚洲欧美自拍偷拍色图| 久久先锋影音av鲁色资源| 在线播放欧美女士性生活| 在线观看视频91| 成人av集中营| 国产ts人妖一区二区| 精品一区二区三区在线播放| 性久久久久久久| 亚洲一二三区视频在线观看| 日韩毛片精品高清免费| 欧美国产日韩a欧美在线观看| 日韩午夜激情视频| 欧美区在线观看| 欧美日韩一区二区电影| 欧美在线观看视频一区二区三区| eeuss鲁一区二区三区| 日韩精品一区二区三区在线播放 | 欧美乱妇一区二区三区不卡视频| 色婷婷精品久久二区二区蜜臂av| 成人av午夜电影| 菠萝蜜视频在线观看一区| 风间由美一区二区三区在线观看 | 亚洲国产精品自拍| 亚洲午夜久久久久中文字幕久| 亚洲另类在线视频| 一区二区三区在线观看欧美| 亚洲精选在线视频| 亚洲小说欧美激情另类| 亚洲成人动漫在线免费观看| 丝袜脚交一区二区| 日本女优在线视频一区二区| 久久精品国产精品青草| 国产精品亚洲专一区二区三区| 久久国产精品色婷婷| 国产乱码字幕精品高清av| 国产高清精品网站| 成人a免费在线看| 91丨porny丨首页| 欧美日韩亚洲丝袜制服| 日韩欧美国产一区二区三区| 久久影院视频免费| 中文字幕一区二区三区在线播放| 亚洲激情自拍偷拍| 免费的国产精品| 国产九色sp调教91| 91麻豆国产福利在线观看| 欧美视频中文字幕| 欧美mv日韩mv亚洲| 国产精品毛片久久久久久| 一区二区三区在线播放| 美国av一区二区| 成人午夜大片免费观看| 91久久香蕉国产日韩欧美9色| 欧美色倩网站大全免费| 精品国产一区二区亚洲人成毛片| 中文字幕av一区二区三区| 亚洲一区二区三区在线播放| 日韩不卡一二三区| 不卡一区在线观看| 91精品国产色综合久久ai换脸| 久久亚洲捆绑美女| 亚洲国产视频a| 国产福利一区在线| 欧美日韩中文精品| 国产三级一区二区| 亚洲影视资源网| 国产剧情一区二区| 欧美久久一区二区| 中文字幕一区二区三区不卡在线 | 91久久人澡人人添人人爽欧美| 欧美成人精品福利| 一区二区三区在线影院| 精品一区二区免费视频| 欧美中文字幕一二三区视频| 国产日韩欧美a| 日本欧美韩国一区三区| 91在线视频在线| 久久综合九色综合97婷婷女人| 亚洲一区二区三区在线播放| 成人97人人超碰人人99| 精品日韩一区二区三区| 亚洲国产毛片aaaaa无费看| 波多野结衣中文字幕一区二区三区| 日韩欧美的一区| 午夜一区二区三区在线观看| 不卡电影一区二区三区| 久久亚洲综合av| 久久66热偷产精品| 7777精品伊人久久久大香线蕉 | 精品日韩成人av| 天堂午夜影视日韩欧美一区二区| 91免费精品国自产拍在线不卡| 久久影院午夜论| 精品写真视频在线观看| 欧美人体做爰大胆视频| 亚洲第一狼人社区| 在线观看欧美日本| 一区二区三区在线看| 一本久久综合亚洲鲁鲁五月天| 中文字幕av不卡| 成人精品亚洲人成在线| 中文字幕精品一区二区精品绿巨人| 久久国产剧场电影| 精品少妇一区二区三区在线播放| 青草av.久久免费一区| 884aa四虎影成人精品一区|