提交 0c380176 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

A complete telnetd.

lwIP crashes after a client connects and sh prints the prompt.
上级 abc4e71f
......@@ -151,7 +151,7 @@ mscan.kern: $(O)/kernel
##
QEMUOPTS = -smp $(QEMUSMP) -m 512 -serial mon:stdio -nographic \
-net user -net nic,model=e1000 \
-net dump,file=qemu.pcap
-net dump,file=qemu.pcap -redir tcp:2323::23
qemu: $(O)/kernel
$(QEMU) $(QEMUOPTS) -kernel $(O)/kernel
......
......@@ -24,16 +24,38 @@ main(void)
if (r < 0)
die("telnetd listen: %d\n", r);
printf(1, "telnetd: port 23\n");
for (;;) {
socklen_t socklen = sizeof(sin);
int ss = accept(s, (struct sockaddr *)&sin, &socklen);
socklen_t socklen;
int ss;
int pid;
socklen = sizeof(sin);
ss = accept(s, (struct sockaddr *)&sin, &socklen);
if (ss < 0) {
printf(1, "telnetd accept: %d\n", ss);
printf(2, "telnetd accept: %d\n", ss);
continue;
}
printf(1, "telnetd: connection\n");
printf(1, "Got one!\n");
// XXX fork, exec sh, etc..
pid = fork(0);
if (pid < 0) {
printf(2, "telnetd fork: %d\n", pid);
close(ss);
continue;
}
if (pid == 0) {
static char *argv[] = { "sh", 0 };
close(0);
close(1);
close(2);
dup(ss);
dup(ss);
dup(ss);
exec("sh", argv);
exit();
}
close(ss);
}
}
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论