summaryrefslogtreecommitdiff
path: root/lib/libfetch/ftp.c
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2000-07-21 11:20:05 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2000-07-21 11:20:05 +0000
commit2197aaf1394ec644924607aacda0450438a85e31 (patch)
tree919990bbfc36e83b6ef7cdf082bc064613f1b811 /lib/libfetch/ftp.c
parentcfb4c85341969e422dd36ff1fec679cfdd685a79 (diff)
Notes
Diffstat (limited to 'lib/libfetch/ftp.c')
-rw-r--r--lib/libfetch/ftp.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/lib/libfetch/ftp.c b/lib/libfetch/ftp.c
index 05f429bd9119..a5eb1d351734 100644
--- a/lib/libfetch/ftp.c
+++ b/lib/libfetch/ftp.c
@@ -594,7 +594,7 @@ _ftp_connect(char *host, int port, char *user, char *pwd, char *flags)
af = AF_INET6;
/* check for proxy */
- if (!direct && (p = getenv("FTP_PROXY")) != NULL) {
+ if (!direct && (p = getenv("FTP_PROXY")) != NULL && *p) {
char c = 0;
#ifdef INET6
@@ -651,8 +651,12 @@ _ftp_connect(char *host, int port, char *user, char *pwd, char *flags)
/* send user name and password */
if (!user || !*user)
user = FTP_ANONYMOUS_USER;
- e = p ? _ftp_cmd(cd, "USER %s@%s@%d", user, host, port)
- : _ftp_cmd(cd, "USER %s", user);
+ if (p && port == FTP_DEFAULT_PORT)
+ e = _ftp_cmd(cd, "USER %s@%s", user, host);
+ else if (p)
+ e = _ftp_cmd(cd, "USER %s@%s@%d", user, host, port);
+ else
+ e = _ftp_cmd(cd, "USER %s", user);
/* did the server request a password? */
if (e == FTP_NEED_PASSWORD) {
@@ -759,12 +763,26 @@ _ftp_cached_connect(struct url *url, char *flags)
}
/*
+ * Check to see if we should use an HTTP proxy instead
+ */
+static int
+_ftp_use_http_proxy(void)
+{
+ char *p;
+
+ return ((p = getenv("HTTP_PROXY")) && *p && !getenv("FTP_PROXY"));
+}
+
+/*
* Get and stat file
*/
FILE *
fetchXGetFTP(struct url *url, struct url_stat *us, char *flags)
{
int cd;
+
+ if (_ftp_use_http_proxy())
+ return fetchXGetHTTP(url, us, flags);
/* connect to server */
if ((cd = _ftp_cached_connect(url, flags)) == NULL)
@@ -800,6 +818,9 @@ fetchPutFTP(struct url *url, char *flags)
{
int cd;
+ if (_ftp_use_http_proxy())
+ return fetchPutHTTP(url, flags);
+
/* connect to server */
if ((cd = _ftp_cached_connect(url, flags)) == NULL)
return NULL;
@@ -821,6 +842,9 @@ fetchStatFTP(struct url *url, struct url_stat *us, char *flags)
{
int cd;
+ if (_ftp_use_http_proxy())
+ return fetchStatHTTP(url, us, flags);
+
us->size = -1;
us->atime = us->mtime = 0;
@@ -843,6 +867,9 @@ extern void warnx(char *, ...);
struct url_ent *
fetchListFTP(struct url *url, char *flags)
{
+ if (_ftp_use_http_proxy())
+ return fetchListHTTP(url, flags);
+
warnx("fetchListFTP(): not implemented");
return NULL;
}