postfix + libinet6

Jakub Bogusz qboosh w prioris.mini.pw.edu.pl
Śro, 22 Sie 2001, 20:13:19 CEST


On Mon, Aug 20, 2001 at 09:47:50PM +0200, Arkadiusz Miskiewicz wrote:
> Jakub Bogusz <qboosh w prioris.mini.pw.edu.pl> writes:
> 
> > Wygląda na to, że problemy posfiksa z IPv6 wynikają ze sposobu
> > działania libinet6. Np. w czymś takim:
> > 
> > +    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);
> > 
> > getaddrinfo() zwraca adresy IPv6 pomimo braki obsługi v6 w jądrze.
> I to jest to co getaddrinfo() powinno robić.

Aha.
A co z getnameinfo()?
Wygląda, że też działa dla adresów v6 bez wsparcia w kernelu.
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?

inet_addr_host() z postfiksa korzysta z gethostbyname().


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



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