diff --git a/modules/userblacklist/db.c b/modules/userblacklist/db.c index bebb574bb7a..a679ae8f0f6 100644 --- a/modules/userblacklist/db.c +++ b/modules/userblacklist/db.c @@ -13,8 +13,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -42,7 +42,8 @@ extern int match_mode; -int db_build_userbl_tree(const str *username, const str *domain, const str *table, struct dtrie_node_t *root, int use_domain) +int db_build_userbl_tree(const str *username, const str *domain, + const str *dbtable, struct dtrie_node_t *root, int use_domain) { db_key_t columns[2] = { &userblacklist_prefix_col, &userblacklist_whitelist_col }; db_key_t key[2] = { &userblacklist_username_col, &userblacklist_domain_col }; @@ -59,13 +60,14 @@ int db_build_userbl_tree(const str *username, const str *domain, const str *tabl VAL_STR(val + 1).s = domain->s; VAL_STR(val + 1).len = domain->len; - - if (userblacklist_dbf.use_table(userblacklist_dbh, table) < 0) { - LM_ERR("cannot use table '%.*s'.\n", table->len, table->s); + if (userblacklist_dbf.use_table(userblacklist_dbh, dbtable) < 0) { + LM_ERR("cannot use db table '%.*s'.\n", dbtable->len, dbtable->s); return -1; } - if (userblacklist_dbf.query(userblacklist_dbh, key, 0, val, columns, (!use_domain) ? (1) : (2), 2, 0, &res) < 0) { - LM_ERR("error while executing query.\n"); + if (userblacklist_dbf.query(userblacklist_dbh, key, 0, val, columns, + (!use_domain) ? (1) : (2), 2, 0, &res) < 0) { + LM_ERR("error while executing query on db table '%.*s'\n", + dbtable->len, dbtable->s); return -1; } @@ -85,8 +87,12 @@ int db_build_userbl_tree(const str *username, const str *domain, const str *tabl } else { nodeflags=(void *)MARK_WHITELIST; } - if (dtrie_insert(root, RES_ROWS(res)[i].values[0].val.string_val, strlen(RES_ROWS(res)[i].values[0].val.string_val), - nodeflags, match_mode) < 0) LM_ERR("could not insert values into trie.\n"); + + if (dtrie_insert(root, RES_ROWS(res)[i].values[0].val.string_val, + strlen(RES_ROWS(res)[i].values[0].val.string_val), + nodeflags, match_mode) < 0) + LM_ERR("could not insert values into trie.\n"); + n++; } else { @@ -105,20 +111,22 @@ int db_build_userbl_tree(const str *username, const str *domain, const str *tabl * Rebuild d-tree using database entries * \return negative on failure, positive on success, indicating the number of d-tree entries */ -int db_reload_source(const str *table, struct dtrie_node_t *root) +int db_reload_source(const str *dbtable, struct dtrie_node_t *root) { db_key_t columns[2] = { &globalblacklist_prefix_col, &globalblacklist_whitelist_col }; db1_res_t *res; int i; int n = 0; void *nodeflags; - - if (userblacklist_dbf.use_table(userblacklist_dbh, table) < 0) { - LM_ERR("cannot use table '%.*s'.\n", table->len, table->s); + + if (userblacklist_dbf.use_table(userblacklist_dbh, dbtable) < 0) { + LM_ERR("cannot use db table '%.*s'\n", dbtable->len, dbtable->s); return -1; } - if (userblacklist_dbf.query(userblacklist_dbh, NULL, NULL, NULL, columns, 0, 2, NULL, &res) < 0) { - LM_ERR("error while executing query.\n"); + if (userblacklist_dbf.query(userblacklist_dbh, NULL, NULL, NULL, + columns, 0, 2, NULL, &res) < 0) { + LM_ERR("error while executing query on db table '%.*s'\n", + dbtable->len, dbtable->s); return -1; } @@ -133,10 +141,17 @@ int db_reload_source(const str *table, struct dtrie_node_t *root) /* LM_DBG("insert into tree prefix %s, whitelist %d", RES_ROWS(res)[i].values[0].val.string_val, RES_ROWS(res)[i].values[1].val.int_val); */ - if (RES_ROWS(res)[i].values[1].val.int_val == 0) nodeflags=(void *) MARK_BLACKLIST; - else nodeflags=(void *)MARK_WHITELIST; - if (dtrie_insert(root, RES_ROWS(res)[i].values[0].val.string_val, strlen(RES_ROWS(res)[i].values[0].val.string_val), - nodeflags, match_mode) < 0) LM_ERR("could not insert values into trie.\n"); + if (RES_ROWS(res)[i].values[1].val.int_val == 0) { + nodeflags=(void *)MARK_BLACKLIST; + } else { + nodeflags=(void *)MARK_WHITELIST; + } + + if (dtrie_insert(root, RES_ROWS(res)[i].values[0].val.string_val, + strlen(RES_ROWS(res)[i].values[0].val.string_val), + nodeflags, match_mode) < 0) + LM_ERR("could not insert values into trie.\n"); + n++; } else { diff --git a/modules/userblacklist/userblacklist.c b/modules/userblacklist/userblacklist.c index 44ed6f0941b..cac42797519 100644 --- a/modules/userblacklist/userblacklist.c +++ b/modules/userblacklist/userblacklist.c @@ -89,15 +89,19 @@ static int check_user_blacklist_fixup(void** param, int param_no); static int check_globalblacklist_fixup(void** param, int param_no); /* ---- exported commands: */ -static int check_user_blacklist(struct sip_msg *msg, char* str1, char* str2, char* str3, char* str4); -static int check_user_whitelist(struct sip_msg *msg, char* str1, char* str2, char* str3, char* str4); -static int check_user_blacklist2(struct sip_msg *msg, char* str1, char* str2); -static int check_user_whitelist2(struct sip_msg *msg, char* str1, char* str2); -static int check_user_blacklist3(struct sip_msg *msg, char* str1, char* str2, char* str3); -static int check_user_whitelist3(struct sip_msg *msg, char* str1, char* str2, char* str3); -static int check_blacklist(struct sip_msg *msg, struct check_blacklist_fs_t *arg1); -static int check_whitelist(struct sip_msg *msg, struct check_blacklist_fs_t *arg1); -static int check_globalblacklist(struct sip_msg *msg); +static int check_user_blacklist(sip_msg_t *msg, char* puser, + char* pdomain, char* pnumber, char* ptable); +static int check_user_whitelist(sip_msg_t *msg, char* puser, + char* pdomain, char* pnumber, char* ptable); +static int check_user_blacklist2(sip_msg_t *msg, char* puser, char* pdomain); +static int check_user_whitelist2(sip_msg_t *msg, char* puser, char* pdomain); +static int check_user_blacklist3(sip_msg_t *msg, char* puser, char* pdomain, + char* pnumber); +static int check_user_whitelist3(sip_msg_t *msg, char* puser, char* pdomain, + char* pnumber); +static int check_blacklist(sip_msg_t *msg, struct check_blacklist_fs_t *arg1); +static int check_whitelist(sip_msg_t *msg, struct check_blacklist_fs_t *arg1); +static int check_globalblacklist(sip_msg_t *msg); /* ---- module init functions: */ @@ -116,15 +120,24 @@ struct mi_root * mi_check_userwhitelist(struct mi_root* cmd, void* param); /* u static cmd_export_t cmds[]={ - { "check_user_blacklist", (cmd_function)check_user_blacklist2, 2, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, - { "check_user_whitelist", (cmd_function)check_user_whitelist2, 2, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, - { "check_user_blacklist", (cmd_function)check_user_blacklist3, 3, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, - { "check_user_whitelist", (cmd_function)check_user_whitelist3, 3, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, - { "check_user_blacklist", (cmd_function)check_user_blacklist, 4, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, - { "check_user_whitelist", (cmd_function)check_user_whitelist, 4, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, - { "check_blacklist", (cmd_function)check_blacklist, 1, check_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, - { "check_whitelist", (cmd_function)check_whitelist, 1, check_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, - { "check_blacklist", (cmd_function)check_globalblacklist, 0, check_globalblacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, + { "check_user_blacklist", (cmd_function)check_user_blacklist2, 2, + check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, + { "check_user_whitelist", (cmd_function)check_user_whitelist2, 2, + check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, + { "check_user_blacklist", (cmd_function)check_user_blacklist3, 3, + check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, + { "check_user_whitelist", (cmd_function)check_user_whitelist3, 3, + check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, + { "check_user_blacklist", (cmd_function)check_user_blacklist, 4, + check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, + { "check_user_whitelist", (cmd_function)check_user_whitelist, 4, + check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, + { "check_blacklist", (cmd_function)check_blacklist, 1, + check_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, + { "check_whitelist", (cmd_function)check_whitelist, 1, + check_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, + { "check_blacklist", (cmd_function)check_globalblacklist, 0, + check_globalblacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE }, { 0, 0, 0, 0, 0, 0} }; @@ -205,8 +218,8 @@ static int check_user_blacklist_fixup(void** param, int param_no) } -static int check_user_list(sip_msg_t *msg, char* str1, char* str2, - char* str3, char* str4, int listtype) +static int check_user_list(sip_msg_t *msg, char* puser, char* pdomain, + char* pnumber, char* ptable, int listtype) { str user = { .len = 0, .s = NULL }; str domain = { .len = 0, .s = NULL}; @@ -218,25 +231,25 @@ static int check_user_list(sip_msg_t *msg, char* str1, char* str2, char req_number[MAXNUMBERLEN+1]; /* user */ - if(fixup_get_svalue(msg, (gparam_t*)str1, &user)!=0) { + if(fixup_get_svalue(msg, (gparam_t*)puser, &user)!=0) { LM_ERR("cannot print user pseudo-variable\n"); return -1; } /* domain */ - if(fixup_get_svalue(msg, (gparam_t*)str2, &domain)!=0) { + if(fixup_get_svalue(msg, (gparam_t*)pdomain, &domain)!=0) { LM_ERR("cannot print domain pseudo-variable\n"); return -1; } /* source number */ - if(str3 != NULL) { - if(fixup_get_svalue(msg, (gparam_t*)str3, &number)!=0) { + if(pnumber != NULL) { + if(fixup_get_svalue(msg, (gparam_t*)pnumber, &number)!=0) { LM_ERR("cannot print number pseudo-variable\n"); return -1; } } /* table name */ - if(str4 != NULL) { - if(fixup_get_svalue(msg, (gparam_t*)str4, &table)!=0) { + if(pnumber != NULL) { + if(fixup_get_svalue(msg, (gparam_t*)ptable, &table)!=0) { LM_ERR("cannot print number pseudo-variable\n"); return -1; } @@ -304,37 +317,41 @@ static int check_user_list(sip_msg_t *msg, char* str1, char* str2, } -static int check_user_whitelist(struct sip_msg *msg, char* str1, char* str2, char* str3, char* str4) +static int check_user_whitelist(sip_msg_t *msg, char* puser, + char* pdomain, char* pnumber, char* ptable) { - return check_user_list(msg, str1, str2, str3, str4, 1); + return check_user_list(msg, puser, pdomain, pnumber, ptable, 1); } -static int check_user_blacklist(struct sip_msg *msg, char* str1, char* str2, char* str3, char* str4) +static int check_user_blacklist(sip_msg_t *msg, char* puser, + char* pdomain, char* pnumber, char* ptable) { - return check_user_list(msg, str1, str2, str3, str4, 0); + return check_user_list(msg, puser, pdomain, pnumber, ptable, 0); } -static int check_user_whitelist2(struct sip_msg *msg, char* str1, char* str2) +static int check_user_whitelist2(sip_msg_t *msg, char* puser, char* pdomain) { - return check_user_list(msg, str1, str2, NULL, NULL, 1); + return check_user_list(msg, puser, pdomain, NULL, NULL, 1); } -static int check_user_blacklist2(struct sip_msg *msg, char* str1, char* str2) +static int check_user_blacklist2(sip_msg_t *msg, char* puser, char* pdomain) { - return check_user_list(msg, str1, str2, NULL, NULL, 0); + return check_user_list(msg, puser, pdomain, NULL, NULL, 0); } -static int check_user_whitelist3(struct sip_msg *msg, char* str1, char* str2, char* str3) +static int check_user_whitelist3(sip_msg_t *msg, char* puser, char* pdomain, + char* pnumber) { - return check_user_list(msg, str1, str2, str3, NULL, 1); + return check_user_list(msg, puser, pdomain, pnumber, NULL, 1); } -static int check_user_blacklist3(struct sip_msg *msg, char* str1, char* str2, char* str3) +static int check_user_blacklist3(sip_msg_t *msg, char* puser, char* pdomain, + char* pnumber) { - return check_user_list(msg, str1, str2, str3, NULL, 0); + return check_user_list(msg, puser, pdomain, pnumber, NULL, 0); } @@ -426,7 +443,7 @@ static int check_globalblacklist_fixup(void** param, int param_no) return 0; } -static int check_globalblacklist(struct sip_msg* msg) +static int check_globalblacklist(sip_msg_t* msg) { static struct check_blacklist_fs_t* arg = NULL; if(!arg){ @@ -482,7 +499,7 @@ static int check_blacklist_fixup(void **arg, int arg_no) } -static int check_blacklist(struct sip_msg *msg, struct check_blacklist_fs_t *arg1) +static int check_blacklist(sip_msg_t *msg, struct check_blacklist_fs_t *arg1) { void **nodeflags; char *ptr; @@ -528,7 +545,7 @@ static int check_blacklist(struct sip_msg *msg, struct check_blacklist_fs_t *arg return ret; } -static int check_whitelist(struct sip_msg *msg, struct check_blacklist_fs_t *arg1) +static int check_whitelist(sip_msg_t *msg, struct check_blacklist_fs_t *arg1) { void **nodeflags; char *ptr;