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