chiark / gitweb /
Use new mdup(3mLib) function.
[tripe] / server / tun-slip.c
index 0df028e49365710c7053db8f9800f00b482f3d69..04a5840263208b10467788c59e193b0e91d086c4 100644 (file)
@@ -1,13 +1,11 @@
 /* -*-c-*-
- *
- * $Id$
  *
  * Tunnel packets via SLIP
  *
  * (c) 2005 Straylight/Edgeware
  */
 
-/*----- Licensing notice --------------------------------------------------* 
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of Trivial IP Encryption (TrIPE).
  *
  * 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.
- * 
+ *
  * TrIPE 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 TrIPE; if not, write to the Free Software Foundation,
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
@@ -55,7 +53,7 @@ struct tunnel {
 #   define ST_EOF 4u                   /*   File descriptor reported EOF */
   size_t n;                            /* Number of bytes used in buffer */
   octet buf[PKBUFSZ];                  /* Buffer for incoming data */
-};  
+};
 
 /*----- Static variables --------------------------------------------------*/
 
@@ -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,