[BusyBox-cvs] busybox/networking Config.in, 1.26, 1.27 telnet.c, 1.41, 1.42

Erik Andersen andersen at busybox.net
Sun Feb 22 12:25:50 UTC 2004


Update of /var/cvs/busybox/networking
In directory nail:/tmp/cvs-serv4139/networking

Modified Files:
	Config.in telnet.c 
Log Message:
Fernando Silveira writes:

Hi,

  Well, I made this patch a long time ago (08/2002) because it was a
  need of a project, but had no time to send it to you. It adds support
  to `autologin' option of the telnet protocol. It has been used since
  made with busybox 0.60.3 at production and I had no problems with it.
  I have ported it to the HEAD revision of the CVS server (20040211) and
  I hope you enjoy and apply it to the official sources. :)

Thanks a lot!



Index: telnet.c
===================================================================
RCS file: /var/cvs/busybox/networking/telnet.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- a/telnet.c	17 Jan 2004 05:03:31 -0000	1.41
+++ b/telnet.c	22 Feb 2004 12:25:47 -0000	1.42
@@ -28,6 +28,8 @@
  * Modified 2000/06/13 for inclusion into BusyBox by Erik Andersen <andersen at codepoet.org>
  * Modified 2001/05/07 to add ability to pass TTYPE to remote host by Jim McQuillan
  * <jam at ltsp.org>
+ * Modified 2004/02/11 to add ability to pass the USER variable to remote host
+ * by Fernando Silveira <swrh at gmx.net>
  *
  */
 
@@ -129,6 +131,10 @@
 static char *ttype;
 #endif
 
+#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
+static char *autologin;
+#endif
+
 #ifdef CONFIG_FEATURE_AUTOWIDTH
 static int win_width, win_height;
 #endif
@@ -355,6 +361,34 @@
 }
 #endif
 
+#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
+static void putiac_subopt_autologin(void)
+{
+	int len = strlen(autologin) + 6;	// (2 + 1 + 1 + strlen + 2)
+	char *user = "USER";
+
+	if (G.iaclen + len > IACBUFSIZE)
+		iacflush();
+
+	putiac(IAC);
+	putiac(SB);
+	putiac(TELOPT_NEW_ENVIRON);
+	putiac(TELQUAL_IS);
+	putiac(NEW_ENV_VAR);
+
+	while(*user)
+		putiac(*user++);
+
+	putiac(NEW_ENV_VALUE);
+
+	while(*autologin)
+		putiac(*autologin++);
+
+	putiac(IAC);
+	putiac(SE);
+}
+#endif
+
 #ifdef CONFIG_FEATURE_AUTOWIDTH
 static void putiac_naws(byte c, int x, int y)
 {
@@ -495,6 +529,20 @@
 }
 #endif
 
+#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
+static inline void to_new_environ(void)
+{
+	/* Tell server we will (or will not) do AUTOLOGIN */
+
+	if (autologin)
+		putiac2(WILL, TELOPT_NEW_ENVIRON);
+	else
+		putiac2(WONT, TELOPT_NEW_ENVIRON);
+
+	return;
+}
+#endif
+
 #ifdef CONFIG_FEATURE_AUTOWIDTH
 static inline void to_naws(void)
 { 
@@ -513,6 +561,9 @@
 #ifdef CONFIG_FEATURE_TELNET_TTYPE
 		case TELOPT_TTYPE:		to_ttype();break;
 #endif
+#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
+		case TELOPT_NEW_ENVIRON:	to_new_environ();	break;
+#endif
 #ifdef CONFIG_FEATURE_AUTOWIDTH
 		case TELOPT_NAWS:		to_naws();
 								putiac_naws(c, win_width, win_height);
@@ -540,6 +591,11 @@
 		if (c == TELOPT_TTYPE)
 			putiac_subopt(TELOPT_TTYPE,ttype);
 #endif
+#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
+		else
+		if (c == TELOPT_NEW_ENVIRON)
+			putiac_subopt_autologin();
+#endif
 		break;
 	case TS_SUB2:
 		if (c == SE)
@@ -579,6 +635,10 @@
 	int maxfd;
 #endif	
 
+#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
+	int opt;
+#endif
+
 #ifdef CONFIG_FEATURE_AUTOWIDTH
 	get_terminal_width_height(0, &win_width, &win_height);
 #endif
@@ -598,8 +658,33 @@
 	if (argc < 2)
 		bb_show_usage();
 	
+#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
+	autologin = NULL;
+	while ((opt = getopt(argc, argv, "al:")) != EOF) {
+		switch (opt) {
+			case 'l':
+				autologin = bb_xstrdup(optarg);
+				break;
+			case 'a':
+				autologin = getenv("USER");
+				break;
+			case '?':
+				bb_show_usage();
+				break;
+		}
+	}
+	if (optind < argc) {
+		bb_lookup_host(&s_in, argv[optind++]);
+		s_in.sin_port = bb_lookup_port((optind < argc) ? argv[optind++] :
+				"telnet", "tcp", 23);
+		if (optind < argc)
+			bb_show_usage();
+	} else
+		bb_show_usage();
+#else
 	bb_lookup_host(&s_in, argv[1]);
 	s_in.sin_port = bb_lookup_port((argc == 3) ? argv[2] : "telnet", "tcp", 23);
+#endif
 	
 	G.netfd = xconnect(&s_in);
 

Index: Config.in
===================================================================
RCS file: /var/cvs/busybox/networking/Config.in,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- a/Config.in	17 Feb 2004 20:08:11 -0000	1.26
+++ b/Config.in	22 Feb 2004 12:25:47 -0000	1.27
@@ -479,6 +479,16 @@
 	  remote host you are connecting to.  This is useful to make sure that
 	  things like ANSI colors and other control sequences behave.
 
+config CONFIG_FEATURE_TELNET_AUTOLOGIN
+	bool "  Pass USER type to remote host"
+	default y
+	depends on CONFIG_TELNET
+	help
+	  Setting this option will forward the USER environment variable to the
+	  remote host you are connecting to. This is useful when you need to
+	  log into a machine without telling the username (autologin). This
+	  option enables `-a' and `-l USER' arguments.
+
 config CONFIG_TELNETD
 	bool "telnetd"
 	default n




More information about the busybox-cvs mailing list