- 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
|
- markus@cvs.openbsd.org 2001/10/24 08:51:35
|
||||||
[clientloop.c ssh.c]
|
[clientloop.c ssh.c]
|
||||||
ignore SIGPIPE early, makes ssh work if agent dies, netbsd-pr via itojun@
|
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
|
20011109
|
||||||
- (stevesk) auth-pam.c: use do_pam_authenticate(PAM_DISALLOW_NULL_AUTHTOK)
|
- (stevesk) auth-pam.c: use do_pam_authenticate(PAM_DISALLOW_NULL_AUTHTOK)
|
||||||
|
@ -6820,4 +6823,4 @@
|
||||||
- Wrote replacements for strlcpy and mkdtemp
|
- Wrote replacements for strlcpy and mkdtemp
|
||||||
- Released 1.0pre1
|
- 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"
|
#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 "ssh.h"
|
||||||
#include "ssh1.h"
|
#include "ssh1.h"
|
||||||
|
@ -522,14 +522,36 @@ process_escapes(Buffer *bin, Buffer *bout, Buffer *berr, char *buf, int len)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case '&':
|
case '&':
|
||||||
/* XXX does not work yet with proto 2 */
|
|
||||||
if (compat20)
|
|
||||||
continue;
|
|
||||||
/*
|
/*
|
||||||
* Detach the program (continue to serve connections,
|
* Detach the program (continue to serve connections,
|
||||||
* but put in background and no more new 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
|
* Sending SSH_CMSG_EOF alone does not always appear
|
||||||
* to be enough. So we try to send an EOF character
|
* 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();
|
packet_send();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Restore tty modes. */
|
continue;
|
||||||
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 ? */
|
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
snprintf(string, sizeof string,
|
snprintf(string, sizeof string,
|
||||||
|
|
Loading…
Reference in New Issue