Module: kamailio Branch: 5.1 Commit: bb2668b0d25c0f8096e5838065816cd5245694d6 URL: https://github.com/kamailio/kamailio/commit/bb2668b0d25c0f8096e5838065816cd5...
Author: Henning Westerholt hw@skalatan.de Committer: Henning Westerholt hw@skalatan.de Date: 2019-08-08T21:20:37+02:00
corex: fix parser for alias_subdomain modparam, extend debugging output
- fix parser for alias_subdomain modparam, it was not working correctly for all proto:hostname:port combinations (e.g. hostname/proto mixed up) - extend debugging output for alias adding and also alias matching
(cherry picked from commit 36ef1bf77f9df7bc5022c1dc350e54df2d168cf3)
---
Modified: src/modules/corex/corex_lib.c
---
Diff: https://github.com/kamailio/kamailio/commit/bb2668b0d25c0f8096e5838065816cd5... Patch: https://github.com/kamailio/kamailio/commit/bb2668b0d25c0f8096e5838065816cd5...
---
diff --git a/src/modules/corex/corex_lib.c b/src/modules/corex/corex_lib.c index d8cfc60881..4d05939d88 100644 --- a/src/modules/corex/corex_lib.c +++ b/src/modules/corex/corex_lib.c @@ -114,6 +114,7 @@ int corex_add_alias_subdomains(char* aliasval) corex_alias_t ta; corex_alias_t *na;
+ LM_DBG("try to add alias: %s\n", aliasval); memset(&ta, 0, sizeof(corex_alias_t));
p = strchr(aliasval, ':'); @@ -134,27 +135,38 @@ int corex_add_alias_subdomains(char* aliasval) } else if((p-aliasval)==4 && strncasecmp(aliasval, "sctp", 4)==0) { ta.proto = PROTO_SCTP; } else { - /* use hostname */ - ta.alias.s = aliasval; - ta.alias.len = p - aliasval; + /* invalid protocol */ + LM_ERR("invalid protocol %.*s", (int) (p-aliasval), aliasval); + goto error; } - } - if(ta.alias.len==0) { + /* hostname */ p++; - if(p>=aliasval+strlen(aliasval)) + ta.alias.s = aliasval + (p-aliasval); + + if(p>=aliasval+strlen(aliasval)) { goto error; - ta.alias.s = p; + } + /* port */ p = strchr(ta.alias.s, ':'); if(p==NULL) { ta.alias.len = strlen(ta.alias.s); goto done; } + ta.alias.len = p - ta.alias.s; + p++; + ta.port = str2s(p, strlen(p), NULL); + + } else { + /* hostname */ + ta.alias.s = aliasval; + ta.alias.len = p - ta.alias.s; + /* port */ + p++; + if(p>=aliasval+strlen(aliasval)) { + goto error; + } + ta.port = str2s(p, strlen(p), NULL); } - /* port */ - p++; - if(p>=aliasval+strlen(aliasval)) - goto error; - ta.port = str2s(p, strlen(p), NULL);
done: if(ta.alias.len==0) @@ -169,6 +181,8 @@ int corex_add_alias_subdomains(char* aliasval) na->next = _corex_alias_list; _corex_alias_list = na;
+ LM_DBG("alias: %d:%.*s:%d from value: %s added\n", ta.proto, + ta.alias.len, ta.alias.s, ta.port, aliasval); return 0;
error: @@ -181,6 +195,8 @@ int corex_check_self(str* host, unsigned short port, unsigned short proto) { corex_alias_t *ta;
+ LM_DBG("check self for: %d:%.*s:%d\n", (int) proto, host->len, + host->s, (int)port); for(ta=_corex_alias_list; ta; ta=ta->next) { if(host->len<ta->alias.len) continue; @@ -191,21 +207,22 @@ int corex_check_self(str* host, unsigned short port, unsigned short proto) if(host->len==ta->alias.len && strncasecmp(host->s, ta->alias.s, host->len)==0) { /* match domain */ - LM_DBG("check self domain match: %d:%.*s:%d\n", (int)ta->port, - ta->alias.len, ta->alias.s, (int)ta->proto); + LM_DBG("check self domain match: %d:%.*s:%d\n", (int)ta->proto, + ta->alias.len, ta->alias.s, (int)ta->port); return 1; } if(strncasecmp(ta->alias.s, host->s + host->len - ta->alias.len, ta->alias.len)==0) { if(host->s[host->len - ta->alias.len - 1]=='.') { /* match sub-domain */ - LM_DBG("check self sub-domain match: %d:%.*s:%d\n", (int)ta->port, - ta->alias.len, ta->alias.s, (int)ta->proto); + LM_DBG("check self sub-domain match: %d:%.*s:%d\n", + (int)ta->proto, ta->alias.len, ta->alias.s, + (int)ta->port); return 1; } } } - + LM_DBG("no match found\n"); return 0; /* no match */ }