Module: kamailio Branch: master Commit: c8cf642c21169bcaee82347db858d8f3bcb6a42c URL: https://github.com/kamailio/kamailio/commit/c8cf642c21169bcaee82347db858d8f3...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2024-04-06T08:19:19+02:00
corex: added dns_file modparam
- can be set to the path of a file containing dns_cache records - each line has to contain a dns_cache-param-formatted record - empty lines are allowed - comment line has to start with #, comments can be only on separate line, not supported after dns_cache record
---
Modified: src/modules/corex/corex_mod.c
---
Diff: https://github.com/kamailio/kamailio/commit/c8cf642c21169bcaee82347db858d8f3... Patch: https://github.com/kamailio/kamailio/commit/c8cf642c21169bcaee82347db858d8f3...
---
diff --git a/src/modules/corex/corex_mod.c b/src/modules/corex/corex_mod.c index 4152fbf5df4..6739e4cee16 100644 --- a/src/modules/corex/corex_mod.c +++ b/src/modules/corex/corex_mod.c @@ -32,6 +32,7 @@ #include "../../core/fmsg.h" #include "../../core/kemi.h" #include "../../core/str_list.h" +#include "../../core/trim.h" #include "../../core/events.h" #include "../../core/onsend.h" #include "../../core/forward.h" @@ -82,12 +83,15 @@ static int corex_evrt_reply_out_no = -1;
int corex_alias_subdomains_param(modparam_t type, void *val); int corex_dns_cache_param(modparam_t type, void *val); +int corex_dns_file_param(modparam_t type, void *val); +int corex_dns_file_load(void);
static int mod_init(void); static int child_init(int); static void mod_destroy(void);
static str_list_t *corex_dns_cache_list = NULL; +static str_list_t *corex_dns_file_list = NULL;
static int corex_dns_cache_param_add(str *pval);
@@ -176,6 +180,8 @@ static param_export_t params[] = { (void *)corex_alias_subdomains_param}, {"dns_cache", PARAM_STR | USE_FUNC_PARAM, (void *)corex_dns_cache_param}, + {"dns_file", PARAM_STR | USE_FUNC_PARAM, + (void *)corex_dns_file_param}, {"nio_intercept", INT_PARAM, &nio_intercept}, {"nio_min_msg_len", INT_PARAM, &nio_min_msg_len}, {"nio_msg_avp", PARAM_STR, &nio_msg_avp_param}, @@ -226,6 +232,9 @@ static int mod_init(void) return -1; } } + if(corex_dns_file_load() < 0) { + return -1; + }
if((nio_intercept > 0) && (nio_intercept_init() < 0)) { LM_ERR("failed to register network io intercept callback\n"); @@ -385,6 +394,67 @@ int corex_dns_cache_param(modparam_t type, void *val) return 0; }
+int corex_dns_file_param(modparam_t type, void *val) +{ + str_list_t *sit; + + if(val == NULL || ((str *)val)->s == NULL || ((str *)val)->len == 0) { + LM_ERR("invalid parameter\n"); + return -1; + } + + sit = (str_list_t *)pkg_mallocxz(sizeof(str_list_t)); + if(sit == NULL) { + PKG_MEM_ERROR; + return -1; + } + sit->s = *((str *)val); + if(corex_dns_file_list != NULL) { + sit->next = corex_dns_file_list; + } + corex_dns_file_list = sit; + + return 0; +} + +int corex_dns_file_load(void) +{ + str_list_t *sit; + str sline; + char lbuf[512]; + FILE *FP; + + for(sit = corex_dns_file_list; sit != NULL; sit = sit->next) { + FP = fopen(sit->s.s, "r"); + if(FP == NULL) { + LM_ERR("failed to open file '%.*s'\n", sit->s.len, sit->s.s); + return -1; + } + while(fgets(lbuf, 512, FP)) { + sline.s = lbuf; + sline.len = strlen(sline.s); + trim(&sline); + if(sline.len <= 0) { + /* empty line */ + continue; + } + if(sline.s[0] == '#') { + /* comment */ + continue; + } + if(corex_dns_cache_param_add(&sline) < 0) { + LM_ERR("failed to add record: '%.*s' (%.*s)\n", sline.len, + sline.s, sit->s.len, sit->s.s); + fclose(FP); + return -1; + } + } + fclose(FP); + } + + return 0; +} + static int corex_dns_cache_param_add(str *pval) { str sval;