Index: user_collector.h |
diff --git a/user_collector.h b/user_collector.h |
index 0d5dd01c40b7386d62df2180dd843b3ac5d913ce..dc633bba444cbf3db0823e9db46ce4cd6dab53da 100644 |
--- a/user_collector.h |
+++ b/user_collector.h |
@@ -2,12 +2,13 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef _CRASH_USER_COLLECTOR_H_ |
-#define _CRASH_USER_COLLECTOR_H_ |
+#ifndef _CRASH_REPORTER_USER_COLLECTOR_H_ |
+#define _CRASH_REPORTER_USER_COLLECTOR_H_ |
#include <string> |
#include "crash-reporter/system_logging.h" |
+#include "gtest/gtest_prod.h" // for FRIEND_TEST |
class FilePath; |
@@ -22,12 +23,14 @@ class UserCollector { |
// Initialize the user crash collector for detection of crashes, |
// given a crash counting function, the path to this executable, |
// metrics collection enabled oracle, and system logger facility. |
- // Crash detection/reporting is not enabled until Enable is |
- // called. |
+ // Crash detection/reporting is not enabled until Enable is called. |
+ // |generate_diagnostics| is used to indicate whether or not to try |
+ // to generate a minidump from crashes. |
void Initialize(CountCrashFunction count_crash, |
const std::string &our_path, |
IsFeedbackAllowedFunction is_metrics_allowed, |
- SystemLogging *logger); |
+ SystemLogging *logger, |
+ bool generate_diagnostics); |
virtual ~UserCollector(); |
@@ -37,8 +40,8 @@ class UserCollector { |
// Disable collection. |
bool Disable() { return SetUpInternal(false); } |
- // Handle a specific user crash. |
- void HandleCrash(int signal, int pid, const std::string &exec); |
+ // Handle a specific user crash. Returns true on success. |
+ bool HandleCrash(int signal, int pid, const char *force_exec); |
// Set (override the default) core file pattern. |
void set_core_pattern_file(const std::string &pattern) { |
@@ -47,16 +50,74 @@ class UserCollector { |
private: |
friend class UserCollectorTest; |
+ FRIEND_TEST(UserCollectorTest, CopyOffProcFilesBadPath); |
+ FRIEND_TEST(UserCollectorTest, CopyOffProcFilesBadPid); |
+ FRIEND_TEST(UserCollectorTest, CopyOffProcFilesOK); |
+ FRIEND_TEST(UserCollectorTest, FormatDumpBasename); |
+ FRIEND_TEST(UserCollectorTest, GetCrashDirectoryInfo); |
+ FRIEND_TEST(UserCollectorTest, GetIdFromStatus); |
+ FRIEND_TEST(UserCollectorTest, GetProcessPath); |
+ FRIEND_TEST(UserCollectorTest, GetSymlinkTarget); |
+ FRIEND_TEST(UserCollectorTest, GetUserInfoFromName); |
+ |
+ // Enumeration to pass to GetIdFromStatus. Must match the order |
+ // that the kernel lists IDs in the status file. |
+ enum IdKind { |
+ kIdReal = 0, // uid and gid |
+ kIdEffective = 1, // euid and egid |
+ kIdSet = 2, // suid and sgid |
+ kIdFileSystem = 3, // fsuid and fsgid |
+ kIdMax |
+ }; |
std::string GetPattern(bool enabled) const; |
bool SetUpInternal(bool enabled); |
+ FilePath GetProcessPath(pid_t pid); |
+ bool GetSymlinkTarget(const FilePath &symlink, |
+ FilePath *target); |
+ bool GetExecutableBaseNameFromPid(uid_t pid, |
+ std::string *base_name); |
+ bool GetIdFromStatus(const char *prefix, |
+ IdKind kind, |
+ const std::string &status_contents, |
+ int *id); |
+ bool GetUserInfoFromName(const std::string &name, |
+ uid_t *uid, |
+ gid_t *gid); |
+ bool CopyOffProcFiles(pid_t pid, const FilePath &process_map); |
+ FilePath GetCrashDirectoryInfo(uid_t process_euid, |
+ uid_t default_user_id, |
+ gid_t default_user_group, |
+ mode_t *mode, |
+ uid_t *directory_owner, |
+ gid_t *directory_group); |
+ // Determines the crash directory for given pid based on pid's owner, |
+ // and creates the directory if necessary with appropriate permissions. |
+ // Returns true whether or not directory needed to be created, false on |
+ // any failure. |
+ bool GetCreatedCrashDirectory(pid_t pid, |
+ FilePath *crash_file_path); |
+ std::string FormatDumpBasename(const std::string &exec_name, |
+ time_t timestamp, |
+ pid_t pid); |
+ bool CopyStdinToCoreFile(const FilePath &core_path); |
+ bool ConvertCoreToMinidump(const FilePath &core_path, |
+ const FilePath &procfs_directory, |
+ const FilePath &minidump_path, |
+ const FilePath &temp_directory); |
+ bool GenerateDiagnostics(pid_t pid, const std::string &exec_name); |
+ |
+ bool generate_diagnostics_; |
std::string core_pattern_file_; |
CountCrashFunction count_crash_function_; |
std::string our_path_; |
bool initialized_; |
IsFeedbackAllowedFunction is_feedback_allowed_function_; |
SystemLogging *logger_; |
+ |
+ static const char *kUserId; |
+ static const char *kGroupId; |
}; |
-#endif // _CRASH_USER_COLLECTOR_H_ |
+#endif // _CRASH_REPORTER_USER_COLLECTOR_H_ |