commit c66234e1241b44a18f67c4a677236c54396977dd Author: Jacek Konieczny <jaj...@jajcus.net> Date: Thu Dec 1 17:28:05 2016 +0100
Add fix for database monitoring (ZBX-11213) ZBX-11213.patch | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ zabbix.spec | 2 + 2 files changed, 178 insertions(+) --- diff --git a/zabbix.spec b/zabbix.spec index a4bf246..650161b 100644 --- a/zabbix.spec +++ b/zabbix.spec @@ -29,6 +29,7 @@ Source6: %{name}.tmpfiles Patch0: config.patch Patch1: sqlite3_dbname.patch Patch2: tag_conditions.patch +Patch3: ZBX-11213.patch URL: http://zabbix.sourceforge.net/ BuildRequires: OpenIPMI-devel BuildRequires: curl-devel @@ -300,6 +301,7 @@ This package provides the Zabbix Java Gateway. %patch0 -p1 %patch1 -p1 %patch2 -p1 +%patch3 -p1 %build diff --git a/ZBX-11213.patch b/ZBX-11213.patch new file mode 100644 index 0000000..d15a8ff --- /dev/null +++ b/ZBX-11213.patch @@ -0,0 +1,176 @@ +From 7dfb6b86fc9dff7b084ad8ab73e37b982a8f2270 Mon Sep 17 00:00:00 2001 +From: wiper <wiper@f4e7fd02-d210-4e34-a1e0-d4093fb66cc2> +Date: Fri, 30 Sep 2016 11:29:01 +0000 +Subject: [PATCH] .......PS. [ZBX-11213] fixed database monitoring keys + [merge ^/branches/3.0 -c r62901] + +git-svn-id: svn://svn.zabbix.com/branches/3.2@62902 f4e7fd02-d210-4e34-a1e0-d4093fb66cc2 +--- + ChangeLog | 3 ++ + include/zbxodbc.h | 1 - + src/libs/zbxdbhigh/odbc.c | 109 ++++++++++++++++++++++++++++++++-------------- + 3 files changed, 80 insertions(+), 33 deletions(-) + +diff --git a/include/zbxodbc.h b/include/zbxodbc.h +index e1c9a1f..3a7e825 100644 +--- a/include/zbxodbc.h ++++ b/include/zbxodbc.h +@@ -35,7 +35,6 @@ typedef struct + SQLHSTMT hstmt; + SQLSMALLINT col_num; + ZBX_ODBC_ROW row_data; +- SQLLEN *data_len; + } + ZBX_ODBC_DBH; + +diff --git a/src/libs/zbxdbhigh/odbc.c b/src/libs/zbxdbhigh/odbc.c +index 9678bb9..6470d89 100644 +--- a/src/libs/zbxdbhigh/odbc.c ++++ b/src/libs/zbxdbhigh/odbc.c +@@ -65,8 +65,6 @@ static void odbc_free_row_data(ZBX_ODBC_DBH *pdbh) + zbx_free(pdbh->row_data); + } + +- zbx_free(pdbh->data_len); +- + pdbh->col_num = 0; + } + +@@ -217,6 +215,39 @@ int odbc_DBconnect(ZBX_ODBC_DBH *pdbh, char *db_dsn, char *user, char *pass, int + goto end; + } + ++ if (SUCCEED == zabbix_check_log_level(LOG_LEVEL_DEBUG)) ++ { ++ char driver_name[MAX_STRING_LEN + 1], driver_ver[MAX_STRING_LEN + 1], db_name[MAX_STRING_LEN + 1], ++ db_ver[MAX_STRING_LEN + 1]; ++ ++ if (0 != CALLODBC(SQLGetInfo(pdbh->hdbc, SQL_DRIVER_NAME, driver_name, MAX_STRING_LEN, NULL), ++ rc, SQL_HANDLE_DBC, pdbh->hdbc, "Cannot obtain driver name")) ++ { ++ zbx_strlcpy(driver_name, "unknown", sizeof(driver_name)); ++ } ++ ++ if (0 != CALLODBC(SQLGetInfo(pdbh->hdbc, SQL_DRIVER_VER, driver_ver, MAX_STRING_LEN, NULL), ++ rc, SQL_HANDLE_DBC, pdbh->hdbc, "Cannot obtain driver version")) ++ { ++ zbx_strlcpy(driver_ver, "unknown", sizeof(driver_ver)); ++ } ++ ++ if (0 != CALLODBC(SQLGetInfo(pdbh->hdbc, SQL_DBMS_NAME, db_name, MAX_STRING_LEN, NULL), ++ rc, SQL_HANDLE_DBC, pdbh->hdbc, "Cannot obtain database name")) ++ { ++ zbx_strlcpy(db_name, "unknown", sizeof(db_name)); ++ } ++ ++ if (0 != CALLODBC(SQLGetInfo(pdbh->hdbc, SQL_DBMS_VER, db_ver, MAX_STRING_LEN, NULL), ++ rc, SQL_HANDLE_DBC, pdbh->hdbc, "Cannot obtain database version")) ++ { ++ zbx_strlcpy(db_ver, "unknown", sizeof(db_ver)); ++ } ++ ++ zabbix_log(LOG_LEVEL_DEBUG, "%s() connected to %s(%s) using %s(%s)", __function_name, ++ db_name, db_ver, driver_name, driver_ver); ++ } ++ + pdbh->connected = 1; + + ret = SUCCEED; +@@ -257,14 +288,51 @@ ZBX_ODBC_ROW odbc_DBfetch(ZBX_ODBC_RESULT pdbh) + + for (i = 0; i < pdbh->col_num; i++) + { +- /* set NULL column value where appropriate */ +- if (SQL_NULL_DATA == pdbh->data_len[i]) +- zbx_free(pdbh->row_data[i]); +- else ++ size_t alloc = 0, offset = 0; ++ char buffer[MAX_STRING_LEN + 1]; ++ SQLLEN len, col_type; ++ SQLSMALLINT c_type; ++ ++ zbx_free(pdbh->row_data[i]); ++ ++ if (0 != CALLODBC(SQLColAttribute(pdbh->hstmt, i + 1, SQL_DESC_TYPE, NULL, 0, NULL, &col_type), ++ retcode, SQL_HANDLE_STMT, pdbh->hstmt, "Cannot get column type")) ++ { ++ goto end; ++ } ++ ++ /* force col_type to integer value for DB2 compatibility */ ++ switch ((int)col_type) ++ { ++ case SQL_WLONGVARCHAR: ++ c_type = SQL_C_BINARY; ++ break; ++ default: ++ c_type = SQL_C_CHAR; ++ } ++ ++ /* force len to integer value for DB2 compatibility */ ++ while (SQL_NO_DATA != (retcode = SQLGetData(pdbh->hstmt, i + 1, c_type, buffer, MAX_STRING_LEN, &len))) ++ { ++ if (0 == SQL_SUCCEEDED(retcode)) ++ { ++ odbc_Diag(SQL_HANDLE_STMT, pdbh->hstmt, retcode, "Cannot get column data"); ++ goto end; ++ } ++ ++ if (SQL_NULL_DATA == (int)len) ++ break; ++ ++ buffer[(int)len] = '\0'; ++ ++ zbx_strcpy_alloc(&pdbh->row_data[i], &alloc, &offset, buffer); ++ } ++ ++ if (NULL != pdbh->row_data[i]) + zbx_rtrim(pdbh->row_data[i], " "); + +- zabbix_log(LOG_LEVEL_DEBUG, "%s() fetched [%i col]: '%s'", __function_name, i, +- NULL == pdbh->row_data[i] ? "NULL" : pdbh->row_data[i]); ++ zabbix_log(LOG_LEVEL_DEBUG, "%s() fetched [%i col (%d)]: '%s'", __function_name, i, (int)col_type, ++ NULL == pdbh->row_data[i] ? "NULL" : pdbh->row_data[i]); + } + + result_row = pdbh->row_data; +@@ -277,7 +345,6 @@ ZBX_ODBC_ROW odbc_DBfetch(ZBX_ODBC_RESULT pdbh) + ZBX_ODBC_RESULT odbc_DBselect(ZBX_ODBC_DBH *pdbh, char *query) + { + const char *__function_name = "odbc_DBselect"; +- int i = 0; + ZBX_ODBC_RESULT result = NULL; + SQLRETURN rc; + +@@ -299,30 +366,8 @@ ZBX_ODBC_RESULT odbc_DBselect(ZBX_ODBC_DBH *pdbh, char *query) + goto end; + } + +- pdbh->data_len = (SQLLEN *)zbx_malloc(pdbh->data_len, sizeof(SQLLEN) * pdbh->col_num); +- +- for (i = 0; i < pdbh->col_num; i++) +- { +- if (0 != CALLODBC(SQLColAttribute(pdbh->hstmt, (SQLUSMALLINT)(i + 1), SQL_DESC_OCTET_LENGTH, NULL, 0, +- NULL, &pdbh->data_len[i]), rc, SQL_HANDLE_STMT, pdbh->hstmt, +- "Cannot execute ODBC query")) +- { +- goto end; +- } +- } +- + pdbh->row_data = zbx_malloc(pdbh->row_data, sizeof(char *) * (size_t)pdbh->col_num); +- +- for (i = 0; i < pdbh->col_num; i++) +- { +- pdbh->row_data[i] = zbx_malloc(NULL, pdbh->data_len[i]); +- if (0 != CALLODBC(SQLBindCol(pdbh->hstmt, (SQLUSMALLINT)(i + 1), SQL_C_CHAR, pdbh->row_data[i], +- pdbh->data_len[i], &pdbh->data_len[i]), rc, SQL_HANDLE_STMT, pdbh->hstmt, +- "Cannot bind column in ODBC result")) +- { +- goto end; +- } +- } ++ memset(pdbh->row_data, 0, sizeof(char *) * (size_t)pdbh->col_num); + + zabbix_log(LOG_LEVEL_DEBUG, "%s() selected %i columns", __function_name, pdbh->col_num); + ================================================================ ---- gitweb: http://git.pld-linux.org/gitweb.cgi/packages/zabbix.git/commitdiff/c66234e1241b44a18f67c4a677236c54396977dd _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit