comparison svr-main.c @ 1069:2fa71c3b2827 pam

merge pam branch up to date
author Matt Johnston <matt@ucc.asn.au>
date Mon, 16 Mar 2015 21:34:05 +0800
parents a00303a7d247
children 2265d7ebfdeb
comparison
equal deleted inserted replaced
1068:9a6395ddb1b6 1069:2fa71c3b2827
136 { 136 {
137 dropbear_exit("No listening ports available."); 137 dropbear_exit("No listening ports available.");
138 } 138 }
139 139
140 for (i = 0; i < listensockcount; i++) { 140 for (i = 0; i < listensockcount; i++) {
141 set_sock_priority(listensocks[i], DROPBEAR_PRIO_LOWDELAY);
142 FD_SET(listensocks[i], &fds); 141 FD_SET(listensocks[i], &fds);
143 } 142 }
144 143
145 /* fork */ 144 /* fork */
146 if (svr_opts.forkbg) { 145 if (svr_opts.forkbg) {
341 340
342 while(waitpid(-1, NULL, WNOHANG) > 0); 341 while(waitpid(-1, NULL, WNOHANG) > 0);
343 342
344 sa_chld.sa_handler = sigchld_handler; 343 sa_chld.sa_handler = sigchld_handler;
345 sa_chld.sa_flags = SA_NOCLDSTOP; 344 sa_chld.sa_flags = SA_NOCLDSTOP;
345 sigemptyset(&sa_chld.sa_mask);
346 if (sigaction(SIGCHLD, &sa_chld, NULL) < 0) { 346 if (sigaction(SIGCHLD, &sa_chld, NULL) < 0) {
347 dropbear_exit("signal() error"); 347 dropbear_exit("signal() error");
348 } 348 }
349 errno = saved_errno; 349 errno = saved_errno;
350 } 350 }
400 400
401 seedrandom(); 401 seedrandom();
402 } 402 }
403 403
404 /* Set up listening sockets for all the requested ports */ 404 /* Set up listening sockets for all the requested ports */
405 static size_t listensockets(int *sock, size_t sockcount, int *maxfd) { 405 static size_t listensockets(int *socks, size_t sockcount, int *maxfd) {
406 406
407 unsigned int i; 407 unsigned int i, n;
408 char* errstring = NULL; 408 char* errstring = NULL;
409 size_t sockpos = 0; 409 size_t sockpos = 0;
410 int nsock; 410 int nsock;
411 411
412 TRACE(("listensockets: %d to try", svr_opts.portcount)) 412 TRACE(("listensockets: %d to try", svr_opts.portcount))
413 413
414 for (i = 0; i < svr_opts.portcount; i++) { 414 for (i = 0; i < svr_opts.portcount; i++) {
415 415
416 TRACE(("listening on '%s:%s'", svr_opts.addresses[i], svr_opts.ports[i])) 416 TRACE(("listening on '%s:%s'", svr_opts.addresses[i], svr_opts.ports[i]))
417 417
418 nsock = dropbear_listen(svr_opts.addresses[i], svr_opts.ports[i], &sock[sockpos], 418 nsock = dropbear_listen(svr_opts.addresses[i], svr_opts.ports[i], &socks[sockpos],
419 sockcount - sockpos, 419 sockcount - sockpos,
420 &errstring, maxfd); 420 &errstring, maxfd);
421 421
422 if (nsock < 0) { 422 if (nsock < 0) {
423 dropbear_log(LOG_WARNING, "Failed listening on '%s': %s", 423 dropbear_log(LOG_WARNING, "Failed listening on '%s': %s",
424 svr_opts.ports[i], errstring); 424 svr_opts.ports[i], errstring);
425 m_free(errstring); 425 m_free(errstring);
426 continue; 426 continue;
427 } 427 }
428 428
429 for (n = 0; n < (unsigned int)nsock; n++) {
430 int sock = socks[sockpos + n];
431 set_sock_priority(sock, DROPBEAR_PRIO_LOWDELAY);
432 #ifdef DROPBEAR_TCP_FAST_OPEN
433 set_listen_fast_open(sock);
434 #endif
435 }
436
429 sockpos += nsock; 437 sockpos += nsock;
430 438
431 } 439 }
432 return sockpos; 440 return sockpos;
433 } 441 }