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

Collapse All | Expand All

(-)sshd.c (-1 / +15 lines)
Lines 155-160 char **rexec_argv; Link Here
155
int listen_socks[MAX_LISTEN_SOCKS];
155
int listen_socks[MAX_LISTEN_SOCKS];
156
int num_listen_socks = 0;
156
int num_listen_socks = 0;
157
157
158
/* Original signal set, unblocked during pselect and in child */
159
sigset_t orig_sigset;
160
158
/*
161
/*
159
 * the client's version string, passed by sshd2 in compat mode. if != NULL,
162
 * the client's version string, passed by sshd2 in compat mode. if != NULL,
160
 * sshd will skip the version-number exchange
163
 * sshd will skip the version-number exchange
Lines 1073-1079 server_accept_loop(int *sock_in, int *so Link Here
1073
				FD_SET(startup_pipes[i], fdset);
1076
				FD_SET(startup_pipes[i], fdset);
1074
1077
1075
		/* Wait in select until there is a connection. */
1078
		/* Wait in select until there is a connection. */
1076
		ret = select(maxfd+1, fdset, NULL, NULL, NULL);
1079
		ret = pselect(maxfd+1, fdset, NULL, NULL, NULL, &orig_sigset);
1077
		if (ret < 0 && errno != EINTR)
1080
		if (ret < 0 && errno != EINTR)
1078
			error("select: %.100s", strerror(errno));
1081
			error("select: %.100s", strerror(errno));
1079
		if (received_sigterm) {
1082
		if (received_sigterm) {
Lines 1705-1712 main(int ac, char **av) Link Here
1705
	if (inetd_flag) {
1708
	if (inetd_flag) {
1706
		server_accept_inetd(&sock_in, &sock_out);
1709
		server_accept_inetd(&sock_in, &sock_out);
1707
	} else {
1710
	} else {
1711
		sigset_t sigset;
1712
1708
		server_listen();
1713
		server_listen();
1709
1714
1715
		sigemptyset(&sigset);
1716
		sigaddset(&sigset, SIGHUP);
1717
		sigaddset(&sigset, SIGTERM);
1718
		sigaddset(&sigset, SIGQUIT);
1719
		if (sigprocmask(SIG_BLOCK, &sigset, &orig_sigset) == -1)
1720
			error("sigprocmask block: %s", strerror(errno));
1721
1710
		signal(SIGHUP, sighup_handler);
1722
		signal(SIGHUP, sighup_handler);
1711
		signal(SIGCHLD, main_sigchld_handler);
1723
		signal(SIGCHLD, main_sigchld_handler);
1712
		signal(SIGTERM, sigterm_handler);
1724
		signal(SIGTERM, sigterm_handler);
Lines 1798-1803 main(int ac, char **av) Link Here
1798
	signal(SIGTERM, SIG_DFL);
1810
	signal(SIGTERM, SIG_DFL);
1799
	signal(SIGQUIT, SIG_DFL);
1811
	signal(SIGQUIT, SIG_DFL);
1800
	signal(SIGCHLD, SIG_DFL);
1812
	signal(SIGCHLD, SIG_DFL);
1813
	if (sigprocmask(SIG_UNBLOCK, &orig_sigset, NULL) == -1)
1814
		error("sigprocmask unblock: %s", strerror(errno));
1801
1815
1802
	/*
1816
	/*
1803
	 * Register our connection.  This turns encryption off because we do
1817
	 * Register our connection.  This turns encryption off because we do

Return to bug 2158