Fixed a PASV_REMAP bug introduced in the modifications for IPv6.
authorMatthew Mondor <mmondor@pulsar-zone.net>
Sun, 13 Jan 2008 08:47:15 +0000 (08:47 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Sun, 13 Jan 2008 08:47:15 +0000 (08:47 +0000)
Fixed minor documentation bug and added an additional precision.

mmsoftware/mmftpd/src/mmftpd.c
mmsoftware/mmftpd/src/mmftpd.conf.5

index 424587e..45dc5df 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mmftpd.c,v 1.71 2008/01/11 19:08:49 mmondor Exp $ */
+/* $Id: mmftpd.c,v 1.72 2008/01/13 08:47:14 mmondor Exp $ */
 
 /*
  * Copyright (C) 2001-2008, Matthew Mondor
@@ -92,7 +92,7 @@
 
 MMCOPYRIGHT("@(#) Copyright (c) 2001-2004\n\
 \tMatthew Mondor. All rights reserved.\n");
-MMRCSID("$Id: mmftpd.c,v 1.71 2008/01/11 19:08:49 mmondor Exp $");
+MMRCSID("$Id: mmftpd.c,v 1.72 2008/01/13 08:47:14 mmondor Exp $");
 
 
 
@@ -3332,8 +3332,9 @@ foobar_address(char *buf, size_t bufsize, char **shrt,
 static bool
 pasv_remap_parse(void)
 {
-    char               *cols[64], *cols2[4];
-    int                        i, entries;
+    char                       *cols[64], *cols2[4];
+    int                                i, entries;
+    struct server_sockaddr     adv;
 
     if ((pasv_map_string = _mm_strdup(CONF.PASV_REMAP)) == NULL) {
        (void) fprintf(stderr, "pasv_remap_parse() - mm_strdup()\n");
@@ -3365,22 +3366,23 @@ pasv_remap_parse(void)
            goto err;
        }
 
-       pasv_map[i].bind.ss_family = ((mm_strchr(cols2[1], ':') != NULL ||
-                   mm_strchr(cols2[2], ':') != NULL) ?  AF_INET6 : AF_INET);
+       adv.ss_family = pasv_map[i].bind.ss_family =
+           ((mm_strchr(cols2[1], ':') != NULL ||
+             mm_strchr(cols2[2], ':') != NULL) ?  AF_INET6 : AF_INET);
+
        if (inet_pton(*(SERVER_SOCKADDR_FAMILY(&pasv_map[i].bind)),
-                   cols2[2], SERVER_SOCKADDR_ADDRESS(&pasv_map[i].bind))
+                   cols2[1], SERVER_SOCKADDR_ADDRESS(&pasv_map[i].bind))
                != 1) {
            (void) fprintf(stderr,
-                   "Invalid address [%s] in field 3 of entry %d of "
-                   "PASV_REMAP\n", cols2[2], i + 1);
+                   "Invalid address [%s] in field 2 (bind) of entry "
+                   "%d of PASV_REMAP\n", cols2[1], i + 1);
            goto err;
        }
-       if (inet_pton(*(SERVER_SOCKADDR_FAMILY(&pasv_map[i].bind)),
-                   cols2[1], SERVER_SOCKADDR_ADDRESS(&pasv_map[i].bind))
-               != 1) {
+       if (inet_pton(*(SERVER_SOCKADDR_FAMILY(&adv)),
+                   cols2[2], SERVER_SOCKADDR_ADDRESS(&adv)) != 1) {
            (void) fprintf(stderr,
-                   "Invalid address [%s] in field 2 of entry %d of "
-                   "PASV_REMAP\n", cols2[1], i + 1);
+                   "Invalid address [%s] in field 3 (advertize) of entry "
+                   "%d of PASV_REMAP\n", cols2[2], i + 1);
            goto err;
        }
 
@@ -3391,7 +3393,7 @@ pasv_remap_parse(void)
            goto err;
        }
        if (foobar_address(pasv_map[i].advertize_l, 255,
-                   &pasv_map[i].advertize_s, &pasv_map[i].bind) == -1) {
+                   &pasv_map[i].advertize_s, &adv) == -1) {
            (void) fprintf(stderr, "foobar_address()\n");
            goto err;
        }
index c307bfb..451b714 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: mmftpd.conf.5,v 1.11 2008/01/11 19:08:49 mmondor Exp $
+.\" $Id: mmftpd.conf.5,v 1.12 2008/01/13 08:47:15 mmondor Exp $
 .\"
 .\" Copyright (C) 2001-2008, Matthew Mondor
 .\" All rights reserved.
@@ -267,7 +267,7 @@ is used, number of last visited directories to remember in a FIFO; These are
 used to prevent sending the directory message too often, over and over again
 when it already has been displayed for this directory recently.
 .Pp
-.It Nm PASV_REMAP Ar "<addresspattern>:<bindaddress>:<advertizeaddress> ..."
+.It Nm PASV_REMAP Ar "<addresspattern>|<bindaddress>|<advertizeaddress> ..."
 When set, this allows to configure
 .Xr mmftpd 8
 to remap the address to
@@ -317,7 +317,8 @@ open the FTP control connection, but many clients only support PASV or LPSV.
 Note that both IPv6 and IPv4 may be used here.  The patterns which contain a
 column character will be considered to be IPv6 and matching will be done
 separately for both IPv4 and IPv6 address families.  There thus could be two
-match-all rules which will not clash.
+match-all rules which will not clash.  You should not mix IPv4 and IPv6
+addresses within the same entry.
 .It Nm PASV_RANGE Ar "boolean"
 If
 .Nm PASV_RANGE