Curtis Maurand: > Feb 19 16:30:29 ispconfig postfix/smtpd[18437]: warning: hostname > delivery.mailspamprotection.com does not resolve to address > 108.163.243.188
The problem of testing with nslookup, dig, etc., is that they don't use the getaddrinfo() system library function that Postfix uses to look up the remote SMTP client IP address. This uses nsswitch, which uses nscd or whatever it is called today. You can test your getaddrinfo() system library function with the attached test program. But you will never be able to reproduce the conditions of Feb 19 16:30:29. BTW This week there was a major bugfix for getaddrinfo() on Linux systems. So yours has probably been updated. Wietse /* * getaddrinfo(3) (name->address lookup) tester. * * Compile with: * * cc -o getaddrinfo getaddrinfo.c (BSD, Linux) * * cc -o getaddrinfo getaddrinfo.c -lsocket -lnsl (SunOS 5.x) * * Run as: getaddrinfo hostname * * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands. * * Author: Wietse Venema, IBM T.J. Watson Research, USA. */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> int main(int argc, char **argv) { char hostbuf[NI_MAXHOST]; /* XXX */ struct addrinfo hints; struct addrinfo *res0; struct addrinfo *res; const char *addr; int err; #define NO_SERVICE ((char *) 0) if (argc != 2) { fprintf(stderr, "usage: %s hostname\n", argv[0]); exit(1); } memset((char *) &hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_flags = AI_CANONNAME; hints.ai_socktype = SOCK_STREAM; if ((err = getaddrinfo(argv[1], NO_SERVICE, &hints, &res0)) != 0) { fprintf(stderr, "host %s not found: %s\n", argv[1], gai_strerror(err)); exit(1); } printf("Hostname:\t%s\n", res0->ai_canonname); printf("Addresses:\t"); for (res = res0; res != 0; res = res->ai_next) { addr = (res->ai_family == AF_INET ? (char *) &((struct sockaddr_in *) res->ai_addr)->sin_addr : (char *) &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr); if (inet_ntop(res->ai_family, addr, hostbuf, sizeof(hostbuf)) == 0) { perror("inet_ntop:"); exit(1); } printf("%s ", hostbuf); } printf("\n"); freeaddrinfo(res0); exit(0); }