Import libfetch-2.19 from pkgsrc:
- fix bug in URL quoting - man page improvements - remove passive mode flag, add flag to force active mode and fallback from passive to active on syntax errors automatically
This commit is contained in:
parent
16d084a837
commit
d45537460f
12
external/bsd/fetch/dist/libfetch/fetch.3
vendored
12
external/bsd/fetch/dist/libfetch/fetch.3
vendored
@ -24,7 +24,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD: fetch.3,v 1.64 2007/12/18 11:03:26 des Exp $
|
||||
.\" $NetBSD: fetch.3,v 1.1.1.2 2008/10/07 15:55:20 joerg Exp $
|
||||
.\" $NetBSD: fetch.3,v 1.1.1.3 2008/10/29 16:18:13 joerg Exp $
|
||||
.\"
|
||||
.Dd April 25, 2008
|
||||
.Dt FETCH 3
|
||||
@ -358,10 +358,14 @@ and
|
||||
.Fn fetchPutFTP
|
||||
implement the FTP protocol as described in RFC 959.
|
||||
.Pp
|
||||
By default
|
||||
.Nm libfetch
|
||||
will attempt to use passive mode first and only fallback to active mode
|
||||
if the server reports a syntax error.
|
||||
If the
|
||||
.Ql p
|
||||
(passive) flag is specified, a passive (rather than active) connection
|
||||
will be attempted.
|
||||
.Ql a
|
||||
(active) flag is specified, a passive connection is not tried and active mode
|
||||
is used directly.
|
||||
.Pp
|
||||
If the
|
||||
.Ql l
|
||||
|
4
external/bsd/fetch/dist/libfetch/fetch.c
vendored
4
external/bsd/fetch/dist/libfetch/fetch.c
vendored
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: fetch.c,v 1.1.1.2 2008/10/07 15:55:20 joerg Exp $ */
|
||||
/* $NetBSD: fetch.c,v 1.1.1.3 2008/10/29 16:18:13 joerg Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav
|
||||
* Copyright (c) 2008 Joerg Sonnenberger <joerg@NetBSD.org>
|
||||
@ -510,7 +510,7 @@ quote_doc:
|
||||
u->doc[i++] = '0' + ((unsigned char)*p) / 16;
|
||||
else
|
||||
u->doc[i++] = 'a' - 10 + ((unsigned char)*p) / 16;
|
||||
if ((unsigned char)*p % 16 < 16)
|
||||
if ((unsigned char)*p % 16 < 10)
|
||||
u->doc[i++] = '0' + ((unsigned char)*p) % 16;
|
||||
else
|
||||
u->doc[i++] = 'a' - 10 + ((unsigned char)*p) % 16;
|
||||
|
58
external/bsd/fetch/dist/libfetch/fetch.cat3
vendored
58
external/bsd/fetch/dist/libfetch/fetch.cat3
vendored
@ -126,7 +126,7 @@ DDEESSCCRRIIPPTTIIOONN
|
||||
|
||||
ffeettcchhPPaarrsseeUURRLL() takes a URL in the form of a null-terminated string and
|
||||
splits it into its components function according to the Common Internet
|
||||
Scheme Syntax detailed in RFC1738. A regular expression which produces
|
||||
Scheme Syntax detailed in RFC 1738. A regular expression which produces
|
||||
this syntax is:
|
||||
|
||||
<scheme>:(//(<user>(:<pwd>)?@)?<host>(:<port>)?)?/(<document>)?
|
||||
@ -140,7 +140,7 @@ DDEESSCCRRIIPPTTIIOONN
|
||||
the URL automatically. This is not done by ffeettcchhMMaakkeeUURRLL().
|
||||
ffeettcchhCCooppyyUURRLL() copies an existing _u_r_l structure.
|
||||
|
||||
ffeettcchhMMaakkeeUURRLL(), ffeettcchhPPaarrsseeUURRLL() and ffeettcchhCCooppyyUURRLL() return a pointer to a
|
||||
ffeettcchhMMaakkeeUURRLL(), ffeettcchhPPaarrsseeUURRLL(), and ffeettcchhCCooppyyUURRLL() return a pointer to a
|
||||
_u_r_l structure, which is defined as follows in <_f_e_t_c_h_._h>:
|
||||
|
||||
#define URL_SCHEMELEN 16
|
||||
@ -159,7 +159,7 @@ DDEESSCCRRIIPPTTIIOONN
|
||||
size_t length;
|
||||
};
|
||||
|
||||
The pointer returned by ffeettcchhMMaakkeeUURRLL(), ffeettcchhCCooppyyUURRLL() and
|
||||
The pointer returned by ffeettcchhMMaakkeeUURRLL(), ffeettcchhCCooppyyUURRLL(), and
|
||||
ffeettcchhPPaarrsseeUURRLL() should be freed using ffeettcchhFFrreeeeUURRLL().
|
||||
|
||||
ffeettcchhXXGGeettUURRLL(), ffeettcchhGGeettUURRLL(), and ffeettcchhPPuuttUURRLL() constitute the recom-
|
||||
@ -201,23 +201,23 @@ DDEESSCCRRIIPPTTIIOONN
|
||||
struct url *urls;
|
||||
};
|
||||
|
||||
The list should be initialised by calling ffeettcchhIInniittUURRLLLLiisstt() and the
|
||||
The list should be initialized by calling ffeettcchhIInniittUURRLLLLiisstt() and the
|
||||
entries be freed by calling ffeettcchhFFrreeeeUURRLLLLiisstt().
|
||||
|
||||
ffeettcchhSSttrriinnggiiffyyUURRLL() returns the URL as string. ffeettcchhUUnnqquuootteePPaatthh()
|
||||
returns the path name part of the URL with any quoting undone. Query
|
||||
arguments and fragment identifiers are not included.
|
||||
ffeettcchhUUnnqquuootteeFFiilleennaammee() returns the last component of the path name as
|
||||
returned by ffeettcchhUUnnqquuootteePPaatthh(). ffeettcchhSSttrriinnggiiffyyUURRLL(), ffeettcchhUUnnqquuootteePPaatthh()
|
||||
returned by ffeettcchhUUnnqquuootteePPaatthh(). ffeettcchhSSttrriinnggiiffyyUURRLL(), ffeettcchhUUnnqquuootteePPaatthh(),
|
||||
and ffeettcchhUUnnqquuootteeFFiilleennaammee() return a string that should be deallocated
|
||||
with ffrreeee() after use.
|
||||
|
||||
ffeettcchhXXGGeett(), ffeettcchhGGeett(), ffeettcchhPPuutt() and ffeettcchhSSttaatt() are similar to
|
||||
ffeettcchhXXGGeettUURRLL(), ffeettcchhGGeettUURRLL(), ffeettcchhPPuuttUURRLL() and ffeettcchhSSttaattUURRLL(), except
|
||||
ffeettcchhXXGGeett(), ffeettcchhGGeett(), ffeettcchhPPuutt(), and ffeettcchhSSttaatt() are similar to
|
||||
ffeettcchhXXGGeettUURRLL(), ffeettcchhGGeettUURRLL(), ffeettcchhPPuuttUURRLL(), and ffeettcchhSSttaattUURRLL(), except
|
||||
that they expect a pre-parsed URL in the form of a pointer to a _s_t_r_u_c_t
|
||||
_u_r_l rather than a string.
|
||||
|
||||
All of the ffeettcchhXXGGeettXXXXXX(), ffeettcchhGGeettXXXXXX() and ffeettcchhPPuuttXXXXXX() functions
|
||||
All of the ffeettcchhXXGGeettXXXXXX(), ffeettcchhGGeettXXXXXX(), and ffeettcchhPPuuttXXXXXX() functions
|
||||
return a pointer to a stream which can be used to read or write data from
|
||||
or to the requested document, respectively. Note that although the
|
||||
implementation details of the individual access methods vary, it can gen-
|
||||
@ -226,9 +226,9 @@ DDEESSCCRRIIPPTTIIOONN
|
||||
of the ffeettcchhPPuuttXXXXXX() functions is write-only.
|
||||
|
||||
FFIILLEE SSCCHHEEMMEE
|
||||
ffeettcchhXXGGeettFFiillee(), ffeettcchhGGeettFFiillee() and ffeettcchhPPuuttFFiillee() provide access to doc-
|
||||
uments which are files in a locally mounted file system. Only the <docu-
|
||||
ment> component of the URL is used.
|
||||
ffeettcchhXXGGeettFFiillee(), ffeettcchhGGeettFFiillee(), and ffeettcchhPPuuttFFiillee() provide access to
|
||||
documents which are files in a locally mounted file system. Only the
|
||||
<document> component of the URL is used.
|
||||
|
||||
ffeettcchhXXGGeettFFiillee() and ffeettcchhGGeettFFiillee() do not accept any flags.
|
||||
|
||||
@ -238,16 +238,18 @@ FFIILLEE SSCCHHEEMMEE
|
||||
them.
|
||||
|
||||
FFTTPP SSCCHHEEMMEE
|
||||
ffeettcchhXXGGeettFFTTPP(), ffeettcchhGGeettFFTTPP() and ffeettcchhPPuuttFFTTPP() implement the FTP proto-
|
||||
col as described in RFC959.
|
||||
ffeettcchhXXGGeettFFTTPP(), ffeettcchhGGeettFFTTPP(), and ffeettcchhPPuuttFFTTPP() implement the FTP proto-
|
||||
col as described in RFC 959.
|
||||
|
||||
If the `p' (passive) flag is specified, a passive (rather than active)
|
||||
connection will be attempted.
|
||||
By default lliibbffeettcchh will attempt to use passive mode first and only fall-
|
||||
back to active mode if the server reports a syntax error. If the `a'
|
||||
(active) flag is specified, a passive connection is not tried and active
|
||||
mode is used directly.
|
||||
|
||||
If the `l' (low) flag is specified, data sockets will be allocated in the
|
||||
low (or default) port range instead of the high port range (see ip(4)).
|
||||
|
||||
If the `d' (direct) flag is specified, ffeettcchhXXGGeettFFTTPP(), ffeettcchhGGeettFFTTPP() and
|
||||
If the `d' (direct) flag is specified, ffeettcchhXXGGeettFFTTPP(), ffeettcchhGGeettFFTTPP(), and
|
||||
ffeettcchhPPuuttFFTTPP() will use a direct connection even if a proxy server is
|
||||
defined.
|
||||
|
||||
@ -256,11 +258,11 @@ FFTTPP SSCCHHEEMMEE
|
||||
mous@<hostname>".
|
||||
|
||||
HHTTTTPP SSCCHHEEMMEE
|
||||
The ffeettcchhXXGGeettHHTTTTPP(), ffeettcchhGGeettHHTTTTPP() and ffeettcchhPPuuttHHTTTTPP() functions imple-
|
||||
The ffeettcchhXXGGeettHHTTTTPP(), ffeettcchhGGeettHHTTTTPP(), and ffeettcchhPPuuttHHTTTTPP() functions imple-
|
||||
ment the HTTP/1.1 protocol. With a little luck, there is even a chance
|
||||
that they comply with RFC2616 and RFC2617.
|
||||
that they comply with RFC 2616 and RFC 2617.
|
||||
|
||||
If the `d' (direct) flag is specified, ffeettcchhXXGGeettHHTTTTPP(), ffeettcchhGGeettHHTTTTPP()
|
||||
If the `d' (direct) flag is specified, ffeettcchhXXGGeettHHTTTTPP(), ffeettcchhGGeettHHTTTTPP(),
|
||||
and ffeettcchhPPuuttHHTTTTPP() will use a direct connection even if a proxy server is
|
||||
defined.
|
||||
|
||||
@ -338,7 +340,7 @@ RREETTUURRNN VVAALLUUEESS
|
||||
and message, e.g. "File is not available (404 Not Found)"
|
||||
|
||||
EENNVVIIRROONNMMEENNTT
|
||||
FETCH_BIND_ADDRESS Specifies a hostname or IP address to which sockets
|
||||
FETCH_BIND_ADDRESS Specifies a host name or IP address to which sockets
|
||||
used for outgoing connections will be bound.
|
||||
|
||||
FTP_LOGIN Default FTP login if none was provided in the URL.
|
||||
@ -437,24 +439,24 @@ EEXXAAMMPPLLEESS
|
||||
NO_PROXY=localhost,127.0.0.1
|
||||
|
||||
SSEEEE AALLSSOO
|
||||
fetch(1), ftpio(3), ip(4)
|
||||
ftp(1), ip(4)
|
||||
|
||||
J. Postel and J. K. Reynolds, _F_i_l_e _T_r_a_n_s_f_e_r _P_r_o_t_o_c_o_l, October 1985,
|
||||
RFC959.
|
||||
J. Postel and J. K. Reynolds, _F_i_l_e _T_r_a_n_s_f_e_r _P_r_o_t_o_c_o_l, October 1985, RFC
|
||||
959.
|
||||
|
||||
P. Deutsch, A. Emtage, and A. Marine., _H_o_w _t_o _U_s_e _A_n_o_n_y_m_o_u_s _F_T_P, May
|
||||
1994, RFC1635.
|
||||
P. Deutsch, A. Emtage, and A. Marine, _H_o_w _t_o _U_s_e _A_n_o_n_y_m_o_u_s _F_T_P, May 1994,
|
||||
RFC 1635.
|
||||
|
||||
T. Berners-Lee, L. Masinter, and M. McCahill, _U_n_i_f_o_r_m _R_e_s_o_u_r_c_e _L_o_c_a_t_o_r_s
|
||||
_(_U_R_L_), December 1994, RFC1738.
|
||||
_(_U_R_L_), December 1994, RFC 1738.
|
||||
|
||||
R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, and
|
||||
T. Berners-Lee, _H_y_p_e_r_t_e_x_t _T_r_a_n_s_f_e_r _P_r_o_t_o_c_o_l _-_- _H_T_T_P_/_1_._1, January 1999,
|
||||
RFC2616.
|
||||
RFC 2616.
|
||||
|
||||
J. Franks, P. Hallam-Baker, J. Hostetler, S. Lawrence, P. Leach, A.
|
||||
Luotonen, and L. Stewart, _H_T_T_P _A_u_t_h_e_n_t_i_c_a_t_i_o_n_: _B_a_s_i_c _a_n_d _D_i_g_e_s_t _A_c_c_e_s_s
|
||||
_A_u_t_h_e_n_t_i_c_a_t_i_o_n, June 1999, RFC2617.
|
||||
_A_u_t_h_e_n_t_i_c_a_t_i_o_n, June 1999, RFC 2617.
|
||||
|
||||
HHIISSTTOORRYY
|
||||
The ffeettcchh library first appeared in FreeBSD 3.0.
|
||||
|
14
external/bsd/fetch/dist/libfetch/ftp.c
vendored
14
external/bsd/fetch/dist/libfetch/ftp.c
vendored
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ftp.c,v 1.1.1.2 2008/10/07 15:55:20 joerg Exp $ */
|
||||
/* $NetBSD: ftp.c,v 1.1.1.3 2008/10/29 16:18:14 joerg Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav
|
||||
* Copyright (c) 2008 Joerg Sonnenberger <joerg@NetBSD.org>
|
||||
@ -629,7 +629,7 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file, const char *op_ar
|
||||
|
||||
/* check flags */
|
||||
low = CHECK_FLAG('l');
|
||||
pasv = CHECK_FLAG('p');
|
||||
pasv = !CHECK_FLAG('a');
|
||||
verbose = CHECK_FLAG('v');
|
||||
|
||||
/* passive mode */
|
||||
@ -651,6 +651,8 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file, const char *op_ar
|
||||
if (sa.ss_family == AF_INET6)
|
||||
unmappedaddr((struct sockaddr_in6 *)&sa, &l);
|
||||
|
||||
retry_mode:
|
||||
|
||||
/* open data socket */
|
||||
if ((sd = socket(sa.ss_family, SOCK_STREAM, IPPROTO_TCP)) == -1) {
|
||||
fetch_syserr();
|
||||
@ -723,6 +725,14 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file, const char *op_ar
|
||||
goto ouch;
|
||||
}
|
||||
break;
|
||||
case FTP_SYNTAX_ERROR:
|
||||
if (verbose)
|
||||
fetch_info("passive mode failed");
|
||||
/* Close socket and retry with passive mode. */
|
||||
pasv = 0;
|
||||
close(sd);
|
||||
sd = -1;
|
||||
goto retry_mode;
|
||||
}
|
||||
|
||||
/* seek to required offset */
|
||||
|
Loading…
Reference in New Issue
Block a user