X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/e04c2d50fd96f3f31bc96851c55c6efecc10469c..b9537f3be119d9a099c96bbf9329fcd5b51e5312:/server/tun-slip.c?ds=sidebyside diff --git a/server/tun-slip.c b/server/tun-slip.c index 785d008f..04a58402 100644 --- a/server/tun-slip.c +++ b/server/tun-slip.c @@ -1,6 +1,4 @@ /* -*-c-*- - * - * $Id$ * * Tunnel packets via SLIP * @@ -64,11 +62,6 @@ static const char *slipcmd; /* Script to make new interfaces */ /*----- Main code ---------------------------------------------------------*/ -#define SL_END 0xc0 -#define SL_ESC 0xdb -#define SL_ESCEND 0xdc -#define SL_ESCESC 0xdd - /* --- @t_read@ --- * * * Arguments: @int fd@ = file descriptor to read @@ -253,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. @@ -260,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; @@ -298,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); } @@ -446,6 +441,7 @@ static void t_destroy(tunnel *t) const tunnel_ops tun_slip = { "slip", + 0, t_init, t_create, t_setifname,