From 386fa78a3020f18b8b58d2aac3def8fd8b255c71 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Mon, 31 Aug 2015 11:39:20 +0300 Subject: [PATCH] Fix to MXS-342: https://mariadb.atlassian.net/browse/MXS-342 Added more error messaging when the parsing of the configuration file fails. --- server/core/config.c | 19 +++++++++++++++++-- server/core/gateway.c | 22 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/server/core/config.c b/server/core/config.c index 9ea23da25..00fdef292 100644 --- a/server/core/config.c +++ b/server/core/config.c @@ -271,7 +271,7 @@ int config_load(char *file) { CONFIG_CONTEXT config; -int rval; +int rval, ini_rval; MYSQL *conn; conn = mysql_init(NULL); @@ -314,8 +314,23 @@ int rval; config.object = ""; config.next = NULL; - if (ini_parse(file, handler, &config) < 0) + if (( ini_rval = ini_parse(file, handler, &config)) != 0) + { + char errorbuffer[1024 + 1]; + + if(ini_rval > 0) + snprintf(errorbuffer, 1024, + "Error: Failed to parse configuration file. Error on line %d.", ini_rval); + else if(ini_rval == -1) + snprintf(errorbuffer, 1024, + "Error: Failed to parse configuration file. Failed to open file."); + else + snprintf(errorbuffer, 1024, + "Error: Failed to parse configuration file. Memory allocation failed."); + + skygw_log_write(LE, errorbuffer); return 0; + } config_file = file; diff --git a/server/core/gateway.c b/server/core/gateway.c index 063cf122c..2aecc296d 100644 --- a/server/core/gateway.c +++ b/server/core/gateway.c @@ -1055,6 +1055,7 @@ int main(int argc, char **argv) int l; int i; int n; + int ini_rval; intptr_t thread_id; int n_threads; /*< number of epoll listener threads */ int n_services; @@ -1591,8 +1592,27 @@ int main(int argc, char **argv) goto return_main; } - if(ini_parse(cnf_file_path,cnf_preparser,NULL) != 0) + if((ini_rval = ini_parse(cnf_file_path,cnf_preparser,NULL)) != 0) { + char errorbuffer[STRING_BUFFER_SIZE + 1]; + + if(ini_rval > 0) + snprintf(errorbuffer, STRING_BUFFER_SIZE, + "Error: Failed to pre-parse configuration file. Error on line %d.", ini_rval); + else if(ini_rval == -1) + snprintf(errorbuffer, STRING_BUFFER_SIZE, + "Error: Failed to pre-parse configuration file. Failed to open file."); + else + snprintf(errorbuffer, STRING_BUFFER_SIZE, + "Error: Failed to pre-parse configuration file. Memory allocation failed."); + + skygw_log_write(LE, errorbuffer); + if(!daemon_mode) + { + strncat(errorbuffer,"\n",STRING_BUFFER_SIZE); + fprintf(stderr, errorbuffer); + } + rc = MAXSCALE_BADCONFIG; goto return_main; }