ssh: print usage for unknown flags, cleanup
This commit is contained in:
parent
009b624fe6
commit
6d429cf9e8
1 changed files with 78 additions and 72 deletions
|
@ -1157,7 +1157,7 @@ kfmt(Fmt *f)
|
||||||
void
|
void
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
fprint(2, "usage: %s [-dRX] [-t thumbfile] [-T tries] [-u user] [-h] [user@]host [-W remote!port] [cmd args...]\n", argv0);
|
fprint(2, "usage: %s [-dR] [-t thumbfile] [-T tries] [-u user] [-h] [user@]host [-W remote!port] [cmd args...]\n", argv0);
|
||||||
exits("usage");
|
exits("usage");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1217,6 +1217,8 @@ main(int argc, char *argv[])
|
||||||
mux = 1;
|
mux = 1;
|
||||||
raw = 0;
|
raw = 0;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
} ARGEND;
|
} ARGEND;
|
||||||
|
|
||||||
if(host == nil){
|
if(host == nil){
|
||||||
|
@ -1287,47 +1289,84 @@ Next0: switch(recvpkt()){
|
||||||
recv.win = send.win = WinPackets*recv.pkt;
|
recv.win = send.win = WinPackets*recv.pkt;
|
||||||
recv.chan = send.win = 0;
|
recv.chan = send.win = 0;
|
||||||
|
|
||||||
if(!mux){
|
if(mux)
|
||||||
/* open hailing frequencies */
|
goto Mux;
|
||||||
if(remote != nil){
|
|
||||||
NetConnInfo *nci = getnetconninfo(nil, fd);
|
|
||||||
if(nci == nil)
|
|
||||||
sysfatal("can't get netconninfo: %r");
|
|
||||||
sendpkt("bsuuususu", MSG_CHANNEL_OPEN,
|
|
||||||
"direct-tcpip", 12,
|
|
||||||
recv.chan,
|
|
||||||
recv.win,
|
|
||||||
recv.pkt,
|
|
||||||
remote, strlen(remote),
|
|
||||||
port,
|
|
||||||
nci->laddr, strlen(nci->laddr),
|
|
||||||
atoi(nci->lserv));
|
|
||||||
free(nci);
|
|
||||||
} else {
|
|
||||||
sendpkt("bsuuu", MSG_CHANNEL_OPEN,
|
|
||||||
"session", 7,
|
|
||||||
recv.chan,
|
|
||||||
recv.win,
|
|
||||||
recv.pkt);
|
|
||||||
}
|
|
||||||
Next1: switch(recvpkt()){
|
|
||||||
default:
|
|
||||||
dispatch();
|
|
||||||
goto Next1;
|
|
||||||
case MSG_CHANNEL_OPEN_FAILURE:
|
|
||||||
if(unpack(recv.r, recv.w-recv.r, "_uus", &c, &b, &s, &n) < 0)
|
|
||||||
n = strlen(s = "???");
|
|
||||||
sysfatal("channel open failure: (%d) %.*s", b, utfnlen(s, n), s);
|
|
||||||
case MSG_CHANNEL_OPEN_CONFIRMATION:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(unpack(recv.r, recv.w-recv.r, "_uuuu", &recv.chan, &send.chan, &send.win, &send.pkt) < 0)
|
/* open hailing frequencies */
|
||||||
sysfatal("bad channel open confirmation");
|
if(remote != nil){
|
||||||
if(send.pkt <= 0 || send.pkt > MaxPacket)
|
NetConnInfo *nci = getnetconninfo(nil, fd);
|
||||||
send.pkt = MaxPacket;
|
if(nci == nil)
|
||||||
|
sysfatal("can't get netconninfo: %r");
|
||||||
|
sendpkt("bsuuususu", MSG_CHANNEL_OPEN,
|
||||||
|
"direct-tcpip", 12,
|
||||||
|
recv.chan,
|
||||||
|
recv.win,
|
||||||
|
recv.pkt,
|
||||||
|
remote, strlen(remote),
|
||||||
|
port,
|
||||||
|
nci->laddr, strlen(nci->laddr),
|
||||||
|
atoi(nci->lserv));
|
||||||
|
free(nci);
|
||||||
|
} else {
|
||||||
|
sendpkt("bsuuu", MSG_CHANNEL_OPEN,
|
||||||
|
"session", 7,
|
||||||
|
recv.chan,
|
||||||
|
recv.win,
|
||||||
|
recv.pkt);
|
||||||
|
}
|
||||||
|
Next1: switch(recvpkt()){
|
||||||
|
default:
|
||||||
|
dispatch();
|
||||||
|
goto Next1;
|
||||||
|
case MSG_CHANNEL_OPEN_FAILURE:
|
||||||
|
if(unpack(recv.r, recv.w-recv.r, "_uus", &c, &b, &s, &n) < 0)
|
||||||
|
n = strlen(s = "???");
|
||||||
|
sysfatal("channel open failure: (%d) %.*s", b, utfnlen(s, n), s);
|
||||||
|
case MSG_CHANNEL_OPEN_CONFIRMATION:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(unpack(recv.r, recv.w-recv.r, "_uuuu", &recv.chan, &send.chan, &send.win, &send.pkt) < 0)
|
||||||
|
sysfatal("bad channel open confirmation");
|
||||||
|
if(send.pkt <= 0 || send.pkt > MaxPacket)
|
||||||
|
send.pkt = MaxPacket;
|
||||||
|
|
||||||
|
if(remote != nil)
|
||||||
|
goto Mux;
|
||||||
|
|
||||||
|
if(raw) {
|
||||||
|
rawon();
|
||||||
|
sendpkt("busbsuuuus", MSG_CHANNEL_REQUEST,
|
||||||
|
send.chan,
|
||||||
|
"pty-req", 7,
|
||||||
|
0,
|
||||||
|
tty.term, strlen(tty.term),
|
||||||
|
tty.cols,
|
||||||
|
tty.lines,
|
||||||
|
tty.xpixels,
|
||||||
|
tty.ypixels,
|
||||||
|
"", 0);
|
||||||
|
}
|
||||||
|
if(cmd == nil){
|
||||||
|
sendpkt("busb", MSG_CHANNEL_REQUEST,
|
||||||
|
send.chan,
|
||||||
|
"shell", 5,
|
||||||
|
0);
|
||||||
|
} else if(*cmd == '#') {
|
||||||
|
sendpkt("busbs", MSG_CHANNEL_REQUEST,
|
||||||
|
send.chan,
|
||||||
|
"subsystem", 9,
|
||||||
|
0,
|
||||||
|
cmd+1, strlen(cmd)-1);
|
||||||
|
} else {
|
||||||
|
sendpkt("busbs", MSG_CHANNEL_REQUEST,
|
||||||
|
send.chan,
|
||||||
|
"exec", 4,
|
||||||
|
0,
|
||||||
|
cmd, strlen(cmd));
|
||||||
|
}
|
||||||
|
|
||||||
|
Mux:
|
||||||
notify(catch);
|
notify(catch);
|
||||||
atexit(shutdown);
|
atexit(shutdown);
|
||||||
|
|
||||||
|
@ -1352,39 +1391,6 @@ Next1: switch(recvpkt()){
|
||||||
|
|
||||||
/* child reads input and sends packets */
|
/* child reads input and sends packets */
|
||||||
qlock(&sl);
|
qlock(&sl);
|
||||||
if(remote == nil && !mux){
|
|
||||||
if(raw) {
|
|
||||||
rawon();
|
|
||||||
sendpkt("busbsuuuus", MSG_CHANNEL_REQUEST,
|
|
||||||
send.chan,
|
|
||||||
"pty-req", 7,
|
|
||||||
0,
|
|
||||||
tty.term, strlen(tty.term),
|
|
||||||
tty.cols,
|
|
||||||
tty.lines,
|
|
||||||
tty.xpixels,
|
|
||||||
tty.ypixels,
|
|
||||||
"", 0);
|
|
||||||
}
|
|
||||||
if(cmd == nil){
|
|
||||||
sendpkt("busb", MSG_CHANNEL_REQUEST,
|
|
||||||
send.chan,
|
|
||||||
"shell", 5,
|
|
||||||
0);
|
|
||||||
} else if(*cmd == '#') {
|
|
||||||
sendpkt("busbs", MSG_CHANNEL_REQUEST,
|
|
||||||
send.chan,
|
|
||||||
"subsystem", 9,
|
|
||||||
0,
|
|
||||||
cmd+1, strlen(cmd)-1);
|
|
||||||
} else {
|
|
||||||
sendpkt("busbs", MSG_CHANNEL_REQUEST,
|
|
||||||
send.chan,
|
|
||||||
"exec", 4,
|
|
||||||
0,
|
|
||||||
cmd, strlen(cmd));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(;;){
|
for(;;){
|
||||||
static uchar buf[MaxPacket];
|
static uchar buf[MaxPacket];
|
||||||
qunlock(&sl);
|
qunlock(&sl);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue