diff options
author | Karel Klic <kklic@redhat.com> | 2009-12-14 10:41:51 +0100 |
---|---|---|
committer | Karel Klic <kklic@redhat.com> | 2009-12-14 10:41:51 +0100 |
commit | a24d2906c51e3740e6e0acf8f0093827b4e35bc3 (patch) | |
tree | 1022bf70766a88d45dc71d6ea413ccd0fa14d07c /src/Daemon | |
parent | b7ea0e53e3375de6298b2f510302f75ebef4be4e (diff) | |
parent | 42f0375d09931903965b36c87f17f805def956bf (diff) | |
download | abrt-a24d2906c51e3740e6e0acf8f0093827b4e35bc3.tar.gz abrt-a24d2906c51e3740e6e0acf8f0093827b4e35bc3.tar.xz abrt-a24d2906c51e3740e6e0acf8f0093827b4e35bc3.zip |
Merge branch 'master' of git://git.fedorahosted.org/git/abrt
Diffstat (limited to 'src/Daemon')
-rw-r--r-- | src/Daemon/CommLayerServer.h | 4 | ||||
-rw-r--r-- | src/Daemon/CommLayerServerDBus.cpp | 45 | ||||
-rw-r--r-- | src/Daemon/CommLayerServerDBus.h | 4 | ||||
-rw-r--r-- | src/Daemon/CommLayerServerSocket.cpp | 4 | ||||
-rw-r--r-- | src/Daemon/CommLayerServerSocket.h | 8 | ||||
-rw-r--r-- | src/Daemon/CrashWatcher.cpp | 12 | ||||
-rw-r--r-- | src/Daemon/CrashWatcher.h | 2 | ||||
-rw-r--r-- | src/Daemon/Daemon.cpp | 10 | ||||
-rw-r--r-- | src/Daemon/Makefile.am | 3 | ||||
-rw-r--r-- | src/Daemon/MiddleWare.cpp | 22 | ||||
-rw-r--r-- | src/Daemon/PluginManager.cpp | 18 | ||||
-rw-r--r-- | src/Daemon/RPM.cpp | 2 | ||||
-rwxr-xr-x | src/Daemon/abrt-debuginfo-install | 2 | ||||
-rw-r--r-- | src/Daemon/abrt.conf | 2 | ||||
-rw-r--r-- | src/Daemon/abrtd.8 | 25 |
15 files changed, 95 insertions, 68 deletions
diff --git a/src/Daemon/CommLayerServer.h b/src/Daemon/CommLayerServer.h index 21c1b304..367c0956 100644 --- a/src/Daemon/CommLayerServer.h +++ b/src/Daemon/CommLayerServer.h @@ -17,8 +17,8 @@ class CCommLayerServer { virtual void JobDone(const char* pDest, const char* pUUID) = 0; virtual void QuotaExceed(const char* str) {} - virtual void Update(const std::string& pMessage, const char* peer, uint64_t pJobID) {}; - virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID) {}; + virtual void Update(const char* pMessage, const char* peer, uint64_t pJobID) {}; + virtual void Warning(const char* pMessage, const char* peer, uint64_t pJobID) {}; }; #endif diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index 27a18c24..9222c594 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -88,23 +88,21 @@ void CCommLayerServerDBus::JobDone(const char* peer, const char* pUUID) send_flush_and_unref(msg); } -void CCommLayerServerDBus::Update(const std::string& pMessage, const char* peer, uint64_t job_id) +void CCommLayerServerDBus::Update(const char* pMessage, const char* peer, uint64_t job_id) { DBusMessage* msg = new_signal_msg("Update", peer); - const char* c_message = pMessage.c_str(); dbus_message_append_args(msg, - DBUS_TYPE_STRING, &c_message, + DBUS_TYPE_STRING, &pMessage, DBUS_TYPE_UINT64, &job_id, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); send_flush_and_unref(msg); } -void CCommLayerServerDBus::Warning(const std::string& pMessage, const char* peer, uint64_t job_id) +void CCommLayerServerDBus::Warning(const char* pMessage, const char* peer, uint64_t job_id) { DBusMessage* msg = new_signal_msg("Warning", peer); - const char* c_message = pMessage.c_str(); dbus_message_append_args(msg, - DBUS_TYPE_STRING, &c_message, + DBUS_TYPE_STRING, &pMessage, DBUS_TYPE_UINT64, &job_id, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); send_flush_and_unref(msg); @@ -137,9 +135,9 @@ static int handle_GetCrashInfos(DBusMessage* call, DBusMessage* reply) long unix_uid = get_remote_uid(call); vector_crash_infos_t argout1 = GetCrashInfos(to_string(unix_uid).c_str()); - DBusMessageIter iter; - dbus_message_iter_init_append(reply, &iter); - store_val(&iter, argout1); + DBusMessageIter out_iter; + dbus_message_iter_init_append(reply, &out_iter); + store_val(&out_iter, argout1); send_flush_and_unref(reply); return 0; @@ -315,7 +313,11 @@ static int handle_DeleteDebugDump(DBusMessage* call, DBusMessage* reply) } long unix_uid = get_remote_uid(call); - DeleteDebugDump(argin1, to_string(unix_uid).c_str()); + int32_t result = DeleteDebugDump(argin1, to_string(unix_uid).c_str()); + + DBusMessageIter out_iter; + dbus_message_iter_init_append(reply, &out_iter); + store_val(&out_iter, result); send_flush_and_unref(reply); return 0; @@ -325,9 +327,9 @@ static int handle_GetPluginsInfo(DBusMessage* call, DBusMessage* reply) { vector_map_string_t plugins_info = g_pPluginManager->GetPluginsInfo(); - DBusMessageIter iter; - dbus_message_iter_init_append(reply, &iter); - store_val(&iter, plugins_info); + DBusMessageIter out_iter; + dbus_message_iter_init_append(reply, &out_iter); + store_val(&out_iter, plugins_info); send_flush_and_unref(reply); return 0; @@ -350,9 +352,10 @@ static int handle_GetPluginSettings(DBusMessage* call, DBusMessage* reply) VERB1 log("got %s('%s') call from uid %ld", "GetPluginSettings", PluginName, unix_uid); map_plugin_settings_t plugin_settings = g_pPluginManager->GetPluginSettings(PluginName, to_string(unix_uid).c_str()); - DBusMessageIter iter; - dbus_message_iter_init_append(reply, &iter); - store_val(&iter, plugin_settings); + DBusMessageIter out_iter; + dbus_message_iter_init_append(reply, &out_iter); + store_val(&out_iter, plugin_settings); + send_flush_and_unref(reply); return 0; } @@ -434,9 +437,10 @@ static int handle_GetSettings(DBusMessage* call, DBusMessage* reply) { map_abrt_settings_t result = GetSettings(); - DBusMessageIter iter; - dbus_message_iter_init_append(reply, &iter); - store_val(&iter, result); + DBusMessageIter out_iter; + dbus_message_iter_init_append(reply, &out_iter); + store_val(&out_iter, result); + send_flush_and_unref(reply); return 0; } @@ -540,7 +544,8 @@ static void handle_dbus_err(bool error_flag, DBusError *err) return; error_msg_and_die( "Error requesting DBus name %s, possible reasons: " - "abrt run by non-root; dbus config is incorrect", + "abrt run by non-root; dbus config is incorrect; " + "or dbus daemon needs to be restarted to reload dbus config", ABRTD_DBUS_NAME); } diff --git a/src/Daemon/CommLayerServerDBus.h b/src/Daemon/CommLayerServerDBus.h index f159c732..9bd77666 100644 --- a/src/Daemon/CommLayerServerDBus.h +++ b/src/Daemon/CommLayerServerDBus.h @@ -15,8 +15,8 @@ class CCommLayerServerDBus virtual void JobDone(const char* pDest, const char* pUUID); virtual void QuotaExceed(const char* str); - virtual void Update(const std::string& pMessage, const char* peer, uint64_t pJobID); - virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID); + virtual void Update(const char* pMessage, const char* peer, uint64_t pJobID); + virtual void Warning(const char* pMessage, const char* peer, uint64_t pJobID); }; #endif diff --git a/src/Daemon/CommLayerServerSocket.cpp b/src/Daemon/CommLayerServerSocket.cpp index ee775c6d..0c5f2e31 100644 --- a/src/Daemon/CommLayerServerSocket.cpp +++ b/src/Daemon/CommLayerServerSocket.cpp @@ -40,7 +40,7 @@ std::string CCommLayerServerSocket::GetSenderUID(int pSenderSocket) socklen_t len = sizeof(creds); if (getsockopt(pSenderSocket, SOL_SOCKET, SO_PEERCRED, &creds, &len) == -1) { - throw CABRTException(EXCEP_ERROR, "CCommLayerServerSocket::GetSenderUID(): Error can get sender uid."); + throw CABRTException(EXCEP_ERROR, "CCommLayerServerSocket::GetSenderUID(): error getting sender uid"); } return to_string(creds.uid); } @@ -219,7 +219,7 @@ vector_crash_infos_t CCommLayerServerSocket::GetCrashInfos(const std::string &pS } //reimplement as CreateReportThread(...)? -//map_crash_report_t CCommLayerServerSocket::CreateReport(const std::string &pUUID,const std::string &pSender) +//map_crash_report_t CCommLayerServerSocket::CreateReport(const std::string &pUUID, const std::string &pSender) //{ // map_crash_report_t crashReport; // crashReport = ::CreateReport(pUUID, pSender); diff --git a/src/Daemon/CommLayerServerSocket.h b/src/Daemon/CommLayerServerSocket.h index d1f464cc..753b67af 100644 --- a/src/Daemon/CommLayerServerSocket.h +++ b/src/Daemon/CommLayerServerSocket.h @@ -26,9 +26,9 @@ class CCommLayerServerSocket : public CCommLayerServer CCommLayerServerSocket(); virtual ~CCommLayerServerSocket(); - virtual vector_crash_infos_t GetCrashInfos(const std::string& pSender); - virtual report_status_t Report(const map_crash_report_t& pReport, const std::string& pSender); - virtual void DeleteDebugDump(const std::string& pUUID, const std::string& pSender); + virtual vector_crash_infos_t GetCrashInfos(const char *pSender); + virtual report_status_t Report(const map_crash_report_t& pReport, const char *pSender); + virtual void DeleteDebugDump(const char *pUUID, const char *pSender); - virtual void Crash(const std::string& arg1); + virtual void Crash(const char *arg1); }; diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp index 1606f86d..88c058b0 100644 --- a/src/Daemon/CrashWatcher.cpp +++ b/src/Daemon/CrashWatcher.cpp @@ -73,6 +73,8 @@ vector_crash_infos_t GetCrashInfos(const char *pUID) /* Deletes both DB record and dump dir */ DeleteDebugDump(uuid, uid); break; + default: + break; } } } @@ -191,7 +193,7 @@ int CreateReportThread(const char* pUUID, const char* pUID, int force, const cha /* Remove dump dir and its DB record */ -void DeleteDebugDump(const char *pUUID, const char *pUID) +int DeleteDebugDump(const char *pUUID, const char *pUID) { try { @@ -201,12 +203,18 @@ void DeleteDebugDump(const char *pUUID, const char *pUID) database->DeleteRow(pUUID, pUID); database->DisConnect(); - delete_debug_dump_dir(row.m_sDebugDumpDir.c_str()); + const char *dump_dir = row.m_sDebugDumpDir.c_str(); + if (dump_dir[0] != '\0') + { + delete_debug_dump_dir(dump_dir); + return 0; /* success */ + } } catch (CABRTException& e) { error_msg("%s", e.what()); } + return -1; /* failure */ } void DeleteDebugDump_by_dir(const char *dump_dir) diff --git a/src/Daemon/CrashWatcher.h b/src/Daemon/CrashWatcher.h index a8064367..8d56c4ec 100644 --- a/src/Daemon/CrashWatcher.h +++ b/src/Daemon/CrashWatcher.h @@ -51,7 +51,7 @@ class CCrashWatcher vector_crash_infos_t GetCrashInfos(const char *pUID); int CreateReportThread(const char* pUUID, const char* pUID, int force, const char* pSender); map_crash_report_t CreateReport(const char* pUUID, const char* pUID, int force); -void DeleteDebugDump(const char *pUUID, const char *pUID); +int DeleteDebugDump(const char *pUUID, const char *pUID); void DeleteDebugDump_by_dir(const char *dump_dir); #endif diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp index 54fc93f4..3971a2cc 100644 --- a/src/Daemon/Daemon.cpp +++ b/src/Daemon/Daemon.cpp @@ -64,7 +64,7 @@ * "Please report this crash": calls Report() of all registered reporter plugins. * Returns report_status_t (map_vector_string_t) - the status of each call. * 2nd parameter is the contents of user's abrt.conf. - * - DeleteDebugDump(UUID): delete corresponding /var/cache/abrt/DIR. Returns bool + * - DeleteDebugDump(UUID): delete it from DB and delete corresponding /var/cache/abrt/DIR * - GetPluginsInfo(): returns vector_map_string_t * - GetPluginSettings(PluginName): returns map_plugin_settings_t (map_string_t) * - SetPluginSettings(PluginName, map_plugin_settings_t): returns void @@ -456,6 +456,12 @@ static gboolean handle_inotify_cb(GIOChannel *gio, GIOCondition condition, gpoin continue; } +//TODO: make it possible to detect when ccpp didn't finish dumping yet. +//We are seeing it *before* ccpp finished, and it can take LONG time +//(users saw 100+ seconds). +//This floods syslog with "Lock file 'XXXXXX' is locked by process NNN" +//Maybe ccpp should use XXXXXX.new name for incomplete dumps +//and abrtd should watch for renames XXXXXX.new -> XXXXXX? log("Directory '%s' creation detected", name); std::string worst_dir; @@ -667,7 +673,7 @@ int main(int argc, char** argv) int opt; int parent_pid = getpid(); - setlocale(LC_ALL,""); + setlocale(LC_ALL, ""); #if ENABLE_NLS bindtextdomain(PACKAGE, LOCALEDIR); diff --git a/src/Daemon/Makefile.am b/src/Daemon/Makefile.am index fc4f5e20..18fcd816 100644 --- a/src/Daemon/Makefile.am +++ b/src/Daemon/Makefile.am @@ -26,7 +26,8 @@ abrtd_CPPFLAGS = \ $(DBUS_CFLAGS) \ $(XMLRPC_CFLAGS) $(XMLRPC_CLIENT_CFLAGS) \ $(ENABLE_SOCKET_OR_DBUS) \ - -D_GNU_SOURCE + -D_GNU_SOURCE \ + -Wall abrtd_LDADD = \ ../../lib/Utils/libABRTUtils.la \ ../../lib/Utils/libABRTdUtils.la \ diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp index 8528f644..5235c172 100644 --- a/src/Daemon/MiddleWare.cpp +++ b/src/Daemon/MiddleWare.cpp @@ -348,7 +348,7 @@ void RunActionsAndReporters(const char *pDebugDumpDir) map_crash_report_t crashReport; DebugDumpToCrashReport(pDebugDumpDir, crashReport); VERB2 log("%s.Report(...)", it_ar->first.c_str()); - reporter->Report(crashReport, plugin_settings, it_ar->second); + reporter->Report(crashReport, plugin_settings, it_ar->second.c_str()); } else if (tp == ACTION) { @@ -427,12 +427,12 @@ report_status_t Report(const map_crash_report_t& pCrashReport, std::string packageNVR = pCrashReport.find(FILENAME_PACKAGE)->second[CD_CONTENT]; std::string packageName = packageNVR.substr(0, packageNVR.rfind("-", packageNVR.rfind("-") - 1)); - // Save comments and how to reproduciton + // Save comment and "how to reproduce" map_crash_report_t::const_iterator it_comment = pCrashReport.find(CD_COMMENT); map_crash_report_t::const_iterator it_reproduce = pCrashReport.find(CD_REPRODUCE); - std::string pDumpDir = getDebugDumpDir(UUID.c_str(), UID.c_str()); - + if (it_comment != pCrashReport.end() || it_reproduce != pCrashReport.end()) { + std::string pDumpDir = getDebugDumpDir(UUID.c_str(), UID.c_str()); CDebugDump dd; dd.Open(pDumpDir.c_str()); if (it_comment != pCrashReport.end()) @@ -490,7 +490,7 @@ report_status_t Report(const map_crash_report_t& pCrashReport, } #endif map_plugin_settings_t plugin_settings = pSettings[pluginName]; - std::string res = reporter->Report(pCrashReport, plugin_settings, it_r->second); + std::string res = reporter->Report(pCrashReport, plugin_settings, it_r->second.c_str()); #if 0 /* Using ~user/.abrt/ is bad wrt security */ if (home != "") @@ -498,15 +498,15 @@ report_status_t Report(const map_crash_report_t& pCrashReport, reporter->SetSettings(oldSettings); } #endif - ret[pluginName].push_back("1"); - ret[pluginName].push_back(res); + ret[pluginName].push_back("1"); // REPORT_STATUS_IDX_FLAG + ret[pluginName].push_back(res); // REPORT_STATUS_IDX_MSG message += res + "\n"; } } catch (CABRTException& e) { - ret[pluginName].push_back("0"); - ret[pluginName].push_back(e.what()); + ret[pluginName].push_back("0"); // REPORT_STATUS_IDX_FLAG + ret[pluginName].push_back(e.what()); // REPORT_STATUS_IDX_MSG update_client("Reporting via '%s' was not successful: %s", pluginName.c_str(), e.what()); } } @@ -604,6 +604,8 @@ static mw_result_t SavePackageDescriptionToDebugDump(const char *pExecutable, } std::string description = GetDescription(packageName.c_str()); +//TODO: if executable in /usr/bin/python, /bin/sh and such, +//we need to extract component using argv[1] std::string component = GetComponent(pExecutable); try @@ -688,7 +690,7 @@ void autoreport(const pair_string_string_t& reporter_options, const map_crash_re } map_plugin_settings_t plugin_settings; - std::string res = reporter->Report(crash_report, plugin_settings, reporter_options.second); + std::string res = reporter->Report(crash_report, plugin_settings, reporter_options.second.c_str()); } /** diff --git a/src/Daemon/PluginManager.cpp b/src/Daemon/PluginManager.cpp index 58151b29..82f22e85 100644 --- a/src/Daemon/PluginManager.cpp +++ b/src/Daemon/PluginManager.cpp @@ -286,11 +286,11 @@ CAnalyzer* CPluginManager::GetAnalyzer(const char *pName) map_plugins_t::iterator plugin = m_mapPlugins.find(pName); if (plugin == m_mapPlugins.end()) { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName)); + throw CABRTException(EXCEP_PLUGIN, "Plugin '%s' is not registered", pName); } if (m_mapABRTPlugins[pName]->GetType() != ANALYZER) { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not an analyzer plugin", pName)); + throw CABRTException(EXCEP_PLUGIN, "Plugin '%s' is not an analyzer plugin", pName); } return (CAnalyzer*)(plugin->second); } @@ -300,11 +300,11 @@ CReporter* CPluginManager::GetReporter(const char *pName) map_plugins_t::iterator plugin = m_mapPlugins.find(pName); if (plugin == m_mapPlugins.end()) { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName)); + throw CABRTException(EXCEP_PLUGIN, "Plugin '%s' is not registered", pName); } if (m_mapABRTPlugins[pName]->GetType() != REPORTER) { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not a reporter plugin", pName)); + throw CABRTException(EXCEP_PLUGIN, "Plugin '%s' is not a reporter plugin", pName); } return (CReporter*)(plugin->second); } @@ -314,11 +314,11 @@ CAction* CPluginManager::GetAction(const char *pName) map_plugins_t::iterator plugin = m_mapPlugins.find(pName); if (plugin == m_mapPlugins.end()) { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName)); + throw CABRTException(EXCEP_PLUGIN, "Plugin '%s' is not registered", pName); } if (m_mapABRTPlugins[pName]->GetType() != ACTION) { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not an action plugin", pName)); + throw CABRTException(EXCEP_PLUGIN, "Plugin '%s' is not an action plugin", pName); } return (CAction*)(plugin->second); } @@ -328,11 +328,11 @@ CDatabase* CPluginManager::GetDatabase(const char *pName) map_plugins_t::iterator plugin = m_mapPlugins.find(pName); if (plugin == m_mapPlugins.end()) { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName)); + throw CABRTException(EXCEP_PLUGIN, "Plugin '%s' is not registered", pName); } if (m_mapABRTPlugins[pName]->GetType() != DATABASE) { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not a database plugin", pName)); + throw CABRTException(EXCEP_PLUGIN, "Plugin '%s' is not a database plugin", pName); } return (CDatabase*)(plugin->second); } @@ -342,7 +342,7 @@ plugin_type_t CPluginManager::GetPluginType(const char *pName) map_plugins_t::iterator plugin = m_mapPlugins.find(pName); if (plugin == m_mapPlugins.end()) { - throw CABRTException(EXCEP_PLUGIN, ssprintf("Plugin '%s' is not registered", pName)); + throw CABRTException(EXCEP_PLUGIN, "Plugin '%s' is not registered", pName); } return m_mapABRTPlugins[pName]->GetType(); } diff --git a/src/Daemon/RPM.cpp b/src/Daemon/RPM.cpp index 4a819b5d..b3cf2c1c 100644 --- a/src/Daemon/RPM.cpp +++ b/src/Daemon/RPM.cpp @@ -146,7 +146,7 @@ std::string GetComponent(const char* pFileName) if (header != NULL) { rpmtd td = rpmtdNew(); - headerGet(header,RPMTAG_SOURCERPM, td, HEADERGET_DEFAULT); + headerGet(header, RPMTAG_SOURCERPM, td, HEADERGET_DEFAULT); const char * srpm = rpmtdGetString(td); if (srpm != NULL) { diff --git a/src/Daemon/abrt-debuginfo-install b/src/Daemon/abrt-debuginfo-install index 23379b46..6278b63c 100755 --- a/src/Daemon/abrt-debuginfo-install +++ b/src/Daemon/abrt-debuginfo-install @@ -148,7 +148,7 @@ print_package_names() { yumopts="-C" echo "`count_words $missing_debuginfo_files` missing debuginfos, getting package list from cache" >&2 else - echo "`count_words $missing_debuginfo_files` missing debuginfos, getting package list" >&2 + echo "`count_words $missing_debuginfo_files` missing debuginfos, getting package list from repositories" >&2 fi local cmd="yum $yumopts --enablerepo=*debuginfo* --quiet provides $missing_debuginfo_files" echo "$cmd" >"yum_provides.$1.OUT" diff --git a/src/Daemon/abrt.conf b/src/Daemon/abrt.conf index 028f582d..ee034a6c 100644 --- a/src/Daemon/abrt.conf +++ b/src/Daemon/abrt.conf @@ -4,7 +4,7 @@ [ Common ] # With this option set to "yes", # only crashes in signed packages will be analyzed. -OpenGPGCheck = no +OpenGPGCheck = yes # GPG keys OpenGPGPublicKeys = /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora # Blacklisted packages diff --git a/src/Daemon/abrtd.8 b/src/Daemon/abrtd.8 index b106041d..150f0c3d 100644 --- a/src/Daemon/abrtd.8 +++ b/src/Daemon/abrtd.8 @@ -1,10 +1,10 @@ -.TH abrt "8" "28 May 2009" "" +.TH abrtd "8" "28 May 2009" "" .SH NAME -abrt \- an automated bug-reporting tool +abrtd \- automated bug reporting tool's daemon .SH SYNOPSIS -.B abrt [ -d ] +.B abrtd [-dsv[v]...] .SH DESCRIPTION -.I abrt +.I abrtd is a daemon that watches for application crashes. When a crash occurs, it collects the crash data (core file, application's command line etc.) and takes action according to the type of application that @@ -17,17 +17,22 @@ respective plugins. .SH OPTIONS .TP - .B "\-d" -This option causes -.I abrt -to print more debugging information when the daemon is started. +Stay in the foreground and log to standard error. +.TP +.B "\-s" + +Log to system log even with option -d. +.TP +.B "\-v" + +Log more detailed debugging information. .SH CAVEATS -When you use some other crash-catching tool, specific for an application +When you use some other crash-catching tool specific for an application or an application type (for example BugBuddy for GNOME applications), crashes of this type will be handled by that tool and -not by \fIabrt\fP. If you want \fIabrt\fP to handle these crashes, +not by \fIabrtd\fP. If you want \fIabrtd\fP to handle these crashes, turn off the higher-level crash-catching tool. .SH "SEE ALSO" .IR abrt.conf (5), |