X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/10f681b1faa30ad9293a4fb87e6920142318f429..b9537f3be119d9a099c96bbf9329fcd5b51e5312:/server/tun-slip.c diff --git a/server/tun-slip.c b/server/tun-slip.c index d405cc49..04a58402 100644 --- a/server/tun-slip.c +++ b/server/tun-slip.c @@ -246,6 +246,7 @@ whine: /* --- @t_create@ --- * * * Arguments: @peer *p@ = pointer to peer block + * @int fd@ = file descriptor of tunnel device (unused) * @char **ifn@ = where to put the interface name * * Returns: A tunnel block if it worked, or null on failure. @@ -253,10 +254,11 @@ whine: * Use: Initializes a new tunnel. */ -static tunnel *t_create(peer *p, char **ifn) +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; @@ -291,10 +293,10 @@ static tunnel *t_create(peer *p, 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); } @@ -439,6 +441,7 @@ static void t_destroy(tunnel *t) const tunnel_ops tun_slip = { "slip", + 0, t_init, t_create, t_setifname,