obmc-console: Suppress syslog in bare metal mode

In bare metal mode (when gbmc-bare-metal-active@.target is active),
we want to prevent sensitive data from leaking into syslog. The
previous implementation only filtered data on specific PII sockets
but left the syslog handler active, logging all data.

This change adds a state accessor `pii_get_state()` to expose the PII
state from `pii-handler`. The `syslog-handler` is updated to check
this state and skip logging to syslog when in `PII_DATA_USER` state
(bare metal mode active).

Tested:
	Moved to and from BM mode and we can see the journal logs
	stopped when we enter BM mode and they are started when we
	move to non-BM mode.
	https://paste.googleplex.com/5292513159151616

Google-Bug-Id: 506720057
Change-Id: Ib2faa6ae0511219a60f6bac2f43676fedb13bf1e
Signed-off-by: Vikram Gara <vikramgara@google.com>
3 files changed
tree: e9f16eee6f5bd661715a22946b90bc95d9b45437
  1. conf/
  2. test/
  3. .clang-format
  4. .clang-tidy
  5. .gitignore
  6. .linter-ignore
  7. .travis.yml
  8. CHANGELOG.md
  9. config.c
  10. console-client.c
  11. console-dbus.c
  12. console-server.c
  13. console-server.h
  14. console-socket.c
  15. LICENSE
  16. log-handler.c
  17. meson.build
  18. meson.options
  19. OWNERS
  20. pii-handler.c
  21. pii-socket.c
  22. README.md
  23. ringbuffer.c
  24. socket-handler.c
  25. syslog-handler.c
  26. tty-handler.c
  27. util.c
README.md

To Build

To build this project, run the following shell commands:

meson setup build
meson compile -C build

To test:

meson test -C build

To Run Server

Running the server requires a serial port (e.g. /dev/ttyS0):

touch obmc-console.conf
./obmc-console-server --config obmc-console.conf ttyS0

To Connect Client

To connect to the server, simply run the client:

./obmc-console-client

To disconnect the client, use the standard ~. combination.

Underlying design

This shows how the host UART connection is abstracted within the BMC as a Unix domain socket.

               +---------------------------------------------------------------------------------------------+
               |                                                                                             |
               |       obmc-console-client       unix domain socket         obmc-console-server              |
               |                                                                                             |
               |     +----------------------+                           +------------------------+           |
               |     |   client.2200.conf   |  +---------------------+  | server.ttyVUART0.conf  |           |
           +---+--+  +----------------------+  |                     |  +------------------------+  +--------+-------+
Network    | 2200 +-->                      +->+ @obmc-console.host0 +<-+                        <--+ /dev/ttyVUART0 |   UARTs
           +---+--+  | console-id = "host0" |  |                     |  |  console-id = "host0"  |  +--------+-------+
               |     |                      |  +---------------------+  |                        |           |
               |     +----------------------+                           +------------------------+           |
               |                                                                                             |
               |                                                                                             |
               |                                                                                             |
               +---------------------------------------------------------------------------------------------+

This supports multiple independent consoles. The console-id is a unique portion for the unix domain socket created by the obmc-console-server instance. The server needs to know this because it needs to know what to name the pipe; the client needs to know it as it needs to form the abstract socket name to which to connect.