Deleted Added
full compact
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 ---