> 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)

Index: netcat.c
===================================================================
RCS file: /cvs/src/usr.bin/nc/netcat.c,v
retrieving revision 1.150
diff -u -p -u -p -r1.150 netcat.c
--- netcat.c    4 Jan 2016 02:18:31 -0000       1.150
+++ netcat.c    28 May 2016 17:32:01 -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,7 @@ 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 +528,8 @@ 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 +1488,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;

Reply via email to