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!
This commit is contained in:
parent
df2c56529c
commit
539ffc9129
@ -2415,11 +2415,26 @@
|
|||||||
"$ cat /tmp/foo\n" \
|
"$ cat /tmp/foo\n" \
|
||||||
"Hello\n"
|
"Hello\n"
|
||||||
|
|
||||||
|
#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
|
||||||
|
#define telnet_trivial_usage \
|
||||||
|
"[-a] [-l USER] HOST [PORT]"
|
||||||
|
#define telnet_full_usage \
|
||||||
|
"Telnet is used to establish interactive communication with another\n" \
|
||||||
|
"computer over a network using the TELNET protocol.\n\n" \
|
||||||
|
"Options:\n" \
|
||||||
|
"\t-a\t\tAttempt an automatic login with the USER variable.\n" \
|
||||||
|
"\t-l USER\t\tAttempt an automatic login with the USER argument.\n" \
|
||||||
|
"\tHOST\t\tThe official name, alias or the IP address of the\n" \
|
||||||
|
"\t\t\tremote host.\n" \
|
||||||
|
"\tPORT\t\tThe remote port number to connect to. If it is not\n" \
|
||||||
|
"\t\t\tspecified, the default telnet (23) port is used.\n"
|
||||||
|
#else
|
||||||
#define telnet_trivial_usage \
|
#define telnet_trivial_usage \
|
||||||
"HOST [PORT]"
|
"HOST [PORT]"
|
||||||
#define telnet_full_usage \
|
#define telnet_full_usage \
|
||||||
"Telnet is used to establish interactive communication with another\n"\
|
"Telnet is used to establish interactive communication with another\n"\
|
||||||
"computer over a network using the TELNET protocol."
|
"computer over a network using the TELNET protocol."
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_TELNETD_INETD
|
#ifdef CONFIG_FEATURE_TELNETD_INETD
|
||||||
#define telnetd_trivial_usage \
|
#define telnetd_trivial_usage \
|
||||||
|
@ -479,6 +479,16 @@ config CONFIG_FEATURE_TELNET_TTYPE
|
|||||||
remote host you are connecting to. This is useful to make sure that
|
remote host you are connecting to. This is useful to make sure that
|
||||||
things like ANSI colors and other control sequences behave.
|
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
|
config CONFIG_TELNETD
|
||||||
bool "telnetd"
|
bool "telnetd"
|
||||||
default n
|
default n
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
* Modified 2000/06/13 for inclusion into BusyBox by Erik Andersen <andersen@codepoet.org>
|
* Modified 2000/06/13 for inclusion into BusyBox by Erik Andersen <andersen@codepoet.org>
|
||||||
* Modified 2001/05/07 to add ability to pass TTYPE to remote host by Jim McQuillan
|
* Modified 2001/05/07 to add ability to pass TTYPE to remote host by Jim McQuillan
|
||||||
* <jam@ltsp.org>
|
* <jam@ltsp.org>
|
||||||
|
* Modified 2004/02/11 to add ability to pass the USER variable to remote host
|
||||||
|
* by Fernando Silveira <swrh@gmx.net>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -129,6 +131,10 @@ static int one = 1;
|
|||||||
static char *ttype;
|
static char *ttype;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
|
||||||
|
static char *autologin;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_AUTOWIDTH
|
#ifdef CONFIG_FEATURE_AUTOWIDTH
|
||||||
static int win_width, win_height;
|
static int win_width, win_height;
|
||||||
#endif
|
#endif
|
||||||
@ -355,6 +361,34 @@ static void putiac_subopt(byte c, char *str)
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
#ifdef CONFIG_FEATURE_AUTOWIDTH
|
||||||
static void putiac_naws(byte c, int x, int y)
|
static void putiac_naws(byte c, int x, int y)
|
||||||
{
|
{
|
||||||
@ -495,6 +529,20 @@ static inline void to_ttype(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
#ifdef CONFIG_FEATURE_AUTOWIDTH
|
||||||
static inline void to_naws(void)
|
static inline void to_naws(void)
|
||||||
{
|
{
|
||||||
@ -513,6 +561,9 @@ static void telopt(byte c)
|
|||||||
#ifdef CONFIG_FEATURE_TELNET_TTYPE
|
#ifdef CONFIG_FEATURE_TELNET_TTYPE
|
||||||
case TELOPT_TTYPE: to_ttype();break;
|
case TELOPT_TTYPE: to_ttype();break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
|
||||||
|
case TELOPT_NEW_ENVIRON: to_new_environ(); break;
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_FEATURE_AUTOWIDTH
|
#ifdef CONFIG_FEATURE_AUTOWIDTH
|
||||||
case TELOPT_NAWS: to_naws();
|
case TELOPT_NAWS: to_naws();
|
||||||
putiac_naws(c, win_width, win_height);
|
putiac_naws(c, win_width, win_height);
|
||||||
@ -539,6 +590,11 @@ static int subneg(byte c)
|
|||||||
else
|
else
|
||||||
if (c == TELOPT_TTYPE)
|
if (c == TELOPT_TTYPE)
|
||||||
putiac_subopt(TELOPT_TTYPE,ttype);
|
putiac_subopt(TELOPT_TTYPE,ttype);
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
|
||||||
|
else
|
||||||
|
if (c == TELOPT_NEW_ENVIRON)
|
||||||
|
putiac_subopt_autologin();
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case TS_SUB2:
|
case TS_SUB2:
|
||||||
@ -579,6 +635,10 @@ extern int telnet_main(int argc, char** argv)
|
|||||||
int maxfd;
|
int maxfd;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
|
||||||
|
int opt;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_AUTOWIDTH
|
#ifdef CONFIG_FEATURE_AUTOWIDTH
|
||||||
get_terminal_width_height(0, &win_width, &win_height);
|
get_terminal_width_height(0, &win_width, &win_height);
|
||||||
#endif
|
#endif
|
||||||
@ -598,8 +658,33 @@ extern int telnet_main(int argc, char** argv)
|
|||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
bb_show_usage();
|
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]);
|
bb_lookup_host(&s_in, argv[1]);
|
||||||
s_in.sin_port = bb_lookup_port((argc == 3) ? argv[2] : "telnet", "tcp", 23);
|
s_in.sin_port = bb_lookup_port((argc == 3) ? argv[2] : "telnet", "tcp", 23);
|
||||||
|
#endif
|
||||||
|
|
||||||
G.netfd = xconnect(&s_in);
|
G.netfd = xconnect(&s_in);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user