diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/usr.bin/nc/netcat.c | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c index 9c19049d59..f5045013aa 100644 --- a/src/usr.bin/nc/netcat.c +++ b/src/usr.bin/nc/netcat.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: netcat.c,v 1.197 2018/11/06 20:39:19 jsing Exp $ */ | 1 | /* $OpenBSD: netcat.c,v 1.198 2018/11/09 04:05:14 bluhm Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> | 3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> |
| 4 | * Copyright (c) 2015 Bob Beck. All rights reserved. | 4 | * Copyright (c) 2015 Bob Beck. All rights reserved. |
| @@ -137,7 +137,7 @@ void set_common_sockopts(int, int); | |||
| 137 | int process_tos_opt(char *, int *); | 137 | int process_tos_opt(char *, int *); |
| 138 | int process_tls_opt(char *, int *); | 138 | int process_tls_opt(char *, int *); |
| 139 | void save_peer_cert(struct tls *_tls_ctx, FILE *_fp); | 139 | void save_peer_cert(struct tls *_tls_ctx, FILE *_fp); |
| 140 | void report_connect(const struct sockaddr *, socklen_t, char *); | 140 | void report_sock(const char *, const struct sockaddr *, socklen_t, char *); |
| 141 | void report_tls(struct tls *tls_ctx, char * host); | 141 | void report_tls(struct tls *tls_ctx, char * host); |
| 142 | void usage(int); | 142 | void usage(int); |
| 143 | ssize_t drainbuf(int, unsigned char *, size_t *, struct tls *); | 143 | ssize_t drainbuf(int, unsigned char *, size_t *, struct tls *); |
| @@ -596,7 +596,8 @@ main(int argc, char *argv[]) | |||
| 596 | err(1, "connect"); | 596 | err(1, "connect"); |
| 597 | 597 | ||
| 598 | if (vflag) | 598 | if (vflag) |
| 599 | report_connect((struct sockaddr *)&z, len, NULL); | 599 | report_sock("Connection received", |
| 600 | (struct sockaddr *)&z, len, NULL); | ||
| 600 | 601 | ||
| 601 | readwrite(s, NULL); | 602 | readwrite(s, NULL); |
| 602 | } else { | 603 | } else { |
| @@ -611,7 +612,8 @@ main(int argc, char *argv[]) | |||
| 611 | err(1, "accept"); | 612 | err(1, "accept"); |
| 612 | } | 613 | } |
| 613 | if (vflag) | 614 | if (vflag) |
| 614 | report_connect((struct sockaddr *)&cliaddr, len, | 615 | report_sock("Connection received", |
| 616 | (struct sockaddr *)&cliaddr, len, | ||
| 615 | family == AF_UNIX ? host : NULL); | 617 | family == AF_UNIX ? host : NULL); |
| 616 | if ((usetls) && | 618 | if ((usetls) && |
| 617 | (tls_cctx = tls_setup_server(tls_ctx, connfd, host))) | 619 | (tls_cctx = tls_setup_server(tls_ctx, connfd, host))) |
| @@ -754,6 +756,8 @@ unix_bind(char *path, int flags) | |||
| 754 | errno = save_errno; | 756 | errno = save_errno; |
| 755 | return -1; | 757 | return -1; |
| 756 | } | 758 | } |
| 759 | if (vflag) | ||
| 760 | report_sock("Bound", NULL, 0, path); | ||
| 757 | 761 | ||
| 758 | return s; | 762 | return s; |
| 759 | } | 763 | } |
| @@ -890,13 +894,16 @@ int | |||
| 890 | unix_listen(char *path) | 894 | unix_listen(char *path) |
| 891 | { | 895 | { |
| 892 | int s; | 896 | int s; |
| 897 | |||
| 893 | if ((s = unix_bind(path, 0)) < 0) | 898 | if ((s = unix_bind(path, 0)) < 0) |
| 894 | return -1; | 899 | return -1; |
| 895 | |||
| 896 | if (listen(s, 5) < 0) { | 900 | if (listen(s, 5) < 0) { |
| 897 | close(s); | 901 | close(s); |
| 898 | return -1; | 902 | return -1; |
| 899 | } | 903 | } |
| 904 | if (vflag) | ||
| 905 | report_sock("Listening", NULL, 0, path); | ||
| 906 | |||
| 900 | return s; | 907 | return s; |
| 901 | } | 908 | } |
| 902 | 909 | ||
| @@ -1037,6 +1044,16 @@ local_listen(const char *host, const char *port, struct addrinfo hints) | |||
| 1037 | if (listen(s, 1) < 0) | 1044 | if (listen(s, 1) < 0) |
| 1038 | err(1, "listen"); | 1045 | err(1, "listen"); |
| 1039 | } | 1046 | } |
| 1047 | if (vflag && s != -1) { | ||
| 1048 | struct sockaddr_storage ss; | ||
| 1049 | socklen_t len; | ||
| 1050 | |||
| 1051 | len = sizeof(ss); | ||
| 1052 | if (getsockname(s, (struct sockaddr *)&ss, &len) == -1) | ||
| 1053 | err(1, "getsockname"); | ||
| 1054 | report_sock(uflag ? "Bound" : "Listening", | ||
| 1055 | (struct sockaddr *)&ss, len, NULL); | ||
| 1056 | } | ||
| 1040 | 1057 | ||
| 1041 | freeaddrinfo(res0); | 1058 | freeaddrinfo(res0); |
| 1042 | 1059 | ||
| @@ -1689,34 +1706,30 @@ report_tls(struct tls * tls_ctx, char * host) | |||
| 1689 | } | 1706 | } |
| 1690 | 1707 | ||
| 1691 | void | 1708 | void |
| 1692 | report_connect(const struct sockaddr *sa, socklen_t salen, char *path) | 1709 | report_sock(const char *msg, const struct sockaddr *sa, socklen_t salen, |
| 1710 | char *path) | ||
| 1693 | { | 1711 | { |
| 1694 | char remote_host[NI_MAXHOST]; | 1712 | char host[NI_MAXHOST], port[NI_MAXSERV]; |
| 1695 | char remote_port[NI_MAXSERV]; | ||
| 1696 | int herr; | 1713 | int herr; |
| 1697 | int flags = NI_NUMERICSERV; | 1714 | int flags = NI_NUMERICSERV; |
| 1698 | 1715 | ||
| 1699 | if (path != NULL) { | 1716 | if (path != NULL) { |
| 1700 | fprintf(stderr, "Connection on %s received!\n", path); | 1717 | fprintf(stderr, "%s on %s\n", msg, path); |
| 1701 | return; | 1718 | return; |
| 1702 | } | 1719 | } |
| 1703 | 1720 | ||
| 1704 | if (nflag) | 1721 | if (nflag) |
| 1705 | flags |= NI_NUMERICHOST; | 1722 | flags |= NI_NUMERICHOST; |
| 1706 | 1723 | ||
| 1707 | if ((herr = getnameinfo(sa, salen, | 1724 | if ((herr = getnameinfo(sa, salen, host, sizeof(host), |
| 1708 | remote_host, sizeof(remote_host), | 1725 | port, sizeof(port), flags)) != 0) { |
| 1709 | remote_port, sizeof(remote_port), | ||
| 1710 | flags)) != 0) { | ||
| 1711 | if (herr == EAI_SYSTEM) | 1726 | if (herr == EAI_SYSTEM) |
| 1712 | err(1, "getnameinfo"); | 1727 | err(1, "getnameinfo"); |
| 1713 | else | 1728 | else |
| 1714 | errx(1, "getnameinfo: %s", gai_strerror(herr)); | 1729 | errx(1, "getnameinfo: %s", gai_strerror(herr)); |
| 1715 | } | 1730 | } |
| 1716 | 1731 | ||
| 1717 | fprintf(stderr, | 1732 | fprintf(stderr, "%s on %s %s\n", msg, host, port); |
| 1718 | "Connection from %s %s " | ||
| 1719 | "received!\n", remote_host, remote_port); | ||
| 1720 | } | 1733 | } |
| 1721 | 1734 | ||
| 1722 | void | 1735 | void |
