chiark / gitweb /
Finished CNAME handling. Except that there's no testing, and it
[adns.git] / src / general.c
index da0b8d09e77cfcf95a2176fc82aa50dc2a6ecd56..facc0b5b8d433ce1465848e291393e697b93d010 100644 (file)
@@ -4,12 +4,11 @@
  * - vbuf handling
  */
 /*
- *  This file is
- *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
- *
- *  It is part of adns, which is
- *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
- *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  This file is part of adns, which is
+ *    Copyright (C) 1997-2000,2003,2006  Ian Jackson
+ *    Copyright (C) 1999-2000,2003,2006  Tony Finch
+ *    Copyright (C) 1991 Massachusetts Institute of Technology
+ *  (See the file INSTALL for full details.)
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <netdb.h>
 
 #include "internal.h"
 
 /* Core diagnostic functions */
 
+const char *adns__sockaddr_ntoa(struct sockaddr *sa, size_t n)
+{
+  static char buf[64];
+  int err;
+
+  err = getnameinfo(sa, n, buf, sizeof(buf), 0, 0, NI_NUMERICHOST);
+  assert(!err);
+  return buf;
+}
+
 void adns__vlprintf(adns_state ads, const char *fmt, va_list al) {
   ads->logfn(ads,ads->logfndata,fmt,al);
 }
@@ -84,7 +94,9 @@ void adns__vdiag(adns_state ads, const char *pfx, adns_initflags prevent,
   }
   
   if (serv>=0) {
-    adns__lprintf(ads,"%sNS=%s",bef,inet_ntoa(ads->servers[serv].addr));
+    adns__lprintf(ads,"%sNS=%s",bef,
+                 adns__sockaddr_ntoa(&ads->servers[serv].addr.sa,
+                                     ads->servers[serv].len));
     bef=", "; aft=")\n";
   }