proto_tcp.c (225781) | proto_tcp.c (229945) |
---|---|
1/*- 2 * Copyright (c) 2009-2010 The FreeBSD Foundation 3 * Copyright (c) 2011 Pawel Jakub Dawidek <pawel@dawidek.net> 4 * All rights reserved. 5 * 6 * This software was developed by Pawel Jakub Dawidek under sponsorship from 7 * the FreeBSD Foundation. 8 * --- 15 unchanged lines hidden (view full) --- 24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2009-2010 The FreeBSD Foundation 3 * Copyright (c) 2011 Pawel Jakub Dawidek <pawel@dawidek.net> 4 * All rights reserved. 5 * 6 * This software was developed by Pawel Jakub Dawidek under sponsorship from 7 * the FreeBSD Foundation. 8 * --- 15 unchanged lines hidden (view full) --- 24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31#include <sys/cdefs.h> |
32__FBSDID("$FreeBSD: head/sbin/hastd/proto_tcp.c 225781 2011-09-27 07:52:39Z pjd $"); | 32__FBSDID("$FreeBSD: head/sbin/hastd/proto_tcp.c 229945 2012-01-10 22:39:07Z pjd $"); |
33 34#include <sys/param.h> /* MAXHOSTNAMELEN */ 35#include <sys/socket.h> 36 37#include <arpa/inet.h> 38 39#include <netinet/in.h> 40#include <netinet/tcp.h> --- 105 unchanged lines hidden (view full) --- 146 pp = strrchr(addr, ':'); 147 } else { 148 pp = strrchr(addr, ':'); 149 } 150 if (pp == NULL) { 151 /* Port not given, use the default. */ 152 port = defport; 153 } else { | 33 34#include <sys/param.h> /* MAXHOSTNAMELEN */ 35#include <sys/socket.h> 36 37#include <arpa/inet.h> 38 39#include <netinet/in.h> 40#include <netinet/tcp.h> --- 105 unchanged lines hidden (view full) --- 146 pp = strrchr(addr, ':'); 147 } else { 148 pp = strrchr(addr, ':'); 149 } 150 if (pp == NULL) { 151 /* Port not given, use the default. */ 152 port = defport; 153 } else { |
154 if (numfromstr(pp + 1, 1, 65535, &port) < 0) | 154 if (numfromstr(pp + 1, 1, 65535, &port) == -1) |
155 return (errno); 156 } 157 (void)snprintf(portstr, sizeof(portstr), "%jd", (intmax_t)port); 158 /* Extract host name or IP address. */ 159 if (pp == NULL) { 160 size = sizeof(iporhost); 161 if (strlcpy(iporhost, addr, size) >= size) 162 return (ENAMETOOLONG); --- 107 unchanged lines hidden (view full) --- 270 tctx = *ctxp; 271 if (srcaddr == NULL) 272 return (0); 273 ret = tcp_addr(srcaddr, 0, &sa); 274 if (ret != 0) { 275 tcp_close(tctx); 276 return (ret); 277 } | 155 return (errno); 156 } 157 (void)snprintf(portstr, sizeof(portstr), "%jd", (intmax_t)port); 158 /* Extract host name or IP address. */ 159 if (pp == NULL) { 160 size = sizeof(iporhost); 161 if (strlcpy(iporhost, addr, size) >= size) 162 return (ENAMETOOLONG); --- 107 unchanged lines hidden (view full) --- 270 tctx = *ctxp; 271 if (srcaddr == NULL) 272 return (0); 273 ret = tcp_addr(srcaddr, 0, &sa); 274 if (ret != 0) { 275 tcp_close(tctx); 276 return (ret); 277 } |
278 if (bind(tctx->tc_fd, (struct sockaddr *)&sa, sa.ss_len) < 0) { | 278 if (bind(tctx->tc_fd, (struct sockaddr *)&sa, sa.ss_len) == -1) { |
279 ret = errno; 280 tcp_close(tctx); 281 return (ret); 282 } 283 return (0); 284} 285 286static int --- 131 unchanged lines hidden (view full) --- 418 val = 1; 419 /* Ignore failure. */ 420 (void)setsockopt(tctx->tc_fd, SOL_SOCKET, SO_REUSEADDR, &val, 421 sizeof(val)); 422 423 PJDLOG_ASSERT(tctx->tc_sa.ss_family != AF_UNSPEC); 424 425 if (bind(tctx->tc_fd, (struct sockaddr *)&tctx->tc_sa, | 279 ret = errno; 280 tcp_close(tctx); 281 return (ret); 282 } 283 return (0); 284} 285 286static int --- 131 unchanged lines hidden (view full) --- 418 val = 1; 419 /* Ignore failure. */ 420 (void)setsockopt(tctx->tc_fd, SOL_SOCKET, SO_REUSEADDR, &val, 421 sizeof(val)); 422 423 PJDLOG_ASSERT(tctx->tc_sa.ss_family != AF_UNSPEC); 424 425 if (bind(tctx->tc_fd, (struct sockaddr *)&tctx->tc_sa, |
426 tctx->tc_sa.ss_len) < 0) { | 426 tctx->tc_sa.ss_len) == -1) { |
427 ret = errno; 428 tcp_close(tctx); 429 return (ret); 430 } | 427 ret = errno; 428 tcp_close(tctx); 429 return (ret); 430 } |
431 if (listen(tctx->tc_fd, 8) < 0) { | 431 if (listen(tctx->tc_fd, 8) == -1) { |
432 ret = errno; 433 tcp_close(tctx); 434 return (ret); 435 } 436 437 return (0); 438} 439 --- 13 unchanged lines hidden (view full) --- 453 454 newtctx = malloc(sizeof(*newtctx)); 455 if (newtctx == NULL) 456 return (errno); 457 458 fromlen = tctx->tc_sa.ss_len; 459 newtctx->tc_fd = accept(tctx->tc_fd, (struct sockaddr *)&tctx->tc_sa, 460 &fromlen); | 432 ret = errno; 433 tcp_close(tctx); 434 return (ret); 435 } 436 437 return (0); 438} 439 --- 13 unchanged lines hidden (view full) --- 453 454 newtctx = malloc(sizeof(*newtctx)); 455 if (newtctx == NULL) 456 return (errno); 457 458 fromlen = tctx->tc_sa.ss_len; 459 newtctx->tc_fd = accept(tctx->tc_fd, (struct sockaddr *)&tctx->tc_sa, 460 &fromlen); |
461 if (newtctx->tc_fd < 0) { | 461 if (newtctx->tc_fd == -1) { |
462 ret = errno; 463 free(newtctx); 464 return (ret); 465 } 466 467 newtctx->tc_side = TCP_SIDE_SERVER_WORK; 468 newtctx->tc_magic = TCP_CTX_MAGIC; 469 *newctxp = newtctx; --- 55 unchanged lines hidden (view full) --- 525 526 PJDLOG_ASSERT(tctx != NULL); 527 PJDLOG_ASSERT(tctx->tc_magic == TCP_CTX_MAGIC); 528 529 if (tcp_addr(addr, PROTO_TCP_DEFAULT_PORT, &sa1) != 0) 530 return (false); 531 532 salen = sizeof(sa2); | 462 ret = errno; 463 free(newtctx); 464 return (ret); 465 } 466 467 newtctx->tc_side = TCP_SIDE_SERVER_WORK; 468 newtctx->tc_magic = TCP_CTX_MAGIC; 469 *newctxp = newtctx; --- 55 unchanged lines hidden (view full) --- 525 526 PJDLOG_ASSERT(tctx != NULL); 527 PJDLOG_ASSERT(tctx->tc_magic == TCP_CTX_MAGIC); 528 529 if (tcp_addr(addr, PROTO_TCP_DEFAULT_PORT, &sa1) != 0) 530 return (false); 531 532 salen = sizeof(sa2); |
533 if (getpeername(tctx->tc_fd, (struct sockaddr *)&sa2, &salen) < 0) | 533 if (getpeername(tctx->tc_fd, (struct sockaddr *)&sa2, &salen) == -1) |
534 return (false); 535 536 if (sa1.ss_family != sa2.ss_family || sa1.ss_len != sa2.ss_len) 537 return (false); 538 539 switch (sa1.ss_family) { 540 case AF_INET: 541 { --- 26 unchanged lines hidden (view full) --- 568 const struct tcp_ctx *tctx = ctx; 569 struct sockaddr_storage sa; 570 socklen_t salen; 571 572 PJDLOG_ASSERT(tctx != NULL); 573 PJDLOG_ASSERT(tctx->tc_magic == TCP_CTX_MAGIC); 574 575 salen = sizeof(sa); | 534 return (false); 535 536 if (sa1.ss_family != sa2.ss_family || sa1.ss_len != sa2.ss_len) 537 return (false); 538 539 switch (sa1.ss_family) { 540 case AF_INET: 541 { --- 26 unchanged lines hidden (view full) --- 568 const struct tcp_ctx *tctx = ctx; 569 struct sockaddr_storage sa; 570 socklen_t salen; 571 572 PJDLOG_ASSERT(tctx != NULL); 573 PJDLOG_ASSERT(tctx->tc_magic == TCP_CTX_MAGIC); 574 575 salen = sizeof(sa); |
576 if (getsockname(tctx->tc_fd, (struct sockaddr *)&sa, &salen) < 0) { | 576 if (getsockname(tctx->tc_fd, (struct sockaddr *)&sa, &salen) == -1) { |
577 PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size); 578 return; 579 } 580 PJDLOG_VERIFY(snprintf(addr, size, "tcp://%S", &sa) < (ssize_t)size); 581} 582 583static void 584tcp_remote_address(const void *ctx, char *addr, size_t size) 585{ 586 const struct tcp_ctx *tctx = ctx; 587 struct sockaddr_storage sa; 588 socklen_t salen; 589 590 PJDLOG_ASSERT(tctx != NULL); 591 PJDLOG_ASSERT(tctx->tc_magic == TCP_CTX_MAGIC); 592 593 salen = sizeof(sa); | 577 PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size); 578 return; 579 } 580 PJDLOG_VERIFY(snprintf(addr, size, "tcp://%S", &sa) < (ssize_t)size); 581} 582 583static void 584tcp_remote_address(const void *ctx, char *addr, size_t size) 585{ 586 const struct tcp_ctx *tctx = ctx; 587 struct sockaddr_storage sa; 588 socklen_t salen; 589 590 PJDLOG_ASSERT(tctx != NULL); 591 PJDLOG_ASSERT(tctx->tc_magic == TCP_CTX_MAGIC); 592 593 salen = sizeof(sa); |
594 if (getpeername(tctx->tc_fd, (struct sockaddr *)&sa, &salen) < 0) { | 594 if (getpeername(tctx->tc_fd, (struct sockaddr *)&sa, &salen) == -1) { |
595 PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size); 596 return; 597 } 598 PJDLOG_VERIFY(snprintf(addr, size, "tcp://%S", &sa) < (ssize_t)size); 599} 600 601static void 602tcp_close(void *ctx) --- 35 unchanged lines hidden --- | 595 PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size); 596 return; 597 } 598 PJDLOG_VERIFY(snprintf(addr, size, "tcp://%S", &sa) < (ssize_t)size); 599} 600 601static void 602tcp_close(void *ctx) --- 35 unchanged lines hidden --- |