chiark / gitweb /
server/tun-slip.c, server/tripe-admin.5.in: Handle write errors.
[tripe] / server / privsep.c
index 5bc2b89220d3d4b4d7c2085ccd39d43ec605201c..bbd4814ae6fbe72e1c947f79744575f6835b6b06 100644 (file)
@@ -173,6 +173,7 @@ void ps_split(int detachp)
 {
   pid_t kid;
   int fd[2];
+  mdup_fd md[1];
   const char *helper;
 
   if (socketpair(PF_UNIX, SOCK_STREAM, 0, fd)) {
@@ -189,8 +190,9 @@ void ps_split(int detachp)
   if (kid == 0) {
     signal(SIGCHLD, SIG_DFL);
     if (detachp) detachtty();
-    if (dup2(fd[0], 0) < 0) goto lose;
-    close(fd[0]); close(fd[1]);
+    close(fd[1]);
+    md[0].cur = fd[0]; md[0].want = STDIN_FILENO;
+    if (mdup(md, 1)) goto lose;
     execl(helper, helper, (char *)0);
   lose:
     fprintf(stderr, "helper: failed to run helper: %s\n", strerror(errno));