summaryrefslogtreecommitdiffstats
path: root/qarshd.c
diff options
context:
space:
mode:
Diffstat (limited to 'qarshd.c')
-rw-r--r--qarshd.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/qarshd.c b/qarshd.c
index ec5d1f7..fd4ca08 100644
--- a/qarshd.c
+++ b/qarshd.c
@@ -33,6 +33,7 @@
#include <sys/socket.h>
#include <sys/sendfile.h>
#include <arpa/inet.h>
+#include <netdb.h>
#include <pwd.h>
#include <grp.h>
@@ -48,7 +49,7 @@ int debug = 0;
/* Globals */
-struct sockaddr_in peername;
+struct sockaddr_storage peername;
int child_exitted = 0;
/* A mini cache for rstat so we can check it in pushfile */
@@ -384,7 +385,9 @@ int
main(int argc, char *argv[])
{
int ch;
- socklen_t peernamelen;
+ socklen_t peerlen;
+ char peer_hoststr[NI_MAXHOST];
+ char peer_portstr[NI_MAXSERV];
openlog("qarshd", LOG_PID, LOG_DAEMON);
@@ -401,10 +404,14 @@ main(int argc, char *argv[])
}
/* daemon initialization */
- peernamelen = sizeof peername;
- getpeername(0, (struct sockaddr *)&peername, &peernamelen);
- syslog(LOG_INFO, "Talking to peer %s:%d",
- inet_ntoa(peername.sin_addr), ntohs(peername.sin_port));
+ peerlen = sizeof peername;
+ getpeername(0, (struct sockaddr *)&peername, &peerlen);
+ getnameinfo((struct sockaddr *)&peername, peerlen,
+ peer_hoststr, NI_MAXHOST, peer_portstr,
+ NI_MAXSERV, NI_NUMERICHOST);
+ syslog(LOG_INFO, "Talking to peer %s:%s (%s)", peer_hoststr, peer_portstr,
+ peername.ss_family == AF_INET ? "IPv4" : "IPv6");
+
/* Start reading packets from stdin */
handle_packets(0);