diff options
author | haesbaert <> | 2012-07-07 09:36:30 +0000 |
---|---|---|
committer | haesbaert <> | 2012-07-07 09:36:30 +0000 |
commit | 335848c28f31358ed46e5bf33f2fe93200fa4672 (patch) | |
tree | ec1329cece722690ee71607a5b344bde3fdbb6e5 | |
parent | dcdbf0aef44a5f7678f7375a539019eea130f509 (diff) | |
download | openbsd-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.c | 36 |
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 *); | |||
106 | int unix_listen(char *); | 106 | int unix_listen(char *); |
107 | void set_common_sockopts(int); | 107 | void set_common_sockopts(int); |
108 | int map_tos(char *, int *); | 108 | int map_tos(char *, int *); |
109 | void report_connect(const struct sockaddr *, socklen_t); | ||
109 | void usage(int); | 110 | void usage(int); |
110 | 111 | ||
111 | int | 112 | int |
@@ -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 | ||
962 | void | 970 | void |
971 | report_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 | |||
996 | void | ||
963 | help(void) | 997 | help(void) |
964 | { | 998 | { |
965 | usage(0); | 999 | usage(0); |