/* * Ensure that the unlang sections are compiled. */ static int mod_instantiate(UNUSED void *instance, CONF_SECTION *listen_cs) { int rcode; CONF_SECTION *server_cs; vp_tmpl_rules_t parse_rules; memset(&parse_rules, 0, sizeof(parse_rules)); parse_rules.dict_def = dict_freeradius; rad_assert(listen_cs); server_cs = cf_item_to_section(cf_parent(listen_cs)); rad_assert(strcmp(cf_section_name1(server_cs), "server") == 0); rcode = unlang_compile_subsection(server_cs, "new", "client", MOD_AUTHORIZE, &parse_rules); if (rcode < 0) return rcode; if (rcode == 0) { cf_log_err(server_cs, "Failed finding 'new client { ... }' section of virtual server %s", cf_section_name2(server_cs)); return -1; } rcode = unlang_compile_subsection(server_cs, "add", "client", MOD_POST_AUTH, &parse_rules); if (rcode < 0) return rcode; rcode = unlang_compile_subsection(server_cs, "deny", "client", MOD_POST_AUTH, &parse_rules); if (rcode < 0) return rcode; return 0; }
static int mod_instantiate(void *instance, CONF_SECTION *listen_cs) { int rcode; CONF_SECTION *server_cs; proto_detail_process_t *inst = talloc_get_type_abort(instance, proto_detail_process_t); vp_tmpl_rules_t parse_rules; memset(&parse_rules, 0, sizeof(parse_rules)); parse_rules.dict_def = dict_freeradius; rad_assert(listen_cs); server_cs = cf_item_to_section(cf_parent(listen_cs)); rad_assert(strcmp(cf_section_name1(server_cs), "server") == 0); rcode = unlang_compile_subsection(server_cs, "recv", NULL, inst->recv_type, &parse_rules); if (rcode < 0) return rcode; if (rcode == 0) { cf_log_err(server_cs, "Failed finding 'recv { ... }' section of virtual server %s", cf_section_name2(server_cs)); return -1; } rcode = unlang_compile_subsection(server_cs, "send", "ok", inst->send_type, &parse_rules); if (rcode < 0) return rcode; rcode = unlang_compile_subsection(server_cs, "send", "fail", inst->send_type, &parse_rules); if (rcode < 0) return rcode; return 0; }