From owner-freebsd-bugs@FreeBSD.ORG Mon May 9 16:10:11 2005 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id F1CBA16A4E8 for ; Mon, 9 May 2005 16:10:10 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id C85B743D5D for ; Mon, 9 May 2005 16:10:10 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j49GAAMx046229 for ; Mon, 9 May 2005 16:10:10 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.3/8.13.1/Submit) id j49GAASY046228; Mon, 9 May 2005 16:10:10 GMT (envelope-from gnats) Date: Mon, 9 May 2005 16:10:10 GMT Message-Id: <200505091610.j49GAASY046228@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Maxim Konovalov Subject: bin/80732 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Maxim Konovalov List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 May 2005 16:10:11 -0000 The following reply was made to PR bin/80732; it has been noted by GNATS. From: Maxim Konovalov To: bug-followup@freebsd.org Cc: Subject: bin/80732 Date: Mon, 9 May 2005 20:07:45 +0400 (MSD) Added to the audit trail. diff -ur telnetd.orig/ext.h /usr/src/contrib/telnet/telnetd/ext.h --- telnetd.orig/ext.h Mon May 9 16:41:45 2005 +++ /usr/src/contrib/telnet/telnetd/ext.h Mon May 9 17:01:30 2005 @@ -112,8 +112,7 @@ #endif process_slc(unsigned char, unsigned char, cc_t), ptyflush(void), - putchr(int), - putf(char *, char *), + putf(char *, char *, size_t), recv_ayt(void), send_do(int, int), send_dont(int, int), diff -ur telnetd.orig/telnetd.c /usr/src/contrib/telnet/telnetd/telnetd.c --- telnetd.orig/telnetd.c Mon May 9 16:42:13 2005 +++ /usr/src/contrib/telnet/telnetd/telnetd.c Mon May 9 17:01:45 2005 @@ -42,7 +42,6 @@ #include "telnetd.h" #include "pathnames.h" -#include #include #include #include @@ -740,6 +739,7 @@ char *HE; char *HN; char *IM; + char *IF; int nfd; /* @@ -900,22 +900,40 @@ */ if (getent(defent, "default") == 1) { - char *cp=defstrs; + char *cp = defstrs; HE = Getstr("he", &cp); HN = Getstr("hn", &cp); - IM = Getstr("im", &cp); - if (HN && *HN) + IF = Getstr("if", &cp); + if (HN != NULL && *HN != 0) (void) strlcpy(host_name, HN, sizeof(host_name)); - if (IM == 0) - IM = strdup(""); + if (IF != NULL) { + int if_fd; + + if ((if_fd = open(IF, O_RDONLY)) != -1) { + struct stat if_fst; + + fstat(if_fd, &if_fst); + IM = malloc(if_fst.st_size + 1); + read(if_fd, IM, if_fst.st_size); + IM[if_fst.st_size] = 0; + close(if_fd); + } else { + IF = NULL; + } + } + if (IF == NULL) { + IM = Getstr("im", &cp); + if (IM == NULL) + IM = strdup(""); + } } else { IM = strdup(DEFAULT_IM); - HE = 0; + HE = NULL; } edithost(HE, host_name); if (hostinfo && *IM) - putf(IM, ptyibuf2); + putf(IM, ptyibuf2, BUFSIZ); if (pcc) (void) strncat(ptyibuf2, ptyip, pcc+1); diff -ur telnetd.orig/utility.c /usr/src/contrib/telnet/telnetd/utility.c --- telnetd.orig/utility.c Mon May 9 16:42:22 2005 +++ /usr/src/contrib/telnet/telnetd/utility.c Mon May 9 17:01:38 2005 @@ -66,11 +66,9 @@ * also flush the pty input buffer (by dropping its data) if it becomes * too full. */ - - void -ttloop() +void +ttloop(void) { - DIAG(TD_REPORT, output_data("td: ttloop\r\n")); if (nfrontp - nbackp > 0) { netflush(); @@ -393,22 +391,6 @@ editedhost[sizeof editedhost - 1] = '\0'; } -static char *putlocation; - -static void -putstr(const char *s) -{ - - while (*s) - putchr(*s++); -} - -void -putchr(int cc) -{ - *putlocation++ = cc; -} - #ifdef __FreeBSD__ static char fmtstr[] = { "%+" }; #else @@ -416,11 +398,12 @@ #endif void -putf(char *cp, char *where) +putf(char *cp, char *where, size_t where_size) { char *slash; time_t t; char db[100]; + char ch_str[2] = {0, 0}; #ifdef __FreeBSD__ static struct utsname kerninfo; @@ -428,19 +411,13 @@ uname(&kerninfo); #endif - putlocation = where; - - while (*cp) { - if (*cp =='\n') { - putstr("\r\n"); - cp++; - continue; + while (*cp != 0) { + if (*cp == '\n') { + strlcat(where, "\r\n", where_size); } else if (*cp != '%') { - putchr(*cp++); - continue; - } - switch (*++cp) { - + *ch_str = *cp; + strlcat(where, ch_str, where_size); + } else switch (*++cp) { case 't': #ifdef STREAMSPTY /* names are like /dev/pts/2 -- we want pts/2 */ @@ -448,46 +425,42 @@ #else slash = strrchr(line, '/'); #endif - if (slash == (char *) 0) - putstr(line); + if (slash == NULL) + strlcat(where, line, where_size); else - putstr(&slash[1]); + strlcat(where, &slash[1], where_size); break; - case 'h': - putstr(editedhost); + strlcat(where, editedhost, where_size); break; - case 'd': #ifdef __FreeBSD__ setlocale(LC_TIME, ""); #endif (void)time(&t); (void)strftime(db, sizeof(db), fmtstr, localtime(&t)); - putstr(db); + strlcat(where, db, where_size); break; - #ifdef __FreeBSD__ case 's': - putstr(kerninfo.sysname); + strlcat(where, kerninfo.sysname, where_size); break; - case 'm': - putstr(kerninfo.machine); + strlcat(where, kerninfo.machine, where_size); break; - case 'r': - putstr(kerninfo.release); + strlcat(where, kerninfo.release, where_size); break; - case 'v': - putstr(kerninfo.version); + strlcat(where, kerninfo.version, where_size); break; #endif - case '%': - putchr('%'); + *ch_str = '%'; + strlcat(where, ch_str, where_size); break; + case 0: + return; } cp++; }