Nikola,
Please review the following.
The patch does not remove the if here:
bool analyzer_has_AutoReportUIDs(const char *analyzer_name, const char* uid) { ... if ((strcmp(analyzer_name, "Kerneloops") == 0) && (strcmp(uid, "-1") == 0)) return true;
but it surely looks wrong. Why we are doing it? -- vda
diff -x '*.po' -d -urpN abrt.0/inc/abrtlib.h abrt.1/inc/abrtlib.h --- abrt.0/inc/abrtlib.h 2009-11-30 15:48:00.000000000 +0100 +++ abrt.1/inc/abrtlib.h 2009-11-30 15:58:52.044391700 +0100 @@ -193,10 +193,10 @@ char* xmalloc_sockaddr2host_noport(const char* xmalloc_sockaddr2hostonly_noport(const struct sockaddr *sa); char* xmalloc_sockaddr2dotted(const struct sockaddr *sa); char* xmalloc_sockaddr2dotted_noport(const struct sockaddr *sa); -bool getuidbyname(const char* login, uid_t *uid);
/* Random utility functions */ +uid_t getuidbyname(const char* login);
/* Returns malloc'ed block */ char *encode_base64(const void *src, int length); diff -x '*.po' -d -urpN abrt.0/lib/Utils/parse_release.cpp abrt.1/lib/Utils/parse_release.cpp --- abrt.0/lib/Utils/parse_release.cpp 2009-11-30 15:48:00.000000000 +0100 +++ abrt.1/lib/Utils/parse_release.cpp 2009-11-30 16:17:39.900963796 +0100 @@ -11,7 +11,7 @@ void parse_release(const char *pRelease, { pProduct = "Fedora"; pVersion = "rawhide"; - VERB3 log("%s:Version is '%s' and product is '%s'",__func__, pVersion.c_str(), pProduct.c_str()); + VERB3 log("%s: version:'%s' product:'%s'", __func__, pVersion.c_str(), pProduct.c_str()); return; } if (strstr(pRelease, "Fedora")) @@ -36,5 +36,5 @@ void parse_release(const char *pRelease, } space++; } - VERB3 log("%s:Version is '%s' and product is '%s'",__func__, pVersion.c_str(), pProduct.c_str()); + VERB3 log("%s: version:'%s' product:'%s'", __func__, pVersion.c_str(), pProduct.c_str()); } diff -x '*.po' -d -urpN abrt.0/lib/Utils/xfuncs.cpp abrt.1/lib/Utils/xfuncs.cpp --- abrt.0/lib/Utils/xfuncs.cpp 2009-11-30 15:48:00.000000000 +0100 +++ abrt.1/lib/Utils/xfuncs.cpp 2009-11-30 15:59:57.676391802 +0100 @@ -369,13 +369,11 @@ bool string_to_bool(const char *s) return false; }
-bool getuidbyname(const char* login, uid_t *uid) +uid_t getuidbyname(const char* login) { struct passwd* pwd = getpwnam(login); if (pwd == NULL) - return false; + return -1;
- *uid = pwd->pw_uid; - return true; + return pwd->pw_uid; } - diff -x '*.po' -d -urpN abrt.0/src/Daemon/Daemon.cpp abrt.1/src/Daemon/Daemon.cpp --- abrt.0/src/Daemon/Daemon.cpp 2009-11-30 15:48:00.000000000 +0100 +++ abrt.1/src/Daemon/Daemon.cpp 2009-11-30 16:16:01.949713667 +0100 @@ -487,41 +487,44 @@ static gboolean handle_inotify_cb(GIOCha case MW_OK: log("New crash, saving"); RunActionsAndReporters(crashinfo[CD_MWDDD][CD_CONTENT].c_str()); - /* Fall through to "send dbus signal" */ + /* Fall through */ case MW_REPORTED: case MW_OCCURED: - if (res != MW_OK) - log("Already saved crash, just sending dbus signal"); - /* Send dbus signal */ { - // I don't see any usable usecase for other plugin to be able automatic report. - if (analyzer_has_AutoReportUIDs(crashinfo[CD_MWANALYZER][CD_CONTENT].c_str(), crashinfo[CD_UID][CD_CONTENT].c_str())) + if (res != MW_OK) + log("Already saved crash, just sending dbus signal"); + + const char *analyzer = crashinfo[CD_MWANALYZER][CD_CONTENT].c_str(); + const char *uid_str = crashinfo[CD_UID][CD_CONTENT].c_str(); + + /* Autoreport it if configured to do so */ + if (analyzer_has_AutoReportUIDs(analyzer, uid_str)) { + VERB3 log("Create autoreport for user with uid %s", uid_str); map_crash_report_t crash_report; - VERB3 log("Create autoreport for user with uid %s",crashinfo[CD_UID][CD_CONTENT].c_str()); - mw_result_t crash_result = CreateCrashReport(crashinfo[CD_UUID][CD_CONTENT].c_str(), crashinfo[CD_UID][CD_CONTENT].c_str(), 0, crash_report); + mw_result_t crash_result = CreateCrashReport(crashinfo[CD_UUID][CD_CONTENT].c_str(), uid_str, 0, crash_report); if (crash_result == MW_OK) { - map_analyzer_actions_and_reporters_t::const_iterator it = g_settings_mapAnalyzerActionsAndReporters.find("Kerneloops"); + map_analyzer_actions_and_reporters_t::const_iterator it = g_settings_mapAnalyzerActionsAndReporters.find(analyzer); map_analyzer_actions_and_reporters_t::const_iterator end = g_settings_mapAnalyzerActionsAndReporters.end(); if (it != end) { vector_pair_string_string_t keys = it->second; - - uint32_t size = keys.size(); - for (uint32_t ii = 0; ii < size; ii++) + unsigned size = keys.size(); + for (unsigned ii = 0; ii < size; ii++) { autoreport(keys[ii], crash_report); } } } } - const char *uid_str = analyzer_has_InformAllUsers(crashinfo[CD_MWANALYZER][CD_CONTENT].c_str()) - ? NULL - : crashinfo[CD_UID][CD_CONTENT].c_str(); + + /* Send dbus signal */ + if (analyzer_has_InformAllUsers(analyzer)) + uid_str = NULL; g_pCommLayer->Crash(crashinfo[CD_PACKAGE][CD_CONTENT].c_str(), uid_str); + break; } - break; case MW_BLACKLISTED: case MW_CORRUPTED: case MW_PACKAGE_ERROR: diff -x '*.po' -d -urpN abrt.0/src/Daemon/MiddleWare.cpp abrt.1/src/Daemon/MiddleWare.cpp --- abrt.0/src/Daemon/MiddleWare.cpp 2009-11-30 15:48:00.000000000 +0100 +++ abrt.1/src/Daemon/MiddleWare.cpp 2009-11-30 16:19:01.455715059 +0100 @@ -656,7 +656,6 @@ bool analyzer_has_InformAllUsers(const c
bool analyzer_has_AutoReportUIDs(const char *analyzer_name, const char* uid) { - CAnalyzer* analyzer = g_pPluginManager->GetAnalyzer(analyzer_name); if (!analyzer) { @@ -675,16 +674,15 @@ bool analyzer_has_AutoReportUIDs(const c vector_string_t logins; parse_args(it->second.c_str(), logins);
- uint32_t size = logins.size(); + unsigned size = logins.size(); if (size == 0) return false;
- uid_t id; - for (uint32_t ii = 0; ii < size; ii++) + for (unsigned ii = 0; ii < size; ii++) { - if (!getuidbyname(logins[ii].c_str(), &id)) + uid_t id = getuidbyname(logins[ii].c_str()) + if (id == (uid_t)-1) continue; - if (strcmp(uid, to_string(id).c_str()) == 0) return true; } diff -x '*.po' -d -urpN abrt.0/src/Daemon/PluginManager.cpp abrt.1/src/Daemon/PluginManager.cpp --- abrt.0/src/Daemon/PluginManager.cpp 2009-11-30 15:48:00.000000000 +0100 +++ abrt.1/src/Daemon/PluginManager.cpp 2009-11-30 15:58:12.812407269 +0100 @@ -205,11 +205,10 @@ void CPluginManager::RegisterPlugin(cons CPlugin* plugin = abrt_plugin->second->PluginNew(); map_plugin_settings_t pluginSettings;
- if ((strcmp(pName, "Kerneloops") == 0) - || (strcmp(pName, "KerneloopsReporter") == 0) - || (strcmp(pName, "KerneloopsScanner") == 0) - ) - { + if (strcmp(pName, "Kerneloops") == 0 + || strcmp(pName, "KerneloopsReporter") == 0 + || strcmp(pName, "KerneloopsScanner") == 0 + ) { LoadPluginSettings(PLUGINS_CONF_DIR"/Kerneloops."PLUGINS_CONF_EXTENSION, pluginSettings); VERB3 log("Load kerneloops.conf settings"); }