X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/b7e1e18b57c30555f65a2548e0f1f186200c0ea8..b9537f3be119d9a099c96bbf9329fcd5b51e5312:/server/tun-slip.c diff --git a/server/tun-slip.c b/server/tun-slip.c index 40830f9d..04a58402 100644 --- a/server/tun-slip.c +++ b/server/tun-slip.c @@ -258,6 +258,7 @@ static tunnel *t_create(peer *p, int fd, char **ifn) { slipif *sl = 0; int pin[2] = { -1, -1 }, pout[2] = { -1, -1 }; + mdup_fd md[2]; pid_t kid = -1; dstr d = DSTR_INIT; unsigned char ch; @@ -292,10 +293,10 @@ static tunnel *t_create(peer *p, int fd, char **ifn) goto fail; } if (!kid) { - close(pin[1]); - close(pout[0]); - dup2(pin[0], STDIN_FILENO); - dup2(pout[1], STDOUT_FILENO); + close(pin[1]); close(pout[0]); + md[0].cur = pin[0]; md[0].want = STDIN_FILENO; + md[1].cur = pout[0]; md[1].want = STDOUT_FILENO; + mdup(md, 2); execlp(slipcmd, slipcmd, p_name(p), (char *)0); _exit(127); }