char err[ERRMAX];
int r;
- if(intr)
- return 1;
memset(err, 0, sizeof(err));
errstr(err, sizeof(err));
r = strcmp(err, "interrupted") == 0;
return m;
}
-/* libsec */
-extern mpint* pkcs1padbuf(uchar *buf, int len, mpint *modulus, int blocktype);
-extern int asn1encodedigest(DigestState* (*fun)(uchar*, ulong, uchar*, DigestState*),
- uchar *digest, uchar *buf, int len);
-
mpint*
pkcs1digest(uchar *data, int len, RSApub *pub)
{
switch(recv.r[0]){
case MSG_IGNORE:
+ return;
case MSG_GLOBAL_REQUEST:
+ if(unpack(recv.r, recv.w-recv.r, "_sb", &s, &n, &b) < 0)
+ break;
+ if(debug)
+ fprint(2, "%s: global request: %.*s\n", argv0, n, s);
+ if(b != 0)
+ sendpkt("b", MSG_REQUEST_FAILURE);
return;
case MSG_DISCONNECT:
if(unpack(recv.r, recv.w-recv.r, "_us", &c, &s, &n) < 0)
break;
if(n != 0 && status == nil)
status = smprint("%.*s", n, s);
+ c = MSG_CHANNEL_SUCCESS;
} else if(n == 11 && memcmp(s, "exit-status", n) == 0){
if(unpack(p, recv.w-p, "u", &n) < 0)
break;
if(n != 0 && status == nil)
status = smprint("%d", n);
- } else if(debug) {
- fprint(2, "%s: channel request: %.*s\n", argv0, n, s);
+ c = MSG_CHANNEL_SUCCESS;
+ } else {
+ if(debug)
+ fprint(2, "%s: channel request: %.*s\n", argv0, n, s);
+ c = MSG_CHANNEL_FAILURE;
}
+ if(b != 0)
+ sendpkt("bu", c, recv.chan);
return;
case MSG_CHANNEL_EOF:
recv.eof = 1;
fmtinstall('k', kfmt);
tty.term = getenv("TERM");
- raw = tty.term != nil && *tty.term != 0;
+ if(tty.term == nil)
+ tty.term = "";
+ raw = *tty.term != 0;
ARGBEGIN {
case 'd':
case 'R':
raw = 0;
break;
+ case 'r':
+ raw = 2; /* bloody */
+ break;
case 'u':
user = EARGF(usage());
break;
for(cmd = nil; *argv != nil; argv++){
if(cmd == nil){
cmd = strdup(*argv);
- raw = 0;
- }else {
+ if(raw == 1)
+ raw = 0;
+ }else{
s = smprint("%s %k", cmd, *argv);
free(cmd);
cmd = s;
/* parent reads and dispatches packets */
if(n > 0) {
send.pid = n;
- while((send.eof|recv.eof) == 0){
+ while(recv.eof == 0){
recvpkt();
qlock(&sl);
dispatch();
qlock(&sl);
if(send.eof)
break;
- if(n < 0 && wasintr()){
+ if(n < 0 && wasintr())
+ intr = 1;
+ if(intr){
if(!raw) break;
- if(intr){
- getdim();
- sendpkt("busbuuuu", MSG_CHANNEL_REQUEST,
- send.chan,
- "window-change", 13,
- 0,
- tty.cols,
- tty.lines,
- tty.xpixels,
- tty.ypixels);
- sendpkt("busbs", MSG_CHANNEL_REQUEST,
- send.chan,
- "signal", 6,
- 0,
- "INT", 3);
- intr = 0;
- }
+ getdim();
+ sendpkt("busbuuuu", MSG_CHANNEL_REQUEST,
+ send.chan,
+ "window-change", 13,
+ 0,
+ tty.cols,
+ tty.lines,
+ tty.xpixels,
+ tty.ypixels);
+ sendpkt("busbs", MSG_CHANNEL_REQUEST,
+ send.chan,
+ "signal", 6,
+ 0,
+ "INT", 3);
+ intr = 0;
continue;
}
if(n <= 0)