diff options
author | anray <anray@FreeBSD.org> | 2005-12-25 03:02:39 +0800 |
---|---|---|
committer | anray <anray@FreeBSD.org> | 2005-12-25 03:02:39 +0800 |
commit | 7085957f143e5cb8b7e9d9082f4869b85f8704e8 (patch) | |
tree | d0509fd27e676516bd5c63f3c3c26a3b717fdea3 /ftp | |
parent | 3821d03c7980356a6a20810507a532b6b1fca61c (diff) | |
download | freebsd-ports-gnome-7085957f143e5cb8b7e9d9082f4869b85f8704e8.tar.gz freebsd-ports-gnome-7085957f143e5cb8b7e9d9082f4869b85f8704e8.tar.zst freebsd-ports-gnome-7085957f143e5cb8b7e9d9082f4869b85f8704e8.zip |
Added pftpx, much enhanced ftp proxy for pf that supports most ftp protocols.
PR: ports/90868
Submitted by: thompsa
Approved by: sem(mentor)
Diffstat (limited to 'ftp')
-rw-r--r-- | ftp/Makefile | 1 | ||||
-rw-r--r-- | ftp/pfptx/Makefile | 45 | ||||
-rw-r--r-- | ftp/pfptx/distinfo | 3 | ||||
-rw-r--r-- | ftp/pfptx/files/patch-Makefile | 11 | ||||
-rw-r--r-- | ftp/pfptx/files/patch-pftpx.c | 206 | ||||
-rw-r--r-- | ftp/pfptx/pkg-descr | 7 |
6 files changed, 273 insertions, 0 deletions
diff --git a/ftp/Makefile b/ftp/Makefile index 13b58d084b81..7e0dea232a04 100644 --- a/ftp/Makefile +++ b/ftp/Makefile @@ -70,6 +70,7 @@ SUBDIR += paraget SUBDIR += pavuk SUBDIR += pear-Net_FTP + SUBDIR += pfptx SUBDIR += pftpd SUBDIR += php4-curl SUBDIR += php4-ftp diff --git a/ftp/pfptx/Makefile b/ftp/pfptx/Makefile new file mode 100644 index 000000000000..401328a5eb36 --- /dev/null +++ b/ftp/pfptx/Makefile @@ -0,0 +1,45 @@ +# New ports collection makefile for: pftpx +# Date created: 27 June 2005 +# Whom: Scott Ullrich (geekgod@geekgod.com) +# +# $FreeBSD$ + +PORTNAME= pftpx +PORTVERSION= 0.8 +CATEGORIES= ftp +MASTER_SITES= http://www.sentia.org/downloads/ +DISTNAME= ${PORTNAME}-${PORTVERSION} + +MAINTAINER= geekgod@geekgod.com +COMMENT= Much enhanced ftp proxy for pf that supports most ftp protocols + +LIB_DEPENDS= event-1.1a:${PORTSDIR}/devel/libevent + +MAN8= pftpx.8 + +PLIST_FILES= sbin/pftpx + +.include <bsd.port.pre.mk> + +.if ${OSVERSION} < 500000 +IGNORE= only for 5.0 and above +.endif + +.if ${OSVERSION} < 502116 +MAKE_ARGS= LOCALBASE="${PREFIX}" OSLEVEL=34 +.if defined(WITH_ALTQ) && (${WITH_ALTQ} == "yes") +CFLAGS+= -DHAVE_ALTQ=1 +.endif +.elif ${OSVERSION} < 600025 +MAKE_ARGS= LOCALBASE="${PREFIX}" OSLEVEL=35 +CFLAGS+= -DHAVE_ALTQ=1 -DHAVE_RULE_ANCHOR=1 +.else +MAKE_ARGS= LOCALBASE="${PREFIX}" OSLEVEL=37 +CFLAGS+= -DHAVE_ALTQ=1 +.endif + +do-install: + ${INSTALL_PROGRAM} ${WRKSRC}/pftpx ${PREFIX}/sbin + ${INSTALL_MAN} ${WRKSRC}/pftpx.8 ${PREFIX}/man/man8 + +.include <bsd.port.post.mk> diff --git a/ftp/pfptx/distinfo b/ftp/pfptx/distinfo new file mode 100644 index 000000000000..85775cb21b38 --- /dev/null +++ b/ftp/pfptx/distinfo @@ -0,0 +1,3 @@ +MD5 (pftpx-0.8.tar.gz) = 6d71baaab87c4ad13949bf7fc5d64f55 +SHA256 (pftpx-0.8.tar.gz) = b76443ac70cf19c2e92d69f51ed12995c582c60584111594ab97431c48e370ce +SIZE (pftpx-0.8.tar.gz) = 11488 diff --git a/ftp/pfptx/files/patch-Makefile b/ftp/pfptx/files/patch-Makefile new file mode 100644 index 000000000000..4a6ace634008 --- /dev/null +++ b/ftp/pfptx/files/patch-Makefile @@ -0,0 +1,11 @@ +--- Makefile.orig Mon Jun 27 19:14:36 2005 ++++ Makefile Mon Jun 27 19:30:00 2005 +@@ -5,6 +5,8 @@ + CFLAGS+=-I. -g + CFLAGS+=-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \ + -Wno-uninitialized ++CFLAGS+=-I/usr/local/include -L/usr/local/lib ++INCLUDES+= -I/usr/local/include + LDADD+= -levent + + .include <bsd.prog.mk> diff --git a/ftp/pfptx/files/patch-pftpx.c b/ftp/pfptx/files/patch-pftpx.c new file mode 100644 index 000000000000..a46f62421121 --- /dev/null +++ b/ftp/pfptx/files/patch-pftpx.c @@ -0,0 +1,206 @@ +--- pftpx.c.orig Mon Jun 27 17:58:30 2005 ++++ pftpx.c Mon Jun 27 18:01:11 2005 +@@ -58,6 +58,58 @@ + + #define sstosa(ss) ((struct sockaddr *)(ss)) + ++#include <sys/types.h> ++ ++#include <ctype.h> ++#include <limits.h> ++#include <string.h> ++ ++#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') ++#include <sys/types.h> ++ ++#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') ++#define isvisible(c) (((u_int)(c) <= UCHAR_MAX && isascii((u_char)(c)) && \ ++ isgraph((u_char)(c))) || \ ++ ((flag & VIS_SP) == 0 && (c) == ' ') || \ ++ ((flag & VIS_TAB) == 0 && (c) == '\t') || \ ++ ((flag & VIS_NL) == 0 && (c) == '\n') || \ ++ ((flag & VIS_SAFE) && ((c) == '\b' || \ ++ (c) == '\007' || (c) == '\r' || \ ++ isgraph((u_char)(c))))) ++ ++#define _VIS_H_ ++ ++#include <sys/types.h> ++#include <limits.h> ++ ++/* ++ * to select alternate encoding format ++ */ ++#define VIS_OCTAL 0x01 /* use octal \ddd format */ ++#define VIS_CSTYLE 0x02 /* use \[nrft0..] where appropriate */ ++ ++/* ++ * to alter set of characters encoded (default is to encode all ++ * non-graphic except space, tab, and newline). ++ */ ++#define VIS_SP 0x04 /* also encode space */ ++#define VIS_TAB 0x08 /* also encode tab */ ++#define VIS_NL 0x10 /* also encode newline */ ++#define VIS_WHITE (VIS_SP | VIS_TAB | VIS_NL) ++#define VIS_SAFE 0x20 /* only encode "unsafe" characters */ ++ ++/* ++ * other ++ */ ++#define VIS_NOSLASH 0x40 /* inhibit printing '\' */ ++ ++#define LIST_FIRST(head) ((head)->lh_first) ++#define LIST_END(head) NULL ++#define LIST_NEXT(elm, field) ((elm)->field.le_next) ++ ++char *vis(char *, int, int, int); ++int strnvis(char *, const char *, size_t, int); ++ + enum { CMD_NONE = 0, CMD_PORT, CMD_EPRT, CMD_PASV, CMD_EPSV }; + + struct session { +@@ -1037,3 +1089,143 @@ + "[-p address] [-q queue] [-t timeout]\n", __progname); + exit(1); + } ++ ++ ++/* ++ * vis - visually encode characters ++ */ ++char * ++vis(dst, c, flag, nextc) ++ register char *dst; ++ int c, nextc; ++ register int flag; ++{ ++ if (isvisible(c)) { ++ *dst++ = c; ++ if (c == '\\' && (flag & VIS_NOSLASH) == 0) ++ *dst++ = '\\'; ++ *dst = '\0'; ++ return (dst); ++ } ++ ++ if (flag & VIS_CSTYLE) { ++ switch(c) { ++ case '\n': ++ *dst++ = '\\'; ++ *dst++ = 'n'; ++ goto done; ++ case '\r': ++ *dst++ = '\\'; ++ *dst++ = 'r'; ++ goto done; ++ case '\b': ++ *dst++ = '\\'; ++ *dst++ = 'b'; ++ goto done; ++ case '\a': ++ *dst++ = '\\'; ++ *dst++ = 'a'; ++ goto done; ++ case '\v': ++ *dst++ = '\\'; ++ *dst++ = 'v'; ++ goto done; ++ case '\t': ++ *dst++ = '\\'; ++ *dst++ = 't'; ++ goto done; ++ case '\f': ++ *dst++ = '\\'; ++ *dst++ = 'f'; ++ goto done; ++ case ' ': ++ *dst++ = '\\'; ++ *dst++ = 's'; ++ goto done; ++ case '\0': ++ *dst++ = '\\'; ++ *dst++ = '0'; ++ if (isoctal(nextc)) { ++ *dst++ = '0'; ++ *dst++ = '0'; ++ } ++ goto done; ++ } ++ } ++ if (((c & 0177) == ' ') || (flag & VIS_OCTAL)) { ++ *dst++ = '\\'; ++ *dst++ = ((u_char)c >> 6 & 07) + '0'; ++ *dst++ = ((u_char)c >> 3 & 07) + '0'; ++ *dst++ = ((u_char)c & 07) + '0'; ++ goto done; ++ } ++ if ((flag & VIS_NOSLASH) == 0) ++ *dst++ = '\\'; ++ if (c & 0200) { ++ c &= 0177; ++ *dst++ = 'M'; ++ } ++ if (iscntrl(c)) { ++ *dst++ = '^'; ++ if (c == 0177) ++ *dst++ = '?'; ++ else ++ *dst++ = c + '@'; ++ } else { ++ *dst++ = '-'; ++ *dst++ = c; ++ } ++done: ++ *dst = '\0'; ++ return (dst); ++} ++ ++int ++strnvis(dst, src, siz, flag) ++ char *dst; ++ const char *src; ++ size_t siz; ++ int flag; ++{ ++ char c; ++ char *start, *end; ++ char tbuf[5]; ++ int i; ++ ++ i = 0; ++ for (start = dst, end = start + siz - 1; (c = *src) && dst < end; ) { ++ if (isvisible(c)) { ++ i = 1; ++ *dst++ = c; ++ if (c == '\\' && (flag & VIS_NOSLASH) == 0) { ++ /* need space for the extra '\\' */ ++ if (dst < end) ++ *dst++ = '\\'; ++ else { ++ dst--; ++ i = 2; ++ break; ++ } ++ } ++ src++; ++ } else { ++ i = vis(tbuf, c, flag, *++src) - tbuf; ++ if (dst + i <= end) { ++ memcpy(dst, tbuf, i); ++ dst += i; ++ } else { ++ src--; ++ break; ++ } ++ } ++ } ++ if (siz > 0) ++ *dst = '\0'; ++ if (dst + i > end) { ++ /* adjust return value for truncation */ ++ while ((c = *src)) ++ dst += vis(tbuf, c, flag, *++src) - tbuf; ++ } ++ return (dst - start); ++} ++ + diff --git a/ftp/pfptx/pkg-descr b/ftp/pfptx/pkg-descr new file mode 100644 index 000000000000..e5dc4862141a --- /dev/null +++ b/ftp/pfptx/pkg-descr @@ -0,0 +1,7 @@ +pftpx is a ftp proxy with many advanced features such as: + +1) it handles all ftp modes: PORT, PASV, EPRT, EPSV +2) it handles ipv6 +3) it should scale: one process handles all sessions using libevent +4) it works with "strict" ftp clients (clients that want data connections + to the same IP as the control connection) |