sendmail vs ipv6 broken after upgrade to 9.1

Ulrich Spörlein uqs at FreeBSD.org
Tue Jan 8 15:18:40 UTC 2013


Hey,

I upgraded a server running 8.x to 9.1 over the weekend and sendmail no
longer wants to bind the AF_INET6 sockets.

So while this still works:

DAEMON_OPTIONS(`Port=smtp, Addr=127.0.0.1, Name=MSA, M=Eu, InputMailFilters=dkim')
DAEMON_OPTIONS(`Port=smtp, Addr=::1, Name=MSA, Family=inet6, M=Eu, InputMailFilters=dkim')

this is broken:

DAEMON_OPTIONS(`Port=submission, Addr=acme.spoerlein.net, Name=MSA, M=E, InputMailFilters=dkim')
DAEMON_OPTIONS(`Port=submission, Addr=acme.spoerlein.net, Name=MSA, Family=inet6, M=E, InputMailFilters=dkim')

which makes me believe this has to do with name resolution...

The actual reported errors are:

Jan  8 16:05:03 acme sm-msp-queue[98057]: starting daemon (8.14.6): queueing at 00:30:00
Jan  8 16:05:03 acme sm-mta[98054]: NOQUEUE: SYSERR(root): opendaemonsocket: daemon MSA: cannot bind: Can't assign requested address
Jan  8 16:05:03 acme sm-mta[98054]: daemon MSA: problem creating SMTP socket
Jan  8 16:05:08 acme sm-mta[98054]: NOQUEUE: SYSERR(root): opendaemonsocket: daemon MSA: cannot bind: Can't assign requested address
Jan  8 16:05:08 acme sm-mta[98054]: daemon MSA: problem creating SMTP socket
Jan  8 16:05:13 acme sm-mta[98054]: NOQUEUE: SYSERR(root): opendaemonsocket: daemon MSA: cannot bind: Can't assign requested address
Jan  8 16:05:13 acme sm-mta[98054]: daemon MSA: problem creating SMTP socket

This will loop a couple of times, but not make any progress. ktrace will show what's up:

 98054 sendmail CALL  bind(0x6,0x708c14,0x10)
 98054 sendmail STRU  struct sockaddr { AF_INET, 88.198.49.12:587 }
 98054 sendmail RET   bind 0
 98054 sendmail CALL  socket(PF_INET6,SOCK_STREAM,IPPROTO_IP)
 98054 sendmail RET   socket 7
 98054 sendmail CALL  setsockopt(0x7,SOL_SOCKET,SO_REUSEADDR,0x7fffffffafa4,0x4)
 98054 sendmail RET   setsockopt 0
 98054 sendmail CALL  setsockopt(0x7,SOL_SOCKET,SO_KEEPALIVE,0x7fffffffafa4,0x4)
 98054 sendmail RET   setsockopt 0
 98054 sendmail CALL  fcntl(0x7,F_GETFD,0)
 98054 sendmail RET   fcntl 0
 98054 sendmail CALL  fcntl(0x7,F_SETFD,FD_CLOEXEC)
 98054 sendmail RET   fcntl 0
 98054 sendmail CALL  bind(0x7,0x708dbc,0x1c)
 98054 sendmail STRU  struct sockaddr { AF_INET6, [::ffff:88.198.49.12]:587 }
 98054 sendmail RET   bind -1 errno 49 Can't assign requested address

Yeah right ... I don't want an IPv6-mapped-IPv4 address, I want it to bind to the real thing.
/etc/nsswitch.conf has
hosts: files dns

and /etc/hosts has
root at acme: /etc/mail# grep acme /etc/hosts
88.198.49.12    acme.spoerlein.net acme
2a01:4f8:131:23c2::1    acme.spoerlein.net acme

Which shouldn't make a difference anyway, because of:
root at acme: /etc/mail# dig acme.spoerlein.net a +short; dig acme.spoerlein.net aaaa +short
88.198.49.12
2a01:4f8:131:23c2::1

How can I unstupid sendmail here?
Uli


More information about the freebsd-stable mailing list