this fixes ftpsesame following pf_pool removal.
it works fine here for active-mode clients.

it does the right things for passive-mode clients, and works
when tested by running the ftp protocol manually over telnet,
but it doesn't seem fast enough to react for a real client.
(this is not new, and though it's not perfect, there are still
occasions where ftpsesame is more useful than ftp-proxy, so
I think it makes sense to fix rather than remove the port).

ok?


Index: Makefile
===================================================================
RCS file: /cvs/ports/net/ftpsesame/Makefile,v
retrieving revision 1.3
diff -u -p -r1.3 Makefile
--- Makefile    30 Nov 2009 09:55:57 -0000      1.3
+++ Makefile    18 Jan 2010 21:54:18 -0000
@@ -3,12 +3,10 @@
 COMMENT=       automagic packet filter configurator for FTP
 
 DISTNAME=      ftpsesame-0.95
-PKGNAME=       ${DISTNAME}p0
+PKGNAME=       ${DISTNAME}p1
 CATEGORIES=    net
 
 HOMEPAGE=      http://www.sentia.org/projects/ftpsesame/
-
-MAINTAINER=    Stuart Henderson <[email protected]>
 
 # BSD
 PERMIT_PACKAGE_CDROM=  Yes
Index: patches/patch-filter_c
===================================================================
RCS file: /cvs/ports/net/ftpsesame/patches/patch-filter_c,v
retrieving revision 1.1
diff -u -p -r1.1 patch-filter_c
--- patches/patch-filter_c      30 Nov 2009 09:55:57 -0000      1.1
+++ patches/patch-filter_c      18 Jan 2010 21:54:18 -0000
@@ -1,7 +1,23 @@
 $OpenBSD: patch-filter_c,v 1.1 2009/11/30 09:55:57 sthen Exp $
 --- filter.c.orig      Tue Oct  5 13:12:22 2004
-+++ filter.c   Sun Nov 29 22:49:34 2009
-@@ -65,7 +65,7 @@ filter_init(char *qname, char *tagname)
++++ filter.c   Mon Jan 18 13:57:49 2010
+@@ -34,7 +34,6 @@
+ 
+ #include "filter.h"
+ 
+-static struct pfioc_pooladdr  pfp;
+ static struct pfioc_rule      pfr;
+ static struct pfioc_trans     pft;
+ static struct pfioc_trans_e   pfte;
+@@ -57,7 +56,6 @@ filter_init(char *qname, char *tagname)
+        * Initialize the structs for filter_allow.
+        */
+ 
+-      memset(&pfp, 0, sizeof pfp);
+       memset(&pfr, 0, sizeof pfr);
+       memset(&pft, 0, sizeof pft);
+       memset(&pfte, 0, sizeof pfte);
+@@ -65,16 +63,18 @@ filter_init(char *qname, char *tagname)
        pft.size = 1;
        pft.esize = sizeof pfte;
        pft.array = &pfte;
@@ -9,4 +25,45 @@ $OpenBSD: patch-filter_c,v 1.1 2009/11/3
 +      pfte.type = PF_TRANS_RULESET;
  
        /*
-        * pass [quick] log inet proto tcp \
+-       * pass [quick] log inet proto tcp \
++       * [pass quick|match] log inet proto tcp \
+        *     from $src/32 to $dst/32 port = $d_port flags S/SAFR keep state
+        *     [tag tagname] [queue qname]
+        */
+-      pfr.rule.action = PF_PASS;
+-      if (tagname == NULL)
++      if (tagname == NULL) {
++              pfr.rule.action = PF_PASS;
+               pfr.rule.quick = 1;
++      } else
++              pfr.rule.action = PF_MATCH;
+       pfr.rule.log = 1;
+       pfr.rule.af = AF_INET;          
+       pfr.rule.proto = IPPROTO_TCP;
+@@ -82,6 +82,8 @@ filter_init(char *qname, char *tagname)
+       memset(&pfr.rule.src.addr.v.a.mask.v4, 255, 4);
+       pfr.rule.dst.addr.type = PF_ADDR_ADDRMASK;
+       memset(&pfr.rule.dst.addr.v.a.mask.v4, 255, 4);
++      pfr.rule.nat.addr.type = PF_ADDR_NONE;
++      pfr.rule.rdr.addr.type = PF_ADDR_NONE;
+       pfr.rule.dst.port_op = PF_OP_EQ;
+       pfr.rule.keep_state = 1;
+       pfr.rule.flags = TH_SYN;
+@@ -102,17 +104,12 @@ filter_allow(u_int32_t id, struct in_addr *src, struct
+ 
+       snprintf(an, PF_ANCHOR_NAME_SIZE, "%s/%d.%d", FTPSESAME_ANCHOR,
+           getpid(), id);
+-      strlcpy(pfp.anchor, an, PF_ANCHOR_NAME_SIZE);
+       strlcpy(pfr.anchor, an, PF_ANCHOR_NAME_SIZE);
+       strlcpy(pfte.anchor, an, PF_ANCHOR_NAME_SIZE);
+       
+       if (ioctl(dev, DIOCXBEGIN, &pft) == -1)
+               return (0);
+       pfr.ticket = pfte.ticket;
+-
+-      if (ioctl(dev, DIOCBEGINADDRS, &pfp) == -1)
+-              return (0);
+-      pfr.pool_ticket = pfp.ticket;
+ 
+       if (src != NULL && dst != NULL && d_port != 0) {
+               memcpy(&pfr.rule.src.addr.v.a.addr.v4, src, 4);
Index: patches/patch-ftpsesame_8
===================================================================
RCS file: patches/patch-ftpsesame_8
diff -N patches/patch-ftpsesame_8
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-ftpsesame_8   18 Jan 2010 21:54:18 -0000
@@ -0,0 +1,34 @@
+$OpenBSD$
+--- ftpsesame.8.orig   Mon Jan 18 12:36:49 2010
++++ ftpsesame.8        Mon Jan 18 12:36:50 2010
+@@ -91,14 +91,22 @@ The process will stay in the foreground, logging to st
+ Listen on
+ .Ar interface .
+ .It Fl t Ar tag
+-Create rules with tag
+-.Ar tag .
+-Also, option
+-.Ar quick
+-is not used.
+-This way the anchor always returns to the main ruleset, with the
+-tag set on approved FTP data connections.
+-The tag can then be used in pass rules below the anchor.
++The filter rules will add tag
++.Ar tag
++to data connections, and will use match rules instead of pass ones.
++This way alternative rules that use the
++.Ar tagged
++keyword can be implemented following the
++.Nm
++anchor.
++These rules can use special
++.Xr pf 4
++features like route-to, reply-to, label, rtable, overload, etc. that
++.Nm
++does not implement itself.
++There must be a matching pass rule after the
++.Nm
++anchor or the data connections will be blocked.
+ .It Fl q Ar queue
+ Create rules with queue
+ .Ar queue
Index: pkg/DESCR
===================================================================
RCS file: /cvs/ports/net/ftpsesame/pkg/DESCR,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 DESCR
--- pkg/DESCR   30 Jul 2005 15:45:30 -0000      1.1.1.1
+++ pkg/DESCR   18 Jan 2010 21:54:18 -0000
@@ -5,10 +5,9 @@ into a pf anchor when an FTP data connec
 You might want to try ftpsesame instead of ftp-proxy(8) from the OpenBSD
 base system for the following reasons: 
 - it runs on "transparent" (no IP address) bridges 
-- you need packetfilter performance on all data connections 
-- you have to handle lots of simultaneous sessions 
 - you do not want to redirect any traffic to the firewall itself: for IP
   accounting or other reasons 
+- you want to pass traffic to multiple FTP servers behind a firewall
 
 In general, ftpsesame is a good choice to run on a firewall in front of
 multiple FTP servers, where no NAT is involved. ftp-proxy(8) is usually

Reply via email to