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

📄 modcall.c

📁 radius server在linux下的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			2,			/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		}	},	/* preacct */	{		/* group */		{			MOD_ACTION_RETURN,	/* reject   */			MOD_ACTION_RETURN,	/* fail     */			2,			/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			MOD_ACTION_RETURN,	/* notfound */			1,			/* noop     */			3			/* updated  */		},		/* redundant */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			MOD_ACTION_RETURN,	/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		},		/* append */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			2,			/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		}	},	/* accounting */	{		/* group */		{			MOD_ACTION_RETURN,	/* reject   */			MOD_ACTION_RETURN,	/* fail     */			2,			/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			MOD_ACTION_RETURN,	/* notfound */			1,			/* noop     */			3			/* updated  */		},		/* redundant */		{			1,			/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			1,			/* invalid  */			1,			/* userlock */			1,			/* notfound */			2,			/* noop     */			4			/* updated  */		},		/* append */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			2,			/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		}	},	/* checksimul */	{		/* group */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			MOD_ACTION_RETURN,	/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		},		/* redundant */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			MOD_ACTION_RETURN,	/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		},		/* append */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			MOD_ACTION_RETURN,	/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		}	},	/* pre-proxy */	{		/* group */		{			MOD_ACTION_RETURN,	/* reject   */			MOD_ACTION_RETURN,	/* fail     */			3,			/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			1,			/* notfound */			2,			/* noop     */			4			/* updated  */		},		/* redundant */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			MOD_ACTION_RETURN,	/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		},		/* append */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			2,			/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		}	},	/* post-proxy */	{		/* group */		{			MOD_ACTION_RETURN,	/* reject   */			MOD_ACTION_RETURN,	/* fail     */			3,			/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			1,			/* notfound */			2,			/* noop     */			4			/* updated  */		},		/* redundant */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			MOD_ACTION_RETURN,	/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		},		/* append */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			2,			/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		}	},	/* post-auth */	{		/* group */		{			MOD_ACTION_RETURN,	/* reject   */			MOD_ACTION_RETURN,	/* fail     */			3,			/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			1,			/* notfound */			2,			/* noop     */			4			/* updated  */		},		/* redundant */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			MOD_ACTION_RETURN,	/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		},		/* append */		{			MOD_ACTION_RETURN,	/* reject   */			1,			/* fail     */			MOD_ACTION_RETURN,	/* ok       */			MOD_ACTION_RETURN,	/* handled  */			MOD_ACTION_RETURN,	/* invalid  */			MOD_ACTION_RETURN,	/* userlock */			2,			/* notfound */			MOD_ACTION_RETURN,	/* noop     */			MOD_ACTION_RETURN	/* updated  */		}	}};/* Bail out if the module in question does not supply the wanted component */static void sanity_check(int component, module_instance_t *inst,			 const char *filename){	if (!inst->entry->module->methods[component]) {		radlog(L_ERR|L_CONS,				"%s: \"%s\" modules aren't allowed in '%s' sections -- they have no such method.",				filename, inst->entry->module->name,				component_names[component]);		exit(1);	}}/* Parse a CONF_SECTION containing only result=action pairs */static void override_actions(modcallable *c, CONF_SECTION *cs,		const char *filename){	CONF_ITEM *ci;	CONF_PAIR *cp;	const char *attr, *value;	int lineno, rcode, action;	for(ci=cf_item_find_next(cs, NULL); ci != NULL; ci=cf_item_find_next(cs, ci)) {		if(cf_item_is_section(ci)) {			radlog(L_ERR|L_CONS,					"%s[%d] Subsection of module instance call "					"not allowed\n", filename,					cf_section_lineno(cf_itemtosection(ci)));			exit(1);		}		cp = cf_itemtopair(ci);		attr = cf_pair_attr(cp);		value = cf_pair_value(cp);		lineno = cf_pair_lineno(cp);		rcode = str2rcode(attr, filename, lineno);		action = str2action(value, filename, lineno);		c->actions[rcode] = action;	}}static modcallable *do_compile_modsingle(int component, CONF_ITEM *ci,		const char *filename, int grouptype,		const char **modname){	int lineno;	const char *modrefname;	modsingle *single;	modcallable *csingle;	module_instance_t *this;	if (cf_item_is_section(ci)) {		CONF_SECTION *cs = cf_itemtosection(ci);		lineno = cf_section_lineno(cs);		modrefname = cf_section_name1(cs);		/* group{}, redundant{}, or append{} may appear where a		 * single module instance was expected - in that case, we		 * hand it off to compile_modgroup */		if (strcmp(modrefname, "group") == 0) {			*modname = "UnnamedGroup";			return do_compile_modgroup(component, cs, filename,					GROUPTYPE_SIMPLEGROUP, grouptype);		} else if (strcmp(modrefname, "redundant") == 0) {			*modname = "UnnamedGroup";			return do_compile_modgroup(component, cs, filename,					GROUPTYPE_REDUNDANT, grouptype);		} else if (strcmp(modrefname, "append") == 0) {			*modname = "UnnamedGroup";			return do_compile_modgroup(component, cs, filename,					GROUPTYPE_APPEND, grouptype);		}	} else {		CONF_PAIR *cp = cf_itemtopair(ci);		lineno = cf_pair_lineno(cp);		modrefname = cf_pair_attr(cp);	}	single = rad_malloc(sizeof(*single));	csingle = mod_singletocallable(single);	csingle->next = NULL;	memcpy(csingle->actions,			defaultactions[component][grouptype],			sizeof csingle->actions);	rad_assert(modrefname != NULL);	csingle->name = modrefname;	csingle->type = MOD_SINGLE;	if (cf_item_is_section(ci)) {		/* override default actions with what's in the CONF_SECTION */		override_actions(csingle, cf_itemtosection(ci), filename);	}	this = find_module_instance(modrefname);	if (this == NULL) {		exit(1); /* FIXME */	}	sanity_check(component, this, filename);	single->modinst = this;	*modname = this->entry->module->name;	return csingle;}modcallable *compile_modsingle(int component, CONF_ITEM *ci,		const char *filename, const char **modname){	modcallable *ret = do_compile_modsingle(component, ci, filename,		GROUPTYPE_SIMPLEGROUP,		modname);	dump_tree(component, ret);	return ret;}static modcallable *do_compile_modgroup(int component, CONF_SECTION *cs,		const char *filename, int grouptype,		int parentgrouptype){	modgroup *g;	modcallable *c;	CONF_ITEM *ci;	g = rad_malloc(sizeof *g);	c = mod_grouptocallable(g);	c->next = NULL;	memcpy(c->actions, defaultactions[component][parentgrouptype],		sizeof c->actions);	c->name = cf_section_name1(cs);	rad_assert(c->name != NULL);	c->type = MOD_GROUP;	g->children = NULL;	for (ci=cf_item_find_next(cs, NULL); ci != NULL; ci=cf_item_find_next(cs, ci)) {		if(cf_item_is_section(ci)) {			const char *junk;			modcallable *single;			single = do_compile_modsingle(component, ci, filename,					grouptype, &junk);			add_child(g, single);		} else {			const char *attr, *value;			CONF_PAIR *cp = cf_itemtopair(ci);			int lineno;			attr = cf_pair_attr(cp);			value = cf_pair_value(cp);			lineno = cf_pair_lineno(cp);			/* A CONF_PAIR is either a module instance with no			 * actions specified... */			if(value[0]==0) {				modcallable *single;				const char *junk;				single = do_compile_modsingle(component,						cf_pairtoitem(cp), filename,						grouptype, &junk);				add_child(g, single);			} else {				/* ...or an action to be applied to this				 * group. */				int rcode, action;				rcode = str2rcode(attr, filename, lineno);				action = str2action(value, filename, lineno);				c->actions[rcode] = action;			}		}	}	return mod_grouptocallable(g);}modcallable *compile_modgroup(int component, CONF_SECTION *cs,		const char *filename){	modcallable *ret = do_compile_modgroup(component, cs, filename,			GROUPTYPE_SIMPLEGROUP,			GROUPTYPE_SIMPLEGROUP);	dump_tree(component, ret);	return ret;}void add_to_modcallable(modcallable **parent, modcallable *this,		int component, char *name){	modgroup *g;	if (*parent == NULL) {		modcallable *c;		g = rad_malloc(sizeof *g);		c = mod_grouptocallable(g);		c->next = NULL;		memcpy(c->actions,				defaultactions[component][GROUPTYPE_SIMPLEGROUP],				sizeof c->actions);		rad_assert(name != NULL);		c->name = name;		c->type = MOD_GROUP;		g->children = NULL;		*parent = mod_grouptocallable(g);	} else {		g = mod_callabletogroup(*parent);	}	add_child(g, this);}void modcallable_free(modcallable **pc){	modcallable *c, *loop, *next;	c = *pc;	if(c->type==MOD_GROUP) {		for(loop=mod_callabletogroup(c)->children ; loop ; loop=next) {			next = loop->next;			modcallable_free(&loop);		}	}	free(c);	*pc = NULL;}

⌨️ 快捷键说明

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