- markus@cvs.openbsd.org 2001/10/24 19:57:40
[clientloop.c] make ~& (backgrounding) work again for proto v1; add support ~& for v2, too
This commit is contained in:
parent
07cd5897f9
commit
96507ef535
|
@ -11,6 +11,9 @@
|
|||
- markus@cvs.openbsd.org 2001/10/24 08:51:35
|
||||
[clientloop.c ssh.c]
|
||||
ignore SIGPIPE early, makes ssh work if agent dies, netbsd-pr via itojun@
|
||||
- markus@cvs.openbsd.org 2001/10/24 19:57:40
|
||||
[clientloop.c]
|
||||
make ~& (backgrounding) work again for proto v1; add support ~& for v2, too
|
||||
|
||||
20011109
|
||||
- (stevesk) auth-pam.c: use do_pam_authenticate(PAM_DISALLOW_NULL_AUTHTOK)
|
||||
|
@ -6820,4 +6823,4 @@
|
|||
- Wrote replacements for strlcpy and mkdtemp
|
||||
- Released 1.0pre1
|
||||
|
||||
$Id: ChangeLog,v 1.1637 2001/11/11 23:52:03 djm Exp $
|
||||
$Id: ChangeLog,v 1.1638 2001/11/11 23:52:25 djm Exp $
|
||||
|
|
53
clientloop.c
53
clientloop.c
|
@ -59,7 +59,7 @@
|
|||
*/
|
||||
|
||||
#include "includes.h"
|
||||
RCSID("$OpenBSD: clientloop.c,v 1.85 2001/10/24 08:51:35 markus Exp $");
|
||||
RCSID("$OpenBSD: clientloop.c,v 1.86 2001/10/24 19:57:40 markus Exp $");
|
||||
|
||||
#include "ssh.h"
|
||||
#include "ssh1.h"
|
||||
|
@ -522,14 +522,36 @@ process_escapes(Buffer *bin, Buffer *bout, Buffer *berr, char *buf, int len)
|
|||
continue;
|
||||
|
||||
case '&':
|
||||
/* XXX does not work yet with proto 2 */
|
||||
if (compat20)
|
||||
continue;
|
||||
/*
|
||||
* Detach the program (continue to serve connections,
|
||||
* but put in background and no more new connections).
|
||||
*/
|
||||
if (!stdin_eof) {
|
||||
/* Restore tty modes. */
|
||||
leave_raw_mode();
|
||||
|
||||
/* Stop listening for new connections. */
|
||||
channel_stop_listening();
|
||||
|
||||
snprintf(string, sizeof string,
|
||||
"%c& [backgrounded]\n", escape_char);
|
||||
buffer_append(berr, string, strlen(string));
|
||||
|
||||
/* Fork into background. */
|
||||
pid = fork();
|
||||
if (pid < 0) {
|
||||
error("fork: %.100s", strerror(errno));
|
||||
continue;
|
||||
}
|
||||
if (pid != 0) { /* This is the parent. */
|
||||
/* The parent just exits. */
|
||||
exit(0);
|
||||
}
|
||||
/* The child continues serving connections. */
|
||||
if (compat20) {
|
||||
buffer_append(bin, "\004", 1);
|
||||
/* fake EOF on stdin */
|
||||
return -1;
|
||||
} else if (!stdin_eof) {
|
||||
/*
|
||||
* Sending SSH_CMSG_EOF alone does not always appear
|
||||
* to be enough. So we try to send an EOF character
|
||||
|
@ -545,26 +567,7 @@ process_escapes(Buffer *bin, Buffer *bout, Buffer *berr, char *buf, int len)
|
|||
packet_send();
|
||||
}
|
||||
}
|
||||
/* Restore tty modes. */
|
||||
leave_raw_mode();
|
||||
|
||||
/* Stop listening for new connections. */
|
||||
channel_close_all(); /* proto1 only XXXX */
|
||||
|
||||
printf("%c& [backgrounded]\n", escape_char);
|
||||
|
||||
/* Fork into background. */
|
||||
pid = fork();
|
||||
if (pid < 0) {
|
||||
error("fork: %.100s", strerror(errno));
|
||||
continue;
|
||||
}
|
||||
if (pid != 0) { /* This is the parent. */
|
||||
/* The parent just exits. */
|
||||
exit(0);
|
||||
}
|
||||
/* The child continues serving connections. */
|
||||
continue; /*XXX ? */
|
||||
continue;
|
||||
|
||||
case '?':
|
||||
snprintf(string, sizeof string,
|
||||
|
|
Loading…
Reference in New Issue