summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ftp/ftpproxy/Makefile19
-rw-r--r--ftp/ftpproxy/files/ftpproxy.in46
-rw-r--r--ftp/ftpproxy/files/patch-Makefile2
-rw-r--r--ftp/ftpproxy/files/patch-doc_ftp.proxy.113
-rw-r--r--ftp/ftpproxy/files/patch-src_daemon.c72
-rw-r--r--ftp/ftpproxy/files/patch-src_ftp.c39
-rw-r--r--ftp/ftpproxy/files/patch-src_ftp.h62
-rw-r--r--ftp/ftpproxy/files/patch-src_ip-lib.c11
-rw-r--r--ftp/ftpproxy/files/patch-src_lib.c70
-rw-r--r--ftp/ftpproxy/files/patch-src_main.c45
10 files changed, 374 insertions, 5 deletions
diff --git a/ftp/ftpproxy/Makefile b/ftp/ftpproxy/Makefile
index 5fb5a8c87515..e27117f93510 100644
--- a/ftp/ftpproxy/Makefile
+++ b/ftp/ftpproxy/Makefile
@@ -1,5 +1,5 @@
PORTNAME= ftpproxy
-PORTVERSION= 1.2.3
+DISTVERSION= 1.2.3
PORTREVISION= 2
CATEGORIES= ftp
MASTER_SITES= http://www.ftpproxy.org/download/ \
@@ -9,19 +9,30 @@ MAINTAINER= philippe@le-berre.com
COMMENT= FTP proxy
WWW= https://www.ftpproxy.org/
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
USES= gmake tar:tgz
+MAKE_ARGS= CC="${CC}" \
+ OSLIB="-lutil"
MAKE_JOBS_UNSAFE= yes
-MAKE_ARGS= CC="${CC}"
-PLIST_FILES= sbin/ftp.proxy \
+SUB_FILES= ftpproxy
+
+PLIST_FILES= etc/rc.d/ftpproxy \
+ sbin/ftp.proxy \
share/man/man1/ftp.proxy.1.gz
pre-build:
@${REINPLACE_CMD} -e 's|^CFLAGS.*|CFLAGS=${CFLAGS} \
-DVERSION=\\"${PORTVERSION}\\"|' ${WRKSRC}/src/Makefile
+post-build:
+ ${GZIP_CMD} ${WRKSRC}/doc/ftp.proxy.1
+
do-install:
${INSTALL_PROGRAM} ${WRKSRC}/src/ftp.proxy ${STAGEDIR}${PREFIX}/sbin
- ${INSTALL_MAN} ${WRKSRC}/doc/ftp.proxy.1 ${STAGEDIR}${PREFIX}/share/man/man1
+ ${INSTALL_MAN} ${WRKSRC}/doc/ftp.proxy.1.gz ${STAGEDIR}${PREFIX}/share/man/man1
+ ${INSTALL_SCRIPT} ${WRKDIR}/ftpproxy ${STAGEDIR}${PREFIX}/etc/rc.d
.include <bsd.port.mk>
diff --git a/ftp/ftpproxy/files/ftpproxy.in b/ftp/ftpproxy/files/ftpproxy.in
new file mode 100644
index 000000000000..c662fd15a946
--- /dev/null
+++ b/ftp/ftpproxy/files/ftpproxy.in
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+# PROVIDE: ftpproxy
+# REQUIRE: LOGIN FILESYSTEMS ftp
+# KEYWORD: shutdown
+#
+# ftpproxy_enable (bool): Set to "YES" to enable ftpproxy.
+# (default: "NO")
+#
+# ftpproxy_config (str): Name of ftpproxy config file
+# (default: "/usr/local/etc/ftpproxy.conf")
+#
+# ftpproxy_defaulthost (str): Name of ftp server to connect to.
+# (default: "localhost")
+#
+# ftpproxy_flags (str): Additional flags for ftpproxy
+# (default: "")
+#
+# ftpproxy_user (str): The user to run ftpproxy as
+# (default: "root")
+#
+
+. /etc/rc.subr
+
+name=ftpproxy
+rcvar=ftpproxy_enable
+pidfile="/var/run/ftpproxy.pid"
+start_cmd="${name}_start"
+command="%%PREFIX%%/sbin/ftp.proxy"
+
+load_rc_config $name
+
+: ${ftpproxy_enable="NO"}
+: ${ftpproxy_config="%%PREFIX%%/etc/ftpproxy.conf"}
+: ${ftpproxy_defaulthost="localhost"}
+: ${ftpproxy_flags=""}
+: ${ftpproxy_user="root"}
+
+ftpproxy_start()
+{
+ /usr/bin/install -o ${ftpproxy_user} /dev/null ${pidfile}
+ /usr/bin/su -m ${ftpproxy_user} -c "${command} -f ${ftpproxy_config} \
+ -P ${pidfile} ${ftpproxy_flags} ${ftpproxy_defaulthost}"
+}
+
+run_rc_command "$1"
diff --git a/ftp/ftpproxy/files/patch-Makefile b/ftp/ftpproxy/files/patch-Makefile
index d59d84749c93..04b9725bb5bd 100644
--- a/ftp/ftpproxy/files/patch-Makefile
+++ b/ftp/ftpproxy/files/patch-Makefile
@@ -1,4 +1,4 @@
---- Makefile.orig 2004-07-30 12:49:27.000000000 +0000
+--- Makefile.orig 2004-07-30 12:49:27 UTC
+++ Makefile
@@ -9,7 +9,7 @@ TARGETS = ftp.proxy
diff --git a/ftp/ftpproxy/files/patch-doc_ftp.proxy.1 b/ftp/ftpproxy/files/patch-doc_ftp.proxy.1
new file mode 100644
index 000000000000..cf6c893c7855
--- /dev/null
+++ b/ftp/ftpproxy/files/patch-doc_ftp.proxy.1
@@ -0,0 +1,13 @@
+--- doc/ftp.proxy.1.orig 2023-02-20 12:32:45 UTC
++++ doc/ftp.proxy.1
+@@ -373,6 +373,10 @@ tell \fIftp.proxy\fR to use \fIport\fR as source port
+ transfers (using port number 20 is FTP standard).
+ Keep in mind that port numbers below 1024 require root permissions.
+ .TP
++\fB-P\fR \fIfilename\fR
++tell \fIftp.proxy\fR to write the PID of the master process into
++the \fIfilename\fR specified.
++.TP
+ \fB-q\fR \fIsourceip\fR
+ sets the IP number for the outgoing control connection.
+ .TP
diff --git a/ftp/ftpproxy/files/patch-src_daemon.c b/ftp/ftpproxy/files/patch-src_daemon.c
new file mode 100644
index 000000000000..ec3d1c027604
--- /dev/null
+++ b/ftp/ftpproxy/files/patch-src_daemon.c
@@ -0,0 +1,72 @@
+--- src/daemon.c.orig 2003-10-26 22:10:19 UTC
++++ src/daemon.c
+@@ -33,6 +33,7 @@
+ #include <signal.h>
+ #include <sys/wait.h>
+ #include <pwd.h>
++#include <err.h>
+
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -51,20 +52,35 @@
+
+ int acceptloop(int sock)
+ {
+- int connect, pid, len;
++ int connect, pid, otherpid;
++ socklen_t len;
+ struct sockaddr_in client;
+
+ /*
+ * Go into background.
+ */
+
+- if (debug != 0)
+- ; /* Do not fork in debug mode */
++ pfh = NULL;
+
+- else if ((pid = fork()) > 0)
+- exit (0);
++ if (debug == 0) {
++ pfh = pidfile_open(pidfile, 0600, &otherpid);
++ if (pfh == NULL) {
++ if (errno == EEXIST) {
++ errx(EXIT_FAILURE, "ftp.proxy already running, pid %jd.",
++ (intmax_t)otherpid);
++ }
++ warnx("Cannot open or create pid file %s", pidfile);
++ }
++ if (daemon(0, 0) == -1) {
++ warnx("Cannot daemonize");
++ pidfile_remove(pfh);
++ exit(EXIT_FAILURE);
++ }
++ pidfile_write(pfh);
++ }
+
+ fprintf (stderr, "\nstarting ftp.proxy %s in daemon mode ...\n", VERSION);
++
+ while (1) {
+
+ /*
+@@ -82,7 +98,7 @@ int acceptloop(int sock)
+
+ if ((pid = fork()) < 0) {
+ fprintf (stderr, "%04X: can't fork process: %s\n", getpid(), strerror(errno));
+- exit (1);
++ exit(EXIT_FAILURE);
+ }
+ else if (pid == 0) {
+ int optlen;
+@@ -112,7 +128,9 @@ int acceptloop(int sock)
+
+ close (1);
+ fprintf (stderr, "%04X: terminating\n", getpid());
+-
+- exit (0);
++ if (pfh != NULL) {
++ pidfile_remove(pfh);
++ }
++ exit (EXIT_SUCCESS);
+ }
+
diff --git a/ftp/ftpproxy/files/patch-src_ftp.c b/ftp/ftpproxy/files/patch-src_ftp.c
new file mode 100644
index 000000000000..8d5796197ba2
--- /dev/null
+++ b/ftp/ftpproxy/files/patch-src_ftp.c
@@ -0,0 +1,39 @@
+--- src/ftp.c.orig 2004-07-30 12:52:12 UTC
++++ src/ftp.c
+@@ -115,7 +115,7 @@ ftpcmd_t cmdtab[] = {
+
+ unsigned get_interface_info(int pfd, char *ip, int max)
+ {
+- int size;
++ socklen_t size;
+ unsigned int port;
+ struct sockaddr_in saddr;
+
+@@ -133,7 +133,7 @@ unsigned get_interface_info(int pfd, char *ip, int max
+
+ int get_client_info(ftp_t *x, int pfd)
+ {
+- int size;
++ socklen_t size;
+ struct sockaddr_in saddr;
+ struct in_addr *addr;
+ struct hostent *hostp = NULL;
+@@ -274,7 +274,8 @@ int getc_fd(ftp_t *x, int fd)
+ }
+ else if (FD_ISSET(x->ch.active, &available)) {
+ if (x->ch.state == PORT_LISTEN) {
+- int sock, adrlen;
++ int sock;
++ socklen_t adrlen;
+ struct sockaddr_in adr;
+
+ earlyreported = 0;
+@@ -1823,7 +1824,7 @@ int proxy_request(config_t *config)
+ syslog(LOG_NOTICE, "%s %s: %ld bytes", x->ch.command, x->ch.filename, x->ch.bytes);
+
+ if (x->xlfp != NULL) {
+- unsigned long now;
++ time_t now;
+ char date[80];
+
+ /*
diff --git a/ftp/ftpproxy/files/patch-src_ftp.h b/ftp/ftpproxy/files/patch-src_ftp.h
new file mode 100644
index 000000000000..29d15f5c5ba4
--- /dev/null
+++ b/ftp/ftpproxy/files/patch-src_ftp.h
@@ -0,0 +1,62 @@
+--- src/ftp.h.orig 2023-02-20 11:42:14 UTC
++++ src/ftp.h
+@@ -29,11 +29,19 @@
+ #ifndef _FTP_INCLUDED
+ #define _FTP_INCLUDED
+
++#include <limits.h>
++#include <libutil.h>
++
+ extern char *version;
+
+ extern char *program;
+-extern char progname[80];
++extern char progname[PATH_MAX];
+
++/* PID file */
++#define PIDFILE_DEFAULT "/var/run/ftpproxy.pid"
++extern char pidfile[PATH_MAX];
++extern struct pidfh *pfh;
++
+ extern int debug;
+ extern int extralog;
+ extern int bindport;
+@@ -45,7 +53,7 @@ extern int acceptloop(int sock);
+
+
+ typedef struct _config {
+- char configfile[200];
++ char configfile[PATH_MAX];
+
+ int standalone;
+ int timeout;
+@@ -53,12 +61,12 @@ typedef struct _config {
+ int selectserver;
+ int allow_anyremote;
+
+- char server[200];
++ char server[NI_MAXHOST];
+ char *serverlist;
+
+- char acp[200];
+- char ccp[200];
+- char ctp[200];
++ char acp[PATH_MAX];
++ char ccp[PATH_MAX];
++ char ctp[PATH_MAX];
+ char varname[80];
+
+ int allow_blanks;
+@@ -66,10 +74,10 @@ typedef struct _config {
+ int use_last_at;
+ int monitor;
+ int bsize;
+- char xferlog[200];
++ char xferlog[PATH_MAX];
+
+ int numeric_only;
+- char sourceip[200];
++ char sourceip[NI_MAXHOST];
+ unsigned int dataport;
+ } config_t;
+
diff --git a/ftp/ftpproxy/files/patch-src_ip-lib.c b/ftp/ftpproxy/files/patch-src_ip-lib.c
new file mode 100644
index 000000000000..f99847a1e496
--- /dev/null
+++ b/ftp/ftpproxy/files/patch-src_ip-lib.c
@@ -0,0 +1,11 @@
+--- src/ip-lib.c.orig 2025-02-19 19:25:06 UTC
++++ src/ip-lib.c
+@@ -52,7 +52,7 @@ int openip(char *host, unsigned int port, char *srcip,
+ {
+ int socketd;
+ struct sockaddr_in server;
+- struct hostent *hostp, *gethostbyname();
++ struct hostent *hostp;
+
+ socketd = socket(AF_INET, SOCK_STREAM, 0);
+ if (socketd < 0)
diff --git a/ftp/ftpproxy/files/patch-src_lib.c b/ftp/ftpproxy/files/patch-src_lib.c
new file mode 100644
index 000000000000..feb5b280dc12
--- /dev/null
+++ b/ftp/ftpproxy/files/patch-src_lib.c
@@ -0,0 +1,70 @@
+--- src/lib.c.orig 2003-07-11 16:34:46 UTC
++++ src/lib.c
+@@ -76,9 +76,9 @@ static int _init_upper()
+ upper[c] = 'A' + (c - 'a');
+
+ DEBUG( fprintf (stderr, "init umlaute\n"); )
+- upper[c = (unsigned char) 'ä'] = 'Ä';
+- upper[c = (unsigned char) 'ö'] = 'Ö';
+- upper[c = (unsigned char) 'ü'] = 'Ü';
++ upper[c = (unsigned char) '\xe4'] = '\xc4';
++ upper[c = (unsigned char) '\xf6'] = '\xd6';
++ upper[c = (unsigned char) '\xfc'] = '\xdc';
+
+ DEBUG( fprintf (stderr, "init upper[] complete\n"); )
+ return (0);
+@@ -97,9 +97,9 @@ static int _init_lower()
+ lower[c] = 'a' + (c - 'A');
+
+ DEBUG( fprintf (stderr, "init umlaute\n"); )
+- lower[c = (unsigned char) 'Ä'] = 'ä';
+- lower[c = (unsigned char) 'Ö'] = 'ö';
+- lower[c = (unsigned char) 'Ü'] = 'ü';
++ lower[c = (unsigned char) '\xc4'] = '\xe4';
++ lower[c = (unsigned char) '\xd6'] = '\xf6';
++ lower[c = (unsigned char) '\xdc'] = '\xfc';
+
+ DEBUG( fprintf (stderr, "init upper[] complete\n"); )
+ return (0);
+@@ -140,8 +140,8 @@ int islowercase(unsigned int c)
+
+ char *strlwr(char *string)
+ {
+- unsigned int c;
+- unsigned char *p;
++ char c;
++ char *p;
+
+ if (lower['0'] == 0)
+ _init_lower();
+@@ -156,8 +156,8 @@ char *strlwr(char *string)
+
+ char *strupr(char *string)
+ {
+- unsigned int c;
+- unsigned char *p;
++ char c;
++ char *p;
+
+ if (upper['0'] == 0)
+ _init_upper();
+@@ -183,7 +183,7 @@ char *skip_ws(char *string)
+ char *noctrl(char *buffer)
+ {
+ int len, i;
+- unsigned char *p;
++ char *p;
+
+ if ((p = buffer) == NULL)
+ return (NULL);
+@@ -201,8 +201,8 @@ char *noctrl(char *buffer)
+
+ char *get_word(char **from, char *to, int maxlen)
+ {
+- unsigned int c;
+- unsigned char *p;
++ char c;
++ char *p;
+ int k;
+
+ maxlen -= 2;
diff --git a/ftp/ftpproxy/files/patch-src_main.c b/ftp/ftpproxy/files/patch-src_main.c
new file mode 100644
index 000000000000..47c07d3d6613
--- /dev/null
+++ b/ftp/ftpproxy/files/patch-src_main.c
@@ -0,0 +1,45 @@
+--- src/main.c.orig 2023-02-20 11:38:18 UTC
++++ src/main.c
+@@ -41,6 +41,7 @@
+ #include <arpa/inet.h>
+ #include <syslog.h>
+ #include <sys/time.h>
++#include <limits.h>
+
+ #include "ftp.h"
+ #include "ip-lib.h"
+@@ -55,8 +56,11 @@
+
+
+ char *program = "";
+-char progname[80] = "";
++char progname[PATH_MAX] = "";
+
++char pidfile[PATH_MAX];
++struct pidfh *pfh;
++
+ int debug = 0;
+ int extralog = 0;
+
+@@ -88,6 +92,8 @@ int main(int argc, char *argv[], char *envp[])
+ program = progname;
+ }
+
++ copy_string(pidfile, PIDFILE_DEFAULT, sizeof(pidfile));
++
+ config = allocate(sizeof(config_t));
+ config->timeout = 15 * 60;
+ config->allow_passwdblanks = 0;
+@@ -146,6 +152,12 @@ int main(int argc, char *argv[], char *envp[])
+ config->dataport = strtoul(argv[k++], NULL, 10);
+ if (config->dataport == 0)
+ config->dataport = 20;
++ }
++ else if (c == 'P') {
++ if (k >= argc)
++ missing_arg(c, "pid file name");
++
++ copy_string(pidfile, argv[k++], sizeof(pidfile));
+ }
+ else if (c == 'q') {
+