[2864] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

pending/535: PATCH: krb5-1.0.4 appl/telnet/telnetd

daemon@ATHENA.MIT.EDU (Larry Schwimmer)
Fri Jan 23 20:53:12 1998

Resent-From: gnats@rt-11.MIT.EDU (GNATS Management)
Resent-To: gnats-admin@rt-11.MIT.EDU
Resent-Reply-To: krb5-bugs@MIT.EDU,
        Larry Schwimmer <opusl@whatmore.Stanford.EDU>
Date: Fri, 23 Jan 1998 17:52:39 -0800 (PST)
From: Larry Schwimmer <opusl@whatmore.Stanford.EDU>
To: krb5-bugs@MIT.EDU
Cc: schwim@leland.stanford.edu


>Number:         535
>Category:       pending
>Synopsis:       PATCH: krb5-1.0.4 appl/telnet/telnetd
>Confidential:   yes
>Severity:       serious
>Priority:       medium
>Responsible:    gnats-admin
>State:          open
>Class:          sw-bug
>Submitter-Id:   unknown
>Arrival-Date:   Fri Jan 23 20:53:01 EST 1998
>Last-Modified:
>Originator:
>Organization:
>Release:
>Environment:
>Description:
>How-To-Repeat:
>Fix:
>Audit-Trail:
>Unformatted:
Submitter-Id:	net
Originator:	Larry Schwimmer
Confidential:	no
Synopsis:	
Severity:	non-critical
Priority:	low
Category:	krb5-appl
Class:		sw-bug, change-request
Release:	krb5-1.0.4
Environment:

	Solaris, HP-UX, Linux, AIX, IRIX, DUNIX

Description:

	The banner defaults in appl/telnet/telnetd/ext.h do not
handle most systems.

	telnetd provides no mechanism for customizing the banner.
This is considered a security problem by some administrators who
prefer not to advertise their OS or wish to add an additional banner
message.

Fix:

	This patch to ext.h and utility.c makes two changes:

1) Add more systems to the ext.h database.

2) Add support for the %i directive (/etc/issue.net); the bulk
   of the %i code comes from Linux telnet-netkit-0.10.  If
   /etc/issue.net exists, it is printed (with % expansion)
   instead of the default banner.

--- appl/telnet/telnetd/ext.h.orig	Thu Dec  4 19:42:24 1997
+++ appl/telnet/telnetd/ext.h	Sat Jan 17 06:53:07 1998
***************
*** 220,241 ****
  extern int	needtermstat;
  #endif
  
  #ifndef	DEFAULT_IM
  # ifdef CRAY
- #  define DEFAULT_IM	"\r\n\r\nCray UNICOS (%h) (%t)\r\n\r\r\n\r"
- # else
- #  ifdef sun
  #   ifdef __SVR4
- #    define DEFAULT_IM	"\r\n\r\nUNIX(r) System V Release 4.0 (%h) (%t)\r\n\r\r\n\r"
- #   else
- #    define DEFAULT_IM	"\r\n\r\nSunOS UNIX (%h) (%t)\r\n\r\r\n\r"
- #   endif
- #  else
- #   ifdef ultrix
- #    define DEFAULT_IM	"\r\n\r\nULTRIX (%h) (%t)\r\n\r\r\n\r"
  #   else
- #    define DEFAULT_IM	"\r\n\r\n4.4 BSD UNIX (%h) (%t)\r\n\r\r\n\r"
  #   endif
- #  endif
  # endif
  #endif
--- 220,251 ----
  extern int	needtermstat;
  #endif
  
+ #ifndef ISSUE_FILE
+ #define ISSUE_FILE "/etc/issue.net"
+ #endif
+ 
  #ifndef	DEFAULT_IM
  # ifdef CRAY
+ #  define DEFAULT_IM	"%i\r\n\r\nCray UNICOS (%h) (%t)\r\n\r\r\n\r"
+ # elif defined(sun)
  #   ifdef __SVR4
+ #    define DEFAULT_IM	"%i\r\n\r\nUNIX(r) System V Release 4.0 (%h) (%t)\r\n\r\r\n\r"
  #   else
+ #    define DEFAULT_IM	"%i\r\n\r\nSunOS UNIX (%h) (%t)\r\n\r\r\n\r"
  #   endif
+ # elif defined(ultrix)
+ #    define DEFAULT_IM	"%i\r\n\r\nULTRIX (%h) (%t)\r\n\r\r\n\r"
+ # elif defined(sgi)
+ #    define DEFAULT_IM  "%i\r\n\r\nIRIX (%h) (%t)\r\n\r\r\n\r"
+ # elif defined(_AIX)
+ #    define DEFAULT_IM  "%i\r\n\r\nAIX (%h) (%t)\r\n\r\r\n\r"
+ # elif defined(__hpux__)
+ #    define DEFAULT_IM  "%i\r\n\r\nHP-UX (%h) (%t)\r\n\r\r\n\r"
+ # elif defined(__osf__)
+ #    define DEFAULT_IM  "%i\r\n\r\nDigital UNIX (%h) (%t)\r\n\r\r\n\r"
+ # elif defined(linux)
+ #    define DEFAULT_IM  "%i\r\n\r\nLinux (%h) (%t)\r\n\r\r\n\r"
+ # else
+ #    define DEFAULT_IM	"%i\r\n\r\n4.4 BSD UNIX (%h) (%t)\r\n\r\r\n\r"
  # endif
  #endif

--- appl/telnet/telnetd/utility.c.orig	Thu Dec  4 19:42:25 1997
+++ appl/telnet/telnetd/utility.c	Sat Jan 17 07:01:08 1998
***************
*** 35,40 ****
  
  #define PRINTOPTIONS
  #include "telnetd.h"
  
  /*
   * utility functions performing io related tasks
--- 35,41 ----
  
  #define PRINTOPTIONS
  #include "telnetd.h"
+ #include <sys/utsname.h>
  
  /*
   * utility functions performing io related tasks
***************
*** 374,379 ****
  }
  
  char editedhost[32];
  
  	void
  edithost(pat, host)
--- 375,381 ----
  }
  
  char editedhost[32];
+ struct utsname kerninfo;
  
  	void
  edithost(pat, host)
***************
*** 382,387 ****
  {
  	register char *res = editedhost;
  
  	if (!pat)
  		pat = "";
  	while (*pat) {
--- 384,391 ----
  {
  	register char *res = editedhost;
  
+ 	uname(&kerninfo);
+ 
  	if (!pat)
  		pat = "";
  	while (*pat) {
***************
*** 449,455 ****
  	time_t t;
  	char db[100];
  
- 	putlocation = where;
  
  	while (*cp) {
  		if (*cp != '%') {
--- 453,460 ----
  	time_t t;
  	char db[100];
  
+ 	if (where)
+ 		putlocation = where;
  
  	while (*cp) {
  		if (*cp != '%') {
***************
*** 483,488 ****
  
  		case '%':
  			putchr('%');
  			break;
  		}
  		cp++;
--- 488,542 ----
  
  		case '%':
  			putchr('%');
+ 			break;
+ 
+ 		case 'i':
+ 			{
+ 				char buff[3];
+ 				FILE *fp;
+ 				int p, c;
+ 
+ 				if ((fp = fopen(ISSUE_FILE, "r")) == NULL)
+ 					break;
+ 				p = '\n';
+ 				while ((c = fgetc(fp)) != EOF) {
+ 					if (p == '\n' && c == '#') {
+ 						do {
+ 							c = fgetc(fp);
+ 						} while (c != EOF && c != '\n');
+ 						continue;
+ 					} else if (c == '%') {
+ 						buff[0] = c;
+ 						c = fgetc(fp);
+ 						if (c == EOF) break;
+ 						buff[1] = c;
+ 						buff[2] = '\0';
+ 						putf(buff, NULL);
+ 					} else {
+ 						if (c == '\n') putchr('\r');
+ 						putchr(c);
+ 						p = c;
+ 					}
+ 				};
+ 				(void) fclose(fp);
+ 			}
+ 			return; /* ignore remainder of the banner string */
+ 			/*NOTREACHED*/
+ 
+ 		case 's':
+ 			putstr(kerninfo.sysname);
+ 			break;
+ 
+ 		case 'm':
+ 			putstr(kerninfo.machine);
+ 			break;
+ 
+ 		case 'r':
+ 			putstr(kerninfo.release);
+ 			break;
+ 
+ 		case 'v':
+ 			putstr(kerninfo.version);
  			break;
  		}
  		cp++;

home help back first fref pref prev next nref lref last post