Make ssh work (fixes in openpty and ptsname)
authorDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Mon, 12 Jan 2009 06:00:55 +0000 (01:00 -0500)
committerDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Mon, 12 Jan 2009 06:00:55 +0000 (01:00 -0500)
login/openpty.c
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/openpty.c [new file with mode: 0644]
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/ptsname.c

index fe11d49..3652341 100644 (file)
 #include <unistd.h>
 #include <sys/types.h>
 
+#ifndef __OPENPTY_INIT_SLAVE
+# define __OPENPTY_INIT_SLAVE(slave)
+#endif
+
 
 /* Return the result of ptsname_r in the buffer pointed to by PTS,
    which should be of length BUF_LEN.  If it is too long to fit in
@@ -123,6 +127,8 @@ openpty (int *amaster, int *aslave, char *name, struct termios *termp,
   if (winp)
     ioctl (slave, TIOCSWINSZ, winp);
 
+  __OPENPTY_INIT_SLAVE(slave)
+
   *amaster = master;
   *aslave = slave;
   if (name != NULL)
diff --git a/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/openpty.c b/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/openpty.c
new file mode 100644 (file)
index 0000000..d2b109c
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright (C) 2009 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2009.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <streams/stropts.h>
+
+#define __OPENPTY_INIT_SLAVE(slave)                     \
+    if (ioctl(slave, I_PUSH, "ptem") == -1 ||           \
+            ioctl(slave, I_PUSH, "ldterm") == -1 ||     \
+            ioctl(slave, I_PUSH, "ttcompat") == -1) {   \
+        if (buf != _buf)                                \
+            free (buf);                                 \
+    }
+
+#include <login/openpty.c>
index 9ea9fdb..7ec3052 100644 (file)
@@ -93,6 +93,8 @@ __ptsname_r (int fd, char *buf, size_t buflen)
 
     memcpy (__stpcpy (buf, devpts), p, &numbuf[sizeof (numbuf)] - p);
 
+    access (buf, F_OK);
+
     return 0;
 }
 weak_alias (__ptsname_r, ptsname_r)