[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