diff -U3 openssh-3.6.1p2/servconf.c openssh-3.6.1p2-mse/servconf.c
--- openssh-3.6.1p2/servconf.c	Mon Feb 24 02:04:34 2003
+++ openssh-3.6.1p2-mse/servconf.c	Fri Jul 11 11:19:09 2003
@@ -123,6 +123,7 @@
 	options->client_alive_count_max = -1;
 	options->authorized_keys_file = NULL;
 	options->authorized_keys_file2 = NULL;
+	options->welcome_file = NULL;	/* 030709-MSe: init new option welcome_file */
 
 	/* Needs to be accessable in many places */
 	use_privsep = -1;
@@ -302,7 +303,8 @@
 	sHostbasedUsesNameFromPacketOnly, sClientAliveInterval,
 	sClientAliveCountMax, sAuthorizedKeysFile, sAuthorizedKeysFile2,
 	sUsePrivilegeSeparation,
-	sDeprecated
+	sDeprecated,
+	sWelcomeFile	// 030709-MSe: Declaration of sWelcomeFile
 } ServerOpCodes;
 
 /* Textual representation of the tokens. */
@@ -380,6 +382,7 @@
 	{ "authorizedkeysfile", sAuthorizedKeysFile },
 	{ "authorizedkeysfile2", sAuthorizedKeysFile2 },
 	{ "useprivilegeseparation", sUsePrivilegeSeparation},
+	{ "welcomefile", sWelcomeFile}, /* MSe-030709 */
 	{ NULL, sBadOption }
 };
 
@@ -915,7 +918,11 @@
 		while (arg)
 		    arg = strdelim(&cp);
 		break;
-
+	/* 030609-MSe: Handle sWelcomeFile */
+	case sWelcomeFile:
+		charptr = &options->welcome_file;
+		goto parse_filename;
+		
 	default:
 		fatal("%s line %d: Missing handler for opcode %s (%d)",
 		    filename, linenum, arg, opcode);
diff -U3 openssh-3.6.1p2/servconf.h openssh-3.6.1p2-mse/servconf.h
--- openssh-3.6.1p2/servconf.h	Thu Aug  1 03:28:39 2002
+++ openssh-3.6.1p2-mse/servconf.h	Fri Jul 11 11:19:42 2003
@@ -131,6 +131,7 @@
 
 	char   *authorized_keys_file;	/* File containing public keys */
 	char   *authorized_keys_file2;
+	char   *welcome_file;         	/* 030609-MSe: file with welcome message */
 	int	pam_authentication_via_kbd_int;
 }       ServerOptions;
 
diff -U3 openssh-3.6.1p2/sshd.c openssh-3.6.1p2-mse/sshd.c
--- openssh-3.6.1p2/sshd.c	Mon Mar 10 01:38:10 2003
+++ openssh-3.6.1p2-mse/sshd.c	Fri Jul 11 13:09:37 2003
@@ -347,12 +347,72 @@
 	key_do_regen = 1;
 }
 
+
+/* 
+ * 030609-MSe: Try to read the welcome message.
+ */
+char *
+read_welcome(void)
+{
+	struct stat st;
+	char *welcome = NULL;
+	off_t len, n;
+	int fd;
+	
+	debug("read_welcome started");
+	
+	/* If option "WelcomeFile" is not set, return NULL */
+	if (options.welcome_file == NULL) {
+		debug("WelcomeFile is not set, return NULL");
+		return (NULL);
+	}
+
+	/* If we can not open the file, return NULL */
+	if ((fd = open(options.welcome_file, O_RDONLY)) == -1) {
+		debug("Can not open welcome file %s", options.welcome_file);
+		return (NULL);
+	}
+
+	/* If we can not fstat the file, return NULL */
+	if (fstat(fd, &st) == -1) {
+		close(fd);
+		debug("Can not fstat welcome file %s", options.welcome_file);
+		return (NULL);
+	}
+	
+	/* If the file is greater than 128 chars, return NULL */
+	if (st.st_size > 128) {
+		debug("Welcome message in file %s is too big (>128 chars).", options.welcome_file);
+		close(fd);
+		return (NULL);
+	}
+		
+	len = st.st_size;
+	welcome = xmalloc(len + 1);
+	n = atomicio(read, fd, welcome, len);
+
+	close(fd);
+
+	/* If we can not read the file completely, return NULL */
+	if (n != len) {
+		debug("Could not read welcome file %s completely", options.welcome_file);
+		xfree(welcome);
+		return (NULL);
+	}
+	
+	welcome[n] = '\0';
+	debug("Welcome message successfully read: %s", welcome);
+	return (welcome);
+}
+
+
 static void
 sshd_exchange_identification(int sock_in, int sock_out)
 {
 	int i, mismatch;
 	int remote_major, remote_minor;
 	int major, minor;
+	char *welcome = NULL;		/* 030709-MSe */
 	char *s;
 	char buf[256];			/* Must not be larger than remote_version. */
 	char remote_version[256];	/* Must be at least as big as buf. */
@@ -368,7 +428,15 @@
 		major = PROTOCOL_MAJOR_1;
 		minor = PROTOCOL_MINOR_1;
 	}
-	snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s\n", major, minor, SSH_VERSION);
+	
+	/* 030609-MSe: Create welcome message */
+	welcome = read_welcome();
+	if (welcome) {
+		snprintf(buf, sizeof buf, "SSH-%d.%d-%s\n", major, minor, welcome);
+		xfree(welcome);
+	} else 
+		snprintf(buf, sizeof buf, "SSH-%d.%d-%s\n", major, minor, SSH_VERSION);
+		
 	server_version_string = xstrdup(buf);
 
 	if (client_version_string == NULL) {
