diff options
author | Nikola Pajkovsky <npajkovs@redhat.com> | 2010-06-07 13:37:27 +0200 |
---|---|---|
committer | Nikola Pajkovsky <npajkovs@redhat.com> | 2010-08-17 15:18:18 +0200 |
commit | a1c6a692e955ff977616096bae3cb2ffa7a8b831 (patch) | |
tree | 39a1bd662767a26369dfd3e272a946a4d19fb5f3 /lib/plugins | |
parent | 02b874b245cf59249fb90b163ec884e2f2c4cdbe (diff) | |
download | abrt-a1c6a692e955ff977616096bae3cb2ffa7a8b831.tar.gz abrt-a1c6a692e955ff977616096bae3cb2ffa7a8b831.tar.xz abrt-a1c6a692e955ff977616096bae3cb2ffa7a8b831.zip |
get rid of std::string from mailx
Signed-off-by: Nikola Pajkovsky <npajkovs@redhat.com>
Diffstat (limited to 'lib/plugins')
-rw-r--r-- | lib/plugins/Mailx.cpp | 117 | ||||
-rw-r--r-- | lib/plugins/Mailx.h | 12 |
2 files changed, 44 insertions, 85 deletions
diff --git a/lib/plugins/Mailx.cpp b/lib/plugins/Mailx.cpp index a94a2c5c..2580bab3 100644 --- a/lib/plugins/Mailx.cpp +++ b/lib/plugins/Mailx.cpp @@ -26,26 +26,34 @@ #define MAILX_COMMAND "/bin/mailx" -CMailx::CMailx() : - m_sEmailFrom("user@localhost"), - m_sEmailTo("root@localhost"), - m_sSubject("[abrt] full crash report"), - m_bSendBinaryData(false) -{} - -static void exec_and_feed_input(uid_t uid, const char* pText, char **pArgs) +CMailx::CMailx() +{ + m_email_from = xstrdup("user@localhost"); + m_email_to = xstrdup("root@localhost"); + m_subject = xstrdup("[abrt] full crash report"); + m_send_binary_data = false; +} + +CMailx::~CMailx() +{ + free(m_email_from); + free(m_email_to); + free(m_subject); +} + +static void exec_and_feed_input(uid_t uid, const char* text, char **args) { int pipein[2]; pid_t child = fork_execv_on_steroids( EXECFLG_INPUT | EXECFLG_QUIET | EXECFLG_SETGUID, - pArgs, + args, pipein, /*unsetenv_vec:*/ NULL, /*dir:*/ NULL, uid); - full_write(pipein[1], pText, strlen(pText)); + full_write(pipein[1], text, strlen(text)); close(pipein[1]); waitpid(child, NULL, 0); /* wait for command completion */ @@ -71,70 +79,29 @@ std::string CMailx::Report(const map_crash_data_t& pCrashData, unsigned arg_size = 0; args = append_str_to_vector(args, arg_size, MAILX_COMMAND); -//TODO: move email body generation to make_descr.cpp - std::string binaryFiles, commonFiles, additionalFiles, DUPHASHFile; + char *dsc = make_dsc_mailx(pCrashData); + map_crash_data_t::const_iterator it; for (it = pCrashData.begin(); it != pCrashData.end(); it++) { - if (it->second[CD_TYPE] == CD_TXT) - { - if (it->first != CD_DUPHASH - && it->first != FILENAME_ARCHITECTURE - && it->first != FILENAME_KERNEL - && it->first != FILENAME_PACKAGE - ) { - additionalFiles += it->first; - additionalFiles += "\n-----\n"; - additionalFiles += it->second[CD_CONTENT]; - additionalFiles += "\n\n"; - } - else if (it->first == CD_DUPHASH) - { - DUPHASHFile += it->first; - DUPHASHFile += "\n-----\n"; - DUPHASHFile += it->second[CD_CONTENT]; - DUPHASHFile += "\n\n"; - } - else - { - commonFiles += it->first; - commonFiles += "\n-----\n"; - commonFiles += it->second[CD_CONTENT]; - commonFiles += "\n\n"; - } - } - if (it->second[CD_TYPE] == CD_BIN) + if (it->second[CD_TYPE] == CD_BIN && m_send_binary_data) { - binaryFiles += " -a "; - binaryFiles += it->second[CD_CONTENT]; - if (m_bSendBinaryData) - { - args = append_str_to_vector(args, arg_size, "-a"); - args = append_str_to_vector(args, arg_size, it->second[CD_CONTENT].c_str()); - } + args = append_str_to_vector(args, arg_size, "-a"); + args = append_str_to_vector(args, arg_size, it->second[CD_CONTENT].c_str()); } } - std::string emailBody = "Duplicate check\n"; - emailBody += "=====\n\n"; - emailBody += DUPHASHFile; - emailBody += "\nCommon information\n"; - emailBody += "=====\n\n"; - emailBody += commonFiles; - emailBody += "\nAdditional information\n"; - emailBody += "=====\n\n"; - emailBody += additionalFiles; - emailBody += '\n'; - args = append_str_to_vector(args, arg_size, "-s"); - args = append_str_to_vector(args, arg_size, (pArgs[0] != '\0' ? pArgs : m_sSubject.c_str())); + args = append_str_to_vector(args, arg_size, (pArgs[0] != '\0' ? pArgs : m_subject)); args = append_str_to_vector(args, arg_size, "-r"); - args = append_str_to_vector(args, arg_size, m_sEmailFrom.c_str()); - args = append_str_to_vector(args, arg_size, m_sEmailTo.c_str()); + args = append_str_to_vector(args, arg_size, m_email_from); + args = append_str_to_vector(args, arg_size, m_email_to); update_client(_("Sending an email...")); - const char *uid_str = get_crash_data_item_content(pCrashData, CD_UID).c_str(); - exec_and_feed_input(xatoi_u(uid_str), emailBody.c_str(), args); + const char *uid_str = get_crash_data_item_content_or_NULL(pCrashData, CD_UID); + exec_and_feed_input(xatoi_u(uid_str), dsc, args); + + free(dsc); while (*args) { @@ -143,7 +110,7 @@ std::string CMailx::Report(const map_crash_data_t& pCrashData, args -= arg_size; free(args); - return "Email was sent to: " + m_sEmailTo; + return ssprintf("Email was sent to: %s", m_email_to); } void CMailx::SetSettings(const map_plugin_settings_t& pSettings) @@ -155,36 +122,28 @@ void CMailx::SetSettings(const map_plugin_settings_t& pSettings) it = pSettings.find("Subject"); if (it != end) { - m_sSubject = it->second; + free(m_subject); + m_subject = xstrdup(it->second.c_str()); } it = pSettings.find("EmailFrom"); if (it != end) { - m_sEmailFrom = it->second; + free(m_email_from); + m_email_from = xstrdup(it->second.c_str()); } it = pSettings.find("EmailTo"); if (it != end) { - m_sEmailTo = it->second; + free(m_email_to); + m_email_to = xstrdup(it->second.c_str()); } it = pSettings.find("SendBinaryData"); if (it != end) { - m_bSendBinaryData = string_to_bool(it->second.c_str()); + m_send_binary_data = string_to_bool(it->second.c_str()); } } -//ok to delete? -//const map_plugin_settings_t& CMailx::GetSettings() -//{ -// m_pSettings["Subject"] = m_sSubject; -// m_pSettings["EmailFrom"] = m_sEmailFrom; -// m_pSettings["EmailTo"] = m_sEmailTo; -// m_pSettings["SendBinaryData"] = m_bSendBinaryData ? "yes" : "no"; -// -// return m_pSettings; -//} - PLUGIN_INFO(REPORTER, CMailx, "Mailx", diff --git a/lib/plugins/Mailx.h b/lib/plugins/Mailx.h index aa870ec6..326a6371 100644 --- a/lib/plugins/Mailx.h +++ b/lib/plugins/Mailx.h @@ -29,17 +29,17 @@ class CMailx : public CReporter { private: - std::string m_sEmailFrom; - std::string m_sEmailTo; - std::string m_sSubject; - bool m_bSendBinaryData; + char *m_email_from; + char *m_email_to; + char *m_subject; + bool m_send_binary_data; public: CMailx(); + ~CMailx(); virtual void SetSettings(const map_plugin_settings_t& pSettings); -//ok to delete? -// virtual const map_plugin_settings_t& GetSettings(); + virtual std::string Report(const map_crash_data_t& pCrashData, const map_plugin_settings_t& pSettings, const char *pArgs); |