diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/Makefile.am | 14 | ||||
-rw-r--r-- | src/plugins/SQLite3.conf | 4 | ||||
-rw-r--r-- | src/plugins/SQLite3.cpp | 742 | ||||
-rw-r--r-- | src/plugins/SQLite3.h | 58 | ||||
-rw-r--r-- | src/plugins/abrt-SQLite3.7 | 36 | ||||
-rw-r--r-- | src/plugins/abrt-action-analyze-c.c | 4 | ||||
-rw-r--r-- | src/plugins/abrt-action-analyze-oops.c | 2 | ||||
-rw-r--r-- | src/plugins/abrt-action-analyze-python.c | 2 | ||||
-rw-r--r-- | src/plugins/abrt-action-generate-backtrace.c | 2 | ||||
-rwxr-xr-x | src/plugins/abrt-action-install-debuginfo | 7 | ||||
-rw-r--r-- | src/plugins/abrt-action-mailx.cpp | 2 | ||||
-rw-r--r-- | src/plugins/abrt-action-rhtsupport.cpp | 7 | ||||
-rw-r--r-- | src/plugins/abrt-action-upload.cpp | 7 | ||||
-rw-r--r-- | src/plugins/abrt-plugins.7 | 3 |
14 files changed, 20 insertions, 870 deletions
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am index 8a8a6f30..c60c06fe 100644 --- a/src/plugins/Makefile.am +++ b/src/plugins/Makefile.am @@ -7,8 +7,7 @@ libexec_SCRIPTS = \ pluginslib_LTLIBRARIES = \ libCCpp.la \ - libKerneloopsScanner.la \ - libSQLite3.la + libKerneloopsScanner.la dist_pluginslib_DATA = \ Logger.glade \ @@ -27,8 +26,7 @@ dist_pluginsconf_DATA = \ Kerneloops.conf \ Bugzilla.conf \ RHTSupport.conf \ - Upload.conf \ - SQLite3.conf + Upload.conf man_MANS = \ abrt-Bugzilla.7 \ @@ -37,7 +35,6 @@ man_MANS = \ abrt-Logger.7 \ abrt-Mailx.7 \ abrt-Upload.7 \ - abrt-SQLite3.7 \ abrt-plugins.7 EXTRA_DIST = $(man_MANS) abrt-action-install-debuginfo @@ -47,7 +44,6 @@ $(DESTDIR)/$(DEBUG_INFO_DIR): install-data-hook: $(DESTDIR)/$(DEBUG_INFO_DIR) sed 's: = /var/: = $(localstatedir)/:g' -i \ - $(DESTDIR)$(sysconfdir)/abrt/plugins/SQLite3.conf \ $(DESTDIR)$(sysconfdir)/abrt/plugins/Logger.conf # CCpp @@ -66,12 +62,6 @@ libKerneloopsScanner_la_SOURCES = KerneloopsScanner.cpp KerneloopsScanner.h Kern libKerneloopsScanner_la_LDFLAGS = -avoid-version $(GLIB_LIBS) libKerneloopsScanner_la_CPPFLAGS = -I$(INC_PATH) -I$(UTILS_PATH) -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" $(GLIB_CFLAGS) -# SQLite3 -libSQLite3_la_SOURCES = SQLite3.cpp SQLite3.h -libSQLite3_la_LDFLAGS = -avoid-version -libSQLite3_la_LIBADD = $(SQLITE3_LIBS) $(GLIB_LIBS) -libSQLite3_la_CPPFLAGS = -I$(INC_PATH) -I$(UTILS_PATH) $(SQLITE3_CFLAGS) -DLOCALSTATEDIR='"$(localstatedir)"' $(GLIB_CFLAGS) - libexec_PROGRAMS = \ abrt-action-analyze-c \ abrt-action-analyze-python \ diff --git a/src/plugins/SQLite3.conf b/src/plugins/SQLite3.conf deleted file mode 100644 index a7617a90..00000000 --- a/src/plugins/SQLite3.conf +++ /dev/null @@ -1,4 +0,0 @@ -# Configuration file for database plugin SQLite3 - -# DB path -DBPath = /var/spool/abrt/abrt-db diff --git a/src/plugins/SQLite3.cpp b/src/plugins/SQLite3.cpp deleted file mode 100644 index 2ed3f9fd..00000000 --- a/src/plugins/SQLite3.cpp +++ /dev/null @@ -1,742 +0,0 @@ -/* - SQLite3.cpp - - Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) - Copyright (C) 2009 RedHat inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - 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 Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ -#include <sqlite3.h> -#include "abrtlib.h" -#include "SQLite3.h" - -using namespace std; - -#define ABRT_TABLE_VERSION 4 -#define ABRT_TABLE_VERSION_STR "4" -#define ABRT_TABLE "abrt_v"ABRT_TABLE_VERSION_STR -#define ABRT_REPRESULT_TABLE "abrt_v"ABRT_TABLE_VERSION_STR"_reportresult" -#define SQLITE3_MASTER_TABLE "sqlite_master" - -#define COL_UID "UID" -#define COL_UUID "UUID" -#define COL_INFORMALL "InformAll" -#define COL_DEBUG_DUMP_PATH "DebugDumpPath" -#define COL_COUNT "Count" -#define COL_REPORTED "Reported" -#define COL_TIME "Time" -#define COL_MESSAGE "Message" - -#define COL_REPORTER "Reporter" - -#define NUM_COL 8 - -/* Is this string safe wrt SQL injection? - * PHP's mysql_real_escape_string() treats \, ', ", \x00, \n, \r, and \x1a as special. - * We are a bit more paranoid and disallow any control chars. - */ -static bool is_string_safe(const char *str) -{ -// Apparently SQLite allows unescaped newlines. More surprisingly, -// it does not unescape escaped ones - I see lines ending with \ when I do it. -// I wonder whether this is a bug in SQLite, and whether using unescaped -// newlines is a danger with other SQL servers. -// For now, I disabled newline escaping, and also allowed double quote. - const char *p = str; - while (*p) - { - unsigned char c = *p; -// if (c == '\\' && p[1] != '\0') -// { -// p += 2; -// continue; -// } - if ((c < ' ' && c != '\n') - || strchr("\\\'", c) //was: "\\\"\'" - ) { - error_msg("Probable SQL injection: '%s'", str); - return false; - } - p++; - } - return true; -} - -#ifdef UNUSED_FOR_NOW -/* Escape \n */ -static string sql_escape(const char *str) -{ - const char *s = str; - unsigned len = 0; - do - { - if (*s == '\n') - len++; - len++; - } while (*s++); - - char buf[len]; - s = str; - char *d = buf; - do - { - if (*s == '\n') - *d++ = '\\'; - *d++ = *s; - } while (*s++); - - return buf; -} -#endif - -/* Note: - * expects "SELECT * FROM ...", not "SELECT <only some fields> FROM ..." - */ -static GList *vget_table(sqlite3 *db, const char *fmt, va_list p) -{ - char *sql = xvasprintf(fmt, p); - - char **table; - int ncol, nrow; - char *err = NULL; - int ret = sqlite3_get_table(db, sql, &table, &nrow, &ncol, &err); - if (ret != SQLITE_OK) - { - error_msg("Error in SQL:'%s' error: %s", sql, err); - free(sql); - sqlite3_free(err); - return (GList*)ERR_PTR; - } - VERB2 log("%s: %d rows returned by SQL:%s", __func__, nrow, sql); - free(sql); - - if (nrow > 0 && ncol < NUM_COL) - error_msg_and_die("Unexpected number of columns: %d", ncol); - - GList *rows = NULL; - int ii; - for (ii = 0; ii < nrow; ii++) - { - int jj; - struct db_row *row = (struct db_row*)xzalloc(sizeof(struct db_row)); - for (jj = 0; jj < ncol; jj++) - { - char *val = table[jj + (ncol*ii) + ncol]; - switch (jj) - { - case 0: row->db_uuid = xstrdup(val); break; - case 1: row->db_uid = xstrdup(val); break; - case 2: row->db_inform_all = xstrdup(val); break; - case 3: row->db_dump_dir = xstrdup(val); break; - case 4: row->db_count = xstrdup(val); break; - case 5: row->db_reported = xstrdup(val); break; - case 6: row->db_time = xstrdup(val); break; - case 7: row->db_message = xstrdup(val); break; - } - } - - VERB3 log("%s: row->db_uuid = '%s'", __func__, row->db_uuid); - VERB3 log("%s: row->db_uid = '%s'", __func__, row->db_uid); - VERB3 log("%s: row->db_inform_all = '%s'", __func__, row->db_inform_all); - VERB3 log("%s: row->db_dump_dir = '%s'", __func__, row->db_dump_dir); - VERB3 log("%s: row->db_count = '%s'", __func__, row->db_count); - VERB3 log("%s: row->db_reported = '%s'", __func__, row->db_reported); - VERB3 log("%s: row->db_time = '%s'", __func__, row->db_time); - VERB3 log("%s: row->db_message = '%s'", __func__, row->db_message); - rows = g_list_append(rows, row); - - } - sqlite3_free_table(table); - - return rows; -} - -static GList *get_table_or_die(sqlite3 *db, const char *fmt, ...) -{ - va_list p; - va_start(p, fmt); - GList *table = vget_table(db, fmt, p); - va_end(p); - - if (table == (GList*)ERR_PTR) - xfunc_die(); - - return table; -} - -static int vexecute_sql(sqlite3 *db, const char *fmt, va_list p) -{ - char *sql = xvasprintf(fmt, p); - - char *err = NULL; - int ret = sqlite3_exec(db, sql, /*callback:*/ NULL, /*callback param:*/ NULL, &err); - if (ret != SQLITE_OK) - { - error_msg("Error in SQL:'%s' error: %s", sql, err); - free(sql); - sqlite3_free(err); - return -1; - } - int affected = sqlite3_changes(db); - VERB2 log("%d rows affected by SQL:%s", affected, sql); - free(sql); - - return affected; -} - -static int execute_sql_or_die(sqlite3 *db, const char *fmt, ...) -{ - va_list p; - va_start(p, fmt); - int ret = vexecute_sql(db, fmt, p); - va_end(p); - - if (ret < 0) - xfunc_die(); - - return ret; -} - -static bool exists_uuid_uid(sqlite3 *db, const char *UUID, const char *UID) -{ - GList *table = get_table_or_die(db, "SELECT * FROM "ABRT_TABLE - " WHERE "COL_UUID"='%s' AND "COL_UID"='%s';", - UUID, UID - ); - - if (!table) - return false; - - db_list_free(table); - - return true; -} - -static void update_from_old_ver(sqlite3 *db, int old_version) -{ - static const char *const update_sql_commands[] = { - // v0 -> v1 - NULL, - // v1 -> v2 - "BEGIN TRANSACTION;" - "CREATE TABLE abrt_v2 (" - COL_UUID" VARCHAR NOT NULL," - COL_UID" VARCHAR NOT NULL," - COL_DEBUG_DUMP_PATH" VARCHAR NOT NULL," - COL_COUNT" INT NOT NULL DEFAULT 1," - COL_REPORTED" INT NOT NULL DEFAULT 0," - COL_TIME" VARCHAR NOT NULL DEFAULT 0," - COL_MESSAGE" VARCHAR NOT NULL DEFAULT ''," - "PRIMARY KEY ("COL_UUID","COL_UID"));" - "INSERT INTO abrt_v2 " - "SELECT "COL_UUID"," - COL_UID"," - COL_DEBUG_DUMP_PATH"," - COL_COUNT"," - COL_REPORTED"," - COL_TIME"," - COL_MESSAGE - " FROM abrt;" - "DROP TABLE abrt;" - "COMMIT;", - // v2 -> v3 - "BEGIN TRANSACTION;" - "CREATE TABLE abrt_v3 (" - COL_UUID" VARCHAR NOT NULL," - COL_UID" VARCHAR NOT NULL," - COL_DEBUG_DUMP_PATH" VARCHAR NOT NULL," - COL_COUNT" INT NOT NULL DEFAULT 1," - COL_REPORTED" INT NOT NULL DEFAULT 0," - COL_TIME" VARCHAR NOT NULL DEFAULT 0," - COL_MESSAGE" VARCHAR NOT NULL DEFAULT ''," - "PRIMARY KEY ("COL_UUID","COL_UID"));" - "INSERT INTO abrt_v3 " - "SELECT "COL_UUID"," - COL_UID"," - COL_DEBUG_DUMP_PATH"," - COL_COUNT"," - COL_REPORTED"," - COL_TIME"," - COL_MESSAGE - " FROM abrt_v2;" - "DROP TABLE abrt_v2;" - "CREATE TABLE abrt_v3_reportresult (" - COL_UUID" VARCHAR NOT NULL," - COL_UID" VARCHAR NOT NULL," - COL_REPORTER" VARCHAR NOT NULL," - COL_MESSAGE" VARCHAR NOT NULL DEFAULT ''," - "PRIMARY KEY ("COL_UUID","COL_UID","COL_REPORTER"));" - "COMMIT;", - // v3-> v4 - "BEGIN TRANSACTION;" - "CREATE TABLE abrt_v4(" - COL_UUID" VARCHAR NOT NULL," - COL_UID" VARCHAR NOT NULL," - COL_INFORMALL" INT NOT NULL DEFAULT 0," - COL_DEBUG_DUMP_PATH" VARCHAR NOT NULL," - COL_COUNT" INT NOT NULL DEFAULT 1," - COL_REPORTED" INT NOT NULL DEFAULT 0," - COL_TIME" VARCHAR NOT NULL DEFAULT 0," - COL_MESSAGE" VARCHAR NOT NULL DEFAULT ''," - "PRIMARY KEY ("COL_UUID","COL_UID"));" - "INSERT INTO abrt_v4 " - "SELECT "COL_UUID"," - COL_UID"," - "0," /* COL_INFORMALL */ - COL_DEBUG_DUMP_PATH"," - COL_COUNT"," - COL_REPORTED"," - COL_TIME"," - COL_MESSAGE - " FROM abrt_v3;" - "DROP TABLE abrt_v3;" - "UPDATE abrt_v4" - " SET "COL_UID"='0', "COL_INFORMALL"=1" - " WHERE "COL_UID"='-1';" - "CREATE TABLE abrt_v4_reportresult (" - COL_UUID" VARCHAR NOT NULL," - COL_UID" VARCHAR NOT NULL," - COL_REPORTER" VARCHAR NOT NULL," - COL_MESSAGE" VARCHAR NOT NULL DEFAULT ''," - "PRIMARY KEY ("COL_UUID","COL_UID","COL_REPORTER"));" - "INSERT INTO abrt_v4_reportresult " - "SELECT * FROM abrt_v3_reportresult;" - "DROP TABLE abrt_v3_reportresult;" - "COMMIT;", - }; - - while (old_version < ABRT_TABLE_VERSION) - { - execute_sql_or_die(db, update_sql_commands[old_version]); - old_version++; - } -} - -static bool check_table(sqlite3 *db) -{ - const char *command = "SELECT NAME FROM "SQLITE3_MASTER_TABLE" " - "WHERE TYPE='table' AND NAME like 'abrt_v%';"; - char **table; - int ncol, nrow; - char *err; - int ret = sqlite3_get_table(db, command, &table, &nrow, &ncol, &err); - if (ret != SQLITE_OK) - { - /* Should never happen */ - error_msg_and_die("SQLite3 database is corrupted"); - } - if (!nrow) - { - sqlite3_free_table(table); - return false; - } - - // table format: - // table[0]:"NAME" // table[1]:"SQL" <== field names from SELECT - // table[2]:"abrt_vNN" // table[3]:"sql" - char *tableName = table[0 + ncol]; - char *underscore = strchr(tableName, '_'); - if (underscore) - { - // It can be "abrt_vNN_something", thus using atoi(), not xatoi() - int tableVersion = atoi(underscore + 2); - sqlite3_free_table(table); - if (tableVersion < ABRT_TABLE_VERSION) - { - update_from_old_ver(db, tableVersion); - } - return true; - } - sqlite3_free_table(table); - update_from_old_ver(db, 1); - return true; -} - - -CSQLite3::CSQLite3() : - m_sDBPath(LOCALSTATEDIR "/spool/abrt/abrt-db"), - m_pDB(NULL) -{} - -CSQLite3::~CSQLite3() -{ - /* Paranoia. In C++, destructor will abort() if it was called while unwinding - * the stack and it throws an exception. - */ - try - { - DisConnect(); - m_sDBPath.clear(); - } - catch (...) - { - error_msg_and_die("Internal error"); - } -} - -void CSQLite3::DisConnect() -{ - if (m_pDB) - { - sqlite3_close(m_pDB); - m_pDB = NULL; - } -} - -void CSQLite3::Connect() -{ - int ret = sqlite3_open_v2(m_sDBPath.c_str(), - &m_pDB, - SQLITE_OPEN_READWRITE, - NULL - ); - - if (ret != SQLITE_OK) - { - if (ret != SQLITE_CANTOPEN) - { - error_msg_and_die("Can't open database '%s': %s", m_sDBPath.c_str(), sqlite3_errmsg(m_pDB)); - } - - ret = sqlite3_open_v2(m_sDBPath.c_str(), - &m_pDB, - SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, - NULL - ); - if (ret != SQLITE_OK) - { - error_msg_and_die("Can't create database '%s': %s", m_sDBPath.c_str(), sqlite3_errmsg(m_pDB)); - } - } - - if (!check_table(m_pDB)) - { - execute_sql_or_die(m_pDB, - "CREATE TABLE "ABRT_TABLE" (" - COL_UUID" VARCHAR NOT NULL," - COL_UID" VARCHAR NOT NULL," - COL_INFORMALL" INT NOT NULL DEFAULT 0," - COL_DEBUG_DUMP_PATH" VARCHAR NOT NULL," - COL_COUNT" INT NOT NULL DEFAULT 1," - COL_REPORTED" INT NOT NULL DEFAULT 0," - COL_TIME" VARCHAR NOT NULL DEFAULT 0," - COL_MESSAGE" VARCHAR NOT NULL DEFAULT ''," - "PRIMARY KEY ("COL_UUID","COL_UID"));" - ); - execute_sql_or_die(m_pDB, - "CREATE TABLE "ABRT_REPRESULT_TABLE" (" - COL_UUID" VARCHAR NOT NULL," - COL_UID" VARCHAR NOT NULL," - COL_REPORTER" VARCHAR NOT NULL," - COL_MESSAGE" VARCHAR NOT NULL DEFAULT ''," - "PRIMARY KEY ("COL_UUID","COL_UID","COL_REPORTER"));" - ); - } -} - -void CSQLite3::Insert_or_Update(const char *crash_id, - bool inform_all_users, - const char *pDebugDumpPath, - const char *pTime) -{ - const char *UUID = strchr(crash_id, ':'); - if (!UUID - || !is_string_safe(crash_id) - || !is_string_safe(pDebugDumpPath) - || !is_string_safe(pTime) - ) { - return; - } - - /* Split crash_id into UID:UUID */ - unsigned uid_len = UUID - crash_id; - UUID++; - char UID[uid_len + 1]; - strncpy(UID, crash_id, uid_len); - UID[uid_len] = '\0'; - - if (!exists_uuid_uid(m_pDB, UUID, UID)) - { - execute_sql_or_die(m_pDB, - "INSERT INTO "ABRT_TABLE" (" - COL_UUID"," - COL_UID"," - COL_INFORMALL"," - COL_DEBUG_DUMP_PATH"," - COL_TIME - ")" - " VALUES ('%s','%s',%u,'%s','%s');", - UUID, UID, (unsigned)inform_all_users, pDebugDumpPath, pTime - ); - } - else - { - execute_sql_or_die(m_pDB, - "UPDATE "ABRT_TABLE - " SET "COL_COUNT"="COL_COUNT"+1,"COL_TIME"='%s'" - " WHERE "COL_UUID"='%s' AND "COL_UID"='%s';", - pTime, - UUID, UID - ); - } -} - -void CSQLite3::DeleteRow(const char *crash_id) -{ - const char *UUID = strchr(crash_id, ':'); - if (!UUID - || !is_string_safe(crash_id) - ) { - return; - } - - /* Split crash_id into UID:UUID */ - unsigned uid_len = UUID - crash_id; - UUID++; - char UID[uid_len + 1]; - strncpy(UID, crash_id, uid_len); - UID[uid_len] = '\0'; - - if (exists_uuid_uid(m_pDB, UUID, UID)) - { - execute_sql_or_die(m_pDB, "DELETE FROM "ABRT_TABLE - " WHERE "COL_UUID"='%s' AND "COL_UID"='%s';", - UUID, UID - ); - execute_sql_or_die(m_pDB, "DELETE FROM "ABRT_REPRESULT_TABLE - " WHERE "COL_UUID"='%s' AND "COL_UID"='%s';", - UUID, UID - ); - } - else - { - error_msg("crash_id %s is not found in DB", crash_id); - } -} - -void CSQLite3::DeleteRows_by_dir(const char *dump_dir) -{ - if (!is_string_safe(dump_dir)) - { - return; - } - - /* Get UID:UUID pair(s) to delete */ - GList *table = get_table_or_die(m_pDB, "SELECT * FROM "ABRT_TABLE - " WHERE "COL_DEBUG_DUMP_PATH"='%s';", - dump_dir - ); - - if (!table) - { - return; - } - - struct db_row *row = NULL; - /* Delete from both tables */ - for (GList *li = table; li != NULL; li = g_list_next(li)) - { - row = (struct db_row*)li->data; - execute_sql_or_die(m_pDB, - "DELETE FROM "ABRT_REPRESULT_TABLE - " WHERE "COL_UUID"='%s' AND "COL_UID"='%s';", - row->db_uuid, row->db_uid - ); - } - execute_sql_or_die(m_pDB, - "DELETE FROM "ABRT_TABLE - " WHERE "COL_DEBUG_DUMP_PATH"='%s'", - dump_dir - ); -} - -void CSQLite3::SetReported(const char *crash_id, const char *pMessage) -{ - const char *UUID = strchr(crash_id, ':'); - if (!UUID - || !is_string_safe(crash_id) - || !is_string_safe(pMessage) - ) { - return; - } - - /* Split crash_id into UID:UUID */ - unsigned uid_len = UUID - crash_id; - UUID++; - char UID[uid_len + 1]; - strncpy(UID, crash_id, uid_len); - UID[uid_len] = '\0'; - - if (exists_uuid_uid(m_pDB, UUID, UID)) - { - execute_sql_or_die(m_pDB, - "UPDATE "ABRT_TABLE - " SET "COL_REPORTED"=1" - " WHERE "COL_UUID"='%s' AND "COL_UID"='%s';", - UUID, UID - ); - execute_sql_or_die(m_pDB, - "UPDATE "ABRT_TABLE - " SET "COL_MESSAGE"='%s'" - " WHERE "COL_UUID"='%s' AND "COL_UID"='%s';", - pMessage, UUID, UID - ); - } - else - { - error_msg("crash_id %s is not found in DB", crash_id); - } -} - -void CSQLite3::SetReportedPerReporter(const char *crash_id, - const char *reporter, - const char *pMessage) -{ - const char *UUID = strchr(crash_id, ':'); - if (!UUID - || !is_string_safe(crash_id) - || !is_string_safe(reporter) - || !is_string_safe(pMessage) - ) { - return; - } - - /* Split crash_id into UID:UUID */ - unsigned uid_len = UUID - crash_id; - UUID++; - char UID[uid_len + 1]; - strncpy(UID, crash_id, uid_len); - UID[uid_len] = '\0'; - - int affected_rows = execute_sql_or_die(m_pDB, - "UPDATE "ABRT_REPRESULT_TABLE - " SET "COL_MESSAGE"='%s'" - " WHERE "COL_UUID"='%s' AND "COL_UID"='%s' AND "COL_REPORTER"='%s'", - pMessage, - UUID, UID, reporter - ); - if (!affected_rows) - { - execute_sql_or_die(m_pDB, - "INSERT INTO "ABRT_REPRESULT_TABLE - " ("COL_UUID","COL_UID","COL_REPORTER","COL_MESSAGE")" - " VALUES ('%s','%s','%s','%s');", - UUID, UID, reporter, pMessage - ); - } -} - -GList *CSQLite3::GetUIDData(long caller_uid) -{ - GList *table = NULL; - - if (caller_uid == 0) - { - table = get_table_or_die(m_pDB, "SELECT * FROM "ABRT_TABLE";"); - } - else - { - table = get_table_or_die(m_pDB, "SELECT * FROM "ABRT_TABLE - " WHERE "COL_UID"='%ld' OR "COL_INFORMALL"=1;", - caller_uid - ); - } - return table; -} - -struct db_row *CSQLite3::GetRow(const char *crash_id) -{ - const char *UUID = strchr(crash_id, ':'); - if (!UUID - || !is_string_safe(crash_id) - ) { - return NULL; - } - - /* Split crash_id into UID:UUID */ - unsigned uid_len = UUID - crash_id; - UUID++; - char UID[uid_len + 1]; - strncpy(UID, crash_id, uid_len); - UID[uid_len] = '\0'; - - GList *table = get_table_or_die(m_pDB, "SELECT * FROM "ABRT_TABLE - " WHERE "COL_UUID"='%s' AND "COL_UID"='%s';", - UUID, UID - ); - - if (!table) - { - return NULL; - } - - GList *first = g_list_first(table); - struct db_row *row = db_rowcpy_from_list(first); - - db_list_free(table); - - return row; -} - -struct db_row *CSQLite3::GetRow_by_dir(const char *dir) -{ - if (!is_string_safe(dir)) - return NULL; - - GList *table = get_table_or_die(m_pDB, "SELECT * FROM "ABRT_TABLE - " WHERE "COL_DEBUG_DUMP_PATH"='%s';", - dir - ); - - if (!table) - return NULL; - - GList *first = g_list_first(table); - struct db_row *row = db_rowcpy_from_list(first); - - db_list_free(table); - - return row; -} - -void CSQLite3::SetSettings(const map_plugin_settings_t& pSettings) -{ - m_pSettings = pSettings; - - map_plugin_settings_t::const_iterator end = pSettings.end(); - map_plugin_settings_t::const_iterator it; - it = pSettings.find("DBPath"); - if (it != end) - { - m_sDBPath = it->second; - } -} - -//ok to delete? -//const map_plugin_settings_t& CSQLite3::GetSettings() -//{ -// m_pSettings["DBPath"] = m_sDBPath; -// -// return m_pSettings; -//} - -PLUGIN_INFO(DATABASE, - CSQLite3, - "SQLite3", - "0.0.2", - _("Keeps SQLite3 database about all crashes"), - "zprikryl@redhat.com,jmoskovc@redhat.com", - "https://fedorahosted.org/abrt/wiki", - ""); diff --git a/src/plugins/SQLite3.h b/src/plugins/SQLite3.h deleted file mode 100644 index 5750d92e..00000000 --- a/src/plugins/SQLite3.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - SQLite3.h - - Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) - Copyright (C) 2009 RedHat inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - 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 Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ -#ifndef SQLITE3_H_ -#define SQLITE3_H_ - -#include "plugin.h" -#include "database.h" - -class CSQLite3 : public CDatabase -{ - private: - std::string m_sDBPath; - sqlite3* m_pDB; - - public: - CSQLite3(); - ~CSQLite3(); - - virtual void Connect(); - virtual void DisConnect(); - - virtual void Insert_or_Update(const char *crash_id, - bool inform_all_users, - const char *pDebugDumpPath, - const char *pTime); - virtual void DeleteRow(const char *crash_id); - virtual void DeleteRows_by_dir(const char *dump_dir); - virtual void SetReported(const char *crash_id, const char *pMessage); - virtual void SetReportedPerReporter(const char *crash_id, - const char *reporter, - const char *pMessage); - virtual GList *GetUIDData(long caller_uid); - virtual struct db_row *GetRow(const char *crash_id); - virtual struct db_row *GetRow_by_dir(const char *dir); - - virtual void SetSettings(const map_plugin_settings_t& pSettings); -}; - - -#endif diff --git a/src/plugins/abrt-SQLite3.7 b/src/plugins/abrt-SQLite3.7 deleted file mode 100644 index c2b39d86..00000000 --- a/src/plugins/abrt-SQLite3.7 +++ /dev/null @@ -1,36 +0,0 @@ -.TH abrt "7" "1 Jun 2009" "" -.SH NAME -SQLite3 database plugin for abrt(8) -.SH DESCRIPTION -.P -.I abrt -is a daemon that watches for application crashes. When a crash occurs, -it collects the crash data and takes action according to -its configuration. This manual page describes the \fISQLite3\fP database plugin -for \fIabrt\fP. -.P -This is a database plugin: \fIabrt\fP needs a database in which to store -its metadata. You can choose one by specifying "Database" in -the \fIabrt.conf\fP configuration file. Currently SQLite3 is -the only choice supported. -.SH INVOCATION -The plugin is invoked in the \fIabrt.conf\fP configuration file, like -this: -.br -[common] -.br -Database = SQLite3 -.SH CONFIGURATION -The \fISQLite3.conf\fP configuration file contains one entry: -.SS DBPath -The path to the database. -.SH EXAMPLES -see \fBINVOCATION\fP -.SH "SEE ALSO" -.IR abrt (8), -.IR abrt.conf (5), -.IR abrt-plugins (7) -.SH AUTHOR -Written by Zdenek Prikryl <zprikryl@redhat.com> and Jiri -Moskovcak <jmoskovc@redhat.com>. Manual -page by Daniel Novotny <dnovotny@redhat.com>. diff --git a/src/plugins/abrt-action-analyze-c.c b/src/plugins/abrt-action-analyze-c.c index 60e08372..6d8ac1b4 100644 --- a/src/plugins/abrt-action-analyze-c.c +++ b/src/plugins/abrt-action-analyze-c.c @@ -50,7 +50,7 @@ static char *run_unstrip_n(const char *dump_dir_name, unsigned timeout_sec) struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); if (!dd) return NULL; - char *uid_str = dd_load_text(dd, CD_UID); + char *uid_str = dd_load_text(dd, FILENAME_UID); dd_close(dd); unsigned uid = xatoi_u(uid_str); free(uid_str); @@ -231,7 +231,7 @@ int main(int argc, char **argv) create_hash(hash_str, string_to_hash); /*free(hash_str);*/ - dd_save_text(dd, CD_UUID, hash_str); + dd_save_text(dd, FILENAME_UUID, hash_str); dd_close(dd); return 0; diff --git a/src/plugins/abrt-action-analyze-oops.c b/src/plugins/abrt-action-analyze-oops.c index 354ec6fd..24538641 100644 --- a/src/plugins/abrt-action-analyze-oops.c +++ b/src/plugins/abrt-action-analyze-oops.c @@ -167,7 +167,7 @@ int main(int argc, char **argv) hash &= 0x7FFFFFFF; char hash_str[sizeof(int)*3 + 2]; sprintf(hash_str, "%u", hash); - dd_save_text(dd, CD_UUID, hash_str); + dd_save_text(dd, FILENAME_UUID, hash_str); dd_save_text(dd, FILENAME_DUPHASH, hash_str); dd_close(dd); diff --git a/src/plugins/abrt-action-analyze-python.c b/src/plugins/abrt-action-analyze-python.c index bb5722ec..9fe563db 100644 --- a/src/plugins/abrt-action-analyze-python.c +++ b/src/plugins/abrt-action-analyze-python.c @@ -111,7 +111,7 @@ int main(int argc, char **argv) } *d = '\0'; - dd_save_text(dd, CD_UUID, hash_str); + dd_save_text(dd, FILENAME_UUID, hash_str); dd_save_text(dd, FILENAME_DUPHASH, hash_str); dd_close(dd); diff --git a/src/plugins/abrt-action-generate-backtrace.c b/src/plugins/abrt-action-generate-backtrace.c index 8f1642d7..64ce4082 100644 --- a/src/plugins/abrt-action-generate-backtrace.c +++ b/src/plugins/abrt-action-generate-backtrace.c @@ -130,7 +130,7 @@ static char* exec_vp(char **args, uid_t uid, int redirect_stderr, int *status) static char *get_backtrace(struct dump_dir *dd) { - char *uid_str = dd_load_text(dd, CD_UID); + char *uid_str = dd_load_text(dd, FILENAME_UID); uid_t uid = xatoi_u(uid_str); free(uid_str); char *executable = dd_load_text(dd, FILENAME_EXECUTABLE); diff --git a/src/plugins/abrt-action-install-debuginfo b/src/plugins/abrt-action-install-debuginfo index c1b8fdb9..59bccba9 100755 --- a/src/plugins/abrt-action-install-debuginfo +++ b/src/plugins/abrt-action-install-debuginfo @@ -25,7 +25,8 @@ # # Exitcodes: # 0 - all debuginfos are installed -# 1 - not all debuginfos are installed +# 0 - not all debuginfos are installed +# (was 1, but this scares event processing) # 2+ - serious problem # # Algorithm: @@ -413,6 +414,8 @@ done cleanup_and_report_missing -test x"$missing_build_ids" != x"" && exit 1 +# Was exiting with 1, but this stops event processing. +test x"$missing_build_ids" != x"" && exit 0 + echo "All needed debuginfos are present" exit 0 diff --git a/src/plugins/abrt-action-mailx.cpp b/src/plugins/abrt-action-mailx.cpp index 9f33e8c1..d11a0d5f 100644 --- a/src/plugins/abrt-action-mailx.cpp +++ b/src/plugins/abrt-action-mailx.cpp @@ -115,7 +115,7 @@ static void create_and_send_email( args = append_str_to_vector(args, arg_size, email_to); log(_("Sending an email...")); - const char *uid_str = get_crash_data_item_content_or_NULL(pCrashData, CD_UID); + const char *uid_str = get_crash_data_item_content_or_NULL(pCrashData, FILENAME_UID); exec_and_feed_input(xatoi_u(uid_str), dsc, args); free(dsc); diff --git a/src/plugins/abrt-action-rhtsupport.cpp b/src/plugins/abrt-action-rhtsupport.cpp index d1854541..aecd30c8 100644 --- a/src/plugins/abrt-action-rhtsupport.cpp +++ b/src/plugins/abrt-action-rhtsupport.cpp @@ -130,11 +130,10 @@ static void report_to_rhtsupport( map_crash_data_t::const_iterator it = pCrashData.begin(); for (; it != pCrashData.end(); it++) { - if (it->first == CD_COUNT) continue; + if (it->first == FILENAME_COUNT) continue; if (it->first == CD_DUMPDIR) continue; - if (it->first == CD_INFORMALL) continue; - if (it->first == CD_REPORTED) continue; - if (it->first == CD_MESSAGE) continue; // plugin's status message (if we already reported it yesterday) + if (it->first == FILENAME_INFORMALL) continue; + if (it->first == FILENAME_MESSAGE) continue; // plugin's status message (if we already reported it yesterday) if (it->first == FILENAME_DESCRIPTION) continue; // package description const char *content = it->second[CD_CONTENT].c_str(); diff --git a/src/plugins/abrt-action-upload.cpp b/src/plugins/abrt-action-upload.cpp index d2acd0f7..0bf54bea 100644 --- a/src/plugins/abrt-action-upload.cpp +++ b/src/plugins/abrt-action-upload.cpp @@ -166,11 +166,10 @@ static int create_and_upload_archive( char *short_name, *full_name; while (dd_get_next_file(dd, &short_name, &full_name)) { - if (strcmp(short_name, CD_COUNT) == 0) goto next; + if (strcmp(short_name, FILENAME_COUNT) == 0) goto next; if (strcmp(short_name, CD_DUMPDIR) == 0) goto next; - if (strcmp(short_name, CD_INFORMALL) == 0) goto next; - if (strcmp(short_name, CD_REPORTED) == 0) goto next; - if (strcmp(short_name, CD_MESSAGE) == 0) goto next; // plugin's status message (if we already reported it yesterday) + if (strcmp(short_name, FILENAME_INFORMALL) == 0) goto next; + if (strcmp(short_name, FILENAME_MESSAGE) == 0) goto next; // plugin's status message (if we already reported it yesterday) if (strcmp(short_name, FILENAME_DESCRIPTION) == 0) goto next; // package description // dd_get_next_file guarantees this: //struct stat stbuf; diff --git a/src/plugins/abrt-plugins.7 b/src/plugins/abrt-plugins.7 index 6c07e65a..28de8f02 100644 --- a/src/plugins/abrt-plugins.7 +++ b/src/plugins/abrt-plugins.7 @@ -31,12 +31,11 @@ stored in the \fI/etc/abrt/plugins\fP directory. .IR abrt (8), .IR abrt.conf (5), .IR abrt-Bugzilla (7), -.IR abrt-FileTransfer (7), +.IR abrt-Upload (7), .IR abrt-KerneloopsReporter (7), .IR abrt-KerneloopsScanner (7), .IR abrt-Logger (7), .IR abrt-Mailx (7), -.IR abrt-SQLite3 (7) .SH AUTHOR \fIabrt\fP written by Zdeněk Přikryl <zprikryl@redhat.com> and Jiří Moskovčák <jmoskovc@redhat.com>. Manual page written by Daniel |