On 2009-05-25, Maurice Janssen <[email protected]> wrote:
> I have an FTP-server (running OpenBSD 4.5-stable) that is only reachable
> over IPv6. Passive FTP works fine, but active FTP doesn't seem to work.
> I run ftpd from rc.conf.local (-DAS6), not through inetd.
This fixes it, but I'm not sure whether it's correct.
Index: monitor.c
===================================================================
RCS file: /cvs/src/libexec/ftpd/monitor.c,v
retrieving revision 1.18
diff -N -u -p monitor.c
--- monitor.c 30 Jun 2008 12:03:51 -0000 1.18
+++ monitor.c 26 May 2009 20:47:51 -0000
@@ -254,7 +254,7 @@ handle_cmds(void)
int err, s, slavequit, serrno, domain;
pid_t preauth_slave_pid;
size_t len;
- struct sockaddr sa;
+ union sockunion sa;
socklen_t salen;
char *name, *pw;
@@ -364,13 +364,14 @@ handle_cmds(void)
bzero(&sa, sizeof(sa));
recv_data(fd_slave, &sa, salen);
- if (sa.sa_len != salen)
+ if (sa.su_si.si_len != salen)
fatalx("monitor received invalid sockaddr len");
- if (sa.sa_family != AF_INET && sa.sa_family != AF_INET6)
+ if (sa.su_si.si_family != AF_INET &&
+ sa.su_si.si_family != AF_INET6)
fatalx("monitor received invalid addr family");
- err = bind(s, &sa, salen);
+ err = bind(s, (struct sockaddr *)&sa, salen);
serrno = errno;
if (s >= 0)