slirp: Refactor tcp_ctl
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
753a5f170d
commit
b35725c544
105
slirp/tcp_subr.c
105
slirp/tcp_subr.c
@ -1228,84 +1228,35 @@ do_prompt:
|
|||||||
* Return 0 if this connections is to be closed, 1 otherwise,
|
* Return 0 if this connections is to be closed, 1 otherwise,
|
||||||
* return 2 if this is a command-line connection
|
* return 2 if this is a command-line connection
|
||||||
*/
|
*/
|
||||||
int
|
int tcp_ctl(struct socket *so)
|
||||||
tcp_ctl(struct socket *so)
|
|
||||||
{
|
{
|
||||||
struct sbuf *sb = &so->so_snd;
|
int command = (ntohl(so->so_faddr.s_addr) & 0xff);
|
||||||
int command;
|
struct sbuf *sb = &so->so_snd;
|
||||||
struct ex_list *ex_ptr;
|
struct ex_list *ex_ptr;
|
||||||
int do_pty;
|
int do_pty;
|
||||||
// struct socket *tmpso;
|
|
||||||
|
|
||||||
DEBUG_CALL("tcp_ctl");
|
DEBUG_CALL("tcp_ctl");
|
||||||
DEBUG_ARG("so = %lx", (long )so);
|
DEBUG_ARG("so = %lx", (long )so);
|
||||||
|
|
||||||
#if 0
|
if (command != CTL_ALIAS) {
|
||||||
/*
|
/* Check if it's pty_exec */
|
||||||
* Check if they're authorised
|
for (ex_ptr = exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
|
||||||
*/
|
if (ex_ptr->ex_fport == so->so_fport &&
|
||||||
if (ctl_addr.s_addr && (ctl_addr.s_addr == -1 || (so->so_laddr.s_addr != ctl_addr.s_addr))) {
|
command == ex_ptr->ex_addr) {
|
||||||
sb->sb_cc = sprintf(sb->sb_wptr,"Error: Permission denied.\r\n");
|
if (ex_ptr->ex_pty == 3) {
|
||||||
sb->sb_wptr += sb->sb_cc;
|
so->s = -1;
|
||||||
return 0;
|
so->extra = (void *)ex_ptr->ex_exec;
|
||||||
}
|
return 1;
|
||||||
#endif
|
}
|
||||||
command = (ntohl(so->so_faddr.s_addr) & 0xff);
|
do_pty = ex_ptr->ex_pty;
|
||||||
|
DEBUG_MISC((dfd, " executing %s \n",ex_ptr->ex_exec));
|
||||||
switch(command) {
|
return fork_exec(so, ex_ptr->ex_exec, do_pty);
|
||||||
default: /* Check for exec's */
|
}
|
||||||
|
}
|
||||||
/*
|
}
|
||||||
* Check if it's pty_exec
|
sb->sb_cc =
|
||||||
*/
|
snprintf(sb->sb_wptr, sb->sb_datalen - (sb->sb_wptr - sb->sb_data),
|
||||||
for (ex_ptr = exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
|
"Error: No application configured.\r\n");
|
||||||
if (ex_ptr->ex_fport == so->so_fport &&
|
sb->sb_wptr += sb->sb_cc;
|
||||||
command == ex_ptr->ex_addr) {
|
return 0;
|
||||||
if (ex_ptr->ex_pty == 3) {
|
|
||||||
so->s = -1;
|
|
||||||
so->extra = (void *)ex_ptr->ex_exec;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
do_pty = ex_ptr->ex_pty;
|
|
||||||
goto do_exec;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Nothing bound..
|
|
||||||
*/
|
|
||||||
/* tcp_fconnect(so); */
|
|
||||||
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case CTL_ALIAS:
|
|
||||||
sb->sb_cc = snprintf(sb->sb_wptr, sb->sb_datalen - (sb->sb_wptr - sb->sb_data),
|
|
||||||
"Error: No application configured.\r\n");
|
|
||||||
sb->sb_wptr += sb->sb_cc;
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
do_exec:
|
|
||||||
DEBUG_MISC((dfd, " executing %s \n",ex_ptr->ex_exec));
|
|
||||||
return(fork_exec(so, ex_ptr->ex_exec, do_pty));
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
case CTL_CMD:
|
|
||||||
for (tmpso = tcb.so_next; tmpso != &tcb; tmpso = tmpso->so_next) {
|
|
||||||
if (tmpso->so_emu == EMU_CTL &&
|
|
||||||
!(tmpso->so_tcpcb?
|
|
||||||
(tmpso->so_tcpcb->t_state & (TCPS_TIME_WAIT|TCPS_LAST_ACK))
|
|
||||||
:0)) {
|
|
||||||
/* Ooops, control connection already active */
|
|
||||||
sb->sb_cc = sprintf(sb->sb_wptr,"Sorry, already connected.\r\n");
|
|
||||||
sb->sb_wptr += sb->sb_cc;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
so->so_emu = EMU_CTL;
|
|
||||||
ctl_password_ok = 0;
|
|
||||||
sb->sb_cc = sprintf(sb->sb_wptr, "Slirp command-line ready (type \"help\" for help).\r\nSlirp> ");
|
|
||||||
sb->sb_wptr += sb->sb_cc;
|
|
||||||
do_echo=-1;
|
|
||||||
return(2);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user