diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-22 13:35:32 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-22 13:35:32 +0200 |
commit | 651bfa76ac8c6d5d78ac345e4a37835c7c583992 (patch) | |
tree | 345ea514fe119b234a375857e624d0a3acefc2d2 /src/Daemon | |
parent | 86d228369466b6869b50f22afc49a4e028fa2fc9 (diff) | |
download | abrt-651bfa76ac8c6d5d78ac345e4a37835c7c583992.tar.gz abrt-651bfa76ac8c6d5d78ac345e4a37835c7c583992.tar.xz abrt-651bfa76ac8c6d5d78ac345e4a37835c7c583992.zip |
abrtd: remove accesses to ~user/.abrt
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Daemon')
-rw-r--r-- | src/Daemon/MiddleWare.cpp | 36 | ||||
-rw-r--r-- | src/Daemon/PluginManager.cpp | 119 |
2 files changed, 82 insertions, 73 deletions
diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp index 01ca58c8..2ccd5890 100644 --- a/src/Daemon/MiddleWare.cpp +++ b/src/Daemon/MiddleWare.cpp @@ -337,9 +337,6 @@ report_status_t Report(const map_crash_report_t& pCrashReport, const std::string& pUID) { report_status_t ret; - std::string key; - std::string message; - CDebugDump dd; if (!CheckReport(pCrashReport)) { @@ -350,25 +347,28 @@ report_status_t Report(const map_crash_report_t& pCrashReport, std::string UID = pCrashReport.find(CD_MWUID)->second[CD_CONTENT]; std::string UUID = pCrashReport.find(CD_MWUUID)->second[CD_CONTENT]; std::string packageNVR = pCrashReport.find(FILENAME_PACKAGE)->second[CD_CONTENT]; - std::string packageName = packageNVR.substr(0, packageNVR.rfind("-", packageNVR.rfind("-") - 1 )); + std::string packageName = packageNVR.substr(0, packageNVR.rfind("-", packageNVR.rfind("-") - 1)); // Save comments and how to reproduciton 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,UID); - dd.Open(pDumpDir); - if ( it_comment != pCrashReport.end() ) - { - dd.SaveText(FILENAME_COMMENT, it_comment->second[CD_CONTENT]); - } - if ( it_reproduce != pCrashReport.end() ) { - dd.SaveText(FILENAME_REPRODUCE, it_reproduce->second[CD_CONTENT]); + CDebugDump dd; + dd.Open(pDumpDir); + if (it_comment != pCrashReport.end()) + { + dd.SaveText(FILENAME_COMMENT, it_comment->second[CD_CONTENT]); + } + if (it_reproduce != pCrashReport.end()) + { + dd.SaveText(FILENAME_REPRODUCE, it_reproduce->second[CD_CONTENT]); + } } - dd.Close(); + // analyzer with package name (CCpp:xrog-x11-app) has higher priority - key = analyzer + ":" + packageName; + std::string key = analyzer + ":" + packageName; map_analyzer_actions_and_reporters_t::iterator keyPtr = s_mapAnalyzerActionsAndReporters.find(key); if (keyPtr == s_mapAnalyzerActionsAndReporters.end()) { @@ -376,6 +376,7 @@ report_status_t Report(const map_crash_report_t& pCrashReport, keyPtr = s_mapAnalyzerActionsAndReporters.find(analyzer); } + std::string message; if (keyPtr != s_mapAnalyzerActionsAndReporters.end()) { vector_pair_string_string_t::iterator it_r = keyPtr->second.begin(); @@ -387,10 +388,10 @@ report_status_t Report(const map_crash_report_t& pCrashReport, if (g_pPluginManager->GetPluginType(pluginName) == REPORTER) { CReporter* reporter = g_pPluginManager->GetReporter(pluginName); +#if 0 /* Using ~user/.abrt/ is bad wrt security */ std::string home = ""; map_plugin_settings_t oldSettings; map_plugin_settings_t newSettings; - std::string res; if (pUID != "") { @@ -405,14 +406,15 @@ report_status_t Report(const map_crash_report_t& pCrashReport, } } } +#endif + std::string res = reporter->Report(pCrashReport, it_r->second); - res = reporter->Report(pCrashReport, it_r->second); - +#if 0 /* Using ~user/.abrt/ is bad wrt security */ if (home != "") { reporter->SetSettings(oldSettings); } - +#endif ret[pluginName].push_back("1"); ret[pluginName].push_back(res); message += res + "\n"; diff --git a/src/Daemon/PluginManager.cpp b/src/Daemon/PluginManager.cpp index bd5727e0..2363308a 100644 --- a/src/Daemon/PluginManager.cpp +++ b/src/Daemon/PluginManager.cpp @@ -376,66 +376,73 @@ void CPluginManager::SetPluginSettings(const std::string& pName, const map_plugin_settings_t& pSettings) { map_abrt_plugins_t::iterator abrt_plugin = m_mapABRTPlugins.find(pName); - if (abrt_plugin != m_mapABRTPlugins.end()) + if (abrt_plugin == m_mapABRTPlugins.end()) { - map_plugins_t::iterator plugin = m_mapPlugins.find(pName); - if (plugin != m_mapPlugins.end()) - { - plugin->second->SetSettings(pSettings); + return; + } + map_plugins_t::iterator plugin = m_mapPlugins.find(pName); + if (plugin == m_mapPlugins.end()) + { + return; + } + plugin->second->SetSettings(pSettings); - if (abrt_plugin->second->GetType() == REPORTER) - { - std::string home = get_home_dir(atoi(pUID.c_str())); - if (home != "") - { - std::string confDir = home + "/.abrt"; - std::string confPath = confDir + "/" + pName + "."PLUGINS_CONF_EXTENSION; - uid_t uid = atoi(pUID.c_str()); - struct passwd* pw = getpwuid(uid); - gid_t gid = pw ? pw->pw_gid : uid; - - struct stat buf; - if (stat(confDir.c_str(), &buf) != 0) - { - if (mkdir(confDir.c_str(), 0700) == -1) - { - perror_msg("Can't create dir '%s'", confDir.c_str()); - return; - } - if (chmod(confDir.c_str(), 0700) == -1) - { - perror_msg("Can't change mod of dir '%s'", confDir.c_str()); - return; - } - if (chown(confDir.c_str(), uid, gid) == -1) - { - perror_msg("Can't change '%s' ownership to %u:%u", confPath.c_str(), (int)uid, (int)gid); - return; - } - - } - else if (!S_ISDIR(buf.st_mode)) - { - perror_msg("'%s' is not a directory", confDir.c_str()); - return; - } - - /** we don't want to save it from daemon if it's running under root - but wi might get back to this once we make the daemon to not run - with root privileges - */ - /* - SavePluginSettings(confPath, pSettings); - if (chown(confPath.c_str(), uid, gid) == -1) - { - perror_msg("Can't change '%s' ownership to %u:%u", confPath.c_str(), (int)uid, (int)gid); - return; - } - */ - } - } +#if 0 /* Writing to ~user/.abrt/ is bad wrt security */ + if (abrt_plugin->second->GetType() != REPORTER) + { + return; + } + + std::string home = get_home_dir(atoi(pUID.c_str())); + if (home == "") + { + return; + } + + std::string confDir = home + "/.abrt"; + std::string confPath = confDir + "/" + pName + "."PLUGINS_CONF_EXTENSION; + uid_t uid = atoi(pUID.c_str()); + struct passwd* pw = getpwuid(uid); + gid_t gid = pw ? pw->pw_gid : uid; + + struct stat buf; + if (stat(confDir.c_str(), &buf) != 0) + { + if (mkdir(confDir.c_str(), 0700) == -1) + { + perror_msg("Can't create dir '%s'", confDir.c_str()); + return; + } + if (chmod(confDir.c_str(), 0700) == -1) + { + perror_msg("Can't change mod of dir '%s'", confDir.c_str()); + return; + } + if (chown(confDir.c_str(), uid, gid) == -1) + { + perror_msg("Can't change '%s' ownership to %u:%u", confPath.c_str(), (int)uid, (int)gid); + return; } } + else if (!S_ISDIR(buf.st_mode)) + { + perror_msg("'%s' is not a directory", confDir.c_str()); + return; + } + + /** we don't want to save it from daemon if it's running under root + but wi might get back to this once we make the daemon to not run + with root privileges + */ + /* + SavePluginSettings(confPath, pSettings); + if (chown(confPath.c_str(), uid, gid) == -1) + { + perror_msg("Can't change '%s' ownership to %u:%u", confPath.c_str(), (int)uid, (int)gid); + return; + } + */ +#endif } map_plugin_settings_t CPluginManager::GetPluginSettings(const std::string& pName, |