Skip to content

Commit

Permalink
userblacklist: more debug info when failing to do the query
Browse files Browse the repository at this point in the history
- renamed some parameters in order to be suggestive for their purpose
- code reformatting for long line

(cherry picked from commit dce52ed)
  • Loading branch information
miconda committed Jul 5, 2016
1 parent 89c556b commit 67fbc93
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 61 deletions.
55 changes: 35 additions & 20 deletions modules/userblacklist/db.c
Expand Up @@ -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
*/

Expand Down Expand Up @@ -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 };
Expand All @@ -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;
}

Expand All @@ -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 {
Expand All @@ -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;
}

Expand All @@ -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 {
Expand Down
99 changes: 58 additions & 41 deletions modules/userblacklist/userblacklist.c
Expand Up @@ -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: */
Expand All @@ -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}
};

Expand Down Expand Up @@ -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};
Expand All @@ -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;
}
Expand Down Expand Up @@ -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);
}


Expand Down Expand Up @@ -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){
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 67fbc93

Please sign in to comment.