| |
@@ -0,0 +1,79 @@
|
| |
+ 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)
|
| |
Introduces the logging patches to enable syslog logging by default to the AUTHPRIV syslog facility