|
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); |