diff options
-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 |