[master] 0fdb149 It used to be that if you wanted to talk directly to a network service, you would TELNET to it, and *some* of the TELNET client programs were broken, and would send TELNET protocol magic sequences to the other end, even when not talking on port 23.

Poul-Henning Kamp phk at FreeBSD.org
Tue Feb 24 21:32:32 CET 2015


commit 0fdb149d25dd4035b755111f8337d625371f5b67
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Feb 24 20:29:01 2015 +0000

    It used to be that if you wanted to talk directly to a network
    service, you would TELNET to it, and *some* of the TELNET client
    programs were broken, and would send TELNET protocol magic
    sequences to the other end, even when not talking on port 23.
    
    Now that we have varnishadm, and where netcat is widely available,
    that is simply not a problem we need to keep dead code around for
    any more.

diff --git a/bin/varnishd/mgt/mgt_cli.c b/bin/varnishd/mgt/mgt_cli.c
index 84446aa..5267065 100644
--- a/bin/varnishd/mgt/mgt_cli.c
+++ b/bin/varnishd/mgt/mgt_cli.c
@@ -51,7 +51,6 @@
 #include "vcli_priv.h"
 #include "vcli_serve.h"
 #include "vev.h"
-#include "vlu.h"
 #include "vrnd.h"
 #include "vss.h"
 #include "vtcp.h"
@@ -388,10 +387,6 @@ mgt_cli_setup(int fdi, int fdo, int verbose, const char *ident,
 
 	cli->ident = strdup(ident);
 
-	/* Deal with TELNET options */
-	if (fdi != 0)
-		VLU_SetTelnet(cli->vlu, fdo);
-
 	if (fdi != 0 && secret_file != NULL) {
 		cli->auth = MCF_NOAUTH;
 		mgt_cli_challenge(cli);
diff --git a/include/vlu.h b/include/vlu.h
index b7023cb..b001523 100644
--- a/include/vlu.h
+++ b/include/vlu.h
@@ -34,6 +34,4 @@ typedef int (vlu_f)(void *, const char *);
 struct vlu *VLU_New(void *priv, vlu_f *func, unsigned bufsize);
 int VLU_Fd(int fd, struct vlu *l);
 void VLU_Destroy(struct vlu *l);
-void VLU_SetTelnet(struct vlu *l, int fd);
-
 #endif
diff --git a/lib/libvarnish/vlu.c b/lib/libvarnish/vlu.c
index 1aabc65..0673f10 100644
--- a/lib/libvarnish/vlu.c
+++ b/lib/libvarnish/vlu.c
@@ -47,7 +47,6 @@ struct vlu {
 	unsigned	bufl;
 	unsigned	bufp;
 	void		*priv;
-	int		telnet;
 	vlu_f	*func;
 };
 
@@ -63,7 +62,6 @@ VLU_New(void *priv, vlu_f *func, unsigned bufsize)
 		l->func = func;
 		l->priv = priv;
 		l->bufl = bufsize - 1;
-		l->telnet = -1;
 		l->buf = malloc(l->bufl + 1L);
 		if (l->buf == NULL) {
 			FREE_OBJ(l);
@@ -74,14 +72,6 @@ VLU_New(void *priv, vlu_f *func, unsigned bufsize)
 }
 
 void
-VLU_SetTelnet(struct vlu *l, int fd)
-{
-	CHECK_OBJ_NOTNULL(l, LINEUP_MAGIC);
-	assert(fd >= 0);
-	l->telnet = fd;
-}
-
-void
 VLU_Destroy(struct vlu *l)
 {
 
@@ -91,52 +81,6 @@ VLU_Destroy(struct vlu *l)
 }
 
 static int
-vlu_dotelnet(struct vlu *l, char *p)
-{
-	char *e;
-	char tno[3];
-	int i;
-
-	e = l->buf + l->bufp;
-	assert(p >= l->buf && p < e);
-	assert(*p == (char)255);
-
-	/* We need at least two characters */
-	if (p == e - 1)
-		return (1);
-
-	/* And three for will/wont/do/dont */
-	if (p[1] >= (char)251 && p[1] <= (char)254 && p == e - 2)
-		return (1);
-
-	switch (p[1]) {
-	case (char)251:	/* WILL */
-	case (char)252:	/* WONT */
-		/* Ignore these */
-		i = 3;
-		break;
-	case (char)253:	/* DO */
-	case (char)254:	/* DONT */
-		/* Return WONT for these */
-		memcpy(tno, p, 3);
-		tno[1] = (char)252;
-		if (write(l->telnet, tno, 3) != 3)
-			return (1);
-		i = 3;
-		break;
-	default:
-		/* Ignore the rest */
-		/* XXX: only p[1] >= 240 ? */
-		i = 2;
-	}
-
-	/* Remove telnet sequence from buffer */
-	memmove(p, p + i, 1 + e - (p + i));
-	l->bufp -= i;
-	return (0);
-}
-
-static int
 LineUpProcess(struct vlu *l)
 {
 	char *p, *q;
@@ -146,9 +90,6 @@ LineUpProcess(struct vlu *l)
 	for (p = l->buf; *p != '\0'; p = q) {
 		/* Find first CR or NL */
 		for (q = p; *q != '\0'; q++) {
-			while (l->telnet >= 0 && *q == (char)255)
-				if (vlu_dotelnet(l, q))
-					return (0);
 			if (*q == '\n' || *q == '\r')
 				break;
 		}



More information about the varnish-commit mailing list