]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
- (dtucker) [configure.ac] Bug #536: Test for and work around openpty/ V_3_6_1 anongit/V_3_6_1 github-selfhosted/V_3_6_1 github/V_3_6_1
authorDarren Tucker <dtucker@zip.com.au>
Thu, 21 Aug 2003 08:23:13 +0000 (18:23 +1000)
committerDarren Tucker <dtucker@zip.com.au>
Thu, 21 Aug 2003 08:23:13 +0000 (18:23 +1000)
   controlling tty problem on Linux (fixes "could not set controlling tty"
   errors).

ChangeLog
configure.ac

index d2b1b2a239649432a962d06ee5ae8e04c21255b6..ed8387d5facf57847ff54a539881cf3971d7d534 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,9 @@
    invalid cmsg_type on Linux 1.x and 2.0 kernels, privsep should now work.
  - (dtucker) [acconfig.h configure.ac sshd.c] STREAMS_PUSH_ACQUIRES_CTTY ->
    SSHD_ACQUIRES_CTTY.
+ - (dtucker) [configure.ac] Bug #536: Test for and work around openpty/
+   controlling tty problem on Linux (fixes "could not set controlling tty"
+   errors).
 
 20030429
  - (djm) Add back radix.o (used by AFS support), after it went missing from
      save auth method before monitor_reset_key_state(); bugzilla bug #284;
      ok provos@
 
-$Id: ChangeLog,v 1.2648.2.9 2003/08/21 07:56:29 dtucker Exp $
+$Id: ChangeLog,v 1.2648.2.10 2003/08/21 08:23:13 dtucker Exp $
index 72e75cd945a3321e48533226c3a24d95f6d4871a..ad7a778e72d40982f432fd3ab4fed799a8c3ef3c 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: configure.ac,v 1.113.2.4 2003/08/21 07:42:34 dtucker Exp $
+# $Id: configure.ac,v 1.113.2.5 2003/08/21 08:23:13 dtucker Exp $
 
 AC_INIT
 AC_CONFIG_SRCDIR([ssh.c])
@@ -183,6 +183,7 @@ main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
 *-*-linux*)
        no_dev_ptmx=1
        check_for_libcrypt_later=1
+       check_for_openpty_ctty_bug=1
        AC_DEFINE(DONT_TRY_OTHER_AF)
        AC_DEFINE(PAM_TTY_KLUDGE)
        AC_DEFINE(SETPROCTITLE_STRATEGY,PS_USE_CLOBBER_ARGV)
@@ -733,6 +734,52 @@ unlink(template); exit(0);
 )
 fi
 
+if test ! -z "$check_for_openpty_ctty_bug"; then
+       AC_MSG_CHECKING(if openpty correctly handles controlling tty)
+       AC_TRY_RUN(
+               [
+#include <stdio.h>
+#include <sys/fcntl.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+int
+main()
+{
+       pid_t pid;
+       int fd, ptyfd, ttyfd, status;
+
+       pid = fork();
+       if (pid < 0) {          /* failed */
+               exit(1);
+       } else if (pid > 0) {   /* parent */
+               waitpid(pid, &status, 0);
+               if (WIFEXITED(status))
+                       exit(WEXITSTATUS(status));
+               else
+                       exit(2);
+       } else {                /* child */
+               close(0); close(1); close(2);
+               setsid();
+               openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
+               fd = open("/dev/tty", O_RDWR | O_NOCTTY);
+               if (fd >= 0)
+                       exit(3);        /* Acquired ctty: broken */
+               else
+                       exit(0);        /* Did not acquire ctty: OK */
+       }
+}
+               ],
+               [
+                       AC_MSG_RESULT(yes)
+               ],
+               [
+                       AC_MSG_RESULT(no)
+                       AC_DEFINE(SSHD_ACQUIRES_CTTY)
+               ]
+       )
+fi
+
 AC_FUNC_GETPGRP
 
 # Check for PAM libs