feat: identify userspace logs by user and image
This commit is contained in:
@@ -53,7 +53,6 @@ namespace montauk::abi {
|
||||
static constexpr uint64_t kMaxWindowTitleBytes = 256;
|
||||
static constexpr uint64_t kMaxHostnameBytes = 256;
|
||||
static constexpr uint64_t kMaxUserNameBytes = 32;
|
||||
static constexpr uint64_t kMaxUserspaceLogComponentNameBytes = 32;
|
||||
static constexpr uint64_t kMaxUserspaceLogEntryBytes = 1024;
|
||||
|
||||
// ---- Dispatch ----
|
||||
@@ -611,14 +610,19 @@ namespace montauk::abi {
|
||||
return Sys_ClipboardClear();
|
||||
case SYS_INPUT_WAIT:
|
||||
return (int64_t)Sys_InputWait(frame->arg1, frame->arg2);
|
||||
case SYS_LOG_WRITE: { // "init" <---- component name (arg1)
|
||||
// "started service ..." <---- log message (arg2)
|
||||
case SYS_LOG_WRITE: {
|
||||
if (!UserMemory::String(frame->arg1, kMaxUserspaceLogEntryBytes)) return -1;
|
||||
|
||||
if (!UserMemory::String(frame->arg1, kMaxUserspaceLogComponentNameBytes)
|
||||
|| !UserMemory::String(frame->arg2, kMaxUserspaceLogEntryBytes)
|
||||
) return -1;
|
||||
auto* process = Sched::GetCurrentProcessPtr();
|
||||
const char* username = process != nullptr && process->user[0] != '\0'
|
||||
? process->user
|
||||
: "unknown";
|
||||
const char* imageName = process != nullptr && process->name[0] != '\0'
|
||||
? process->name
|
||||
: "unknown";
|
||||
|
||||
Kt::UserspaceLogStream((const char*)frame->arg1) << (const char*)frame->arg2;
|
||||
Kt::UserspaceLogStream(imageName, username)
|
||||
<< (const char*)frame->arg1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -170,16 +170,18 @@ public:
|
||||
|
||||
class UserspaceLogStream {
|
||||
KernelOutStream localStream{};
|
||||
const char* componentName = "";
|
||||
const char* imageName = "";
|
||||
const char* username = "";
|
||||
|
||||
public:
|
||||
|
||||
UserspaceLogStream(const char* desiredComponentName) {
|
||||
UserspaceLogStream(const char* desiredImageName, const char* desiredUsername) {
|
||||
g_termLock.Acquire();
|
||||
g_kernelLogDepth++;
|
||||
componentName = desiredComponentName;
|
||||
imageName = desiredImageName;
|
||||
username = desiredUsername;
|
||||
|
||||
localStream << "[userspace/" << componentName << "]" << ": ";
|
||||
localStream << "[user " << username << "@" << imageName << "] ";
|
||||
}
|
||||
|
||||
~UserspaceLogStream() {
|
||||
|
||||
Reference in New Issue
Block a user