X-Git-Url: https://git.distorted.org.uk/~mdw/fwd/blobdiff_plain/47a7631fc173b345182df04f67523d3b2fe4ba83..e9940d072c811c67f2b3a13782fc40bf591491b7:/exec.c diff --git a/exec.c b/exec.c index f7c96ef..9b7e87b 100644 --- a/exec.c +++ b/exec.c @@ -7,24 +7,24 @@ /*----- Licensing notice --------------------------------------------------* * - * This file is part of the `fw' port forwarder. + * This file is part of the `fwd' port forwarder. * - * `fw' is free software; you can redistribute it and/or modify + * `fwd' is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * - * `fw' is distributed in the hope that it will be useful, + * `fwd' is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with `fw'; if not, write to the Free Software Foundation, + * along with `fwd'; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "fw.h" +#include "fwd.h" /*----- Data structures ---------------------------------------------------*/ @@ -464,6 +464,7 @@ static void xept_attach(endpt *e, reffd *in, reffd *out) if (kid == 0) { xopts *xo = xe->xo; + mdup_fd md[3]; /* --- Fiddle with the file descriptors --- * * @@ -473,18 +474,14 @@ static void xept_attach(endpt *e, reffd *in, reffd *out) */ close(fd[0]); - if (dup2(in->fd, STDIN_FILENO) < 0 || - dup2(out->fd, STDOUT_FILENO) < 0 || - dup2(fd[1], STDERR_FILENO) < 0) { + md[0].cur = in->fd; md[0].want = STDIN_FILENO; + md[1].cur = out->fd; md[1].want = STDOUT_FILENO; + md[2].cur = fd[1]; md[2].want = STDERR_FILENO; + if (mdup(md, 3)) { moan("couldn't manipulate file descriptors: %s", strerror(errno)); _exit(1); } - if (in->fd > 2) - close(in->fd); - if (out->fd > 2) - close(out->fd); - fdflags(STDIN_FILENO, O_NONBLOCK, 0, FD_CLOEXEC, 0); fdflags(STDOUT_FILENO, O_NONBLOCK, 0, FD_CLOEXEC, 0); fdflags(STDERR_FILENO, O_NONBLOCK, 0, FD_CLOEXEC, 0); @@ -752,7 +749,7 @@ static int exec_option(xdata *x, scanner *sc) token(sc); if (sc->t == '=') token(sc); - conf_name(sc, '/', &d); + conf_fname(sc, &d); xo->dir = xstrdup(d.buf); dstr_destroy(&d); CONF_ACCEPT; @@ -766,7 +763,7 @@ static int exec_option(xdata *x, scanner *sc) token(sc); if (sc->t == '=') token(sc); - conf_name(sc, '/', &d); + conf_fname(sc, &d); xo->root = xstrdup(d.buf); dstr_destroy(&d); CONF_ACCEPT; @@ -1035,7 +1032,7 @@ static void xsource_attach(source *s, scanner *sc, target *t) ee->ops->close(ee); goto tidy; } - endpt_join(e, ee); + endpt_join(e, ee, xs->s.desc); /* --- Dispose of source and target --- */