/// @test Test util path functions - ib_util_relative_path() TEST_F(TestIBUtilPath, relative_path) { struct test_path_data_t *test; for (test = &test_rel_file[0]; test->in1 != NULL; ++test) { const char *out; out = ib_util_relative_file(MemPool(), test->in1, test->in2); EXPECT_STREQ(test->out, out) << "Test: in1 = '" << test->in1 << "'" << ", in2 = '" << test->in2 << "'"; } }
/** * Load a eudoxus pattern so it can be used in rules. * * The filename should point to a compiled automata. If a relative path is * given, it will be loaded relative to the current configuration file. * * @param[in] cp Configuration parser. * @param[in] name Directive name. * @param[in] pattern_name Name to associate with the pattern. * @param[in] filename Filename to load. * @param[in] cbdata Callback data (unused) * @return * - IB_OK on success. * - IB_EEXIST if the pattern has already been defined. * - IB_EINVAL if there was an error loading the automata. */ static ib_status_t load_eudoxus_pattern_param2(ib_cfgparser_t *cp, const char *name, const char *pattern_name, const char *filename, void *cbdata) { ib_engine_t *ib; ib_status_t rc; const char *automata_file; ia_eudoxus_result_t ia_rc; ib_hash_t *eudoxus_pattern_hash; ia_eudoxus_t *eudoxus; const ee_config_t* config; ib_mm_t mm_tmp; void *tmp; assert(cp != NULL); assert(cp->ib != NULL); assert(pattern_name != NULL); assert(filename != NULL); mm_tmp = ib_engine_mm_temp_get(cp->ib); ib = cp->ib; config = ee_get_config(ib); assert(config != NULL); eudoxus_pattern_hash = config->eudoxus_pattern_hash; assert(eudoxus_pattern_hash != NULL); /* Check if the pattern name is already in use */ rc = ib_hash_get(eudoxus_pattern_hash, &tmp, pattern_name); if (rc == IB_OK) { ib_log_error(cp->ib, MODULE_NAME_STR ": Pattern named \"%s\" already defined", pattern_name); return IB_EEXIST; } automata_file = ib_util_relative_file(mm_tmp, cp->curr->file, filename); if (access(automata_file, R_OK) != 0) { ib_log_error(cp->ib, MODULE_NAME_STR ": Error accessing eudoxus automata file: %s.", automata_file); return IB_EINVAL; } ia_rc = ia_eudoxus_create_from_path(&eudoxus, automata_file); if (ia_rc != IA_EUDOXUS_OK) { ib_log_error(cp->ib, MODULE_NAME_STR ": Error loading eudoxus automata file[%d]: %s.", ia_rc, automata_file); return IB_EINVAL; } rc = ib_hash_set(eudoxus_pattern_hash, pattern_name, eudoxus); if (rc != IB_OK) { ia_eudoxus_destroy(eudoxus); return rc; } return IB_OK; }
static ib_status_t sqli_dir_fingerprint_set( ib_cfgparser_t *cp, const char *directive_name, const char *set_name, const char *set_path, void *cbdata ) { assert(cp != NULL); assert(directive_name != NULL); assert(set_name != NULL); assert(set_path != NULL); ib_status_t rc; ib_context_t *ctx = NULL; ib_module_t *m = NULL; sqli_module_config_t *cfg = NULL; sqli_fingerprint_set_t *ps = NULL; ib_mm_t mm; char *abs_set_path = NULL; rc = ib_cfgparser_context_current(cp, &ctx); assert(rc == IB_OK); assert(ctx != NULL); if (ctx != ib_context_main(cp->ib)) { ib_cfg_log_error(cp, "%s: Only valid at main context.", directive_name ); return IB_EINVAL; } if (strcmp("default", set_name) == 0) { ib_cfg_log_error(cp, "%s: default is a reserved set name.", directive_name ); return IB_EINVAL; } mm = ib_engine_mm_main_get(cp->ib); rc = ib_engine_module_get( ib_context_get_engine(ctx), MODULE_NAME_STR, &m ); assert(rc == IB_OK); rc = ib_context_module_config(ctx, m, &cfg); assert(rc == IB_OK); if (cfg->fingerprint_sets == NULL) { rc = ib_hash_create(&cfg->fingerprint_sets, mm); assert(rc == IB_OK); } assert(cfg->fingerprint_sets != NULL); rc = ib_hash_get(cfg->fingerprint_sets, NULL, set_name); if (rc == IB_OK) { ib_cfg_log_error(cp, "%s: Duplicate fingerprint set definition: %s", directive_name, set_name ); return IB_EINVAL; } assert(rc == IB_ENOENT); abs_set_path = ib_util_relative_file( ib_engine_mm_config_get(cp->ib), ib_cfgparser_curr_file(cp), set_path ); if (abs_set_path == NULL) { return IB_EALLOC; } rc = sqli_create_fingerprint_set_from_file(&ps, abs_set_path, mm); if (rc != IB_OK) { ib_cfg_log_error(cp, "%s: Failure to load fingerprint set from file: %s", directive_name, abs_set_path ); return IB_EINVAL; } assert(ps != NULL); rc = ib_hash_set(cfg->fingerprint_sets, ib_mm_strdup(mm, set_name), ps); assert(rc == IB_OK); return IB_OK; }