From 75f13d032b44fd520216101d38a4845f9d27b12e Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Thu, 31 Aug 2017 12:38:20 +0200 Subject: [PATCH] db_text: fix computing absolute path to db using cfg dir - reported by GH #1224 (cherry picked from commit f74cddd78df3f37f6ea827fc1787796c601572b3) (cherry picked from commit 630bf041fd0530368c73a6329c894a8758484ed7) --- modules/db_text/dbt_base.c | 15 +++++++++++---- modules/db_text/dbt_file.c | 21 ++++++++++++--------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/modules/db_text/dbt_base.c b/modules/db_text/dbt_base.c index e8b3d1fc1d0..c9ccb7fa432 100644 --- a/modules/db_text/dbt_base.c +++ b/modules/db_text/dbt_base.c @@ -52,6 +52,7 @@ db1_con_t* dbt_init(const str* _sqlurl) LM_ERR("invalid parameter value\n"); return NULL; } + LM_DBG("initializing for db url: [%.*s]\n", _sqlurl->len, _sqlurl->s); _s.s = _sqlurl->s; _s.len = _sqlurl->len; if(_s.len <= DBT_ID_LEN || strncmp(_s.s, DBT_ID, DBT_ID_LEN)!=0) @@ -68,16 +69,22 @@ db1_con_t* dbt_init(const str* _sqlurl) _s.len -= DBT_ID_LEN; if(_s.s[0]!='/') { - if(sizeof(CFG_DIR)+_s.len+2 > DBT_PATH_LEN) + if(sizeof(CFG_DIR)+_s.len+2 >= DBT_PATH_LEN) { LM_ERR("path to database is too long\n"); return NULL; } strcpy(dbt_path, CFG_DIR); - dbt_path[sizeof(CFG_DIR)] = '/'; - strncpy(&dbt_path[sizeof(CFG_DIR)+1], _s.s, _s.len); - _s.len += sizeof(CFG_DIR); + if(dbt_path[sizeof(CFG_DIR)-2]!='/') { + dbt_path[sizeof(CFG_DIR)-1] = '/'; + strncpy(&dbt_path[sizeof(CFG_DIR)], _s.s, _s.len); + _s.len += sizeof(CFG_DIR); + } else { + strncpy(&dbt_path[sizeof(CFG_DIR)-1], _s.s, _s.len); + _s.len += sizeof(CFG_DIR) - 1; + } _s.s = dbt_path; + LM_DBG("updated db url: [%.*s]\n", _s.len, _s.s); } _res = pkg_malloc(sizeof(db1_con_t)+sizeof(dbt_con_t)); diff --git a/modules/db_text/dbt_file.c b/modules/db_text/dbt_file.c index eac2b736726..af4423c081d 100644 --- a/modules/db_text/dbt_file.c +++ b/modules/db_text/dbt_file.c @@ -91,17 +91,18 @@ dbt_table_p dbt_load_file(const str *tbn, const str *dbn) dbt_table_p dtp = NULL; dbt_column_p colp, colp0 = NULL; dbt_row_p rowp, rowp0 = NULL; - + enum {DBT_FLINE_ST, DBT_NLINE_ST, DBT_DATA_ST} state; - - LM_DBG("request for table [%.*s]\n", tbn->len, tbn->s); - + if(!tbn || !tbn->s || tbn->len<=0 || tbn->len>=255) return NULL; + + LM_DBG("request for table [%.*s] (len: %d)\n", tbn->len, tbn->s, tbn->len); + path[0] = 0; if(dbn && dbn->s && dbn->len>0) { - LM_DBG("db is [%.*s]\n", dbn->len, dbn->s); + LM_DBG("db is [%.*s] (len: %d)\n", dbn->len, dbn->s, dbn->len); if(dbn->len+tbn->len<511) { strncpy(path, dbn->s, dbn->len); @@ -115,12 +116,14 @@ dbt_table_p dbt_load_file(const str *tbn, const str *dbn) strncpy(path, tbn->s, tbn->len); path[tbn->len] = 0; } - LM_DBG("loading file [%s]\n", path); + fin = fopen(path, "rt"); - if(!fin) - return NULL; - + if(!fin) { + LM_ERR("failed to open file [%s]\n", path); + return NULL; + } + buf = pkg_malloc(_db_text_read_buffer_size); if(!buf) { LM_ERR("error allocating read buffer, %i\n", _db_text_read_buffer_size);