diff options
Diffstat (limited to 'security/krb5-17/files/patch-appl::telnet::telnetd::state.c')
-rw-r--r-- | security/krb5-17/files/patch-appl::telnet::telnetd::state.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/security/krb5-17/files/patch-appl::telnet::telnetd::state.c b/security/krb5-17/files/patch-appl::telnet::telnetd::state.c new file mode 100644 index 000000000000..e9d2069eef6f --- /dev/null +++ b/security/krb5-17/files/patch-appl::telnet::telnetd::state.c @@ -0,0 +1,119 @@ +--- appl/telnet/telnetd/state.c.ORIG Wed Feb 28 16:06:51 2001 ++++ appl/telnet/telnetd/state.c Fri Jul 20 08:41:10 2001 +@@ -33,6 +33,7 @@ + + /* based on @(#)state.c 8.1 (Berkeley) 6/4/93 */ + ++#include <stdarg.h> + #include "telnetd.h" + #if defined(AUTHENTICATION) + #include <libtelnet/auth.h> +@@ -209,8 +210,7 @@ + } + + netclear(); /* clear buffer back */ +- *nfrontp++ = IAC; +- *nfrontp++ = DM; ++ output_data("%c%c", IAC, DM); + neturg = nfrontp-1; /* off by one XXX */ + DIAG(TD_OPTIONS, + printoption("td: send IAC", DM)); +@@ -463,8 +463,7 @@ + set_his_want_state_will(option); + do_dont_resp[option]++; + } +- (void) sprintf(nfrontp, (char *)doopt, option); +- nfrontp += sizeof (dont) - 2; ++ output_data((const char *)doopt, option); + + DIAG(TD_OPTIONS, printoption("td: send do", option)); + } +@@ -683,8 +682,7 @@ + set_his_want_state_wont(option); + do_dont_resp[option]++; + } +- (void) sprintf(nfrontp, (char *)dont, option); +- nfrontp += sizeof (doopt) - 2; ++ output_data((const char *)dont, option); + + DIAG(TD_OPTIONS, printoption("td: send dont", option)); + } +@@ -833,8 +831,7 @@ + set_my_want_state_will(option); + will_wont_resp[option]++; + } +- (void) sprintf(nfrontp, (char *)will, option); +- nfrontp += sizeof (doopt) - 2; ++ output_data((const char *)will, option); + + DIAG(TD_OPTIONS, printoption("td: send will", option)); + } +@@ -993,8 +990,7 @@ + set_my_want_state_wont(option); + will_wont_resp[option]++; + } +- (void) sprintf(nfrontp, (char *)wont, option); +- nfrontp += sizeof (wont) - 2; ++ output_data((const char *)wont, option); + + DIAG(TD_OPTIONS, printoption("td: send wont", option)); + } +@@ -1393,9 +1389,8 @@ + env_ovar_wrong: + env_ovar = OLD_ENV_VALUE; + env_ovalue = OLD_ENV_VAR; +- DIAG(TD_OPTIONS, {sprintf(nfrontp, +- "ENVIRON VALUE and VAR are reversed!\r\n"); +- nfrontp += strlen(nfrontp);}); ++ DIAG(TD_OPTIONS, ++ output_data("ENVIRON VALUE and VAR are reversed!\r\n")); + + } + } +@@ -1638,6 +1633,46 @@ + + DIAG(TD_OPTIONS, + {printsub('>', statusbuf, ncp - statusbuf); netflush();}); ++} ++ ++/* ++ * This function appends data to nfrontp and advances nfrontp. ++ */ ++ ++int ++output_data(const char *format, ...) ++{ ++ va_list args; ++ size_t remaining, ret; ++ ++ va_start(args, format); ++ remaining = BUFSIZ - (nfrontp - netobuf); ++ /* try a netflush() if the room is too low */ ++ if (strlen(format) > remaining || BUFSIZ / 4 > remaining) { ++ netflush(); ++ remaining = BUFSIZ - (nfrontp - netobuf); ++ } ++ ret = vsnprintf(nfrontp, remaining, format, args); ++ nfrontp += ((ret < remaining - 1) ? ret : remaining - 1); ++ va_end(args); ++ return ret; ++} ++ ++int ++output_datalen(const char *buf, size_t len) ++{ ++ size_t remaining; ++ ++ remaining = BUFSIZ - (nfrontp - netobuf); ++ if (remaining < len) { ++ netflush(); ++ remaining = BUFSIZ - (nfrontp - netobuf); ++ } ++ if (remaining < len) ++ return -1; ++ memmove(nfrontp, buf, len); ++ nfrontp += len; ++ return (len); + } + + static int envvarok(varp) |