Index: b/bashhist.c
===================================================================
--- a/bashhist.c
+++ b/bashhist.c
@@ -266,6 +266,44 @@ bash_history_inhibit_expansion (string, i)
}
#endif
+#if defined (SYSLOG_HISTORY)
+#define SESSION_ID_MAXLEN 100
+
+static char *session_id = NULL;
+
+static void
+bash_initialize_session_id ()
+{
+ const char *env_var = get_string_value ("LOG_SESSION_ID");
+ if (!env_var) {
+ session_id = "";
+ return;
+ }
+ const int env_var_len = strlen(env_var);
+ if (env_var_len == 0) {
+ session_id = "";
+ return;
+ }
+ const int size = env_var_len < SESSION_ID_MAXLEN ? (env_var_len + 1) : SESSION_ID_MAXLEN;
+ char *trunc = (char *)malloc (size);
+ strncpy (trunc, env_var, size - 1);
+ trunc[size - 1] = '\0';
+ session_id = trunc;
+}
+
+static const char *
+bash_get_session_id () {
+ if (!session_id) bash_initialize_session_id ();
+ return session_id;
+}
+
+static void
+bash_cleanup_session_id () {
+ if (session_id && *session_id) free(session_id);
+ session_id = NULL;
+}
+#endif
+
void
bash_initialize_history ()
{
@@ -275,6 +313,9 @@ bash_initialize_history ()
history_inhibit_expansion_function = bash_history_inhibit_expansion;
sv_histchars ("histchars");
#endif
+#if defined (SYSLOG_HISTORY)
+ bash_initialize_session_id ();
+#endif
}
void
@@ -509,6 +550,9 @@ maybe_save_shell_history ()
sv_histsize ("HISTFILESIZE");
}
}
+#if defined (SYSLOG_HISTORY)
+ bash_cleanup_session_id ();
+#endif
return (result);
}
@@ -879,7 +879,8 @@ bash_syslog_history (line)
first = 0;
}
- hdrlen = snprintf (loghdr, sizeof(loghdr), "HISTORY: PID=%d UID=%d", getpid(), current_user.uid);
+ const char *user_name = current_user.user_name ?: "";
+ hdrlen = snprintf (loghdr, sizeof(loghdr), "HISTORY: PID=%d UID=%d USER=%s LOG_SESSION_ID=%s", getpid(), current_user.uid, user_name, bash_get_session_id());
msglen = strlen (line);
if ((msglen + hdrlen + 1) < SYSLOG_MAXLEN)