diff --git a/contrib/win32/openssh/unittest-kex.vcxproj b/contrib/win32/openssh/unittest-kex.vcxproj index 5e78b5869..559c0e300 100644 --- a/contrib/win32/openssh/unittest-kex.vcxproj +++ b/contrib/win32/openssh/unittest-kex.vcxproj @@ -423,6 +423,7 @@ true + diff --git a/contrib/win32/openssh/unittest-misc.vcxproj b/contrib/win32/openssh/unittest-misc.vcxproj index 951b425a5..e3293808f 100644 --- a/contrib/win32/openssh/unittest-misc.vcxproj +++ b/contrib/win32/openssh/unittest-misc.vcxproj @@ -429,6 +429,7 @@ true + diff --git a/scp.c b/scp.c index e25288dfa..3ce820167 100644 --- a/scp.c +++ b/scp.c @@ -391,6 +391,15 @@ do_cmd(char *program, char *host, char *remuser, int port, int subsystem, } freeargs(&args_dup); + /* Parent. Close the other side, and return the local side. */ + close(pin[0]); + close(pout[1]); + *fdout = pin[1]; + *fdin = pout[0]; + ssh_signal(SIGTERM, killchild); + ssh_signal(SIGINT, killchild); + ssh_signal(SIGHUP, killchild); + return 0; #else *pid = fork(); switch (*pid) { @@ -452,6 +461,7 @@ do_cmd(char *program, char *host, char *remuser, int port, int subsystem, ssh_signal(SIGHUP, killchild); return 0; } +#endif } /* diff --git a/sshd.c b/sshd.c index 5c9c064d1..dc097ae35 100644 --- a/sshd.c +++ b/sshd.c @@ -1350,6 +1350,7 @@ send_rexec_state(int fd, struct sshbuf *conf) if ((r = sshbuf_put_stringb(m, conf)) != 0 || (r = sshbuf_put_stringb(m, inc)) != 0) fatal_fr(r, "compose config"); + if (ssh_msg_send(fd, 0, m) == -1) error_f("ssh_msg_send failed"); @@ -2020,7 +2021,7 @@ main(int ac, char **av) /* Parse command-line arguments. */ while ((opt = getopt(ac, av, - "C:E:b:c:f:g:h:k:o:p:u:46DQRTdeiqrtV")) != -1) { + "C:E:b:c:f:g:h:k:o:p:u:46DQRTdeiqrtVyz")) != -1) { switch (opt) { case '4': options.address_family = AF_INET; @@ -2125,6 +2126,18 @@ main(int ac, char **av) fprintf(stderr, "%s, %s\n", SSH_VERSION, SSH_OPENSSL_VERSION); exit(0); + case 'y': + privsep_unauth_child = 1; + rexec_flag = 0; + logfile = NULL; + //Sleep(10 * 1000); + break; + case 'z': + privsep_auth_child = 1; + rexec_flag = 0; + logfile = NULL; + //Sleep(10 * 1000); + break; default: usage(); break;