On 2009-05-25, Maurice Janssen <maur...@z74.net> 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)

Reply via email to