diff --git a/appl/telnet/telnetd/ext.h b/appl/telnet/telnetd/ext.h index 65d82c2ee..626849a3e 100644 --- a/appl/telnet/telnetd/ext.h +++ b/appl/telnet/telnetd/ext.h @@ -57,7 +57,7 @@ extern const char *new_login; extern slcfun slctab[NSLC + 1]; /* slc mapping table */ -extern char *terminaltype; +extern char terminaltype[41]; /* * I/O data buffers, pointers, and counters. diff --git a/appl/telnet/telnetd/global.c b/appl/telnet/telnetd/global.c index 0a313fa36..e9ad94fcb 100644 --- a/appl/telnet/telnetd/global.c +++ b/appl/telnet/telnetd/global.c @@ -54,7 +54,7 @@ int require_otp; slcfun slctab[NSLC + 1]; /* slc mapping table */ -char *terminaltype; +char terminaltype[41]; /* * I/O data buffers, pointers, and counters. diff --git a/appl/telnet/telnetd/state.c b/appl/telnet/telnetd/state.c index c679dfd0b..1adbf78a8 100644 --- a/appl/telnet/telnetd/state.c +++ b/appl/telnet/telnetd/state.c @@ -939,7 +939,7 @@ suboption(void) } /* end of case TELOPT_TSPEED */ case TELOPT_TTYPE: { /* Yaaaay! */ - static char terminalname[41]; + char *p; if (his_state_is_wont(TELOPT_TTYPE)) /* Ignore if option disabled */ break; @@ -949,9 +949,9 @@ suboption(void) return; /* ??? XXX but, this is the most robust */ } - terminaltype = terminalname; + p = terminaltype; - while ((terminaltype < (terminalname + sizeof terminalname-1)) && + while ((p < (terminaltype + sizeof terminaltype-1)) && !SB_EOF()) { int c; @@ -959,10 +959,9 @@ suboption(void) if (isupper(c)) { c = tolower(c); } - *terminaltype++ = c; /* accumulate name */ + *p++ = c; /* accumulate name */ } - *terminaltype = 0; - terminaltype = terminalname; + *p = 0; break; } /* end of case TELOPT_TTYPE */ diff --git a/appl/telnet/telnetd/telnetd.c b/appl/telnet/telnetd/telnetd.c index 40910aa5f..e6838844e 100644 --- a/appl/telnet/telnetd/telnetd.c +++ b/appl/telnet/telnetd/telnetd.c @@ -635,7 +635,7 @@ getterminaltype(char *name, size_t name_sz) */ _gettermname(); if (strncmp(first, terminaltype, sizeof(first)) != 0) - strcpy(terminaltype, first); + strlcpy(terminaltype, first, sizeof(terminaltype)); break; } } @@ -751,7 +751,7 @@ Please contact your net administrator"); */ *user_name = 0; level = getterminaltype(user_name, sizeof(user_name)); - esetenv("TERM", terminaltype ? terminaltype : "network", 1); + esetenv("TERM", terminaltype[0] ? terminaltype : "network", 1); #ifdef _SC_CRAY_SECURE_SYS if (secflag) {