summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaesbaert <>2012-07-07 09:36:30 +0000
committerhaesbaert <>2012-07-07 09:36:30 +0000
commit335848c28f31358ed46e5bf33f2fe93200fa4672 (patch)
treeec1329cece722690ee71607a5b344bde3fdbb6e5
parentdcdbf0aef44a5f7678f7375a539019eea130f509 (diff)
downloadopenbsd-335848c28f31358ed46e5bf33f2fe93200fa4672.tar.gz
openbsd-335848c28f31358ed46e5bf33f2fe93200fa4672.tar.bz2
openbsd-335848c28f31358ed46e5bf33f2fe93200fa4672.zip
Report incoming connections when -l is specified with -v.
From Ricky Zhou with a few tweaks by me. ok henning@ haesbaert@
-rw-r--r--src/usr.bin/nc/netcat.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c
index 6b372033e7..4bef71a7ca 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.107 2012/04/01 02:58:57 deraadt Exp $ */ 1/* $OpenBSD: netcat.c,v 1.108 2012/07/07 09:36:30 haesbaert Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> 3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
4 * 4 *
@@ -106,6 +106,7 @@ int unix_connect(char *);
106int unix_listen(char *); 106int unix_listen(char *);
107void set_common_sockopts(int); 107void set_common_sockopts(int);
108int map_tos(char *, int *); 108int map_tos(char *, int *);
109void report_connect(const struct sockaddr *, socklen_t);
109void usage(int); 110void usage(int);
110 111
111int 112int
@@ -364,6 +365,9 @@ main(int argc, char *argv[])
364 if (rv < 0) 365 if (rv < 0)
365 err(1, "connect"); 366 err(1, "connect");
366 367
368 if (vflag)
369 report_connect((struct sockaddr *)&z, len);
370
367 readwrite(s); 371 readwrite(s);
368 } else { 372 } else {
369 len = sizeof(cliaddr); 373 len = sizeof(cliaddr);
@@ -371,6 +375,10 @@ main(int argc, char *argv[])
371 &len); 375 &len);
372 if (connfd == -1) 376 if (connfd == -1)
373 err(1, "accept"); 377 err(1, "accept");
378
379 if (vflag)
380 report_connect((struct sockaddr *)&cliaddr, len);
381
374 readwrite(connfd); 382 readwrite(connfd);
375 close(connfd); 383 close(connfd);
376 } 384 }
@@ -960,6 +968,32 @@ map_tos(char *s, int *val)
960} 968}
961 969
962void 970void
971report_connect(const struct sockaddr *sa, socklen_t salen)
972{
973 char remote_host[NI_MAXHOST];
974 char remote_port[NI_MAXSERV];
975 int herr;
976 int flags = NI_NUMERICSERV;
977
978 if (nflag)
979 flags |= NI_NUMERICHOST;
980
981 if ((herr = getnameinfo(sa, salen,
982 remote_host, sizeof(remote_host),
983 remote_port, sizeof(remote_port),
984 flags)) != 0) {
985 if (herr == EAI_SYSTEM)
986 err(1, "getnameinfo");
987 else
988 errx(1, "getnameinfo: %s", gai_strerror(herr));
989 }
990
991 fprintf(stderr,
992 "Connection from %s %s "
993 "received!\n", remote_host, remote_port);
994}
995
996void
963help(void) 997help(void)
964{ 998{
965 usage(0); 999 usage(0);