Bob Beck <[email protected]> writes:
>> Hi tech@,
>>
>> I just ran into this while fiddling with some netcat-based plumbing.
>> When I connect to the specified socket from another shell, the
>> listening nc dies if it is AF_UNIX:
>>
>> $ tail -10f /var/log/messages | nc -vkU -l ~/.xlog_socket
>> nc: getnameinfo: Invalid argument
>>
>> The attached patch fixes the issue:
>>
>> $ tail -10f /var/log/messages | \
>> /usr/obj/usr.bin/nc/nc -vkU -l ~/.xlog_socket
>> Connection on /home/attila/.xlog_socket received!
>>
>> Feedback, comments most welcome.
>>
>> Pax, -A
>
> How's this instead for you.. (Inspired by your diff.. thanks)
After I applied yours I saw something minor. Attached is your patch
KNF'ed (80cols). There appear to still be a few long lines elsewhere,
so maybe it's too much of a nit...
Pax, -A
--
http://haqistan.net/~attila | [email protected] | 0x62A729CF
Index: netcat.c
===================================================================
RCS file: /cvs/src/usr.bin/nc/netcat.c,v
retrieving revision 1.150
diff -u -p -r1.150 netcat.c
--- netcat.c 4 Jan 2016 02:18:31 -0000 1.150
+++ netcat.c 28 May 2016 20:04:14 -0000
@@ -133,7 +133,7 @@ int unix_listen(char *);
void set_common_sockopts(int, int);
int map_tos(char *, int *);
int map_tls(char *, int *);
-void report_connect(const struct sockaddr *, socklen_t);
+void report_connect(const struct sockaddr *, socklen_t, char *);
void report_tls(struct tls *tls_ctx, char * host, char *tls_expectname);
void usage(int);
ssize_t drainbuf(int, unsigned char *, size_t *, struct tls *);
@@ -516,7 +516,8 @@ main(int argc, char *argv[])
err(1, "connect");
if (vflag)
- report_connect((struct sockaddr *)&z, len);
+ report_connect(
+ (struct sockaddr *)&z, len, NULL);
readwrite(s, NULL);
} else {
@@ -528,7 +529,9 @@ main(int argc, char *argv[])
err(1, "accept");
}
if (vflag)
- report_connect((struct sockaddr *)&cliaddr, len);
+ report_connect(
+ (struct sockaddr *)&cliaddr, len,
+ family == AF_UNIX ? host : NULL);
if ((usetls) &&
(tls_cctx = tls_setup_server(tls_ctx, connfd, host)))
readwrite(connfd, tls_cctx);
@@ -1487,12 +1490,17 @@ report_tls(struct tls * tls_ctx, char *
}
void
-report_connect(const struct sockaddr *sa, socklen_t salen)
+report_connect(const struct sockaddr *sa, socklen_t salen, char *path)
{
char remote_host[NI_MAXHOST];
char remote_port[NI_MAXSERV];
int herr;
int flags = NI_NUMERICSERV;
+
+ if (path != NULL) {
+ fprintf(stderr, "Connection on %s received!\n", path);
+ return;
+ }
if (nflag)
flags |= NI_NUMERICHOST;