postfix + libinet6

Jakub Bogusz qboosh w prioris.mini.pw.edu.pl
Czw, 23 Sie 2001, 10:36:27 CEST


On Wed, Aug 22, 2001 at 11:49:01PM +0200, Arkadiusz Miskiewicz wrote:
> Jakub Bogusz <qboosh w prioris.mini.pw.edu.pl> writes:
> > Aha.
> > A co z getnameinfo()?
> > Wygląda, że też działa dla adresów v6 bez wsparcia w kernelu.
> getnameinfo() służy do resolvowania, a przecież można komunikować się
> z DNSem po ipv4 i odpytywać go o rekordy AAAA/A6... IPv6 w kernelu nie
> jest tu potrzebne.

OK.

> > I wtedy taki fragment:
> > 
> > +    memset(&hints, 0, sizeof(hints));
> > +    hints.ai_family = PF_UNSPEC;
> > +    hints.ai_socktype = SOCK_STREAM;
> > +    hints.ai_flags = AI_PASSIVE;
> > +    error = getaddrinfo(NULL, "0", &hints, &res0);
> > +    if (error)
> > +       msg_fatal("could not get list of wildcard addresses");
> > +    for (res = res0; res; res = res->ai_next) {
> > +       if (getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, sizeof(hbuf),
> > +           NULL, 0, niflags) != 0)
> > +           continue;
> > +       if (inet_addr_host(addr_list, hbuf) == 0)
> > +           msg_fatal("config variable %s: host not found: %s",
> > +                     VAR_INET_INTERFACES, hbuf);
> > +    }
> > +    freeaddrinfo(res0);
> > 
> > ...powoduje fatal error "config variable inet_interfaces: host not found: ::".
> > 
> > Prób tworzenia socketa tutaj nie ma.
> > Może w przypadku powodzenia getnameinfo() a niepowodzenia
> > inet_addr_host() też robić continue? Tylko czy to nie popsuje wykrywania
> > niektórych błędów konfiguracji?
> Nie. Nic nie rób. Jeśli ktoś wpisze sobie adres IPv6 do
> inet_interfaces, a nie ma supportu w kernelu to jest tylko i wyłącznie
> jego problem.

To znaczy nic nie robić, czy zamienić msg_fatal na continue?
Bo "all" to nie jest adres tylko IPv6, a przy tym właśnie ten fatal
jest wywoływany.

Przy "localhost" z kolei wywala się w innym miejscu:
fatal: parameter inet_interfaces: no local interface found for localhost
pomimo wpisu w /etc/hosts
127.0.0.1       localhost
(inne programy nie mają problemu z łączeniem z localhost;
podanie 127.0.0.1 zamiast "localhost" pomaga)

Tu jest z kolei taka pętla:

        for (nvirtual = 0; nvirtual < addr_list->used; nvirtual++) {
            for (nlocal = 0; /* see below */ ; nlocal++) {
+               if (nlocal >= local_addrs.used) {
+                   char hbuf[NI_MAXHOST];
+                   if (getnameinfo((struct sockaddr *)&addr_list->addrs[nvirtual],
+                       SS_LEN(addr_list->addrs[nvirtual]), hbuf,
+                       sizeof(hbuf), NULL, 0, NI_NUMERICHOST) != 0)
+                       strncpy(hbuf, "???", sizeof(hbuf));
+                   msg_fatal("parameter %s: no local interface found for %s",
+                             VAR_INET_INTERFACES, hbuf);
+               }
[...]


-- 
Jakub Bogusz
http://prioris.mini.pw.edu.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl