From: Laine Stump <[email protected]>
As libvirt is used more and more in unprivileged/session mode,
file/socket permission errors have become more common. This patch adds
an initial line to the log banner (the first thing sent to every log
target after the process starts) stating whether the process is
running privileged (as root) or unprivileged/session mode, and if the
latter, it also provides the username and uid the process is running
as.
The idea is to expend this to include more generally useful info about the
environment we're running in. (We just need to remember that in this
context we can't call anything that could lead to recursively calling
the logging system (i.e. you can't call any code that reports an
error, or a VIR_WARN, etc))
Signed-off-by: Laine Stump <[email protected]>
---
src/util/virlog.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/util/virlog.c b/src/util/virlog.c
index 4e95af047b..d5bd216241 100644
--- a/src/util/virlog.c
+++ b/src/util/virlog.c
@@ -525,6 +525,7 @@ virLogToOneTarget(virLogSource *source,
bool *needInit)
{
if (needInit) {
+ uid_t uid = geteuid();
g_autofree char *hoststr = NULL;
/* put some useful info at the top of the log. Avoid calling
@@ -537,6 +538,16 @@ virLogToOneTarget(virLogSource *source,
hoststr = g_strdup_printf("hostname: %s", g_get_host_name());
virLogOneInitMsg(timestamp, hoststr, outputFunc, data);
+ if (uid == 0) {
+ virLogOneInitMsg(timestamp, "running in privileged/system mode",
outputFunc, data);
+ } else {
+ g_autofree char *username = virGetUserName(uid);
+ g_autofree char *privstr = NULL;
+
+ privstr = g_strdup_printf("running in unprivileged/session mode, user:
%s, uid: %u",
+ username, uid);
+ virLogOneInitMsg(timestamp, privstr, outputFunc, data);
+ }