rcolebaugh / rpms / openssh

Forked from rpms/openssh 2 years ago
Clone
Vishal Mishra 7bfe72
Index: openssh-9.9p1/sshd.c
Vishal Mishra 7bfe72
===================================================================
Vishal Mishra 7bfe72
--- openssh-9.9p1.orig/sshd.c
Vishal Mishra 7bfe72
+++ openssh-9.9p1/sshd.c
Vishal Mishra 7bfe72
@@ -1768,6 +1768,9 @@ main(int ac, char **av)
Vishal Mishra 7bfe72
 		/* Accept a connection and return in a forked child */
Vishal Mishra 7bfe72
 		server_accept_loop(&sock_in, &sock_out,
Vishal Mishra 7bfe72
 		    &newsock, config_s, log_stderr);
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
+		set_log_session_id();  // Set log session ID for this session
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
 	}
Vishal Mishra 7bfe72
 
Vishal Mishra 7bfe72
 	/* This is the child processing a new connection. */
Vishal Mishra 7bfe72
@@ -1818,3 +1821,4 @@ cleanup_exit(int i)
Vishal Mishra 7bfe72
 {
Vishal Mishra 7bfe72
 	_exit(i);
Vishal Mishra 7bfe72
 }
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
Index: openssh-9.9p1/log.c
Vishal Mishra 7bfe72
===================================================================
Vishal Mishra 7bfe72
--- openssh-9.9p1.orig/log.c
Vishal Mishra 7bfe72
+++ openssh-9.9p1/log.c
Vishal Mishra 7bfe72
@@ -414,25 +414,52 @@ do_log(LogLevel level, int force, const
Vishal Mishra 7bfe72
 		tmp_handler(level, force, fmtbuf, log_handler_ctx);
Vishal Mishra 7bfe72
 		log_handler = tmp_handler;
Vishal Mishra 7bfe72
 	} else if (log_on_stderr) {
Vishal Mishra 7bfe72
-		snprintf(msgbuf, sizeof msgbuf, "%s%s%.*s\r\n",
Vishal Mishra 7bfe72
+		snprintf(msgbuf, sizeof msgbuf, "%s%s%.*s session=%s\r\n",
Vishal Mishra 7bfe72
 		    (log_on_stderr > 1) ? progname : "",
Vishal Mishra 7bfe72
 		    (log_on_stderr > 1) ? ": " : "",
Vishal Mishra 7bfe72
-		    (int)sizeof msgbuf - 3, fmtbuf);
Vishal Mishra 7bfe72
+		    (int)sizeof msgbuf - 3, fmtbuf, get_log_session_id());
Vishal Mishra 7bfe72
 		(void)write(log_stderr_fd, msgbuf, strlen(msgbuf));
Vishal Mishra 7bfe72
 	} else {
Vishal Mishra 7bfe72
 #if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT)
Vishal Mishra 7bfe72
 		openlog_r(progname, LOG_PID, log_facility, &sdata);
Vishal Mishra 7bfe72
-		syslog_r(pri, &sdata, "%.500s", fmtbuf);
Vishal Mishra 7bfe72
+		syslog_r(pri, &sdata, "%.500s session=%s", fmtbuf, get_log_session_id());
Vishal Mishra 7bfe72
 		closelog_r(&sdata);
Vishal Mishra 7bfe72
 #else
Vishal Mishra 7bfe72
 		openlog(progname, LOG_PID, log_facility);
Vishal Mishra 7bfe72
-		syslog(pri, "%.500s", fmtbuf);
Vishal Mishra 7bfe72
+		syslog(pri, "%.500s session=%s", fmtbuf, get_log_session_id());
Vishal Mishra 7bfe72
 		closelog();
Vishal Mishra 7bfe72
 #endif
Vishal Mishra 7bfe72
 	}
Vishal Mishra 7bfe72
 	errno = saved_errno;
Vishal Mishra 7bfe72
 }
Vishal Mishra 7bfe72
 
Vishal Mishra 7bfe72
+void 
Vishal Mishra 7bfe72
+set_log_session_id()
Vishal Mishra 7bfe72
+{
Vishal Mishra 7bfe72
+        struct timeval tv;
Vishal Mishra 7bfe72
+        char hostname[HOST_NAME_MAX + 1];
Vishal Mishra 7bfe72
+        char session_id[HOST_NAME_MAX + 20];
Vishal Mishra 7bfe72
+        char *s;
Vishal Mishra 7bfe72
+        if (gethostname(hostname, sizeof(hostname)) != 0) {
Vishal Mishra 7bfe72
+                *hostname = '\0';
Vishal Mishra 7bfe72
+        }
Vishal Mishra 7bfe72
+        gettimeofday(&tv, NULL);
Vishal Mishra 7bfe72
+        snprintf(session_id, sizeof(session_id), "%s:%x.%x",
Vishal Mishra 7bfe72
+                 hostname, tv.tv_sec, tv.tv_usec);
Vishal Mishra 7bfe72
+        setenv("LOG_SESSION_ID", session_id, 1);
Vishal Mishra 7bfe72
+}
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
+const char *
Vishal Mishra 7bfe72
+get_log_session_id()
Vishal Mishra 7bfe72
+{
Vishal Mishra 7bfe72
+        const char *id = getenv("LOG_SESSION_ID");
Vishal Mishra 7bfe72
+        if (!id) {
Vishal Mishra 7bfe72
+                 set_log_session_id();
Vishal Mishra 7bfe72
+                 id = getenv("LOG_SESSION_ID");
Vishal Mishra 7bfe72
+        }
Vishal Mishra 7bfe72
+        return id;
Vishal Mishra 7bfe72
+}
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
 void
Vishal Mishra 7bfe72
 sshlog(const char *file, const char *func, int line, int showfunc,
Vishal Mishra 7bfe72
     LogLevel level, const char *suffix, const char *fmt, ...)
Vishal Mishra 7bfe72
@@ -519,3 +546,4 @@ sshlogdirect(LogLevel level, int forced,
Vishal Mishra 7bfe72
 	do_log(level, forced, NULL, fmt, args);
Vishal Mishra 7bfe72
 	va_end(args);
Vishal Mishra 7bfe72
 }
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
Index: openssh-9.9p1/regress/session-id.sh
Vishal Mishra 7bfe72
===================================================================
Vishal Mishra 7bfe72
--- /dev/null
Vishal Mishra 7bfe72
+++ openssh-9.9p1/regress/session-id.sh
Vishal Mishra 7bfe72
@@ -0,0 +1,23 @@
Vishal Mishra 7bfe72
+tid="session id"
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
+start_sshd
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
+${SSH} -F $OBJ/ssh_config somehost true
Vishal Mishra 7bfe72
+if [ $? -ne 0 ]; then
Vishal Mishra 7bfe72
+	fail "ssh connect with failed"
Vishal Mishra 7bfe72
+fi
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
+expected="session=$(hostname)"
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
+# grab the first session ID which will be stable across session
Vishal Mishra 7bfe72
+sessionid=$(grep -m1 $expected $TEST_SSHD_LOGFILE | sed -E 's/.*(session=.*)/\1/')
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
+line_count=$(grep -c $expected $TEST_SSHD_LOGFILE)
Vishal Mishra 7bfe72
+if [ $line_count == "0" ]; then
Vishal Mishra 7bfe72
+	fail "No session ID lines found"
Vishal Mishra 7bfe72
+fi
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
+stable_id_count=$(grep -c $sessionid $TEST_SSHD_LOGFILE)
Vishal Mishra 7bfe72
+if [ $line_count != $stable_id_count ]; then
Vishal Mishra 7bfe72
+	fail 'Mismatching session ids found'
Vishal Mishra 7bfe72
+fi
Vishal Mishra 7bfe72
Index: openssh-9.9p1/log.h
Vishal Mishra 7bfe72
===================================================================
Vishal Mishra 7bfe72
--- openssh-9.9p1.orig/log.h
Vishal Mishra 7bfe72
+++ openssh-9.9p1/log.h
Vishal Mishra 7bfe72
@@ -68,6 +68,9 @@ const char *	log_level_name(LogLevel);
Vishal Mishra 7bfe72
 void	 set_log_handler(log_handler_fn *, void *);
Vishal Mishra 7bfe72
 void	 cleanup_exit(int) __attribute__((noreturn));
Vishal Mishra 7bfe72
 
Vishal Mishra 7bfe72
+void		set_log_session_id();
Vishal Mishra 7bfe72
+const char *	get_log_session_id();
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
 void	 sshlog(const char *, const char *, int, int,
Vishal Mishra 7bfe72
     LogLevel, const char *, const char *, ...)
Vishal Mishra 7bfe72
     __attribute__((format(printf, 7, 8)));
Vishal Mishra 7bfe72
Index: openssh-9.9p1/session.c
Vishal Mishra 7bfe72
===================================================================
Vishal Mishra 7bfe72
--- openssh-9.9p1.orig/session.c
Vishal Mishra 7bfe72
+++ openssh-9.9p1/session.c
Vishal Mishra 7bfe72
@@ -1242,6 +1242,10 @@ do_setup_env(struct ssh *ssh, Session *s
Vishal Mishra 7bfe72
 		child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND",
Vishal Mishra 7bfe72
 		    original_command);
Vishal Mishra 7bfe72
 
Vishal Mishra 7bfe72
+  /* set LOG_SESSION_ID for child */
Vishal Mishra 7bfe72
+  child_set_env(&env, &envsize, "LOG_SESSION_ID", get_log_session_id());
Vishal Mishra 7bfe72
+  debug("set LOG_SESION_ID to: %s", get_log_session_id());
Vishal Mishra 7bfe72
+
Vishal Mishra 7bfe72
 	if (debug_flag) {
Vishal Mishra 7bfe72
 		/* dump the environment */
Vishal Mishra 7bfe72
 		fprintf(stderr, "Environment:\n");