import telnet-0.17-85.el9

This commit is contained in:
CentOS Sources 2022-05-17 06:17:29 -04:00 committed by Stepan Oksanichenko
commit 960f5b3121
35 changed files with 4092 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
SOURCES/netkit-telnet-0.17.tar.gz
SOURCES/telnet-client.tar.gz

2
.telnet.metadata Normal file
View File

@ -0,0 +1,2 @@
41213dedaf242126b54a3ac51b905a351eb22b15 SOURCES/netkit-telnet-0.17.tar.gz
8c34c0ad6006a5316337f2bc3f7acb3c93d6045e SOURCES/telnet-client.tar.gz

View File

@ -0,0 +1,13 @@
diff --git a/telnet/main.c.old b/telnet/main.c
index 599f0af..cf67ea6 100644
--- a/telnet/main.c.old
+++ b/telnet/main.c
@@ -337,7 +337,7 @@ main(int argc, char *argv[])
argv += optind;
if (argc) {
- char *args[7], **argp = args;
+ char *args[8], **argp = args;
if (argc > 2)
usage();

View File

@ -0,0 +1,121 @@
diff --git a/telnet/utilities.c b/telnet/utilities.c
index 0bb0eab..d89ca37 100644
--- a/telnet/utilities.c
+++ b/telnet/utilities.c
@@ -748,6 +748,7 @@ printsub(char direction, unsigned char *pointer, int length)
env_common:
{
register int noquote = 2;
+ char* msg;
#if defined(ENV_HACK) && defined(OLD_ENVIRON)
extern int old_env_var, old_env_value;
#endif
@@ -758,14 +759,24 @@ printsub(char direction, unsigned char *pointer, int length)
/* case NEW_ENV_OVAR: */
if (pointer[0] == TELOPT_OLD_ENVIRON) {
# ifdef ENV_HACK
- if (old_env_var == OLD_ENV_VALUE)
- fprintf(NetTrace, "\" (VALUE) " + noquote);
- else
+ if (old_env_var == OLD_ENV_VALUE) {
+ msg = "\" (VALUE) ";
+ fprintf(NetTrace, "%s", msg + noquote);
+ }
+ else {
# endif
- fprintf(NetTrace, "\" VAR " + noquote);
+ msg = "\" VAR ";
+ fprintf(NetTrace, "%s", msg + noquote);
+# ifdef ENV_HACK
+ }
+#endif /*ENV_HACK*/
} else
#endif /* OLD_ENVIRON */
- fprintf(NetTrace, "\" VALUE " + noquote);
+ msg = "\" VALUE ";
+ fprintf(NetTrace, "%s", msg + noquote);
+#ifdef OLD_ENVIRON
+ }
+#endif /* OLD_ENVIRON */
noquote = 2;
break;
@@ -774,24 +785,36 @@ printsub(char direction, unsigned char *pointer, int length)
/* case OLD_ENV_VALUE: */
if (pointer[0] == TELOPT_OLD_ENVIRON) {
# ifdef ENV_HACK
- if (old_env_value == OLD_ENV_VAR)
- fprintf(NetTrace, "\" (VAR) " + noquote);
- else
+ if (old_env_value == OLD_ENV_VAR) {
+ msg = "\" (VAR) ";
+ fprintf(NetTrace, "%s", msg + noquote);
+ }
+ else {
# endif
- fprintf(NetTrace, "\" VALUE " + noquote);
- } else
+ msg = "\" VALUE ";
+ fprintf(NetTrace, "%s", msg + noquote);
+# ifdef ENV_HACK
+ }
+# endif
+ } else {
#endif /* OLD_ENVIRON */
- fprintf(NetTrace, "\" VAR " + noquote);
+ msg = "\" VAR ";
+ fprintf(NetTrace, "%s", msg + noquote);
+#ifdef OLD_ENVIRON
+ }
+#endif
noquote = 2;
break;
case ENV_ESC:
- fprintf(NetTrace, "\" ESC " + noquote);
+ msg = "\" ESC ";
+ fprintf(NetTrace, "%s", msg + noquote);
noquote = 2;
break;
case ENV_USERVAR:
- fprintf(NetTrace, "\" USERVAR " + noquote);
+ msg = "\" USERVAR ";
+ fprintf(NetTrace, "%s", msg + noquote);
noquote = 2;
break;
diff --git a/telnetd/utility.c b/telnetd/utility.c
index 4a438be..82edee5 100644
--- a/telnetd/utility.c
+++ b/telnetd/utility.c
@@ -969,22 +969,26 @@ printsub(char direction, unsigned char *pointer, int length)
env_common:
{
register int noquote = 2;
+ char* msg;
for (i = 2; i < length; i++ ) {
switch (pointer[i]) {
case ENV_VAR:
if (pointer[1] == TELQUAL_SEND)
goto def_case;
- netoprintf("\" VAR " + noquote);
+ msg = "\" VAR ";
+ netoprintf("%s", msg + noquote);
noquote = 2;
break;
case ENV_VALUE:
- netoprintf("\" VALUE " + noquote);
+ msg = "\" VALUE ";
+ netoprintf("%s", msg + noquote);
noquote = 2;
break;
case ENV_ESC:
- netoprintf("\" ESC " + noquote);
+ msg = "\" ESC ";
+ netoprintf("%s", msg + noquote);
noquote = 2;
break;

View File

@ -0,0 +1,265 @@
diff -uNr netkit-telnet-0.17/telnetd/telnetd.c netkit-telnet-0.17.ipv6/telnetd/telnetd.c
--- netkit-telnet-0.17/telnetd/telnetd.c 2006-07-13 08:37:18.000000000 +0200
+++ netkit-telnet-0.17.ipv6/telnetd/telnetd.c 2006-07-14 08:36:11.000000000 +0200
@@ -49,6 +49,7 @@
/* #include <netinet/ip.h> */ /* Don't think this is used at all here */
#include <arpa/inet.h>
#include <assert.h>
+#include <sys/poll.h>
#include "telnetd.h"
#include "pathnames.h"
#include "setproctitle.h"
@@ -68,7 +69,7 @@
#define HAS_IPPROTO_IP
#endif
-static void doit(struct sockaddr_in *who);
+static void doit(struct sockaddr *who, socklen_t wholen);
static int terminaltypeok(const char *s);
/*
@@ -90,7 +91,7 @@
int
main(int argc, char *argv[], char *env[])
{
- struct sockaddr_in from;
+ struct sockaddr from;
int on = 1;
socklen_t fromlen;
register int ch;
@@ -248,64 +249,89 @@
argc -= optind;
argv += optind;
- if (debug) {
- int s, ns;
- socklen_t foo;
- struct servent *sp;
- struct sockaddr_in sn;
+ int s = 0;
- memset(&sn, 0, sizeof(sn));
- sn.sin_family = AF_INET;
+ if (debug) {
+ struct addrinfo *ai;
+ unsigned int nfds = 0;
+ struct pollfd fds[2];
if (argc > 1) {
- usage();
- /* NOTREACHED */
- } else if (argc == 1) {
- if ((sp = getservbyname(*argv, "tcp"))!=NULL) {
- sn.sin_port = sp->s_port;
- }
- else {
- int pt = atoi(*argv);
- if (pt <= 0) {
- fprintf(stderr, "telnetd: %s: bad port number\n",
- *argv);
- usage();
- /* NOTREACHED */
- }
- sn.sin_port = htons(pt);
- }
+ usage();
+ /* NOTREACHED */
} else {
- sp = getservbyname("telnet", "tcp");
- if (sp == 0) {
- fprintf(stderr, "telnetd: tcp/telnet: unknown service\n");
- exit(1);
- }
- sn.sin_port = sp->s_port;
- }
+ struct addrinfo hints;
+
+ memset (&hints, '\0', sizeof (hints));
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_ADDRCONFIG | AI_PASSIVE;
+ hints.ai_protocol = IPPROTO_TCP;
+
+ if (argc == 0) {
+ if (getaddrinfo(NULL, "telnet", &hints, &ai) != 0) {
+ fprintf(stderr, "telnetd: %s: bad port number\n", *argv);
+ usage();
+ /* NOTREACHED */
+ }
+ } else {
+ if (getaddrinfo(NULL, *argv, &hints, &ai) != 0) {
+ fprintf(stderr, "telnetd: %s: bad port number\n", *argv);
+ usage();
+ /* NOTREACHED */
+ }
+ }
+ }
- s = socket(AF_INET, SOCK_STREAM, 0);
- if (s < 0) {
+ struct addrinfo *runp;
+ int b = 0;
+ for (runp = ai; ((runp != NULL) && (nfds < sizeof (fds) / sizeof (fds[0]))); runp = runp->ai_next) {
+ fds[nfds].fd = socket(runp->ai_family, runp->ai_socktype, runp->ai_protocol);
+ if (fds[nfds].fd < 0) {
perror("telnetd: socket");;
- exit(1);
+ exit(1);
+ }
+ fds[nfds].events = POLLIN;
+ (void) setsockopt(fds[nfds].fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+
+ if (bind(fds[nfds].fd, runp->ai_addr, runp->ai_addrlen) != 0) {
+ // Unable to bind to given port. One of the reason can be
+ // that we can't bind to both IPv4 and IPv6
+ break;
+ } else {
+ b++;
+ }
+
+ if (listen(fds[nfds].fd, 1) < 0) {
+ perror("listen");
+ exit(1);
+ }
+ nfds++;
}
- (void) setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
- if (bind(s, (struct sockaddr *)&sn, sizeof(sn)) < 0) {
- perror("bind");
- exit(1);
- }
- if (listen(s, 1) < 0) {
- perror("listen");
- exit(1);
+ freeaddrinfo(ai);
+
+ if (b == 0) {
+ perror("bind");
+ exit(1);
}
- foo = sizeof(sn);
- ns = accept(s, (struct sockaddr *)&sn, &foo);
- if (ns < 0) {
- perror("accept");
- exit(1);
+
+ int n = poll (fds, nfds, -1);
+ if (n > 0) {
+ unsigned int i;
+ for (i = 0; i < nfds; i++) {
+ if (fds[i].revents & POLLIN) {
+ struct sockaddr_storage rem;
+ socklen_t remlen = sizeof(rem);
+ int fd = accept(fds[i].fd, (struct sockaddr *) &rem, &remlen);
+
+ if (fd < 0) {
+ perror("accept");
+ exit(1);
+ }
+
+ s = fd;
+ }
+ }
}
- (void) dup2(ns, 0);
- (void) close(ns);
- (void) close(s);
} else if (argc > 0) {
usage();
/* NOT REACHED */
@@ -313,13 +339,13 @@
openlog("telnetd", LOG_PID | LOG_ODELAY, LOG_DAEMON);
fromlen = sizeof (from);
- if (getpeername(0, (struct sockaddr *)&from, &fromlen) < 0) {
+ if (getpeername(s, &from, &fromlen) < 0) {
fprintf(stderr, "%s: ", progname);
perror("getpeername");
_exit(1);
}
if (keepalive &&
- setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof (on)) < 0) {
+ setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof (on)) < 0) {
syslog(LOG_WARNING, "setsockopt (SO_KEEPALIVE): %m");
}
@@ -333,13 +359,13 @@
if (tos < 0)
tos = 020; /* Low Delay bit */
if (tos
- && (setsockopt(0, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0)
+ && (setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0)
&& (errno != ENOPROTOOPT) )
syslog(LOG_WARNING, "setsockopt (IP_TOS): %m");
}
#endif /* defined(HAS_IPPROTO_IP) && defined(IP_TOS) */
- net = 0;
- doit(&from);
+ net = s;
+ doit(&from, fromlen);
/* NOTREACHED */
return 0;
} /* end of main */
@@ -608,10 +634,9 @@
* Get a pty, scan input lines.
*/
static void
-doit(struct sockaddr_in *who)
+doit(struct sockaddr *who, socklen_t wholen)
{
const char *host;
- struct hostent *hp;
int level;
char user_name[256];
@@ -623,12 +648,18 @@
fatal(net, "All network ports in use");
/* get name of connected client */
- hp = gethostbyaddr((char *)&who->sin_addr, sizeof (struct in_addr),
- who->sin_family);
- if (hp)
- host = hp->h_name;
- else
- host = inet_ntoa(who->sin_addr);
+ int error = -1;
+ char namebuf[255];
+
+ error = getnameinfo(who, wholen, namebuf, sizeof(namebuf), NULL, 0, 0);
+
+ if (error) {
+ perror("getnameinfo: localhost");
+ perror(gai_strerror(error));
+ exit(1);
+ }
+
+ host = namebuf;
/*
* We must make a copy because Kerberos is probably going
@@ -649,13 +680,21 @@
/* Get local host name */
{
- struct hostent *h;
+ struct addrinfo hints;
+ struct addrinfo *res;
+ int e;
+
+ memset(&hints, '\0', sizeof(hints));
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_ADDRCONFIG;
+
gethostname(host_name, sizeof(host_name));
- h = gethostbyname(host_name);
- if (h) {
- strncpy(host_name, h->h_name, sizeof(host_name));
- host_name[sizeof(host_name)-1] = 0;
+ if ((e = getaddrinfo(host_name, NULL, &hints, &res)) != 0) {
+ perror("getaddrinfo: localhost");
+ perror(gai_strerror(e));
+ exit(1);
}
+ freeaddrinfo(res);
}
#if defined(AUTHENTICATE) || defined(ENCRYPT)

View File

@ -0,0 +1,15 @@
diff --git a/telnet/telnet.1 b/telnet/telnet.1
index f30e034..e3a873e 100644
--- a/telnet/telnet.1
+++ b/telnet/telnet.1
@@ -74,6 +74,10 @@ If it is invoked with arguments, it performs an
.Ic open
command with those arguments.
.Pp
+If a hostname is resolved to multiple IP addresses,
+.Nm
+attempts to establish a connection with each address until one of them is successful or until no more addresses are left.
+.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl 4

View File

@ -0,0 +1,43 @@
--- netkit-telnet-0.17.orig/telnetd/telnetd.c 2007-03-13 16:31:20.000000000 +0000
+++ netkit-telnet-0.17.orig/telnetd/telnetd.c 2007-03-13 16:31:26.000000000 +0000
@@ -653,6 +653,11 @@ doit(struct sockaddr *who, socklen_t who
error = getnameinfo(who, wholen, namebuf, sizeof(namebuf), NULL, 0, 0);
+ /* if we can't get a hostname now, settle for an address */
+ if(error == EAI_AGAIN)
+ error = getnameinfo(who, wholen, namebuf, sizeof(namebuf),
+ NULL, 0, NI_NUMERICHOST);
+
if (error) {
perror("getnameinfo: localhost");
perror(gai_strerror(error));
@@ -681,7 +686,7 @@ doit(struct sockaddr *who, socklen_t who
/* Get local host name */
{
struct addrinfo hints;
- struct addrinfo *res;
+ struct addrinfo *res = 0;
int e;
memset(&hints, '\0', sizeof(hints));
@@ -690,11 +695,14 @@ doit(struct sockaddr *who, socklen_t who
gethostname(host_name, sizeof(host_name));
if ((e = getaddrinfo(host_name, NULL, &hints, &res)) != 0) {
- perror("getaddrinfo: localhost");
- perror(gai_strerror(e));
- exit(1);
+ if(e != EAI_AGAIN) {
+ fprintf(stderr, "getaddrinfo: localhost %s\n",
+ gai_strerror(e));
+ exit(1);
+ }
}
- freeaddrinfo(res);
+ if(res)
+ freeaddrinfo(res);
}
#if defined(AUTHENTICATE) || defined(ENCRYPT)

View File

@ -0,0 +1,88 @@
--- netkit-telnet-0.17.orig/telnetd/telnetd.c.reallynodns 2009-03-12 14:32:29.000000000 -0700
+++ netkit-telnet-0.17.orig/telnetd/telnetd.c 2009-03-12 14:51:59.000000000 -0700
@@ -85,6 +85,7 @@
int keepalive = 1;
char *loginprg = _PATH_LOGIN;
char *progname;
+int lookupself = 1;
extern void usage(void);
@@ -111,7 +112,7 @@
progname = *argv;
- while ((ch = getopt(argc, argv, "d:a:e:lhnr:I:D:B:sS:a:X:L:")) != EOF) {
+ while ((ch = getopt(argc, argv, "d:a:e:lhnr:I:D:B:sS:a:X:L:N")) != EOF) {
switch(ch) {
#ifdef AUTHENTICATE
@@ -210,6 +211,10 @@
keepalive = 0;
break;
+ case 'N':
+ lookupself = 0;
+ break;
+
#ifdef SecurID
case 's':
/* SecurID required */
@@ -393,6 +398,7 @@
#endif
fprintf(stderr, " [-L login_program]");
fprintf(stderr, " [-n]");
+ fprintf(stderr, " [-N]");
#ifdef SecurID
fprintf(stderr, " [-s]");
#endif
@@ -691,15 +697,20 @@
memset(&hints, '\0', sizeof(hints));
hints.ai_socktype = SOCK_STREAM;
- hints.ai_flags = AI_ADDRCONFIG;
+ hints.ai_flags = AI_CANONNAME;
gethostname(host_name, sizeof(host_name));
- if ((e = getaddrinfo(host_name, NULL, &hints, &res)) != 0) {
- if(e != EAI_AGAIN) {
- fprintf(stderr, "getaddrinfo: localhost %s\n",
- gai_strerror(e));
- exit(1);
- }
+ /*
+ * Optionally canonicalize the local host name, in case
+ * gethostname() returns foo, we want foo.example.com
+ */
+ if (lookupself &&
+ (e = getaddrinfo(host_name, NULL, &hints, &res)) == 0) {
+ if (res->ai_canonname) {
+ strncpy(host_name, res->ai_canonname,
+ sizeof(host_name)-1);
+ host_name[sizeof(host_name)-1] = 0;
+ }
}
if(res)
freeaddrinfo(res);
--- netkit-telnet-0.17.orig/telnetd/telnetd.8.reallynodns 2009-03-12 14:54:54.000000000 -0700
+++ netkit-telnet-0.17.orig/telnetd/telnetd.8 2009-03-12 14:56:58.000000000 -0700
@@ -42,7 +42,7 @@
protocol server
.Sh SYNOPSIS
.Nm /usr/sbin/in.telnetd
-.Op Fl hns
+.Op Fl hnNs
.Op Fl a Ar authmode
.Op Fl D Ar debugmode
.Op Fl L Ar loginprg
@@ -175,6 +175,10 @@
if the client is still there, so that idle connections
from machines that have crashed or can no longer
be reached may be cleaned up.
+.It Fl N
+Do not use DNS to canonicalize the local hostname;
+.Fn gethostname 2
+returns a fully qualified name.
.It Fl s
This option is only enabled if
.Nm telnetd

View File

@ -0,0 +1,19 @@
diff --git a/telnet/commands.c b/telnet/commands.c
index 636fb5c..c0cc9b9 100644
--- a/telnet/commands.c
+++ b/telnet/commands.c
@@ -2217,11 +2217,11 @@ cmdrc(char *m1, char *m2)
if (isspace(line[0]))
continue;
if (strncasecmp(line, m1, l1) == 0)
- strncpy(line, &line[l1], sizeof(line) - l1);
+ memmove(line, &line[l1], sizeof(line) - l1);
else if (strncasecmp(line, m2, l2) == 0)
- strncpy(line, &line[l2], sizeof(line) - l2);
+ memmove(line, &line[l2], sizeof(line) - l2);
else if (strncasecmp(line, "DEFAULT", 7) == 0)
- strncpy(line, &line[7], sizeof(line) - 7);
+ memmove(line, &line[7], sizeof(line) - 7);
else
continue;
if (line[0] != ' ' && line[0] != '\t' && line[0] != '\n')

View File

@ -0,0 +1,33 @@
diff -ru netkit-telnet-0.17.orig/telnet/main.c netkit-telnet-0.17/telnet/main.c
--- netkit-telnet-0.17.orig/telnet/main.c 2003-05-15 20:07:40.000000000 +0200
+++ netkit-telnet-0.17/telnet/main.c 2003-05-16 00:18:28.000000000 +0200
@@ -143,7 +143,7 @@
while ((ch = getopt(argc, argv, "78DEKLS:X:ab:cde:fFk:l:n:rt:x")) != -1) {
switch(ch) {
case '8':
- eight = 3; /* binary output and input */
+ binary = 3; /* send TELNET BINARY option for output and input */
break;
case '7':
eight = 0;
@@ -165,7 +165,7 @@
#endif
break;
case 'L':
- eight |= 2; /* binary output only */
+ binary = 2; /* send TELNET BINARY option for output only */
break;
case 'S':
{
diff -ru netkit-telnet-0.17.orig/telnet/telnet.1 netkit-telnet-0.17/telnet/telnet.1
--- netkit-telnet-0.17.orig/telnet/telnet.1 2003-05-15 20:07:40.000000000 +0200
+++ netkit-telnet-0.17/telnet/telnet.1 2003-05-15 23:38:37.000000000 +0200
@@ -76,6 +76,8 @@
.Pp
The options are as follows:
.Bl -tag -width Ds
+.It Fl 7
+Strip 8th bit on input and output. Telnet is 8-bit clean by default but doesn't send the TELNET BINARY option unless forced.
.It Fl 8
Specifies an 8-bit data path.
This causes an attempt to negotiate the

View File

@ -0,0 +1,179 @@
--- netkit-telnet-0.17/telnet/telnet.c.CAN-2005-468_469 2005-03-17 13:48:58.000000000 +0100
+++ netkit-telnet-0.17/telnet/telnet.c 2005-03-17 14:02:27.000000000 +0100
@@ -1310,22 +1310,66 @@
}
-unsigned char slc_reply[128];
+#define SLC_REPLY_SIZE 128
+unsigned char *slc_reply;
unsigned char *slc_replyp;
+unsigned char *slc_replyend;
void
slc_start_reply(void)
{
+ slc_reply = (unsigned char *)malloc(SLC_REPLY_SIZE);
+ if (slc_reply == NULL) {
+/*@*/ printf("slc_start_reply: malloc()/realloc() failed!!!\n");
+ slc_reply = slc_replyp = slc_replyend = NULL;
+ return;
+ }
+
slc_replyp = slc_reply;
+ slc_replyend = slc_reply + SLC_REPLY_SIZE;
*slc_replyp++ = IAC;
*slc_replyp++ = SB;
*slc_replyp++ = TELOPT_LINEMODE;
*slc_replyp++ = LM_SLC;
}
+static int
+slc_assure_buffer(int want_len);
+
+ static int
+slc_assure_buffer(int want_len)
+{
+ if ((slc_replyp + want_len) >= slc_replyend) {
+ int len;
+ int old_len = slc_replyp - slc_reply;
+ unsigned char *p;
+
+ len = old_len
+ + (want_len / SLC_REPLY_SIZE + 1) * SLC_REPLY_SIZE;
+ p = (unsigned char *)realloc(slc_reply, len);
+ if (p == NULL)
+ free(slc_reply);
+ slc_reply = p;
+ if (slc_reply == NULL) {
+/*@*/ printf("slc_add_reply: realloc() failed!!!\n");
+ slc_reply = slc_replyp = slc_replyend = NULL;
+ return 1;
+ }
+ slc_replyp = slc_reply + old_len;
+ slc_replyend = slc_reply + len;
+ }
+ return 0;
+}
+
void
slc_add_reply(unsigned char func, unsigned char flags, cc_t value)
{
+ if (slc_assure_buffer(6))
+ return;
+
+ if (slc_replyp == NULL)
+ return;
+
if ((*slc_replyp++ = func) == IAC)
*slc_replyp++ = IAC;
if ((*slc_replyp++ = flags) == IAC)
@@ -1339,6 +1383,12 @@
{
int len;
+ if (slc_assure_buffer(2))
+ return;
+
+ if (slc_replyp == NULL)
+ return;
+
*slc_replyp++ = IAC;
*slc_replyp++ = SE;
len = slc_replyp - slc_reply;
@@ -1456,7 +1506,7 @@
}
}
-#define OPT_REPLY_SIZE 256
+#define OPT_REPLY_SIZE 1024
unsigned char *opt_reply;
unsigned char *opt_replyp;
unsigned char *opt_replyend;
@@ -1490,10 +1540,38 @@
env_opt_start_info(void)
{
env_opt_start();
- if (opt_replyp)
+ if (opt_replyp && (opt_replyp > opt_reply))
opt_replyp[-1] = TELQUAL_INFO;
}
+static int
+env_opt_assure_buffer(int want_len);
+
+ static int
+env_opt_assure_buffer(int want_len)
+{
+ if ((opt_replyp + want_len) >= opt_replyend) {
+ int len;
+ unsigned char *p;
+ int old_len = opt_replyp - opt_reply;
+
+ len = old_len
+ + (want_len / OPT_REPLY_SIZE + 1) * OPT_REPLY_SIZE;
+ p = (unsigned char *)realloc(opt_reply, len);
+ if (p == NULL)
+ free(opt_reply);
+ opt_reply = p;
+ if (opt_reply == NULL) {
+/*@*/ printf("env_opt_add: realloc() failed!!!\n");
+ opt_reply = opt_replyp = opt_replyend = NULL;
+ return 1;
+ }
+ opt_replyp = opt_reply + old_len;
+ opt_replyend = opt_reply + len;
+ }
+ return 0;
+}
+
void
env_opt_add(unsigned char *ep)
{
@@ -1515,25 +1593,12 @@
return;
}
vp = env_getvalue(ep, 1);
- if (opt_replyp + (vp ? strlen((char *)vp) : 0) +
- strlen((char *)ep) + 6 > opt_replyend)
- {
- int len;
- unsigned char *p;
- opt_replyend += OPT_REPLY_SIZE;
- len = opt_replyend - opt_reply;
- p = (unsigned char *)realloc(opt_reply, len);
- if (p == NULL)
- free(opt_reply);
- opt_reply = p;
- if (opt_reply == NULL) {
-/*@*/ printf("env_opt_add: realloc() failed!!!\n");
- opt_reply = opt_replyp = opt_replyend = NULL;
- return;
- }
- opt_replyp = opt_reply + len - (opt_replyend - opt_replyp);
- opt_replyend = opt_reply + len;
- }
+
+ /* use the double length in case it gots escaped */
+ if (env_opt_assure_buffer((vp ? strlen((char *)vp)*2 : 0) +
+ strlen((char *)ep)*2 + 6))
+ return;
+
if (opt_welldefined((char *)ep))
#ifdef OLD_ENVIRON
if (telopt_environ == TELOPT_OLD_ENVIRON)
@@ -1588,8 +1653,14 @@
{
int len;
+ if (opt_reply == NULL) /*XXX*/
+ return; /*XXX*/
+
+
len = opt_replyp - opt_reply + 2;
if (emptyok || len > 6) {
+ if (env_opt_assure_buffer(2))
+ return;
*opt_replyp++ = IAC;
*opt_replyp++ = SE;
if (NETROOM() > len) {

View File

@ -0,0 +1,12 @@
diff -ur netkit-telnet-0.17/telnetd/setproctitle.c netkit-telnet-0.17.new/telnetd/setproctitle.c
--- netkit-telnet-0.17/telnetd/setproctitle.c 1999-12-11 00:06:39.000000000 +0100
+++ netkit-telnet-0.17.new/telnetd/setproctitle.c 2004-06-28 16:48:51.153514392 +0200
@@ -139,7 +139,7 @@
(void) strcpy(Argv[0], buf);
p = &Argv[0][i];
while (p < LastArgv)
- *p++ = ' ';
+ *p++ = '\0';
Argv[1] = NULL;
}

View File

@ -0,0 +1,11 @@
--- netkit-telnet-0.17/telnetd/telnetd.c.cleanup_race 2005-01-11 18:39:49.578123000 -0500
+++ netkit-telnet-0.17/telnetd/telnetd.c 2005-01-11 18:42:45.909616000 -0500
@@ -1081,6 +1081,8 @@
if (FD_ISSET(p, &obits) && (pfrontp - pbackp) > 0)
ptyflush();
}
+ /* to avoid a race for wtmp lock */
+ signal(SIGCHLD, SIG_IGN);
cleanup(0);
} /* end of telnet */

View File

@ -0,0 +1,23 @@
--- netkit-telnet-0.17/configure.confverb 2000-07-29 20:00:29.000000000 +0200
+++ netkit-telnet-0.17/configure 2004-07-05 10:50:36.492963840 +0200
@@ -263,14 +263,19 @@
cat <<EOF >__conftest.cc
#include <unistd.h>
#include <signal.h>
-int count=0;
+volatile int count=0;
void handle(int foo) { count++; }
int main() {
+ sigset_t sset;
int pid=getpid();
+ sigemptyset(&sset);
+ sigaddset(&sset, SIGINT);
+ sigprocmask(SIG_UNBLOCK, &sset, NULL);
signal(SIGINT, handle);
kill(pid,SIGINT);
kill(pid,SIGINT);
kill(pid,SIGINT);
+ sleep(1);
if (count!=3) return 1;
return 0;
}

View File

@ -0,0 +1,84 @@
--- netkit-telnet-0.17-pre-20000204/telnet/commands.c.env Thu Apr 8 19:30:20 1999
+++ netkit-telnet-0.17-pre-20000204/telnet/commands.c Tue May 16 17:19:47 2000
@@ -1815,11 +1815,11 @@
}
unsigned char *
-env_getvalue(unsigned char *var)
+env_getvalue(unsigned char *var, int exported_only)
{
- struct env_lst *ep;
+ struct env_lst *ep = env_find(var);
- if ((ep = env_find(var)))
+ if (ep && (!exported_only || ep->export))
return(ep->value);
return(NULL);
}
--- netkit-telnet-0.17-pre-20000204/telnet/telnet.c.env Tue May 16 17:19:47 2000
+++ netkit-telnet-0.17-pre-20000204/telnet/telnet.c Tue May 16 17:19:47 2000
@@ -438,7 +438,7 @@
#endif
case TELOPT_XDISPLOC: /* X Display location */
- if (env_getvalue((unsigned char *)"DISPLAY"))
+ if (env_getvalue((unsigned char *)"DISPLAY", 0))
new_state_ok = 1;
break;
@@ -693,7 +693,7 @@
resettermname = 0;
if (tnamep && tnamep != unknown)
free(tnamep);
- if ((tname = (char *)env_getvalue((unsigned char *)"TERM")) &&
+ if ((tname = (char *)env_getvalue((unsigned char *)"TERM", 0)) &&
(setupterm(tname, 1, &errret) == 0)) {
tnamep = mklist(ttytype, tname);
} else {
@@ -870,7 +870,7 @@
unsigned char temp[50], *dp;
int len;
- if ((dp = env_getvalue((unsigned char *)"DISPLAY")) == NULL) {
+ if ((dp = env_getvalue((unsigned char *)"DISPLAY", 0)) == NULL) {
/*
* Something happened, we no longer have a DISPLAY
* variable. So, turn off the option.
@@ -1527,7 +1527,7 @@
env_opt_add(ep);
return;
}
- vp = env_getvalue(ep);
+ vp = env_getvalue(ep, 1);
if (opt_replyp + (vp ? strlen((char *)vp) : 0) +
strlen((char *)ep) + 6 > opt_replyend)
{
@@ -2170,7 +2170,7 @@
send_will(TELOPT_LINEMODE, 1);
send_will(TELOPT_NEW_ENVIRON, 1);
send_do(TELOPT_STATUS, 1);
- if (env_getvalue((unsigned char *)"DISPLAY"))
+ if (env_getvalue((unsigned char *)"DISPLAY", 0))
send_will(TELOPT_XDISPLOC, 1);
if (binary)
tel_enter_binary(binary);
--- netkit-telnet-0.17-pre-20000204/telnet/externs.h.env Mon Feb 8 15:56:11 1999
+++ netkit-telnet-0.17-pre-20000204/telnet/externs.h Tue May 16 17:19:47 2000
@@ -203,7 +203,7 @@
void env_send (unsigned char *);
void env_list (void);
unsigned char * env_default(int init, int welldefined);
-unsigned char * env_getvalue(unsigned char *var);
+unsigned char * env_getvalue(unsigned char *var, int exported_only);
void set_escape_char(char *s);
unsigned long sourceroute(char *arg, char **cpp, int *lenp);
@@ -335,7 +335,7 @@
void env_opt_end (int);
unsigned char *env_default (int, int);
-unsigned char *env_getvalue (unsigned char *);
+unsigned char *env_getvalue (unsigned char *, int);
int get_status (void);
int dosynch (void);

View File

@ -0,0 +1,24 @@
diff -up netkit-telnet-0.17/telnet/sys_bsd.c.errnosysbsd netkit-telnet-0.17/telnet/sys_bsd.c
--- netkit-telnet-0.17/telnet/sys_bsd.c.errnosysbsd 2007-09-20 10:57:58.000000000 +0200
+++ netkit-telnet-0.17/telnet/sys_bsd.c 2007-09-20 11:10:08.000000000 +0200
@@ -375,6 +375,7 @@ TerminalNewMode(int f)
int onoff;
int old;
cc_t esc;
+ int err;
globalmode = f&~MODE_FORCE;
if (prevmode == f)
@@ -407,6 +408,12 @@ TerminalNewMode(int f)
tcsetattr(tin, TCSADRAIN, &tmp_tc);
#endif /* USE_TERMIO */
old = ttyflush(SYNCHing|flushout);
+ if (old < 0) {
+ err = errno;
+ if (! ((err == EINTR) || (err == EAGAIN) || (err == ENOSPC))) {
+ break;
+ }
+ }
} while (old < 0 || old > 1);
}

View File

@ -0,0 +1,132 @@
diff --git a/commands.c b/commands.c
index 49619ac..636fb5c 100644
--- a/telnet/commands.c
+++ b/telnet/commands.c
@@ -2267,6 +2267,7 @@ tn(int argc, char *argv[])
char *srp = 0;
int srlen;
#endif
+ int family = AF_UNSPEC;
char *cmd, *hostp = 0, *portp = 0, *user = 0, *aliasp = 0;
int retry;
#ifdef NI_WITHSCOPEID
@@ -2317,6 +2318,21 @@ tn(int argc, char *argv[])
autologin = 1;
continue;
}
+
+ if (strcmp(*argv, "-6") == 0) {
+ --argc; ++argv;
+#ifdef AF_INET6
+ family = AF_INET6;
+#else
+ puts("IPv6 unsupported");
+#endif
+ continue;
+ }
+ if (strcmp(*argv, "-4") == 0) {
+ --argc; ++argv;
+ family = AF_INET;
+ continue;
+ }
if (hostp == 0) {
hostp = *argv++;
--argc;
@@ -2355,7 +2371,7 @@ tn(int argc, char *argv[])
{
hostname = hostp;
memset(&hints, 0, sizeof(hints));
- hints.ai_family = PF_UNSPEC;
+ hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_CANONNAME;
if (portp == NULL) {
diff --git a/main.c b/main.c
index 5fa96e8..599f0af 100644
--- a/telnet/main.c
+++ b/telnet/main.c
@@ -80,10 +80,10 @@ usage(void)
fprintf(stderr, "Usage: %s %s%s%s%s\n",
prompt,
#ifdef AUTHENTICATION
- "[-8] [-E] [-K] [-L] [-S tos] [-X atype] [-a] [-c] [-d] [-e char]",
+ "[-4] [-6] [-8] [-E] [-K] [-L] [-S tos] [-X atype] [-a] [-c] [-d] [-e char]",
"\n\t[-k realm] [-l user] [-f/-F] [-n tracefile] [-b hostalias ] ",
#else
- "[-8] [-E] [-L] [-S tos] [-a] [-c] [-d] [-e char] [-l user]",
+ "[-4] [-6] [-8] [-E] [-L] [-S tos] [-a] [-c] [-d] [-e char] [-l user]",
"\n\t[-n tracefile] [-b hostalias ] ",
#endif
#if defined(TN3270) && defined(unix)
@@ -116,6 +116,7 @@ main(int argc, char *argv[])
#endif
int ch;
char *user, *alias;
+ int family;
#ifdef FORWARD
extern int forward_flags;
#endif /* FORWARD */
@@ -130,7 +131,6 @@ main(int argc, char *argv[])
prompt = argv[0];
user = alias = NULL;
-
rlogin = (strncmp(prompt, "rlog", 4) == 0) ? '~' : _POSIX_VDISABLE;
/*
@@ -139,9 +139,19 @@ main(int argc, char *argv[])
* passed
*/
autologin = -1;
-
- while ((ch = getopt(argc, argv, "78DEKLS:X:ab:cde:fFk:l:n:rt:x")) != -1) {
+ family = 0;
+ while ((ch = getopt(argc, argv, "4678DEKLS:X:ab:cde:fFk:l:n:rt:x")) != -1) {
switch(ch) {
+ case '4':
+ family = AF_INET;
+ break;
+ case '6':
+#ifdef AF_INET6
+ family = AF_INET6;
+#else
+ fputs("IPv6 unsupported\n", stderr);
+#endif
+ break;
case '8':
binary = 3; /* send TELNET BINARY option for output and input */
break;
@@ -340,6 +350,9 @@ main(int argc, char *argv[])
*argp++ = "-b";
*argp++ = alias;
}
+ if (family) {
+ *argp++ = family == AF_INET ? "-4" : "-6";
+ }
*argp++ = argv[0]; /* host */
if (argc > 1)
*argp++ = argv[1]; /* port */
diff --git a/telnet.1 b/telnet.1
index 50015a6..f30e034 100644
--- a/telnet/telnet.1
+++ b/telnet/telnet.1
@@ -44,7 +44,7 @@
protocol
.Sh SYNOPSIS
.Nm telnet
-.Op Fl 8EFKLacdfrx
+.Op Fl 468EFKLacdfrx
.Op Fl X Ar authtype
.Op Fl b Ar hostalias
.Op Fl e Ar escapechar
@@ -76,6 +76,10 @@ command with those arguments.
.Pp
The options are as follows:
.Bl -tag -width Ds
+.It Fl 4
+Force IPv4 address resolution.
+.It Fl 6
+Force IPv6 address resolution.
.It Fl 7
Strip 8th bit on input and output. Telnet is 8-bit clean by default but doesn't send the TELNET BINARY option unless forced.
.It Fl 8

View File

@ -0,0 +1,81 @@
--- netkit-telnet-0.17/telnetd/utility.c.issue Sun Dec 12 09:59:45 1999
+++ netkit-telnet-0.17/telnetd/utility.c Wed Jul 18 11:14:11 2001
@@ -460,13 +460,13 @@
putlocation = where;
while (*cp) {
- if (*cp != '%') {
+ if (*cp != '%' && *cp != '\\') {
putchr(*cp++);
continue;
}
switch (*++cp) {
- case 't':
+ case 'l':
slash = strrchr(line, '/');
if (slash == NULL)
putstr(line);
@@ -474,21 +474,28 @@
putstr(slash+1);
break;
+ case 'n':
case 'h':
putstr(editedhost);
break;
+ case 't':
case 'd':
(void)time(&t);
(void)strftime(db, sizeof(db), fmtstr, localtime(&t));
putstr(db);
break;
+ case '\\':
+ putchr('\\');
+ break;
+
case '%':
putchr('%');
break;
case 'D':
+ case 'o':
{
char buff[128];
@@ -515,7 +522,7 @@
c = fgetc(fp);
} while (c != EOF && c != '\n');
continue;
- } else if (c == '%') {
+ } else if (c == '%' || c == '\\') {
buff[0] = c;
c = fgetc(fp);
if (c == EOF) break;
--- netkit-telnet-0.17/telnetd/issue.net.5.issue Sun Jul 30 19:57:09 2000
+++ netkit-telnet-0.17/telnetd/issue.net.5 Wed Jul 18 11:03:09 2001
@@ -15,16 +15,17 @@
.Pa /etc/issue.net
is a text file which contains a message or system identification to be
printed before the login prompt of a telnet session. It may contain
-various `%-char' sequences. The following sequences are supported by
+various `%-char' (or, alternatively, '\\-char') sequences. The following
+sequences are supported by
.Ic telnetd :
.Bl -tag -offset indent -compact -width "abcde"
-.It %t
+.It %l
- show the current tty
-.It %h
+.It %h, %n
- show the system node name (FQDN)
-.It %D
+.It %D, %o
- show the name of the NIS domain
-.It %d
+.It %d, %t
- show the current time and date
.It %s
- show the name of the operating system

View File

@ -0,0 +1,92 @@
diff -up netkit-telnet-0.17/telnetd/utility.c.orig netkit-telnet-0.17/telnetd/utility.c
--- netkit-telnet-0.17/telnetd/utility.c.orig 2020-03-25 11:53:56.772624325 +0100
+++ netkit-telnet-0.17/telnetd/utility.c 2020-03-25 11:54:01.966601415 +0100
@@ -221,31 +221,38 @@ void ptyflush(void)
*/
static
char *
-nextitem(char *current)
+nextitem(char *current, const char *endp)
{
+ if (current >= endp) {
+ return NULL;
+ }
if ((*current&0xff) != IAC) {
return current+1;
}
+ if (current+1 >= endp) {
+ return NULL;
+ }
switch (*(current+1)&0xff) {
case DO:
case DONT:
case WILL:
case WONT:
- return current+3;
+ return current+3 <= endp ? current+3 : NULL;
case SB: /* loop forever looking for the SE */
{
register char *look = current+2;
- for (;;) {
+ while (look < endp) {
if ((*look++&0xff) == IAC) {
- if ((*look++&0xff) == SE) {
+ if (look < endp && (*look++&0xff) == SE) {
return look;
}
}
}
+ return NULL;
}
default:
- return current+2;
+ return current+2 <= endp ? current+2 : NULL;
}
} /* end of nextitem */
@@ -271,7 +278,7 @@ void netclear(void)
register char *thisitem, *next;
char *good;
#define wewant(p) ((nfrontp > p) && ((*p&0xff) == IAC) && \
- ((*(p+1)&0xff) != EC) && ((*(p+1)&0xff) != EL))
+ (nfrontp > p+1 && (((*(p+1)&0xff) != EC) && ((*(p+1)&0xff) != EL))))
#if defined(ENCRYPT)
thisitem = nclearto > netobuf ? nclearto : netobuf;
@@ -279,7 +286,7 @@ void netclear(void)
thisitem = netobuf;
#endif
- while ((next = nextitem(thisitem)) <= nbackp) {
+ while ((next = nextitem(thisitem, nbackp)) != NULL && next <= nbackp) {
thisitem = next;
}
@@ -291,20 +298,23 @@ void netclear(void)
good = netobuf; /* where the good bytes go */
#endif
- while (nfrontp > thisitem) {
+ while (thisitem != NULL && nfrontp > thisitem) {
if (wewant(thisitem)) {
int length;
next = thisitem;
do {
- next = nextitem(next);
- } while (wewant(next) && (nfrontp > next));
+ next = nextitem(next, nfrontp);
+ } while (next != NULL && wewant(next) && (nfrontp > next));
+ if (next == NULL) {
+ next = nfrontp;
+ }
length = next-thisitem;
bcopy(thisitem, good, length);
good += length;
thisitem = next;
} else {
- thisitem = nextitem(thisitem);
+ thisitem = nextitem(thisitem, nfrontp);
}
}

View File

@ -0,0 +1,37 @@
diff -u telnet/commands.c telnet.new/commands.c
--- telnet/commands.c Sat Sep 1 12:55:18 2001
+++ telnet.new/commands.c Sat Sep 1 12:54:36 2001
@@ -2354,6 +2354,7 @@
hints.ai_flags = AI_CANONNAME;
if (portp == NULL) {
portp = "telnet";
+ telnetport = 1;
} else if (*portp == '-') {
portp++;
telnetport = 1;
@@ -2397,7 +2398,6 @@
if (error) {
warn("%s: %s", aliasp, gai_strerror(error));
close(net);
- freeaddrinfo(ares);
continue;
}
if (bind(net, ares->ai_addr, ares->ai_addrlen) < 0) {
@@ -2414,7 +2414,7 @@
perror("setsockopt (IP_OPTIONS)");
#endif
#if defined(IPPROTO_IP) && defined(IP_TOS)
- {
+ if (res->ai_family == AF_INET) {
# if defined(HAS_GETTOS)
struct tosent *tp;
if (tos < 0 && (tp = gettosbyname("telnet", "tcp")))
@@ -2438,7 +2438,7 @@
char hbuf[NI_MAXHOST];
if (getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, sizeof(hbuf),
- NULL, 0, NI_NUMERICHOST) != 0) {
+ NULL, 0, niflags) != 0) {
strcpy(hbuf, "(invalid)");
}
fprintf(stderr, "telnet: connect to address %s: %s\n", hbuf,

View File

@ -0,0 +1,42 @@
--- a/telnetd/telnetd.c
+++ b/telnetd/telnetd.c
@@ -772,7 +772,6 @@ void telnet(int f, int p)
int on = 1;
char *HE;
const char *IM;
- int pty_read_ok = 0; /* track whether the pty read has worked yet */
/*
* Initialize the slc mapping table.
@@ -1086,19 +1085,24 @@ void telnet(int f, int p)
* Something to read from the pty...
*/
if (FD_ISSET(p, &ibits)) {
+ int eio = 0;
+read_pty:
pcc = read(p, ptyibuf, BUFSIZ);
- /*
- * On some systems, if we try to read something
- * off the master side before the slave side is
- * opened, we get EIO.
- */
- if (pcc < 0 && (errno == EWOULDBLOCK || (errno == EIO && pty_read_ok == 0))) {
+ if (pcc < 0 && errno == EWOULDBLOCK) {
pcc = 0;
}
+ /*
+ * If we try to read something off the master side while the slave
+ * side is temporarily closed by login process, we get EIO.
+ */
+ else if (pcc < 0 && errno == EIO && eio < 1000) {
+ eio++;
+ poll(NULL, 0, 10);
+ goto read_pty;
+ }
else {
if (pcc <= 0)
break;
- pty_read_ok = 1; /* mark connection up for read */
#ifdef LINEMODE
/*
* If ioctl from pty, pass it through net

View File

@ -0,0 +1,208 @@
diff -up netkit-telnet-0.17/telnetd/ext.h.sa-01-49 netkit-telnet-0.17/telnetd/ext.h
--- netkit-telnet-0.17/telnetd/ext.h.sa-01-49 1999-12-12 15:59:44.000000000 +0100
+++ netkit-telnet-0.17/telnetd/ext.h 2011-01-20 22:39:54.000000000 +0100
@@ -86,7 +86,10 @@ extern char *neturg; /* one past last b
extern int pcc, ncc;
/* printf into netobuf */
-void netoprintf(const char *fmt, ...) __attribute((format (printf, 1, 2)));
+/* void netoprintf(const char *fmt, ...) __attribute((format (printf, 1, 2))); */
+#define netoprintf output_data
+int output_data(const char *, ...) __attribute((format (printf, 1, 2)));
+void output_datalen(const char *, int);
extern int pty, net;
extern char *line;
@@ -182,7 +185,10 @@ void tty_setsofttab(int);
void tty_tspeed(int);
void willoption(int);
void wontoption(int);
+
+#if 0
void writenet(unsigned char *, int);
+#endif
#if defined(ENCRYPT)
extern void (*encrypt_output)(unsigned char *, int);
diff -up netkit-telnet-0.17/telnetd/slc.c.sa-01-49 netkit-telnet-0.17/telnetd/slc.c
--- netkit-telnet-0.17/telnetd/slc.c.sa-01-49 1999-12-12 15:59:44.000000000 +0100
+++ netkit-telnet-0.17/telnetd/slc.c 2011-01-20 22:39:54.000000000 +0100
@@ -183,7 +183,7 @@ int end_slc(unsigned char **bufp) {
else {
snprintf(slcbuf+slcoff, sizeof(slcbuf)-slcoff, "%c%c", IAC, SE);
slcoff += 2;
- writenet(slcbuf, slcoff);
+ output_datalen(slcbuf, slcoff);
netflush(); /* force it out immediately */
}
}
diff -up netkit-telnet-0.17/telnetd/state.c.sa-01-49 netkit-telnet-0.17/telnetd/state.c
--- netkit-telnet-0.17/telnetd/state.c.sa-01-49 1999-12-12 20:41:44.000000000 +0100
+++ netkit-telnet-0.17/telnetd/state.c 2011-01-20 22:43:34.000000000 +0100
@@ -37,6 +37,7 @@
char state_rcsid[] =
"$Id: state.c,v 1.12 1999/12/12 19:41:44 dholland Exp $";
+#include <stdarg.h>
#include "telnetd.h"
int not42 = 1;
@@ -1365,7 +1366,7 @@ void send_status(void) {
ADD(IAC);
ADD(SE);
- writenet(statusbuf, ncp - statusbuf);
+ output_datalen(statusbuf, ncp - statusbuf);
netflush(); /* Send it on its way */
DIAG(TD_OPTIONS, {printsub('>', statusbuf, ncp - statusbuf); netflush();});
diff -up netkit-telnet-0.17/telnetd/termstat.c.sa-01-49 netkit-telnet-0.17/telnetd/termstat.c
--- netkit-telnet-0.17/telnetd/termstat.c.sa-01-49 1999-12-12 15:59:45.000000000 +0100
+++ netkit-telnet-0.17/telnetd/termstat.c 2011-01-20 22:39:54.000000000 +0100
@@ -128,7 +128,6 @@ static int _terminit = 0;
void
localstat()
{
- void netflush();
int need_will_echo = 0;
/*
diff -up netkit-telnet-0.17/telnetd/utility.c.sa-01-49 netkit-telnet-0.17/telnetd/utility.c
--- netkit-telnet-0.17/telnetd/utility.c.sa-01-49 2011-01-20 22:39:54.000000000 +0100
+++ netkit-telnet-0.17/telnetd/utility.c 2011-01-20 22:48:02.000000000 +0100
@@ -38,8 +38,10 @@ char util_rcsid[] =
"$Id: utility.c,v 1.11 1999/12/12 14:59:45 dholland Exp $";
#define PRINTOPTIONS
+#define _GNU_SOURCE
#include <stdarg.h>
+#include <stdio.h>
#include <sys/utsname.h>
#ifdef AUTHENTICATE
@@ -52,6 +54,53 @@ char util_rcsid[] =
* utility functions performing io related tasks
*/
+/*
+ * This function appends data to nfrontp and advances nfrontp.
+ * Returns the number of characters written altogether (the
+ * buffer may have been flushed in the process).
+ */
+
+int
+output_data(const char *format, ...)
+{
+ va_list args;
+ int len;
+ char *buf;
+
+ va_start(args, format);
+ if ((len = vasprintf(&buf, format, args)) == -1)
+ return -1;
+ output_datalen(buf, len);
+ va_end(args);
+ free(buf);
+ return (len);
+}
+
+void
+output_datalen(const char *buf, int len)
+{
+ int remaining, copied;
+
+ remaining = BUFSIZ - (nfrontp - netobuf);
+ while (len > 0) {
+ /* Free up enough space if the room is too low*/
+ if ((len > BUFSIZ ? BUFSIZ : len) > remaining) {
+ netflush();
+ remaining = BUFSIZ - (nfrontp - netobuf);
+ }
+
+ /* Copy out as much as will fit */
+ copied = remaining > len ? len : remaining;
+ memmove(nfrontp, buf, copied);
+ nfrontp += copied;
+ len -= copied;
+ remaining -= copied;
+ buf += copied;
+ }
+ return;
+}
+
+/**
void
netoprintf(const char *fmt, ...)
{
@@ -67,7 +116,7 @@ netoprintf(const char *fmt, ...)
va_end(ap);
if (len<0 || len==maxsize) {
- /* didn't fit */
+ / * did not fit * /
netflush();
}
else {
@@ -76,6 +125,7 @@ netoprintf(const char *fmt, ...)
}
nfrontp += len;
}
+*/
/*
* ttloop
@@ -273,10 +323,15 @@ netflush(void)
int n;
if ((n = nfrontp - nbackp) > 0) {
+
+#if 0
+ /* XXX This causes output_data() to recurse and die */
DIAG(TD_REPORT,
{ netoprintf("td: netflush %d chars\r\n", n);
n = nfrontp - nbackp; /* update count */
});
+#endif
+
#if defined(ENCRYPT)
if (encrypt_output) {
char *s = nclearto ? nclearto : nbackp;
@@ -310,11 +365,14 @@ netflush(void)
}
}
}
- if (n < 0) {
- if (errno == EWOULDBLOCK || errno == EINTR)
- return;
- cleanup(0);
- }
+
+ if (n == -1) {
+ if (errno == EWOULDBLOCK || errno == EINTR)
+ return;
+ cleanup(0);
+ /* NOTREACHED */
+ }
+
nbackp += n;
#if defined(ENCRYPT)
if (nbackp > nclearto)
@@ -332,7 +390,7 @@ netflush(void)
return;
} /* end of netflush */
-
+#if 0
/*
* writenet
*
@@ -355,7 +413,7 @@ void writenet(register unsigned char *pt
nfrontp += len;
} /* end of writenet */
-
+#endif
/*
* miscellaneous functions doing a variety of little jobs follow ...

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,48 @@
--- netkit-telnet-0.17/telnet/commands.c.old 2006-04-30 10:24:49.000000000 -0700
+++ netkit-telnet-0.17/telnet/commands.c 2006-04-30 10:37:10.000000000 -0700
@@ -1669,9 +1669,15 @@
/* If this is not the full name, try to get it via DNS */
if (strchr(hbuf, '.') == 0) {
- struct hostent *he = gethostbyname(hbuf);
- if (he != 0)
- strncpy(hbuf, he->h_name, sizeof hbuf-1);
+ struct addrinfo hints;
+ struct addrinfo *res;
+ memset (&hints, '\0', sizeof (hints));
+ hints.ai_flags = AI_V4MAPPED | AI_ADDRCONFIG | AI_CANONNAME;
+ if (getaddrinfo (hbuf, NULL, &hints, &res) == 0) {
+ if (res->ai_canonname != NULL)
+ strncpy(hbuf, res->ai_canonname, sizeof hbuf-1);
+ freeaddrinfo (res);
+ }
hbuf[sizeof hbuf-1] = '\0';
}
@@ -2832,17 +2838,15 @@
if (!c)
cp2 = 0;
- if ((tmp = inet_addr(cp)) != -1) {
- sin_addr.s_addr = tmp;
- } else if ((host = gethostbyname(cp))) {
-#if defined(h_addr)
- memmove((caddr_t)&sin_addr,
- host->h_addr_list[0],
- sizeof(sin_addr));
-#else
- memmove((caddr_t)&sin_addr, host->h_addr,
- sizeof(sin_addr));
-#endif
+ struct addrinfo hints;
+ memset (&hints, '\0', sizeof (hints));
+ // XXX The code here seems to allow only IPv4 addresses.
+ hints.ai_family = AF_INET;
+ hints.ai_flags = AI_ADDRCONFIG;
+ struct addrinfo *aires;
+ if (getaddrinfo (cp, NULL, &hints, &aires) == 0) {
+ sin_addr = ((struct sockaddr_in *) aires->ai_addr)->sin_addr;
+ freeaddrinfo (aires);
} else {
*cpp = cp;
return(0);

View File

@ -0,0 +1,75 @@
diff --git a/telnetd/telnetd.8 b/telnetd/telnetd.8
index 02b48c7..c72ab76 100644
--- a/telnetd/telnetd.8
+++ b/telnetd/telnetd.8
@@ -42,7 +42,7 @@
protocol server
.Sh SYNOPSIS
.Nm /usr/sbin/in.telnetd
-.Op Fl hnNs
+.Op Fl ihnNs
.Op Fl a Ar authmode
.Op Fl D Ar debugmode
.Op Fl L Ar loginprg
@@ -158,6 +158,10 @@ option may be used to enable encryption debugging code.
.It Fl h
Disables the printing of host-specific information before
login has been completed.
+.It Fl i
+Disable reverse DNS lookups and use the numeric IP address in logs
+and REMOTEHOST environment variable. (-i switch corresponds to
+utilities like last)
.It Fl L Ar loginprg
This option may be used to specify a different login program.
By default,
diff --git a/telnetd/telnetd.c b/telnetd/telnetd.c
index a4988a9..2ac8bc1 100644
--- a/telnetd/telnetd.c
+++ b/telnetd/telnetd.c
@@ -84,6 +84,7 @@ int hostinfo = 1; /* do we print login banner? */
int debug = 0;
int debugsix = 0;
int keepalive = 1;
+int numeric_hosts = 0;
char *loginprg = _PATH_LOGIN;
char *progname;
int lookupself = 1;
@@ -113,7 +114,7 @@ main(int argc, char *argv[], char *env[])
progname = *argv;
- while ((ch = getopt(argc, argv, "d:a:e:lhnr:I:D:B:sS:a:X:L:N")) != EOF) {
+ while ((ch = getopt(argc, argv, "d:a:e:ilhnr:I:D:B:sS:a:X:L:N")) != EOF) {
switch(ch) {
#ifdef AUTHENTICATE
@@ -196,6 +197,14 @@ main(int argc, char *argv[], char *env[])
break;
#endif /* AUTHENTICATE */
+ /*
+ * Use ip address instead of hostname when
+ * calling login process.
+ */
+ case 'i':
+ numeric_hosts = 1;
+ break;
+
case 'h':
hostinfo = 0;
break;
@@ -663,10 +672,12 @@ doit(struct sockaddr *who, socklen_t wholen)
int error = -1;
char namebuf[255];
- error = getnameinfo(who, wholen, namebuf, sizeof(namebuf), NULL, 0, 0);
+ /* if we don't want hostname '-i', skip this call to getnameinfo */
+ if (numeric_hosts == 0)
+ error = getnameinfo(who, wholen, namebuf, sizeof(namebuf), NULL, 0, 0);
/* if we can't get a hostname now, settle for an address */
- if(error == EAI_AGAIN)
+ if(error == EAI_AGAIN || numeric_hosts != 0)
error = getnameinfo(who, wholen, namebuf, sizeof(namebuf),
NULL, 0, NI_NUMERICHOST);

View File

@ -0,0 +1,47 @@
--- netkit-telnet-0.17/telnetd/telnetd.c.orig 2011-01-31 12:05:37.942942871 -0600
+++ netkit-telnet-0.17/telnetd/telnetd.c 2011-01-31 18:20:22.400743499 -0600
@@ -82,6 +82,7 @@ char ptyibuf2[BUFSIZ];
int hostinfo = 1; /* do we print login banner? */
int debug = 0;
+int debugsix = 0;
int keepalive = 1;
char *loginprg = _PATH_LOGIN;
char *progname;
@@ -150,8 +151,11 @@ main(int argc, char *argv[], char *env[]
#endif /* BFTPDAEMON */
case 'd':
- if (strcmp(optarg, "ebug") == 0) {
+ if (strncmp(optarg, "ebug", 4) == 0) {
debug++;
+ if (strncmp(optarg, "ebug6", 5) == 0) {
+ debugsix++;
+ }
break;
}
usage();
@@ -271,6 +275,8 @@ main(int argc, char *argv[], char *env[]
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_ADDRCONFIG | AI_PASSIVE;
hints.ai_protocol = IPPROTO_TCP;
+ if (debugsix)
+ hints.ai_family = AF_INET6;
if (argc == 0) {
if (getaddrinfo(NULL, "telnet", &hints, &ai) != 0) {
@@ -380,12 +386,12 @@ usage(void)
{
fprintf(stderr, "Usage: telnetd");
#ifdef AUTHENTICATE
- fprintf(stderr, " [-a (debug|other|user|valid|off)]\n\t");
+ fprintf(stderr, " [-a (debug|debug6|other|user|valid|off)]\n\t");
#endif
#ifdef BFTPDAEMON
fprintf(stderr, " [-B]");
#endif
- fprintf(stderr, " [-debug]");
+ fprintf(stderr, " [-debug|-debug6]");
#ifdef DIAGNOSTICS
fprintf(stderr, " [-D (options|report|exercise|netdata|ptydata)]\n\t");
#endif

View File

@ -0,0 +1,21 @@
diff -up netkit-telnet-0.17/telnetd/telnetd.c.rh678324 netkit-telnet-0.17/telnetd/telnetd.c
--- netkit-telnet-0.17/telnetd/telnetd.c.rh678324 2011-06-28 14:51:09.996726296 +0200
+++ netkit-telnet-0.17/telnetd/telnetd.c 2011-06-28 14:52:38.212726283 +0200
@@ -92,7 +92,7 @@ extern void usage(void);
int
main(int argc, char *argv[], char *env[])
{
- struct sockaddr from;
+ struct sockaddr_storage from;
int on = 1;
socklen_t fromlen;
register int ch;
@@ -344,7 +344,7 @@ main(int argc, char *argv[], char *env[]
openlog("telnetd", LOG_PID | LOG_ODELAY, LOG_DAEMON);
fromlen = sizeof (from);
- if (getpeername(s, &from, &fromlen) < 0) {
+ if (getpeername(s, (struct sockaddr *)&from, &fromlen) < 0) {
fprintf(stderr, "%s: ", progname);
perror("getpeername");
_exit(1);

View File

@ -0,0 +1,24 @@
--- netkit-telnet-0.17/telnet/commands.c.hostalias 2011-07-11 08:07:22.000000000 -0400
+++ netkit-telnet-0.17/telnet/commands.c 2011-07-11 08:10:12.131039660 -0400
@@ -2400,17 +2400,21 @@
ahints.ai_family = PF_UNSPEC;
ahints.ai_socktype = SOCK_STREAM;
ahints.ai_flags = AI_PASSIVE;
error = getaddrinfo(aliasp, "0", &ahints, &ares);
if (error) {
+ printf ("Couldn't get address for %s\n", aliasp);
warn("%s: %s", aliasp, gai_strerror(error));
close(net);
+ net = -1;
continue;
}
if (bind(net, ares->ai_addr, ares->ai_addrlen) < 0) {
+ printf ("Couldn't bind to %s\n", aliasp);
perror(aliasp);
(void) close(net); /* dump descriptor */
+ net = -1;
freeaddrinfo(ares);
continue;
}
freeaddrinfo(ares);
}

View File

@ -0,0 +1,25 @@
diff -up netkit-telnet-0.17/telnetd/sys_term.c.rh825946 netkit-telnet-0.17/telnetd/sys_term.c
--- netkit-telnet-0.17/telnetd/sys_term.c.rh825946 1999-12-17 15:28:47.000000000 +0100
+++ netkit-telnet-0.17/telnetd/sys_term.c 2012-06-14 14:05:30.538342755 +0200
@@ -723,6 +723,9 @@ void cleanup(int sig) {
char *p;
(void)sig;
+ /* to avoid a race for wtmp lock */
+ signal(SIGCHLD, SIG_IGN);
+
p = line + sizeof("/dev/") - 1;
if (logout(p)) logwtmp(p, "", "");
#ifdef PARANOID_TTYS
diff -up netkit-telnet-0.17/telnetd/telnetd.c.rh825946 netkit-telnet-0.17/telnetd/telnetd.c
--- netkit-telnet-0.17/telnetd/telnetd.c.rh825946 2012-06-14 14:04:42.000000000 +0200
+++ netkit-telnet-0.17/telnetd/telnetd.c 2012-06-14 14:06:01.547291404 +0200
@@ -1147,8 +1147,6 @@ void telnet(int f, int p)
if (FD_ISSET(p, &obits) && (pfrontp - pbackp) > 0)
ptyflush();
}
- /* to avoid a race for wtmp lock */
- signal(SIGCHLD, SIG_IGN);
cleanup(0);
} /* end of telnet */

10
SOURCES/telnet.socket Normal file
View File

@ -0,0 +1,10 @@
[Unit]
Description=Telnet Server Activation Socket
Documentation=man:telnetd(8)
[Socket]
ListenStream=23
Accept=true
[Install]
WantedBy=sockets.target

4
SOURCES/telnet.wmconfig Normal file
View File

@ -0,0 +1,4 @@
telnet name "telnet"
telnet description "Telnet Client"
telnet exec "xterm -e telnet &"
telnet group "Networking"

7
SOURCES/telnet@.service Normal file
View File

@ -0,0 +1,7 @@
[Unit]
Description=Telnet Server
After=local-fs.target
[Service]
ExecStart=-/usr/sbin/in.telnetd
StandardInput=socket

View File

@ -0,0 +1,25 @@
--- telnetd/telnetd.c 2005-01-19 14:37:25.000000000 +0000
+++ telnetd/telnetd.c.new 2005-01-19 14:48:12.000000000 +0000
@@ -697,6 +697,7 @@
int on = 1;
char *HE;
const char *IM;
+ int pty_read_ok = 0; /* track whether the pty read has worked yet */
/*
* Initialize the slc mapping table.
@@ -1016,12 +1017,13 @@
* off the master side before the slave side is
* opened, we get EIO.
*/
- if (pcc < 0 && (errno == EWOULDBLOCK || errno == EIO)) {
+ if (pcc < 0 && (errno == EWOULDBLOCK || (errno == EIO && pty_read_ok == 0))) {
pcc = 0;
}
else {
if (pcc <= 0)
break;
+ pty_read_ok = 1; /* mark connection up for read */
#ifdef LINEMODE
/*
* If ioctl from pty, pass it through net

21
SOURCES/telnetd-0.17.diff Normal file
View File

@ -0,0 +1,21 @@
--- telnetd/telnetd.c Thu Apr 13 00:36:12 2000
+++ telnetd.new/telnetd.c Sun Mar 11 03:10:43 2001
@@ -44,7 +44,7 @@
#include "../version.h"
#include <netdb.h>
-#include <termcap.h>
+#include <ncurses/termcap.h>
#include <netinet/in.h>
/* #include <netinet/ip.h> */ /* Don't think this is used at all here */
#include <arpa/inet.h>
--- telnetd/defs.h Mon Aug 2 06:14:03 1999
+++ telnetd.new/defs.h Sun Mar 11 03:28:13 2001
@@ -56,6 +56,7 @@
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/time.h>
+#include <time.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/telnet.h>

538
SPECS/telnet.spec Normal file
View File

@ -0,0 +1,538 @@
%global _hardened_build 1
Summary: The client program for the Telnet remote login protocol
Name: telnet
Version: 0.17
Release: 85%{?dist}
Epoch: 1
License: BSD
Source0: ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/netkit-telnet-%{version}.tar.gz
Url: http://web.archive.org/web/20070819111735/www.hcs.harvard.edu/~dholland/computers/old-netkit.html
# telnet-client tarball is snapshot of the OpenBSD client telnet
Source2: telnet-client.tar.gz
Source4: telnet.wmconfig
Source5: telnet@.service
Source6: telnet.socket
Patch1: telnet-client-cvs.patch
Patch5: telnetd-0.17.diff
Patch6: telnet-0.17-env.patch
Patch7: telnet-0.17-issue.patch
Patch8: telnet-0.17-sa-01-49.patch
Patch10: telnet-0.17-pek.patch
Patch11: telnet-0.17-8bit.patch
Patch12: telnet-0.17-argv.patch
Patch13: telnet-0.17-conf.patch
Patch14: telnet-0.17-cleanup_race.patch
Patch15: telnetd-0.17-pty_read.patch
Patch16: telnet-0.17-CAN-2005-468_469.patch
Patch18: telnet-gethostbyname.patch
Patch19: netkit-telnet-0.17-ipv6.diff
Patch20: netkit-telnet-0.17-nodns.patch
Patch21: telnet-0.17-errno_test_sys_bsd.patch
Patch22: netkit-telnet-0.17-reallynodns.patch
Patch23: telnet-rh678324.patch
Patch24: telnet-rh674942.patch
Patch25: telnet-rh704604.patch
Patch26: telnet-rh825946.patch
Patch27: telnet-0.17-force-ipv6-ipv4.patch
Patch28: netkit-telnet-0.17-core-dump.patch
Patch29: netkit-telnet-0.17-gcc7.patch
Patch30: netkit-telnet-0.17-manpage.patch
Patch31: netkit-telnet-0.17-telnetrc.patch
Patch32: telnet-log-address.patch
Patch33: telnet-0.17-overflow-exploit.patch
Patch34: telnet-0.17-pty-retry.patch
BuildRequires: make
BuildRequires: ncurses-devel systemd gcc gcc-c++
BuildRequires: perl-interpreter
%description
Telnet is a popular protocol for logging into remote systems over the
Internet. The package provides a command line Telnet client
%package server
Requires: systemd
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
Summary: The server program for the Telnet remote login protocol
%description server
Telnet is a popular protocol for logging into remote systems over the
Internet. The package includes a daemon that supports Telnet remote
logins into the host machine. The daemon is disabled by default.
You may enable the daemon by editing /etc/xinetd.d/telnet
%prep
%setup -q -n netkit-telnet-%{version}
mv telnet telnet-NETKIT
%setup -T -D -q -a 2 -n netkit-telnet-%{version}
%patch1 -p0 -b .cvs
%patch5 -p0 -b .fix
%patch6 -p1 -b .env
%patch10 -p0 -b .pek
%patch7 -p1 -b .issue
%patch8 -p1 -b .sa-01-49
%patch11 -p1 -b .8bit
%patch12 -p1 -b .argv
%patch13 -p1 -b .confverb
%patch14 -p1 -b .cleanup_race
%patch15 -p0 -b .pty_read
%patch16 -p1 -b .CAN-2005-468_469
#%patch17 -p1 -b .linemode
%patch18 -p1 -b .gethost
%patch19 -p1 -b .gethost2
%patch20 -p1 -b .nodns
%patch21 -p1 -b .errnosysbsd
%patch22 -p1 -b .reallynodns
%patch23 -p1 -b .rh678324
%patch24 -p1 -b .rh674942
%patch25 -p1 -b .rh704604
%patch26 -p1 -b .rh825946
%patch27 -p1 -b .ipv6-support
%patch28 -p1 -b .core-dump
%patch29 -p1 -b .gcc7
%patch30 -p1 -b .manpage
%patch31 -p1 -b .telnetrc
%patch32 -p1 -b .log-address
%patch33 -p1 -b .overflow
%patch34 -p1 -b .pty-retry
%build
%ifarch s390 s390x
export CC_FLAGS="$RPM_OPT_FLAGS -fPIE"
%else
export CC_FLAGS="$RPM_OPT_FLAGS -fpie"
%endif
export LD_FLAGS="$RPM_LD_FLAGS -z now -pie"
sh configure --with-c-compiler=%{__cc}
perl -pi -e '
s,-O2,\$(CC_FLAGS),;
s,LDFLAGS=.*,LDFLAGS=\$(LD_FLAGS),;
s,^BINDIR=.*$,BINDIR=%{_bindir},;
s,^MANDIR=.*$,MANDIR=%{_mandir},;
s,^SBINDIR=.*$,SBINDIR=%{_sbindir},;
' MCONFIG
# remove stripping
perl -pi -e 's|install[ ]+-s|install|g' \
./telnet/GNUmakefile \
./telnetd/Makefile \
./telnetlogin/Makefile \
./telnet-NETKIT/Makefile
%{make_build}
%install
mkdir -p ${RPM_BUILD_ROOT}%{_bindir}
mkdir -p ${RPM_BUILD_ROOT}%{_sbindir}
mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man1
mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man5
mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man8
make INSTALLROOT=${RPM_BUILD_ROOT} install
install -D -p -m644 %SOURCE5 ${RPM_BUILD_ROOT}%{_unitdir}/telnet@.service
install -D -p -m644 %SOURCE6 ${RPM_BUILD_ROOT}%{_unitdir}/telnet.socket
%post server
%systemd_post telnet.socket
%preun server
%systemd_preun telnet.socket
%postun server
%systemd_postun_with_restart telnet.socket
%files
%doc README
%{_bindir}/telnet
%{_mandir}/man1/telnet.1*
%files server
%{_unitdir}/*
%{_sbindir}/in.telnetd
%{_mandir}/man5/issue.net.5*
%{_mandir}/man8/in.telnetd.8*
%{_mandir}/man8/telnetd.8*
%changelog
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 1:0.17-85
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1:0.17-84
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-83
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Thu Nov 19 2020 Michal Ruprich <mruprich@redhat.com> - 1:0.17-82
- Changing LD_FLAGS to RPM_LD_FLAGS
- Use make_build macro and remove hard-coded gcc
- https://docs.fedoraproject.org/en-US/packaging-guidelines/#_parallel_make
* Fri Sep 25 2020 Michal Ruprich <mruprich@redhat.com> - 1:0.17-81
- Resolves: #1882606 - in.telnetd needs to tolerate temporary EIO errors
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-80
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Mar 27 2020 Michal Ruprich <mruprich@redhat.com> - 1:0.17-79
- Resolves: #1814478 - Arbitrary remote code execution in utility.c via short writes or urgent data
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-78
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-77
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-76
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Wed Oct 10 2018 Michal Ruprich <mruprich@redhat.com> - 1:0.17-75
- Adding -i option for disabling reverse DNS lookup
* Mon Jul 23 2018 Michal Ruprich <mruprich@redhat.com> - 1:0.17-74
- Resolves: #1606506 - telnet: FTBFS in Fedora rawhide
- Resolves: #1505954 - telnet failing to parse .telnetrc due to strncpy used on overlaping buffers
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-73
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-72
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-71
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-70
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Tue Apr 25 2017 Michal Ruprich <mruprich@redhat.com> - 1:0.17-69
- Resolves: #1445259 - telnet won't build with latest gcc
- added note about address resolution in manpage
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-68
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Mon Jan 23 2017 Michal Ruprich <mruprich@redhat.com> - 1:0.17-67
- Resolves: #1415706 - telnet dumps core with certain combination of parameters
* Sat Oct 01 2016 Richard W.M. Jones <rjones@redhat.com> - 1:0.17-66
- BR perl
(https://fedoraproject.org/wiki/Changes/Build_Root_Without_Perl)
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-65
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Mon Jan 25 2016 Luboš Uhliarik <luhliari@redhat.com> - 1:0.17-64
- Related: #1069809 - fixed wrong paths in patch
* Thu Oct 29 2015 Luboš Uhliarik <luhliari@redhat.com> - 1:0.17-63
- Related: #1069809 - changed patch name + some minor changes in patch
* Wed Sep 30 2015 Luboš Uhliarik <luhliari@redhat.com> - 1:0.17-62
- Resolves: #1069809 - No option to specify IPv6 or IPv4 explicitly must be used
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-61
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-60
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-59
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-58
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Wed Jul 17 2013 Michal Sekletar <msekleta@redhat.com> - 1:0.17-57
- enable hardened build
- fix dates in changelog
- add systemd to BuildRequires
* Mon May 06 2013 Michal Sekletar <msekleta@redhat.com> - 1:0.17-56
- telnet-server will use systemd socket based activation instead of xinetd
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-55
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-54
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Thu Jun 14 2012 Adam Tkac <atkac redhat com> 1:0.17-53
- update /var/run/utmp even on some corner cases
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-52
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Wed Jul 13 2011 Adam Tkac <atkac redhat com> 1:0.17-51
- add "-debug6" option to telnetd (#rh674942)
- telnet wasn't interruptable (^C) when started with specious -b argument (#704604)
* Tue Jun 28 2011 Adam Tkac <atkac redhat com> 1:0.17-50
- telnetd: store "from" address in sockaddr_storage (#678324)
* Wed Feb 09 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-49
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Thu Jan 20 2011 Karsten Hopp <karsten@redhat.com> 1:0.17-48
- update telnet-0.17-sa-01-49.patch to make it apply with fuzz=0
* Tue Mar 09 2010 Adam Tkac <atkac redhat com> 1:0.17-47
- add URL and README
* Fri Nov 27 2009 Adam Tkac <atkac redhat com> 1:0.17-46
- changes related package review (#226484)
- remove unused patches
- telnet-0.17-linemode.patch
- telnet-0.17-env-5x.patch
* Wed Sep 02 2009 Adam Tkac <atkac redhat com> 1:0.17-45
- add new option -N to disable DNS lookups (#490242)
* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-44
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.17-43
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
* Mon Feb 18 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 1:0.17-42
- Autorebuild for GCC 4.3
* Tue Sep 25 2007 Adam Tkac <atkac redhat com> 1:0.17-41
- rebased "nodns" patch with patch from Bryn M. Reeves
* Thu Sep 20 2007 Adam Tkac <atkac redhat com> 1:0.17-40
- improved patch to #274991
* Wed Aug 22 2007 Harald Hoyer <harald@redhat.com> - 1:0.17-39
- added patch to prevent a rare loop in the client
* Fri Apr 13 2007 Adam Tkac <atkac redhat com> - 1:0.17-38.fc7
- added -c option which disables reverse dns checking (#223448)
- added smp_mflags to make
- start using dist macro
* Fri Jul 14 2006 Harald Hoyer <harald@redhat.com> - 1:0.17-37
- added netkit-telnet-0.17-ipv6.diff from Marek Grác,
which adds IPv6 support to telnetd
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 1:0.17-36.1
- rebuild
* Mon May 08 2006 Harald Hoyer <harald@redhat.com> - 1:0.17-36
- patch to remove gethostbyname() (bug #190296)
* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 1:0.17-35.2.1
- bump again for double-long bug on ppc(64)
* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 1:0.17-35.2
- rebuilt for new gcc4.1 snapshot and glibc changes
* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
- rebuilt
* Thu Mar 17 2005 Harald Hoyer <harald@redhat.com> - 1:0.17-35
- fixed CAN-2005-468 and CAN-2005-469
* Wed Mar 02 2005 Harald Hoyer <harald@redhat.com>
- rebuilt
* Fri Jan 21 2005 Harald Hoyer <harald@redhat.com> - 1:0.17-33
- added patch telnetd-0.17-pty_read.patch, which fixes 145636
* Thu Jan 13 2005 Jason Vas Dias <jvdias@redhat.com> - 1:0.17-31
- bug 143929 / 145004 : fix race condition in telnetd on wtmp lock
- when cleanup() is entered from main process and in signal
- handler
* Mon Jun 28 2004 Harald Hoyer <harald@redhat.com> - 1:0.17-30
- fixed 126858: Too long /proc/X/cmdline: bad ps output when
piped to less/more
* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Thu Feb 5 2004 Harald Hoyer <harald@redhat.com> - 1:0.17-27
- added PIE compile flags
* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Wed May 28 2003 Harald Hoyer <harald@redhat.de> 1:0.17-26
- cleanup of spec file
- 8bit binary patch #91023
* Wed Jan 29 2003 Harald Hoyer <harald@redhat.de> 0.17-25
- rebuilt
* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
- rebuilt
* Mon Nov 11 2002 Harald Hoyer <harald@redhat.de> 0.17-24
- changed description
- removed unused .desktop files
* Tue Jul 23 2002 Harald Hoyer <harald@redhat.de> 0.17-23
- removed prestripping
* Tue Jul 9 2002 Harald Hoyer <harald@redhat.de>
- removed x86 -O gcc-2.96 hack (#59514)
* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
- automated rebuild
* Thu Jun 6 2002 Tim Powers <timp@redhat.com>
- bump release number and rebuild
* Thu May 23 2002 Tim Powers <timp@redhat.com>
- automated rebuild
* Thu Sep 06 2001 Harald Hoyer <harald@redhat.de> 0.17-20
- hopefully fixed #52817, #52224
* Thu Aug 16 2001 Bill Nottingham <notting@redhat.com>
- bump version for 7.2
* Wed Aug 15 2001 Bill Nottingham <notting@redhat.com>
- fix versioning
* Tue Jul 31 2001 Harald Hoyer <harald@redhat.de>
- fixed security issues (#50335)
- patched the patches to fit the 5x version
- one world -> one spec file for all versions ;)
* Sat Jul 21 2001 Tim Powers <timp@redhat.com>
- no applnk file, it's clutrtering the menus
* Wed Jul 18 2001 Bill Nottingham <notting@redhat.com>
- apply the patch, duh (and fix it while we're here)
* Tue Jul 10 2001 Bill Nottingham <notting@redhat.com>
- make /etc/issue.net parsing match the various gettys
* Mon Jun 18 2001 Harald Hoyer <harald@redhat.de>
- merged Jakubs and Pekka's patches
* Wed Apr 4 2001 Jakub Jelinek <jakub@redhat.com>
- don't let configure to guess compiler, it can pick up egcs
* Fri Mar 9 2001 Pekka Savola <pekkas@netcore.fi>
- update to 0.17
- apply latest changes from CVS to telnet client, enable IPv6
- BuildPreReq ncurses-devel
* Mon Jan 22 2001 Helge Deller <hdeller@redhat.com>
- added swedish & german translation to .desktop-file (#15332)
* Sat Dec 30 2000 Nalin Dahyabhai <nalin@redhat.com>
- mark the xinetd config file as config(noreplace)
* Fri Dec 01 2000 Trond Eivind Glomsrød <teg@redhat.com>
- make sure the server is turned off by default
* Tue Jul 18 2000 Bill Nottingham <notting@redhat.com>
- add description & default to xinetd file
* Wed Jul 12 2000 Prospector <bugzilla@redhat.com>
- automatic rebuild
* Mon Jun 19 2000 Jeff Johnson <jbj@redhat.com>
- FHS packaging.
- update to 0.17-pre20000412.
* Tue May 23 2000 Trond Eivind Glomsrød <teg@redhat.com>
- moved the xinet entry to the server
* Mon May 22 2000 Trond Eivind Glomsrød <teg@redhat.com>
- add an entry to /etc/xinetd.d
* Tue May 16 2000 Jeff Johnson <jbj@redhat.com>
- permit telnet queries only for exported variables.
* Fri Mar 24 2000 Bernhard Rosenkraenzer <bero@redhat.com>
- 0.17
* Tue Mar 7 2000 Jeff Johnson <jbj@redhat.com>
- rebuild for sparc baud rates > 38400.
* Fri Feb 11 2000 Bill Nottingham <notting@redhat.com>
- fix description
* Mon Feb 07 2000 Preston Brown <pbrown@redhat.com>
- wmconfig gone
* Wed Feb 02 2000 Cristian Gafton <gafton@redhat.com>
- man pages are compressed
- fix description
* Tue Jan 4 2000 Bill Nottingham <notting@redhat.com>
- split client and server
* Tue Dec 21 1999 Jeff Johnson <jbj@redhat.com>
- update to 0.16.
* Sun Oct 10 1999 Matt Wilson <msw@redhat.com>
- corrected the Terminal setting of the .desktop (needs to be 'true' not '1')
* Sat Sep 25 1999 Preston Brown <pbrown@redhat.com>
- red hat .desktop entry
* Sat Aug 21 1999 Jeff Johnson <jbj@redhat.com>
- rebuild for 6.1.
* Wed Aug 18 1999 Bill Nottingham <notting@redhat.com>
- don't trust random TERM variables in telnetd (#4560)
* Wed Jun 2 1999 Jeff Johnson <jbj@redhat.com>
- fix (#3098).
* Thu May 27 1999 Antti Andreimann <Antti.Andreimann@mail.ee>
- fixed the problem with escape character (it could not be disabled)
- changed the spec file to use %%setup macro for unpacking telnet-client
* Thu Apr 15 1999 Jeff Johnson <jbj@redhat.com>
- use glibc utmp routines.
* Thu Apr 8 1999 Jeff Johnson <jbj@redhat.com>
- fix the fix (wrong way memcpy).
* Wed Apr 7 1999 Jeff Johnson <jbj@redhat.com>
- fix "telnet localhost" bus error on sparc64 (alpha?).
* Tue Apr 6 1999 Jeff Johnson <jbj@redhat.com>
- use OpenBSD telnet client (and fix minor core dump with .telnetrc #247)
* Thu Mar 25 1999 Erik Troan <ewt@redhat.com>
- use openpty in telnetd
* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com>
- auto rebuild in the new build environment (release 22)
* Mon Mar 15 1999 Jeff Johnson <jbj@redhat.com>
- compile for 6.0.
* Fri Apr 24 1998 Prospector System <bugs@redhat.com>
- translations modified for de, fr, tr
* Fri Apr 24 1998 Cristian Gafton <gafton@redhat.com>
- compile C++ code using egcs
* Tue Apr 14 1998 Erik Troan <ewt@redhat.com>
- built against new ncurses
* Wed Oct 29 1997 Donnie Barnes <djb@redhat.com>
- added wmconfig entry
* Tue Jul 15 1997 Erik Troan <ewt@redhat.com>
- initial build