staticsafe:
> On 10/11/2012 10:08, Wietse Venema wrote:
> > staticsafe:
> >> Hi,
> >>
> >> Over the last week or so I've noticed many instances of the following
> >> message in my mail.log. This warning is triggered everytime the local
> >> Nagios daemon performs to check if the smtpd is ok.
> >>
> >> Oct  7 06:45:38 bender postfix/smtpd[12981]: warning:
> >> 2600:3c03::f03c:91ff:fedf:219a: address not listed for hostname
> >> bender.entropynet.net
> >>
> >> DNS is correct:
> >> $ dig +short AAAA bender.entropynet.net
> >> 2600:3c03::f03c:91ff:fedf:219a
> >> $ dig +short -x 2600:3c03::f03c:91ff:fedf:219a
> >> bender.entropynet.net.
> >>
> >> Am I missing something? Please advise.
> > 
> > Turn on multi-address support.
> > 
> > http://www.postfix.org/LINUX_README.html
> > 
> >     Wietse
> > 
> Thank you. I have just checked /etc/host.conf and it already says `multi
> on`. My server is running Debian Squeeze running postfix version
> 2.7.1-1+squeeze1.

First check the host.conf, hosts, and resolv.conf files in
/var/spool/postfix/etc.

If that does not cause the coin to drop, compile and run the attached
getaddrinfo and getnameinfo programs. Postfix requires that the
hostname from getnameinfo() will resolve with getaddrinfo() to the
client IP address.

        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);
}
 /*
  * getnameinfo(3) (address->name lookup) tester.
  * 
  * Compile with:
  * 
  * cc -o getnameinfo getnameinfo.c (BSD, Linux)
  * 
  * cc -o getnameinfo getnameinfo.c -lsocket -lnsl (SunOS 5.x)
  * 
  * Run as: getnameinfo address
  * 
  * 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 *host;
    const char *addr;
    int     err;

#define NO_SERVICE ((char *) 0)

    if (argc != 2) {
        fprintf(stderr, "usage: %s ipaddres\n", argv[0]);
        exit(1);
    }

    /*
     * Convert address to internal form.
     */
    host = argv[1];
    memset((char *) &hints, 0, sizeof(hints));
    hints.ai_family = (strchr(host, ':') ? AF_INET6 : AF_INET);
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags |= AI_NUMERICHOST;
    if ((err = getaddrinfo(host, NO_SERVICE, &hints, &res0)) != 0) {
        fprintf(stderr, "getaddrinfo %s: %s\n", host, gai_strerror(err));
        exit(1);
    }

    /*
     * Convert host address to name.
     */
    for (res = res0; res != 0; res = res->ai_next) {
        err = getnameinfo(res->ai_addr, res->ai_addrlen,
                          hostbuf, sizeof(hostbuf),
                          NO_SERVICE, 0, NI_NAMEREQD);
        if (err) {
            fprintf(stderr, "getnameinfo %s: %s\n", host, gai_strerror(err));
            exit(1);
        }
        printf("Hostname:\t%s\n", hostbuf);
        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("Address:\t%s\n", hostbuf);
    }
    freeaddrinfo(res0);
    exit(0);
}

Reply via email to