From d9e2d23b754c0a3a6ccfdaee423065e4a1cd7784 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 1 Dec 2010 17:40:44 +0100 Subject: factor out headers so that "report lib" API is separated out of abrt API This patch minimally affects code per se - it adds create_crash_dump_dir() function which takes in-memory representation of the dump (map_crash_data_t object) and creates an on-disk representation. Then it returns pointer to struct dump_dir. With this function, it is possible to run an event on a user-constructed map_crash_data_t: map_crash_data_t cd; add_to_crash_data(cd, "foo", "bar"); struct dump_dir *dd = create_crash_dump_dir(cd); char *dir_name = strdup(dd->dd_dir); dd_close(dd); run_event(run_state, dir_name, event); delete_crash_dump_dir(dir_name); which is, basically, what report library is about. The biggest part of the patch is reshuffling of header files, with the following result: three header files which are not cluttered by other ABRT stuff, and expose the following API each: crash_dump.h - in-memory crash dump data structs and ops dump_dir.h - on-disk crash dump data structs and ops run_event.h - run_event() and friends These is a test application, test_report.cpp.cpp, which demonstrates (and tests) usage of these headers. (grep for "test-report" and enable it in build system if you want it to be built). It creates a temporary dump in /var/run/abrt/tmp-NNNN-NNNNN and runs "report" event. Deleting of temp dump is disabled for testing purposes - you might want to see the contents. Here is how the binary looks like: text data bss dec hex filename 3730 668 48 4446 115e /usr/bin/test-report linux-vdso.so.1 => (0x00007ffffa80f000) libabrt.so.0 => /usr/lib64/libabrt.so.0 (0x00007fad1f35e000) libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x0000003c1f200000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c2c200000) libm.so.6 => /lib64/libm.so.6 (0x00007fad1f0da000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c28e00000) libc.so.6 => /lib64/libc.so.6 (0x00007fad1ed5b000) /lib64/ld-linux-x86-64.so.2 (0x00007fad1f570000) Next step would be to clean up the namespace, then rename libabrt.so into libreport.so, then split it into a separate package so that we can install it without installing other two abrt .so files. Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index ee2853b2..4e79a8bc 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -60,6 +60,15 @@ static bool DebugDumpToCrashReport(const char *dump_dir_name, map_crash_data_t& if (!dd) return false; + static const char *const must_have_files[] = { + FILENAME_ARCHITECTURE, + FILENAME_KERNEL , + FILENAME_PACKAGE , + FILENAME_COMPONENT , + FILENAME_RELEASE , + FILENAME_EXECUTABLE , + NULL + }; const char *const *v = must_have_files; while (*v) { -- cgit From 3ea8cd037dcd5a8439baceadc8df70664eff701c Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 3 Dec 2010 18:56:33 +0100 Subject: preparatory patch: add -v to abrt-cli; remove unused func; make func static Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 4e79a8bc..22e49620 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -100,12 +100,22 @@ static char *do_log_and_update_client(char *log_line, void *param) return log_line; } +/** + * Takes care of getting all additional data needed + * for computing UUIDs and creating a report for particular analyzer + * plugin. This report could be send somewhere afterwards. If a creation + * is successful, then a crash report is filled. + * @param pAnalyzer A name of an analyzer plugin. + * @param pDebugDumpPath A debugdump dir containing all necessary data. + * @param pCrashData A filled crash report. + * @return It return results of operation. See mw_result_t. + */ /* * Called in two cases: * (1) by StartJob dbus call -> CreateReportThread(), in the thread * (2) by CreateReport dbus call */ -mw_result_t CreateCrashReport(const char *dump_dir_name, +static mw_result_t CreateCrashReport(const char *dump_dir_name, long caller_uid, int force, map_crash_data_t& pCrashData) -- cgit From 47728cc3c70c2b6d3a645e5760b39b20bd946e39 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 6 Dec 2010 16:56:50 +0100 Subject: This patch changes crash data to use C structures. The smallest data element is: struct crash_item { char *content; unsigned flags; }; where content is, eh, content, and flags is a bit flag field. crash_data_t is a map of crash_item's, implemented as a pointer to heap-allocated GHashTable. vector_of_crash_data_t is a vector of crash_data_t's, implemented as a pointer to heap-allocated GPtrArray. Most operations have light wrappers around them to hide the nature of the containers. For example, to free vector_of_crash_data, you need to use free_vector_of_crash_data(ptr) instead of open-coding g_ptr_array_free. The wrapper is thin. The goal is not so much to hide the implementation, but more to make it easier to use the correct function. dbus (un)marshalling functions convert crash_item to three-element array of strings, in order to keep compatibility with abrt-gui (python). This can be changed later to use native representation. crash_data_t and vector_of_crash_data_t are represented in "natural" way, no funny stuff there. Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 132 +++++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 65 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 22e49620..6abf019e 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -43,8 +43,7 @@ CPluginManager* g_pPluginManager; * @param pCrashData A crash info. * @return It return results of operation. See mw_result_t. */ -static mw_result_t FillCrashInfo(const char *dump_dir_name, - map_crash_data_t& pCrashData); +static crash_data_t *FillCrashInfo(const char *dump_dir_name); /** * Transforms a debugdump directory to inner crash @@ -52,13 +51,13 @@ static mw_result_t FillCrashInfo(const char *dump_dir_name, * @param dump_dir_name A debugdump dir containing all necessary data. * @param pCrashData A created crash report. */ -static bool DebugDumpToCrashReport(const char *dump_dir_name, map_crash_data_t& pCrashData) +static crash_data_t *DebugDumpToCrashReport(const char *dump_dir_name) { VERB3 log(" DebugDumpToCrashReport('%s')", dump_dir_name); struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); if (!dd) - return false; + return NULL; static const char *const must_have_files[] = { FILENAME_ARCHITECTURE, @@ -76,21 +75,21 @@ static bool DebugDumpToCrashReport(const char *dump_dir_name, map_crash_data_t& { dd_close(dd); log("Important file '%s/%s' is missing", dump_dir_name, *v); - return false; + return NULL; } v++; } - load_crash_data_from_crash_dump_dir(dd, pCrashData); + crash_data_t *crash_data = load_crash_data_from_crash_dump_dir(dd); char *events = list_possible_events(dd, NULL, ""); dd_close(dd); - add_to_crash_data_ext(pCrashData, CD_EVENTS, CD_SYS, CD_ISNOTEDITABLE, events); + add_to_crash_data_ext(crash_data, CD_EVENTS, events, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE); free(events); - add_to_crash_data_ext(pCrashData, CD_DUMPDIR, CD_SYS, CD_ISNOTEDITABLE, dump_dir_name); + add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE); - return true; + return crash_data; } static char *do_log_and_update_client(char *log_line, void *param) @@ -118,9 +117,11 @@ static char *do_log_and_update_client(char *log_line, void *param) static mw_result_t CreateCrashReport(const char *dump_dir_name, long caller_uid, int force, - map_crash_data_t& pCrashData) + crash_data_t **crash_data) { - VERB2 log("CreateCrashReport('%s',%ld,result)", dump_dir_name, caller_uid); + VERB2 log("CreateCrashReport('%s',%ld)", dump_dir_name, caller_uid); + + *crash_data = NULL; struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); if (!dd) @@ -165,7 +166,8 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name, /* Do a load_crash_data_from_crash_dump_dir from (possibly updated) * crash dump dir */ - if (!DebugDumpToCrashReport(dump_dir_name, pCrashData)) + *crash_data = DebugDumpToCrashReport(dump_dir_name); + if (!*crash_data) { error_msg("Error loading crash data"); r = MW_ERROR; @@ -224,23 +226,22 @@ static char *do_log_and_save_line(char *log_line, void *param) // Do not trust client_report here! // dbus handler passes it from user without checking -report_status_t Report(const map_crash_data_t& client_report, +report_status_t Report(crash_data_t *client_report, const vector_string_t& events, const map_map_string_t& settings, long caller_uid) { // Get ID fields - const char *UID = get_crash_data_item_content_or_NULL(client_report, FILENAME_UID); - const char *dump_dir_name = get_crash_data_item_content_or_NULL(client_report, CD_DUMPDIR); + const char *UID = get_crash_item_content_or_NULL(client_report, FILENAME_UID); + const char *dump_dir_name = get_crash_item_content_or_NULL(client_report, CD_DUMPDIR); if (!UID || !dump_dir_name) { throw CABRTException(EXCEP_ERROR, "Report(): UID or DUMPDIR is missing in client's report data"); } // Retrieve corresponding stored record - map_crash_data_t stored_report; - mw_result_t r = FillCrashInfo(dump_dir_name, stored_report); - if (r != MW_OK) + crash_data_t *stored_report = FillCrashInfo(dump_dir_name); + if (!stored_report) { return report_status_t(); } @@ -249,18 +250,21 @@ report_status_t Report(const map_crash_data_t& client_report, if (caller_uid != 0 // not called by root && strcmp(to_string(caller_uid).c_str(), UID) != 0 ) { - const char *inform_all = get_crash_data_item_content_or_NULL(stored_report, FILENAME_INFORMALL); + const char *inform_all = get_crash_item_content_or_NULL(stored_report, FILENAME_INFORMALL); if (!inform_all || !string_to_bool(inform_all)) + { + free_crash_data(stored_report); throw CABRTException(EXCEP_ERROR, "Report(): user with uid %ld can't report crash %s", caller_uid, dump_dir_name); + } } // Save comment, "how to reproduce", backtrace //TODO: we should iterate through stored_report and modify all //modifiable fields which have new data in client_report - const char *comment = get_crash_data_item_content_or_NULL(client_report, FILENAME_COMMENT); - const char *reproduce = get_crash_data_item_content_or_NULL(client_report, FILENAME_REPRODUCE); - const char *backtrace = get_crash_data_item_content_or_NULL(client_report, FILENAME_BACKTRACE); + const char *comment = get_crash_item_content_or_NULL(client_report, FILENAME_COMMENT); + const char *reproduce = get_crash_item_content_or_NULL(client_report, FILENAME_REPRODUCE); + const char *backtrace = get_crash_item_content_or_NULL(client_report, FILENAME_BACKTRACE); if (comment || reproduce || backtrace) { struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); @@ -269,45 +273,47 @@ report_status_t Report(const map_crash_data_t& client_report, if (comment) { dd_save_text(dd, FILENAME_COMMENT, comment); - add_to_crash_data_ext(stored_report, FILENAME_COMMENT, CD_TXT, CD_ISEDITABLE, comment); + add_to_crash_data_ext(stored_report, FILENAME_COMMENT, comment, CD_FLAG_TXT + CD_FLAG_ISEDITABLE); } if (reproduce) { dd_save_text(dd, FILENAME_REPRODUCE, reproduce); - add_to_crash_data_ext(stored_report, FILENAME_REPRODUCE, CD_TXT, CD_ISEDITABLE, reproduce); + add_to_crash_data_ext(stored_report, FILENAME_REPRODUCE, reproduce, CD_FLAG_TXT + CD_FLAG_ISEDITABLE); } if (backtrace) { dd_save_text(dd, FILENAME_BACKTRACE, backtrace); - add_to_crash_data_ext(stored_report, FILENAME_BACKTRACE, CD_TXT, CD_ISEDITABLE, backtrace); + add_to_crash_data_ext(stored_report, FILENAME_BACKTRACE, backtrace, CD_FLAG_TXT + CD_FLAG_ISEDITABLE); } dd_close(dd); } } /* Remove BIN filenames from stored_report if they are not present in client's data */ - map_crash_data_t::const_iterator its = stored_report.begin(); - while (its != stored_report.end()) + GHashTableIter iter; + char *name; + struct crash_item *value; + g_hash_table_iter_init(&iter, stored_report); + while (g_hash_table_iter_next(&iter, (void**)&name, (void**)&value)) { - if (its->second[CD_TYPE] == CD_BIN) + if (value->flags & CD_FLAG_BIN) { - std::string key = its->first; - if (get_crash_data_item_content_or_NULL(client_report, key.c_str()) == NULL) + if (get_crash_item_content_or_NULL(client_report, name) == NULL) { /* client does not have it -> does not want it passed to events */ - VERB3 log("Won't report BIN file %s:'%s'", key.c_str(), its->second[CD_CONTENT].c_str()); - its++; /* move off the element we will erase */ - stored_report.erase(key); + VERB3 log("Won't report BIN file %s:'%s'", name, value->content); + g_hash_table_iter_remove(&iter); continue; } } - its++; } VERB3 { log_map_crash_data(client_report, " client_report"); log_map_crash_data(stored_report, " stored_report"); } + free_crash_data(stored_report); +#define stored_report stored_report_must_not_be_used_below #define client_report client_report_must_not_be_used_below // Export overridden settings as environment variables @@ -409,6 +415,7 @@ report_status_t Report(const map_crash_data_t& client_report, } return ret; +#undef stored_report #undef client_report } @@ -489,8 +496,7 @@ static char *do_log(char *log_line, void *param) return log_line; } -mw_result_t LoadDebugDump(const char *dump_dir_name, - map_crash_data_t& pCrashData) +mw_result_t LoadDebugDump(const char *dump_dir_name, crash_data_t **crash_data) { mw_result_t res; @@ -546,7 +552,7 @@ mw_result_t LoadDebugDump(const char *dump_dir_name, dump_dir_name = state.crash_dump_dup_name; } - /* Loads pCrashData (from the *first debugdump dir* if this one is a dup) + /* Loads crash_data (from the *first debugdump dir* if this one is a dup) * Returns: * MW_OCCURRED: "crash count is != 1" (iow: it is > 1 - dup) * MW_OK: "crash count is 1" (iow: this is a new crash, not a dup) @@ -567,9 +573,10 @@ mw_result_t LoadDebugDump(const char *dump_dir_name, dd_save_text(dd, FILENAME_COUNT, new_count_str); dd_close(dd); - res = FillCrashInfo(dump_dir_name, pCrashData); - if (res == MW_OK) + *crash_data = FillCrashInfo(dump_dir_name); + if (*crash_data != NULL) { + res = MW_OK; if (count > 1) { log("Crash dump is a duplicate of %s", dump_dir_name); @@ -587,28 +594,27 @@ mw_result_t LoadDebugDump(const char *dump_dir_name, return res; } -static mw_result_t FillCrashInfo(const char *dump_dir_name, - map_crash_data_t& pCrashData) +static crash_data_t *FillCrashInfo(const char *dump_dir_name) { struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); if (!dd) - return MW_ERROR; + return NULL; - load_crash_data_from_crash_dump_dir(dd, pCrashData); + crash_data_t *crash_data = load_crash_data_from_crash_dump_dir(dd); char *events = list_possible_events(dd, NULL, ""); dd_close(dd); - add_to_crash_data_ext(pCrashData, CD_EVENTS, CD_SYS, CD_ISNOTEDITABLE, events); + add_to_crash_data_ext(crash_data, CD_EVENTS, events, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE); free(events); - add_to_crash_data_ext(pCrashData, CD_DUMPDIR, CD_SYS, CD_ISNOTEDITABLE, dump_dir_name); + add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE); - return MW_OK; + return crash_data; } -vector_map_crash_data_t GetCrashInfos(long caller_uid) +vector_of_crash_data_t *GetCrashInfos(long caller_uid) { - vector_map_crash_data_t retval; + vector_of_crash_data_t *retval = new_vector_of_crash_data(); log("Getting crash infos..."); DIR *dir = opendir(DEBUG_DUMPS_DIR); @@ -658,19 +664,15 @@ vector_map_crash_data_t GetCrashInfos(long caller_uid) } { - map_crash_data_t info; - mw_result_t res = FillCrashInfo(dump_dir_name, info); - switch (res) + crash_data_t *crash_data = FillCrashInfo(dump_dir_name); + if (!crash_data) + { + error_msg("Dump directory %s doesn't exist or misses crucial files, deleting", dump_dir_name); + delete_crash_dump_dir(dump_dir_name); + } + else { - case MW_OK: - retval.push_back(info); - break; - case MW_ERROR: - error_msg("Dump directory %s doesn't exist or misses crucial files, deleting", dump_dir_name); - delete_crash_dump_dir(dump_dir_name); - break; - default: - break; + g_ptr_array_add(retval, crash_data); } } next: @@ -695,14 +697,14 @@ vector_map_crash_data_t GetCrashInfos(long caller_uid) * StartJob dbus call already did all the processing, and we just retrieve * the result from dump directory, which is fast. */ -void CreateReport(const char* crash_id, long caller_uid, int force, map_crash_data_t& crashReport) +void CreateReport(const char* crash_id, long caller_uid, int force, crash_data_t **crash_data) { /* FIXME: starting from here, any shared data must be protected with a mutex. */ - mw_result_t res = CreateCrashReport(crash_id, caller_uid, force, crashReport); + mw_result_t res = CreateCrashReport(crash_id, caller_uid, force, crash_data); switch (res) { case MW_OK: - VERB2 log_map_crash_data(crashReport, "crashReport"); + VERB2 log_map_crash_data(*crash_data, "crashReport"); break; case MW_NOENT_ERROR: error_msg("Can't find crash with id '%s'", crash_id); @@ -737,8 +739,8 @@ static void* create_report(void* arg) try { log("Creating report..."); - map_crash_data_t crashReport; - CreateReport(thread_data->crash_id, thread_data->caller_uid, thread_data->force, crashReport); + crash_data_t *crash_data = NULL; + CreateReport(thread_data->crash_id, thread_data->caller_uid, thread_data->force, &crash_data); g_pCommLayer->JobDone(thread_data->peer); } catch (CABRTException& e) -- cgit From 816f3e001271ed8ab7fdadb6d90aeb2c61362dac Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 8 Dec 2010 14:51:47 +0100 Subject: removal of C++isms from libabrt, part 1 This patch converts libabrt usage of C++ map to a glib-based container, GHashTable. It is typedef-ed to map_string_h. We can't typedef it to map_string_t, since other parts of ABRT (daemon, cli) still use that name for C++ container. Also, exceptions are removed everywhere. Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 189 ++++++++++++++++++++-------------------------- 1 file changed, 81 insertions(+), 108 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 6abf019e..7135a50a 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -21,7 +21,6 @@ #include "abrtlib.h" #include "Daemon.h" #include "Settings.h" -#include "abrt_exception.h" #include "comm_layer_inner.h" #include "CommLayerServer.h" #include "MiddleWare.h" @@ -127,6 +126,8 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name, if (!dd) return MW_NOENT_ERROR; + struct run_event_state *run_state; + int res; mw_result_t r = MW_OK; if (caller_uid != 0) /* not called by root */ @@ -151,37 +152,24 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name, } dd_close(dd); - try + run_state = new_run_event_state(); + run_state->logging_callback = do_log_and_update_client; + res = run_event(run_state, dump_dir_name, force ? "reanalyze" : "analyze"); + free_run_event_state(run_state); + if (res != 0 && res != -1) /* -1 is "nothing was done", here it is ok */ { - struct run_event_state *run_state = new_run_event_state(); - run_state->logging_callback = do_log_and_update_client; - int res = run_event(run_state, dump_dir_name, force ? "reanalyze" : "analyze"); - free_run_event_state(run_state); - if (res != 0 && res != -1) /* -1 is "nothing was done", here it is ok */ - { - r = MW_PLUGIN_ERROR; - goto ret; - } - - /* Do a load_crash_data_from_crash_dump_dir from (possibly updated) - * crash dump dir - */ - *crash_data = DebugDumpToCrashReport(dump_dir_name); - if (!*crash_data) - { - error_msg("Error loading crash data"); - r = MW_ERROR; - goto ret; - } + r = MW_PLUGIN_ERROR; + goto ret; } - catch (CABRTException& e) + + /* Do a load_crash_data_from_crash_dump_dir from (possibly updated) + * crash dump dir + */ + *crash_data = DebugDumpToCrashReport(dump_dir_name); + if (!*crash_data) { - r = MW_CORRUPTED; - error_msg("%s", e.what()); - if (e.type() == EXCEP_PLUGIN) - { - r = MW_PLUGIN_ERROR; - } + error_msg("Error loading crash data"); + r = MW_ERROR; } ret: @@ -199,14 +187,7 @@ void RunAction(const char *pActionDir, /* GetAction() already complained */ return; } - try - { - action->Run(pActionDir, pPluginArgs, /*force:*/ 0); - } - catch (CABRTException& e) - { - error_msg("Execution of '%s' was not successful: %s", pPluginName, e.what()); - } + action->Run(pActionDir, pPluginArgs, /*force:*/ 0); } struct logging_state { @@ -231,12 +212,14 @@ report_status_t Report(crash_data_t *client_report, const map_map_string_t& settings, long caller_uid) { - // Get ID fields - const char *UID = get_crash_item_content_or_NULL(client_report, FILENAME_UID); + report_status_t ret; const char *dump_dir_name = get_crash_item_content_or_NULL(client_report, CD_DUMPDIR); - if (!UID || !dump_dir_name) + if (!dump_dir_name) { - throw CABRTException(EXCEP_ERROR, "Report(): UID or DUMPDIR is missing in client's report data"); + update_client("Reporting error: %s", "DUMPDIR is missing in client's report data"); + ret[""].push_back("0"); // REPORT_STATUS_IDX_FLAG + ret[""].push_back("DUMPDIR is missing in client's report data"); // REPORT_STATUS_IDX_MSG + return ret; } // Retrieve corresponding stored record @@ -248,14 +231,18 @@ report_status_t Report(crash_data_t *client_report, // Is it allowed for this user to report? if (caller_uid != 0 // not called by root - && strcmp(to_string(caller_uid).c_str(), UID) != 0 + && strcmp(to_string(caller_uid).c_str(), get_crash_item_content_or_die(stored_report, FILENAME_UID)) != 0 ) { const char *inform_all = get_crash_item_content_or_NULL(stored_report, FILENAME_INFORMALL); if (!inform_all || !string_to_bool(inform_all)) { free_crash_data(stored_report); - throw CABRTException(EXCEP_ERROR, "Report(): user with uid %ld can't report crash %s", - caller_uid, dump_dir_name); + char *errmsg = xasprintf("user with uid %ld can't report crash %s", caller_uid, dump_dir_name); + update_client("Reporting error: %s", errmsg); + ret[""].push_back("0"); // REPORT_STATUS_IDX_FLAG + ret[""].push_back(errmsg); // REPORT_STATUS_IDX_MSG + free(errmsg); + return ret; } } @@ -335,7 +322,6 @@ report_status_t Report(crash_data_t *client_report, // Run events bool at_least_one_reporter_succeeded = false; - report_status_t ret; std::string message; struct logging_state l_state; struct run_event_state *run_state = new_run_event_state(); @@ -620,68 +606,61 @@ vector_of_crash_data_t *GetCrashInfos(long caller_uid) DIR *dir = opendir(DEBUG_DUMPS_DIR); if (dir != NULL) { - try + struct dirent *dent; + while ((dent = readdir(dir)) != NULL) { - struct dirent *dent; - while ((dent = readdir(dir)) != NULL) - { - if (dot_or_dotdot(dent->d_name)) - continue; /* skip "." and ".." */ + if (dot_or_dotdot(dent->d_name)) + continue; /* skip "." and ".." */ - char *dump_dir_name = concat_path_file(DEBUG_DUMPS_DIR, dent->d_name); + char *dump_dir_name = concat_path_file(DEBUG_DUMPS_DIR, dent->d_name); - struct stat statbuf; - if (stat(dump_dir_name, &statbuf) != 0 - || !S_ISDIR(statbuf.st_mode) - ) { - goto next; /* not a dir, skip */ - } + struct stat statbuf; + if (stat(dump_dir_name, &statbuf) != 0 + || !S_ISDIR(statbuf.st_mode) + ) { + goto next; /* not a dir, skip */ + } - /* Skip directories which are not for this uid */ - if (caller_uid != 0) /* not called by root? */ - { - char *uid; - char caller_uid_str[sizeof(long) * 3 + 2]; + /* Skip directories which are not for this uid */ + if (caller_uid != 0) /* not called by root? */ + { + char *uid; + char caller_uid_str[sizeof(long) * 3 + 2]; - struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); - if (!dd) - goto next; + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (!dd) + goto next; - sprintf(caller_uid_str, "%ld", caller_uid); - uid = dd_load_text(dd, FILENAME_UID); - if (strcmp(uid, caller_uid_str) != 0) + sprintf(caller_uid_str, "%ld", caller_uid); + uid = dd_load_text(dd, FILENAME_UID); + if (strcmp(uid, caller_uid_str) != 0) + { + char *inform_all = dd_load_text_ext(dd, FILENAME_INFORMALL, DD_FAIL_QUIETLY); + bool for_all = string_to_bool(inform_all); + free(inform_all); + if (!for_all) { - char *inform_all = dd_load_text_ext(dd, FILENAME_INFORMALL, DD_FAIL_QUIETLY); - bool for_all = string_to_bool(inform_all); - free(inform_all); - if (!for_all) - { - dd_close(dd); - goto next; - } + dd_close(dd); + goto next; } - dd_close(dd); } + dd_close(dd); + } + { + crash_data_t *crash_data = FillCrashInfo(dump_dir_name); + if (!crash_data) { - crash_data_t *crash_data = FillCrashInfo(dump_dir_name); - if (!crash_data) - { - error_msg("Dump directory %s doesn't exist or misses crucial files, deleting", dump_dir_name); - delete_crash_dump_dir(dump_dir_name); - } - else - { - g_ptr_array_add(retval, crash_data); - } + error_msg("Dump directory %s doesn't exist or misses crucial files, deleting", dump_dir_name); + delete_crash_dump_dir(dump_dir_name); + } + else + { + g_ptr_array_add(retval, crash_data); } - next: - free(dump_dir_name); } - } - catch (CABRTException& e) - { - error_msg("%s", e.what()); + next: + free(dump_dir_name); } closedir(dir); } @@ -736,18 +715,10 @@ static void* create_report(void* arg) /* Client name is per-thread, need to set it */ set_client_name(thread_data->peer); - try - { - log("Creating report..."); - crash_data_t *crash_data = NULL; - CreateReport(thread_data->crash_id, thread_data->caller_uid, thread_data->force, &crash_data); - g_pCommLayer->JobDone(thread_data->peer); - } - catch (CABRTException& e) - { - error_msg("%s", e.what()); - } - catch (...) {} + log("Creating report..."); + crash_data_t *crash_data = NULL; + CreateReport(thread_data->crash_id, thread_data->caller_uid, thread_data->force, &crash_data); + g_pCommLayer->JobDone(thread_data->peer); set_client_name(NULL); /* free strduped strings */ @@ -874,10 +845,12 @@ void GetPluginsInfo(map_map_string_t &map_of_plugin_info) closedir(dir); } -void GetPluginSettings(const char *plugin_name, map_plugin_settings_t &plugin_settings) +map_string_h *GetPluginSettings(const char *plugin_name) { char *conf_file = xasprintf(PLUGINS_CONF_DIR"/%s.conf", plugin_name); - if (LoadPluginSettings(conf_file, plugin_settings, /*skip w/o value:*/ false)) + map_string_h *settings = new_map_string(); + if (load_conf_file(conf_file, settings, /*skip w/o value:*/ false)) VERB3 log("Loaded %s.conf", plugin_name); free(conf_file); + return settings; } -- cgit From def39238640489b41da5cdc8fd4a83d16d49fcc7 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 8 Dec 2010 15:03:24 +0100 Subject: removal of C++isms from libabrt, part 2 This patch rewrites a few places where we use C++ strings Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 7135a50a..51f7929d 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -230,19 +230,23 @@ report_status_t Report(crash_data_t *client_report, } // Is it allowed for this user to report? - if (caller_uid != 0 // not called by root - && strcmp(to_string(caller_uid).c_str(), get_crash_item_content_or_die(stored_report, FILENAME_UID)) != 0 - ) { - const char *inform_all = get_crash_item_content_or_NULL(stored_report, FILENAME_INFORMALL); - if (!inform_all || !string_to_bool(inform_all)) + if (caller_uid != 0) // not called by root + { + char caller_uid_str[sizeof(long)*3 + 2]; + sprintf(caller_uid_str, "%ld", caller_uid); + if (strcmp(caller_uid_str, get_crash_item_content_or_die(stored_report, FILENAME_UID)) != 0) { - free_crash_data(stored_report); - char *errmsg = xasprintf("user with uid %ld can't report crash %s", caller_uid, dump_dir_name); - update_client("Reporting error: %s", errmsg); - ret[""].push_back("0"); // REPORT_STATUS_IDX_FLAG - ret[""].push_back(errmsg); // REPORT_STATUS_IDX_MSG - free(errmsg); - return ret; + const char *inform_all = get_crash_item_content_or_NULL(stored_report, FILENAME_INFORMALL); + if (!inform_all || !string_to_bool(inform_all)) + { + free_crash_data(stored_report); + char *errmsg = xasprintf("user with uid %ld can't report crash %s", caller_uid, dump_dir_name); + update_client("Reporting error: %s", errmsg); + ret[""].push_back("0"); // REPORT_STATUS_IDX_FLAG + ret[""].push_back(errmsg); // REPORT_STATUS_IDX_MSG + free(errmsg); + return ret; + } } } -- cgit From 6a2b728d7525214402eff838bb37be175ddce6c3 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 15 Dec 2010 18:44:55 +0100 Subject: Rename foo_crash_dump_dir -> foo_dump_dir To be exact, these three functions are renamed: load_crash_data_from_crash_dump_dir create_crash_dump_dir delete_crash_dump_dir Rationale: data structure is called "struct dump_dir", not "struct crash_dump_dir" Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 51f7929d..724b092a 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -79,7 +79,7 @@ static crash_data_t *DebugDumpToCrashReport(const char *dump_dir_name) v++; } - crash_data_t *crash_data = load_crash_data_from_crash_dump_dir(dd); + crash_data_t *crash_data = load_crash_data_from_dump_dir(dd); char *events = list_possible_events(dd, NULL, ""); dd_close(dd); @@ -162,7 +162,7 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name, goto ret; } - /* Do a load_crash_data_from_crash_dump_dir from (possibly updated) + /* Do a load_crash_data_from_dump_dir from (possibly updated) * crash dump dir */ *crash_data = DebugDumpToCrashReport(dump_dir_name); @@ -590,7 +590,7 @@ static crash_data_t *FillCrashInfo(const char *dump_dir_name) if (!dd) return NULL; - crash_data_t *crash_data = load_crash_data_from_crash_dump_dir(dd); + crash_data_t *crash_data = load_crash_data_from_dump_dir(dd); char *events = list_possible_events(dd, NULL, ""); dd_close(dd); @@ -656,7 +656,7 @@ vector_of_crash_data_t *GetCrashInfos(long caller_uid) if (!crash_data) { error_msg("Dump directory %s doesn't exist or misses crucial files, deleting", dump_dir_name); - delete_crash_dump_dir(dump_dir_name); + delete_dump_dir(dump_dir_name); } else { -- cgit From df1b1d501106687fcf0039dc9771c4455c346df5 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 22 Dec 2010 13:57:14 +0100 Subject: *: rename *crash_dump.* -> *crash_data.* Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 724b092a..655bda3a 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -300,8 +300,8 @@ report_status_t Report(crash_data_t *client_report, } VERB3 { - log_map_crash_data(client_report, " client_report"); - log_map_crash_data(stored_report, " stored_report"); + log_crash_data(client_report, " client_report"); + log_crash_data(stored_report, " stored_report"); } free_crash_data(stored_report); #define stored_report stored_report_must_not_be_used_below @@ -687,7 +687,7 @@ void CreateReport(const char* crash_id, long caller_uid, int force, crash_data_t switch (res) { case MW_OK: - VERB2 log_map_crash_data(*crash_data, "crashReport"); + VERB2 log_crash_data(*crash_data, "crashReport"); break; case MW_NOENT_ERROR: error_msg("Can't find crash with id '%s'", crash_id); -- cgit From dba326f60e159697a740f08959d098e19c200453 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 22 Dec 2010 16:28:39 +0100 Subject: extend run_event() to run_event_on_dir_name() and run_event_on_crash_data() Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 655bda3a..ff2e1a2a 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -79,7 +79,7 @@ static crash_data_t *DebugDumpToCrashReport(const char *dump_dir_name) v++; } - crash_data_t *crash_data = load_crash_data_from_dump_dir(dd); + crash_data_t *crash_data = create_crash_data_from_dump_dir(dd); char *events = list_possible_events(dd, NULL, ""); dd_close(dd); @@ -154,7 +154,7 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name, run_state = new_run_event_state(); run_state->logging_callback = do_log_and_update_client; - res = run_event(run_state, dump_dir_name, force ? "reanalyze" : "analyze"); + res = run_event_on_dir_name(run_state, dump_dir_name, force ? "reanalyze" : "analyze"); free_run_event_state(run_state); if (res != 0 && res != -1) /* -1 is "nothing was done", here it is ok */ { @@ -162,7 +162,7 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name, goto ret; } - /* Do a load_crash_data_from_dump_dir from (possibly updated) + /* Do a create_crash_data_from_dump_dir from (possibly updated) * crash dump dir */ *crash_data = DebugDumpToCrashReport(dump_dir_name); @@ -336,7 +336,7 @@ report_status_t Report(crash_data_t *client_report, std::string event = events[i]; l_state.last_line = NULL; - int r = run_event(run_state, dump_dir_name, event.c_str()); + int r = run_event_on_dir_name(run_state, dump_dir_name, event.c_str()); if (r == -1) { l_state.last_line = xasprintf("Error: no processing is specified for event '%s'", event.c_str()); @@ -507,7 +507,7 @@ mw_result_t LoadDebugDump(const char *dump_dir_name, crash_data_t **crash_data) run_state->post_run_callback = is_crash_a_dup; run_state->post_run_param = &state; run_state->logging_callback = do_log; - int r = run_event(run_state, dump_dir_name, "post-create"); + int r = run_event_on_dir_name(run_state, dump_dir_name, "post-create"); free_run_event_state(run_state); //TODO: consider this case: @@ -590,7 +590,7 @@ static crash_data_t *FillCrashInfo(const char *dump_dir_name) if (!dd) return NULL; - crash_data_t *crash_data = load_crash_data_from_dump_dir(dd); + crash_data_t *crash_data = create_crash_data_from_dump_dir(dd); char *events = list_possible_events(dd, NULL, ""); dd_close(dd); -- cgit From 949ea4801dfa3c72ee34b645ebc09062335eebc0 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 13 Jan 2011 17:26:05 +0100 Subject: fix a SEGV caused by returning NULL instead of empty hash table Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index ff2e1a2a..1379e4fb 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -173,6 +173,8 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name, } ret: + if (*crash_data == NULL) + *crash_data = new_crash_data(); VERB3 log("CreateCrashReport() returns %d", r); return r; } -- cgit From 480cac7647d567c3c3cb148c5a4750091b651934 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 19 Jan 2011 17:14:05 +0100 Subject: remove old plugin machinery. -10k and -1 library dependence in abrtd Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 1379e4fb..4da4db19 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -19,6 +19,7 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "abrtlib.h" +#include "plugin.h" #include "Daemon.h" #include "Settings.h" #include "comm_layer_inner.h" @@ -27,14 +28,6 @@ using namespace std; -/** - * An instance of CPluginManager. When MiddleWare wants to do something - * with plugins, it calls the plugin manager. - * @see PluginManager.h - */ -CPluginManager* g_pPluginManager; - - /** * Get one crash info. If getting is successful, * then crash info is filled. @@ -179,19 +172,6 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name, return r; } -void RunAction(const char *pActionDir, - const char *pPluginName, - const char *pPluginArgs) -{ - CAction* action = g_pPluginManager->GetAction(pPluginName); - if (!action) - { - /* GetAction() already complained */ - return; - } - action->Run(pActionDir, pPluginArgs, /*force:*/ 0); -} - struct logging_state { char *last_line; }; -- cgit From 320724188859d96b0a974d9e84bacd49a614f97d Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 20 Jan 2011 21:43:54 +0100 Subject: remove plugin.h, move its only macro into into only user Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 4da4db19..9a01bf3d 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -19,7 +19,6 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "abrtlib.h" -#include "plugin.h" #include "Daemon.h" #include "Settings.h" #include "comm_layer_inner.h" @@ -786,7 +785,7 @@ void GetPluginsInfo(map_map_string_t &map_of_plugin_info) if (!is_regular_file(dent, PLUGINS_CONF_DIR)) continue; char *ext = strrchr(dent->d_name, '.'); - if (!ext || strcmp(ext + 1, PLUGINS_CONF_EXTENSION) != 0) + if (!ext || strcmp(ext + 1, "conf") != 0) continue; VERB3 log("Found %s", dent->d_name); *ext = '\0'; -- cgit From 5d3a66f0b6cc2e9fd6a5dc5815d65d6708050ccc Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 21 Jan 2011 17:34:29 +0100 Subject: remove CCommLayerServer[DBus] classes Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 9a01bf3d..2f15d50d 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -19,10 +19,9 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "abrtlib.h" -#include "Daemon.h" #include "Settings.h" #include "comm_layer_inner.h" -#include "CommLayerServer.h" +#include "CommLayerServerDBus.h" #include "MiddleWare.h" using namespace std; @@ -703,7 +702,7 @@ static void* create_report(void* arg) log("Creating report..."); crash_data_t *crash_data = NULL; CreateReport(thread_data->crash_id, thread_data->caller_uid, thread_data->force, &crash_data); - g_pCommLayer->JobDone(thread_data->peer); + send_dbus_sig_JobDone(thread_data->peer); set_client_name(NULL); /* free strduped strings */ -- cgit From 5c71e00f814f679bd6ea652eda8552f746b5f725 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 27 Jan 2011 15:59:28 +0100 Subject: preparatory changes for abrt-cli local processing change Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 2f15d50d..8b8795a2 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -781,11 +781,11 @@ void GetPluginsInfo(map_map_string_t &map_of_plugin_info) struct dirent *dent; while ((dent = readdir(dir)) != NULL) { - if (!is_regular_file(dent, PLUGINS_CONF_DIR)) - continue; char *ext = strrchr(dent->d_name, '.'); if (!ext || strcmp(ext + 1, "conf") != 0) continue; + if (!is_regular_file(dent, PLUGINS_CONF_DIR)) + continue; VERB3 log("Found %s", dent->d_name); *ext = '\0'; -- cgit From 058e0d3144b32d048c2a7637447881256e4c9997 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 1 Feb 2011 15:58:44 +0100 Subject: use run_state->children_count == 0 check for "event not conf'd" condition run_event_on_FOO() was returning -1 when it found that not even one program was run on the requested event. Which is not a very natural return value: in many cases this isn't an error. This change makes it return 0 in this case. It is ok since now we have run_state->children_count member which can be checked for 0 by those callers which want to detect this condition. Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 8b8795a2..906b1464 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -147,7 +147,7 @@ static mw_result_t CreateCrashReport(const char *dump_dir_name, run_state->logging_callback = do_log_and_update_client; res = run_event_on_dir_name(run_state, dump_dir_name, force ? "reanalyze" : "analyze"); free_run_event_state(run_state); - if (res != 0 && res != -1) /* -1 is "nothing was done", here it is ok */ + if (res != 0) { r = MW_PLUGIN_ERROR; goto ret; @@ -317,9 +317,10 @@ report_status_t Report(crash_data_t *client_report, l_state.last_line = NULL; int r = run_event_on_dir_name(run_state, dump_dir_name, event.c_str()); - if (r == -1) + if (r == 0 && run_state->children_count == 0) { l_state.last_line = xasprintf("Error: no processing is specified for event '%s'", event.c_str()); + r = -1; } if (r == 0) { -- cgit From f8c0e544a905ba42c8b550409f492081534977f5 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 10 Feb 2011 15:48:15 +0100 Subject: get rid of FILENAME_DESCRIPTION, rename "release" to "os_release" Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 906b1464..cdb5c072 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -54,7 +54,7 @@ static crash_data_t *DebugDumpToCrashReport(const char *dump_dir_name) FILENAME_KERNEL , FILENAME_PACKAGE , FILENAME_COMPONENT , - FILENAME_RELEASE , + FILENAME_OS_RELEASE , FILENAME_EXECUTABLE , NULL }; -- cgit From 3c53ecbea96ef837a64edb9fcdd4777c58dacb52 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 10 Feb 2011 18:48:32 +0100 Subject: fixes for s/release/os_release/g change Signed-off-by: Denys Vlasenko --- src/daemon/MiddleWare.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index cdb5c072..7e3f3db4 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -63,10 +63,16 @@ static crash_data_t *DebugDumpToCrashReport(const char *dump_dir_name) { if (!dd_exist(dd, *v)) { + /* Old dump dir format compat. Remove in abrt-2.1 */ + if (strcmp(*v, FILENAME_OS_RELEASE) == 0) + if (dd_exist(dd, "release")) + goto ok; + dd_close(dd); log("Important file '%s/%s' is missing", dump_dir_name, *v); return NULL; } + ok: v++; } -- cgit From a330886781635606626b3b91432525128d0e8a8f Mon Sep 17 00:00:00 2001 From: Nikola Pajkovsky Date: Mon, 7 Feb 2011 11:54:07 +0100 Subject: get rid of unused CD_FLAG_SYS Signed-off-by: Nikola Pajkovsky --- src/daemon/MiddleWare.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/daemon/MiddleWare.cpp') diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp index 7e3f3db4..2757d84f 100644 --- a/src/daemon/MiddleWare.cpp +++ b/src/daemon/MiddleWare.cpp @@ -80,10 +80,12 @@ static crash_data_t *DebugDumpToCrashReport(const char *dump_dir_name) char *events = list_possible_events(dd, NULL, ""); dd_close(dd); - add_to_crash_data_ext(crash_data, CD_EVENTS, events, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE); + add_to_crash_data_ext(crash_data, CD_EVENTS, events, + CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE); free(events); - add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE); + add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, + CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE); return crash_data; } @@ -581,10 +583,12 @@ static crash_data_t *FillCrashInfo(const char *dump_dir_name) char *events = list_possible_events(dd, NULL, ""); dd_close(dd); - add_to_crash_data_ext(crash_data, CD_EVENTS, events, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE); + add_to_crash_data_ext(crash_data, CD_EVENTS, events, + CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE); free(events); - add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE); + add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, + CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE); return crash_data; } -- cgit