View | Details | Raw Unified | Return to bug 536 | Differences between
and this patch

Collapse All | Expand All

(-)acconfig.h (-2 / +2 lines)
Lines 374-381 Link Here
374
/* Some systems put this outside of libc */
374
/* Some systems put this outside of libc */
375
#undef HAVE_NANOSLEEP
375
#undef HAVE_NANOSLEEP
376
376
377
/* Pushing STREAMS modules incorrectly acquires a controlling TTY */
377
/* Define if sshd somehow reacquires a controlling TTY after setsid() */
378
#undef STREAMS_PUSH_ACQUIRES_CTTY
378
#undef SSHD_ACQUIRES_CTTY
379
379
380
/* Define if cmsg_type is not passed correctly */
380
/* Define if cmsg_type is not passed correctly */
381
#undef BROKEN_CMSG_TYPE
381
#undef BROKEN_CMSG_TYPE
(-)configure.ac (-12 / +45 lines)
Lines 51-56 Link Here
51
	CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wno-uninitialized"
51
	CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wno-uninitialized"
52
fi
52
fi
53
53
54
dnl    Checks for libutil functions
55
AC_CHECK_HEADERS(libutil.h)
56
AC_SEARCH_LIBS(login, util bsd, [AC_DEFINE(HAVE_LOGIN)])
57
AC_CHECK_FUNCS(logout updwtmp logwtmp)
58
54
# Check for some target-specific stuff
59
# Check for some target-specific stuff
55
case "$host" in
60
case "$host" in
56
*-*-aix*)
61
*-*-aix*)
Lines 188-202 Link Here
188
	AC_DEFINE(SETPROCTITLE_STRATEGY,PS_USE_CLOBBER_ARGV)
193
	AC_DEFINE(SETPROCTITLE_STRATEGY,PS_USE_CLOBBER_ARGV)
189
	AC_DEFINE(SETPROCTITLE_PS_PADDING, '\0')
194
	AC_DEFINE(SETPROCTITLE_PS_PADDING, '\0')
190
	inet6_default_4in6=yes
195
	inet6_default_4in6=yes
191
	AC_MSG_CHECKING(for broken cmsg_type)
196
	AC_MSG_CHECKING(if openpty reacquires controlling terminal)
197
	AC_TRY_RUN(
198
		[
199
#include <stdio.h>
200
#include <sys/fcntl.h>
201
#include <pty.h>
202
203
int
204
main()
205
{
206
	int fd, ptyfd, ttyfd, status;
207
208
	if (fork()!=0) { /* parent */
209
		wait(&status);
210
		if (status == 0)
211
			exit(0);
212
		else
213
			exit(1);
214
	} else { /* child */
215
		close(0); close(1); close(2); 
216
		setsid();
217
		openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
218
	        fd = open("/dev/tty", O_RDWR | O_NOCTTY);
219
	        if (fd >= 0)
220
			exit(0);	/* Acquired ctty: broken */
221
		else
222
			exit(1);	/* Did not acquire ctty: OK */
223
	}	
224
}
225
		],
226
		[
227
			AC_MSG_RESULT(yes)
228
			AC_DEFINE(SSHD_ACQUIRES_CTTY)
229
		],
230
		[	AC_MSG_RESULT(no)
231
		]
232
	)
192
	case `uname -r` in
233
	case `uname -r` in
193
	2.0.*)
234
	1.*|2.0.*)
194
		AC_MSG_RESULT(yes)
195
		AC_DEFINE(BROKEN_CMSG_TYPE)
235
		AC_DEFINE(BROKEN_CMSG_TYPE)
196
		;;
236
		;;
197
	*)
198
		AC_MSG_RESULT(no)
199
		;;
200
	esac
237
	esac
201
	;;
238
	;;
202
mips-sony-bsd|mips-sony-newsos4)
239
mips-sony-bsd|mips-sony-newsos4)
Lines 230-236 Link Here
230
	AC_DEFINE(LOGIN_NEEDS_UTMPX)
267
	AC_DEFINE(LOGIN_NEEDS_UTMPX)
231
	AC_DEFINE(LOGIN_NEEDS_TERM)
268
	AC_DEFINE(LOGIN_NEEDS_TERM)
232
	AC_DEFINE(PAM_TTY_KLUDGE)
269
	AC_DEFINE(PAM_TTY_KLUDGE)
233
	AC_DEFINE(STREAMS_PUSH_ACQUIRES_CTTY)
270
	# Pushing STREAMS modules will cause sshd to acquire a controlling tty.
271
	AC_DEFINE(SSHD_ACQUIRES_CTTY)
234
	# hardwire lastlog location (can't detect it on some versions)
272
	# hardwire lastlog location (can't detect it on some versions)
235
	conf_lastlog_location="/var/adm/lastlog"
273
	conf_lastlog_location="/var/adm/lastlog"
236
	AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x)
274
	AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x)
Lines 473-483 Link Here
473
	[], [ AC_CHECK_LIB(c89, utimes, [AC_DEFINE(HAVE_UTIMES)
511
	[], [ AC_CHECK_LIB(c89, utimes, [AC_DEFINE(HAVE_UTIMES)
474
					LIBS="$LIBS -lc89"]) ]
512
					LIBS="$LIBS -lc89"]) ]
475
)
513
)
476
477
dnl    Checks for libutil functions
478
AC_CHECK_HEADERS(libutil.h)
479
AC_SEARCH_LIBS(login, util bsd, [AC_DEFINE(HAVE_LOGIN)])
480
AC_CHECK_FUNCS(logout updwtmp logwtmp)
481
514
482
AC_FUNC_STRFTIME
515
AC_FUNC_STRFTIME
483
516
(-)sshd.c (-4 / +4 lines)
Lines 1400-1410 Link Here
1400
	 * setlogin() affects the entire process group.  We don't
1400
	 * setlogin() affects the entire process group.  We don't
1401
	 * want the child to be able to affect the parent.
1401
	 * want the child to be able to affect the parent.
1402
	 */
1402
	 */
1403
#if !defined(STREAMS_PUSH_ACQUIRES_CTTY)
1403
#if !defined(SSHD_ACQUIRES_CTTY)
1404
	/*
1404
	/*
1405
	 * If setsid is called on Solaris, sshd will acquire the controlling
1405
	 * If setsid is called on some platforms, sshd will later acquire a
1406
	 * terminal while pushing STREAMS modules. This will prevent the
1406
	 * controlling terminal, which will cause "could not set controlling
1407
	 * shell from acquiring it later.
1407
	 * tty" errors.
1408
	 */
1408
	 */
1409
	if (!debug_flag && !inetd_flag && setsid() < 0)
1409
	if (!debug_flag && !inetd_flag && setsid() < 0)
1410
		error("setsid: %.100s", strerror(errno));
1410
		error("setsid: %.100s", strerror(errno));

Return to bug 536