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;