View | Details | Raw Unified | Return to bug 1566
Collapse All | Expand All

(-)sftp-server.c.orig (-17 / +12 lines)
Lines 1330-1336 Link Here
1330
sftp_server_main(int argc, char **argv, struct passwd *user_pw)
1330
sftp_server_main(int argc, char **argv, struct passwd *user_pw)
1331
{
1331
{
1332
	fd_set *rset, *wset;
1332
	fd_set *rset, *wset;
1333
	int in, out, max, ch, skipargs = 0, log_stderr = 0;
1333
	int max, ch, skipargs = 0, log_stderr = 0;
1334
	ssize_t len, olen, set_size;
1334
	ssize_t len, olen, set_size;
1335
	SyslogFacility log_facility = SYSLOG_FACILITY_AUTH;
1335
	SyslogFacility log_facility = SYSLOG_FACILITY_AUTH;
1336
	char *cp, buf[4*4096];
1336
	char *cp, buf[4*4096];
Lines 1387-1405 Link Here
1387
	logit("session opened for local user %s from [%s]",
1387
	logit("session opened for local user %s from [%s]",
1388
	    pw->pw_name, client_addr);
1388
	    pw->pw_name, client_addr);
1389
1389
1390
	in = dup(STDIN_FILENO);
1391
	out = dup(STDOUT_FILENO);
1392
1393
#ifdef HAVE_CYGWIN
1390
#ifdef HAVE_CYGWIN
1394
	setmode(in, O_BINARY);
1391
	setmode(STDIN_FILENO, O_BINARY);
1395
	setmode(out, O_BINARY);
1392
	setmode(STDOUT_FILENO, O_BINARY);
1396
#endif
1393
#endif
1397
1394
1398
	max = 0;
1395
	max = STDOUT_FILENO;
1399
	if (in > max)
1396
	if (STDIN_FILENO > STDOUT_FILENO)
1400
		max = in;
1397
		max = STDIN_FILENO;
1401
	if (out > max)
1402
		max = out;
1403
1398
1404
	buffer_init(&iqueue);
1399
	buffer_init(&iqueue);
1405
	buffer_init(&oqueue);
1400
	buffer_init(&oqueue);
Lines 1419-1429 Link Here
1419
		 */
1414
		 */
1420
		if (buffer_check_alloc(&iqueue, sizeof(buf)) &&
1415
		if (buffer_check_alloc(&iqueue, sizeof(buf)) &&
1421
		    buffer_check_alloc(&oqueue, SFTP_MAX_MSG_LENGTH))
1416
		    buffer_check_alloc(&oqueue, SFTP_MAX_MSG_LENGTH))
1422
			FD_SET(in, rset);
1417
			FD_SET(STDIN_FILENO, rset);
1423
1418
1424
		olen = buffer_len(&oqueue);
1419
		olen = buffer_len(&oqueue);
1425
		if (olen > 0)
1420
		if (olen > 0)
1426
			FD_SET(out, wset);
1421
			FD_SET(STDOUT_FILENO, wset);
1427
1422
1428
		if (select(max+1, rset, wset, NULL, NULL) < 0) {
1423
		if (select(max+1, rset, wset, NULL, NULL) < 0) {
1429
			if (errno == EINTR)
1424
			if (errno == EINTR)
Lines 1433-1440 Link Here
1433
		}
1428
		}
1434
1429
1435
		/* copy stdin to iqueue */
1430
		/* copy stdin to iqueue */
1436
		if (FD_ISSET(in, rset)) {
1431
		if (FD_ISSET(STDIN_FILENO, rset)) {
1437
			len = read(in, buf, sizeof buf);
1432
			len = read(STDIN_FILENO, buf, sizeof buf);
1438
			if (len == 0) {
1433
			if (len == 0) {
1439
				debug("read eof");
1434
				debug("read eof");
1440
				sftp_server_cleanup_exit(0);
1435
				sftp_server_cleanup_exit(0);
Lines 1446-1453 Link Here
1446
			}
1441
			}
1447
		}
1442
		}
1448
		/* send oqueue to stdout */
1443
		/* send oqueue to stdout */
1449
		if (FD_ISSET(out, wset)) {
1444
		if (FD_ISSET(STDOUT_FILENO, wset)) {
1450
			len = write(out, buffer_ptr(&oqueue), olen);
1445
			len = write(STDOUT_FILENO, buffer_ptr(&oqueue), olen);
1451
			if (len < 0) {
1446
			if (len < 0) {
1452
				error("write: %s", strerror(errno));
1447
				error("write: %s", strerror(errno));
1453
				sftp_server_cleanup_exit(1);
1448
				sftp_server_cleanup_exit(1);

Return to bug 1566