summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/usr.bin/nc/netcat.c45
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);
137int process_tos_opt(char *, int *); 137int process_tos_opt(char *, int *);
138int process_tls_opt(char *, int *); 138int process_tls_opt(char *, int *);
139void save_peer_cert(struct tls *_tls_ctx, FILE *_fp); 139void save_peer_cert(struct tls *_tls_ctx, FILE *_fp);
140void report_connect(const struct sockaddr *, socklen_t, char *); 140void report_sock(const char *, const struct sockaddr *, socklen_t, char *);
141void report_tls(struct tls *tls_ctx, char * host); 141void report_tls(struct tls *tls_ctx, char * host);
142void usage(int); 142void usage(int);
143ssize_t drainbuf(int, unsigned char *, size_t *, struct tls *); 143ssize_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
890unix_listen(char *path) 894unix_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
1691void 1708void
1692report_connect(const struct sockaddr *sa, socklen_t salen, char *path) 1709report_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
1722void 1735void