``` c
int reload_address_db_table(address_tables_group_t *atg)
{
        db_key_t cols[5];
        db1_res_t* res = NULL;
        db_row_t* row;
        db_val_t* val;

        int i;
        unsigned int gid;
        unsigned int port;
        unsigned int mask;
        str ips;
        str tagv;

        cols[0] = &perm_grp_col;
        cols[1] = &perm_ip_addr_col;
        cols[2] = &perm_mask_col;
        cols[3] = &perm_port_col;
        cols[4] = &perm_tag_col;

        if (perm_dbf.use_table(perm_db_handle, &perm_address_table) < 0) {
                LM_ERR("failed to use table\n");
                return -1;
        }

        if (perm_dbf.query(perm_db_handle, NULL, 0, NULL, cols, 0, 5, 0, &res) 
< 0) {
                LM_ERR("failed to query database\n");
                return -1;
        }

        row = RES_ROWS(res);

        LM_DBG("Number of rows in address table: %d\n", RES_ROW_N(res));

        for (i = 0; i < RES_ROW_N(res); i++) {
                val = ROW_VALUES(row + i);
                /* basic checks to db values */
                if (ROW_N(row + i) != 5)
                {
                        LM_DBG("failure during checks of db address table: 
Columns %d - expected 5\n", ROW_N(row + i));
                        goto dberror;
                }
                if ((VAL_TYPE(val) != DB1_INT) || VAL_NULL(val) || 
(VAL_INT(val) <= 0))
                {
                        LM_DBG("failure during checks of database value 1 
(group) in address table\n");
                        goto dberror;
                }
                if ((VAL_TYPE(val + 1) != DB1_STRING) && (VAL_TYPE(val + 1) != 
DB1_STR))
                {
                        LM_DBG("failure during checks of database value 2 (IP 
address) in address table - not a string value\n");
                        goto dberror;
                }
                if (VAL_NULL(val + 1))
                {
                        LM_DBG("failure during checks of database value 2 (IP 
address) in address table - NULL value not permitted\n");
                        goto dberror;
                }
                if ((VAL_TYPE(val + 2) != DB1_INT) || VAL_NULL(val + 2))
                {
                        LM_DBG("failure during checks of database value 3 
(subnet size/CIDR) in address table\n");
                        goto dberror;
                }
                if ((VAL_TYPE(val + 3) != DB1_INT) || VAL_NULL(val + 3))
                {
                        LM_DBG("failure during checks of database value 4 
(port) in address table\n");
                        goto dberror;
                }
                gid = VAL_UINT(val);
                ips.s = (char *)VAL_STRING(val + 1);
                ips.len = strlen(ips.s);
                mask = VAL_UINT(val + 2);
                port = VAL_UINT(val + 3);
                tagv.s = VAL_NULL(val + 4)?NULL:(char *)VAL_STRING(val + 4);
                if(tagv.s!=NULL) {
                        tagv.len = strlen(tagv.s);
                }
                if(reload_address_insert(atg, gid, &ips, mask, port, &tagv)<0) {
                        goto dberror;
                }
        }

        perm_dbf.free_result(perm_db_handle, res);

        return 1;

dberror:
        LM_ERR("database problem - invalid record\n");
        perm_dbf.free_result(perm_db_handle, res);
        return -1;
}

```

find this code check in kamailio

-- 
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/3922#issuecomment-2232867802
You are receiving this because you are subscribed to this thread.

Message ID: <kamailio/kamailio/issues/3922/2232867...@github.com>
_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to