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 /src | |
| 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@
Diffstat (limited to '')
| -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); |
