Loading logd/LogAudit.cpp +18 −4 Original line number Diff line number Diff line Loading @@ -19,15 +19,18 @@ #include <stdarg.h> #include <stdlib.h> #include <sys/klog.h> #include <sys/uio.h> #include "libaudit.h" #include "LogAudit.h" LogAudit::LogAudit(LogBuffer *buf, LogReader *reader) LogAudit::LogAudit(LogBuffer *buf, LogReader *reader, int fdDmsg) : SocketListener(getLogSocket(), false) , logbuf(buf) , reader(reader) { logDmsg(); , reader(reader) , fdDmesg(-1) { logDmesg(); fdDmesg = fdDmsg; } bool LogAudit::onDataAvailable(SocketClient *cli) { Loading Loading @@ -62,6 +65,17 @@ int LogAudit::logPrint(const char *fmt, ...) { return rc; } if (fdDmesg >= 0) { struct iovec iov[2]; iov[0].iov_base = str; iov[0].iov_len = strlen(str); iov[1].iov_base = const_cast<char *>("\n"); iov[1].iov_len = 1; writev(fdDmesg, iov, sizeof(iov) / sizeof(iov[0])); } pid_t pid = getpid(); pid_t tid = gettid(); uid_t uid = getuid(); Loading Loading @@ -141,7 +155,7 @@ int LogAudit::logPrint(const char *fmt, ...) { return rc; } void LogAudit::logDmsg() { void LogAudit::logDmesg() { int len = klogctl(KLOG_SIZE_BUFFER, NULL, 0); if (len <= 0) { return; Loading logd/LogAudit.h +3 −2 Original line number Diff line number Diff line Loading @@ -23,16 +23,17 @@ class LogAudit : public SocketListener { LogBuffer *logbuf; LogReader *reader; int fdDmesg; public: LogAudit(LogBuffer *buf, LogReader *reader); LogAudit(LogBuffer *buf, LogReader *reader, int fdDmesg); protected: virtual bool onDataAvailable(SocketClient *cli); private: static int getLogSocket(); void logDmsg(); void logDmesg(); int logPrint(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); }; Loading logd/main.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -84,6 +84,13 @@ static int drop_privs() { // space logger. Additional transitory per-client threads are created // for each reader once they register. int main() { int fdDmesg = -1; char dmesg[PROPERTY_VALUE_MAX]; property_get("logd.auditd.dmesg", dmesg, "1"); if (atol(dmesg)) { fdDmesg = open("/dev/kmsg", O_WRONLY); } if (drop_privs() != 0) { return -1; } Loading Loading @@ -136,9 +143,10 @@ int main() { // and LogReader is notified to send updates to connected clients. // failure is an option ... messages are in dmesg (required by standard) LogAudit *al = new LogAudit(logBuf, reader); LogAudit *al = new LogAudit(logBuf, reader, fdDmesg); if (al->startListener()) { delete al; close(fdDmesg); } pause(); Loading Loading
logd/LogAudit.cpp +18 −4 Original line number Diff line number Diff line Loading @@ -19,15 +19,18 @@ #include <stdarg.h> #include <stdlib.h> #include <sys/klog.h> #include <sys/uio.h> #include "libaudit.h" #include "LogAudit.h" LogAudit::LogAudit(LogBuffer *buf, LogReader *reader) LogAudit::LogAudit(LogBuffer *buf, LogReader *reader, int fdDmsg) : SocketListener(getLogSocket(), false) , logbuf(buf) , reader(reader) { logDmsg(); , reader(reader) , fdDmesg(-1) { logDmesg(); fdDmesg = fdDmsg; } bool LogAudit::onDataAvailable(SocketClient *cli) { Loading Loading @@ -62,6 +65,17 @@ int LogAudit::logPrint(const char *fmt, ...) { return rc; } if (fdDmesg >= 0) { struct iovec iov[2]; iov[0].iov_base = str; iov[0].iov_len = strlen(str); iov[1].iov_base = const_cast<char *>("\n"); iov[1].iov_len = 1; writev(fdDmesg, iov, sizeof(iov) / sizeof(iov[0])); } pid_t pid = getpid(); pid_t tid = gettid(); uid_t uid = getuid(); Loading Loading @@ -141,7 +155,7 @@ int LogAudit::logPrint(const char *fmt, ...) { return rc; } void LogAudit::logDmsg() { void LogAudit::logDmesg() { int len = klogctl(KLOG_SIZE_BUFFER, NULL, 0); if (len <= 0) { return; Loading
logd/LogAudit.h +3 −2 Original line number Diff line number Diff line Loading @@ -23,16 +23,17 @@ class LogAudit : public SocketListener { LogBuffer *logbuf; LogReader *reader; int fdDmesg; public: LogAudit(LogBuffer *buf, LogReader *reader); LogAudit(LogBuffer *buf, LogReader *reader, int fdDmesg); protected: virtual bool onDataAvailable(SocketClient *cli); private: static int getLogSocket(); void logDmsg(); void logDmesg(); int logPrint(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); }; Loading
logd/main.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -84,6 +84,13 @@ static int drop_privs() { // space logger. Additional transitory per-client threads are created // for each reader once they register. int main() { int fdDmesg = -1; char dmesg[PROPERTY_VALUE_MAX]; property_get("logd.auditd.dmesg", dmesg, "1"); if (atol(dmesg)) { fdDmesg = open("/dev/kmsg", O_WRONLY); } if (drop_privs() != 0) { return -1; } Loading Loading @@ -136,9 +143,10 @@ int main() { // and LogReader is notified to send updates to connected clients. // failure is an option ... messages are in dmesg (required by standard) LogAudit *al = new LogAudit(logBuf, reader); LogAudit *al = new LogAudit(logBuf, reader, fdDmesg); if (al->startListener()) { delete al; close(fdDmesg); } pause(); Loading