xref: /freebsd/lib/libfetch/fetch.3 (revision 1453595f49c6b0d580bb57146a5981e73e80130e)
12cbbf9daSDag-Erling Smørgrav.\"-
2*1453595fSDag-Erling Smørgrav.\" Copyright (c) 1998-2013 Dag-Erling Smørgrav
3dcd47379SDag-Erling Smørgrav.\" Copyright (c) 2013 Michael Gmelin <freebsd@grem.de>
44ca1ab94SDag-Erling Smørgrav.\" All rights reserved.
54ca1ab94SDag-Erling Smørgrav.\"
64ca1ab94SDag-Erling Smørgrav.\" Redistribution and use in source and binary forms, with or without
74ca1ab94SDag-Erling Smørgrav.\" modification, are permitted provided that the following conditions
84ca1ab94SDag-Erling Smørgrav.\" are met:
94ca1ab94SDag-Erling Smørgrav.\" 1. Redistributions of source code must retain the above copyright
104ca1ab94SDag-Erling Smørgrav.\"    notice, this list of conditions and the following disclaimer.
114ca1ab94SDag-Erling Smørgrav.\" 2. Redistributions in binary form must reproduce the above copyright
124ca1ab94SDag-Erling Smørgrav.\"    notice, this list of conditions and the following disclaimer in the
134ca1ab94SDag-Erling Smørgrav.\"    documentation and/or other materials provided with the distribution.
144ca1ab94SDag-Erling Smørgrav.\"
154ca1ab94SDag-Erling Smørgrav.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
164ca1ab94SDag-Erling Smørgrav.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
174ca1ab94SDag-Erling Smørgrav.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
184ca1ab94SDag-Erling Smørgrav.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
194ca1ab94SDag-Erling Smørgrav.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
204ca1ab94SDag-Erling Smørgrav.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
214ca1ab94SDag-Erling Smørgrav.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
224ca1ab94SDag-Erling Smørgrav.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
234ca1ab94SDag-Erling Smørgrav.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
244ca1ab94SDag-Erling Smørgrav.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
254ca1ab94SDag-Erling Smørgrav.\" SUCH DAMAGE.
264ca1ab94SDag-Erling Smørgrav.\"
277f3dea24SPeter Wemm.\" $FreeBSD$
284ca1ab94SDag-Erling Smørgrav.\"
29*1453595fSDag-Erling Smørgrav.Dd July 30, 2013
304ca1ab94SDag-Erling Smørgrav.Dt FETCH 3
314ca1ab94SDag-Erling Smørgrav.Os
324ca1ab94SDag-Erling Smørgrav.Sh NAME
339a964d6aSDag-Erling Smørgrav.Nm fetchMakeURL ,
3460245e42SDag-Erling Smørgrav.Nm fetchParseURL ,
3560245e42SDag-Erling Smørgrav.Nm fetchFreeURL ,
361a5faa10SDag-Erling Smørgrav.Nm fetchXGetURL ,
374ca1ab94SDag-Erling Smørgrav.Nm fetchGetURL ,
384ca1ab94SDag-Erling Smørgrav.Nm fetchPutURL ,
39d8acd8dcSDag-Erling Smørgrav.Nm fetchStatURL ,
40ce71b736SDag-Erling Smørgrav.Nm fetchListURL ,
411a5faa10SDag-Erling Smørgrav.Nm fetchXGet ,
42db5f8cebSDag-Erling Smørgrav.Nm fetchGet ,
43db5f8cebSDag-Erling Smørgrav.Nm fetchPut ,
44d8acd8dcSDag-Erling Smørgrav.Nm fetchStat ,
45ce71b736SDag-Erling Smørgrav.Nm fetchList ,
461a5faa10SDag-Erling Smørgrav.Nm fetchXGetFile ,
474ca1ab94SDag-Erling Smørgrav.Nm fetchGetFile ,
484ca1ab94SDag-Erling Smørgrav.Nm fetchPutFile ,
49d8acd8dcSDag-Erling Smørgrav.Nm fetchStatFile ,
50ce71b736SDag-Erling Smørgrav.Nm fetchListFile ,
511a5faa10SDag-Erling Smørgrav.Nm fetchXGetHTTP ,
524ca1ab94SDag-Erling Smørgrav.Nm fetchGetHTTP ,
534ca1ab94SDag-Erling Smørgrav.Nm fetchPutHTTP ,
54d8acd8dcSDag-Erling Smørgrav.Nm fetchStatHTTP ,
55ce71b736SDag-Erling Smørgrav.Nm fetchListHTTP ,
561a5faa10SDag-Erling Smørgrav.Nm fetchXGetFTP ,
574ca1ab94SDag-Erling Smørgrav.Nm fetchGetFTP ,
5815efcd39SAlexey Zelkin.Nm fetchPutFTP ,
5915efcd39SAlexey Zelkin.Nm fetchStatFTP ,
6015efcd39SAlexey Zelkin.Nm fetchListFTP
6115efcd39SAlexey Zelkin.Nd file transfer functions
6215efcd39SAlexey Zelkin.Sh LIBRARY
6315efcd39SAlexey Zelkin.Lb libfetch
644ca1ab94SDag-Erling Smørgrav.Sh SYNOPSIS
6532eef9aeSRuslan Ermilov.In sys/param.h
6632eef9aeSRuslan Ermilov.In stdio.h
6732eef9aeSRuslan Ermilov.In fetch.h
6860245e42SDag-Erling Smørgrav.Ft struct url *
6938c7e4a6SArchie Cobbs.Fn fetchMakeURL "const char *scheme" "const char *host" "int port" "const char *doc" "const char *user" "const char *pwd"
709a964d6aSDag-Erling Smørgrav.Ft struct url *
7138c7e4a6SArchie Cobbs.Fn fetchParseURL "const char *URL"
7260245e42SDag-Erling Smørgrav.Ft void
7338c7e4a6SArchie Cobbs.Fn fetchFreeURL "struct url *u"
74db5f8cebSDag-Erling Smørgrav.Ft FILE *
7538c7e4a6SArchie Cobbs.Fn fetchXGetURL "const char *URL" "struct url_stat *us" "const char *flags"
761a5faa10SDag-Erling Smørgrav.Ft FILE *
7738c7e4a6SArchie Cobbs.Fn fetchGetURL "const char *URL" "const char *flags"
78db5f8cebSDag-Erling Smørgrav.Ft FILE *
7938c7e4a6SArchie Cobbs.Fn fetchPutURL "const char *URL" "const char *flags"
80d8acd8dcSDag-Erling Smørgrav.Ft int
8138c7e4a6SArchie Cobbs.Fn fetchStatURL "const char *URL" "struct url_stat *us" "const char *flags"
82ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
8338c7e4a6SArchie Cobbs.Fn fetchListURL "const char *URL" "const char *flags"
844ca1ab94SDag-Erling Smørgrav.Ft FILE *
8538c7e4a6SArchie Cobbs.Fn fetchXGet "struct url *u" "struct url_stat *us" "const char *flags"
861a5faa10SDag-Erling Smørgrav.Ft FILE *
8738c7e4a6SArchie Cobbs.Fn fetchGet "struct url *u" "const char *flags"
88db5f8cebSDag-Erling Smørgrav.Ft FILE *
8938c7e4a6SArchie Cobbs.Fn fetchPut "struct url *u" "const char *flags"
90d8acd8dcSDag-Erling Smørgrav.Ft int
9138c7e4a6SArchie Cobbs.Fn fetchStat "struct url *u" "struct url_stat *us" "const char *flags"
92ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
9338c7e4a6SArchie Cobbs.Fn fetchList "struct url *u" "const char *flags"
94db5f8cebSDag-Erling Smørgrav.Ft FILE *
9538c7e4a6SArchie Cobbs.Fn fetchXGetFile "struct url *u" "struct url_stat *us" "const char *flags"
961a5faa10SDag-Erling Smørgrav.Ft FILE *
9738c7e4a6SArchie Cobbs.Fn fetchGetFile "struct url *u" "const char *flags"
984ca1ab94SDag-Erling Smørgrav.Ft FILE *
9938c7e4a6SArchie Cobbs.Fn fetchPutFile "struct url *u" "const char *flags"
100d8acd8dcSDag-Erling Smørgrav.Ft int
10138c7e4a6SArchie Cobbs.Fn fetchStatFile "struct url *u" "struct url_stat *us" "const char *flags"
102ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
10338c7e4a6SArchie Cobbs.Fn fetchListFile "struct url *u" "const char *flags"
1044ca1ab94SDag-Erling Smørgrav.Ft FILE *
10538c7e4a6SArchie Cobbs.Fn fetchXGetHTTP "struct url *u" "struct url_stat *us" "const char *flags"
1061a5faa10SDag-Erling Smørgrav.Ft FILE *
10738c7e4a6SArchie Cobbs.Fn fetchGetHTTP "struct url *u" "const char *flags"
1084ca1ab94SDag-Erling Smørgrav.Ft FILE *
10938c7e4a6SArchie Cobbs.Fn fetchPutHTTP "struct url *u" "const char *flags"
110d8acd8dcSDag-Erling Smørgrav.Ft int
11138c7e4a6SArchie Cobbs.Fn fetchStatHTTP "struct url *u" "struct url_stat *us" "const char *flags"
112ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
11338c7e4a6SArchie Cobbs.Fn fetchListHTTP "struct url *u" "const char *flags"
1144ca1ab94SDag-Erling Smørgrav.Ft FILE *
11538c7e4a6SArchie Cobbs.Fn fetchXGetFTP "struct url *u" "struct url_stat *us" "const char *flags"
1161a5faa10SDag-Erling Smørgrav.Ft FILE *
11738c7e4a6SArchie Cobbs.Fn fetchGetFTP "struct url *u" "const char *flags"
1184ca1ab94SDag-Erling Smørgrav.Ft FILE *
11938c7e4a6SArchie Cobbs.Fn fetchPutFTP "struct url *u" "const char *flags"
120d8acd8dcSDag-Erling Smørgrav.Ft int
12138c7e4a6SArchie Cobbs.Fn fetchStatFTP "struct url *u" "struct url_stat *us" "const char *flags"
122ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
12338c7e4a6SArchie Cobbs.Fn fetchListFTP "struct url *u" "const char *flags"
1244ca1ab94SDag-Erling Smørgrav.Sh DESCRIPTION
1254ca1ab94SDag-Erling SmørgravThese functions implement a high-level library for retrieving and
1264ca1ab94SDag-Erling Smørgravuploading files using Uniform Resource Locators (URLs).
1274ca1ab94SDag-Erling Smørgrav.Pp
12860245e42SDag-Erling Smørgrav.Fn fetchParseURL
12960245e42SDag-Erling Smørgravtakes a URL in the form of a null-terminated string and splits it into
13060245e42SDag-Erling Smørgravits components function according to the Common Internet Scheme Syntax
1319364c532SDag-Erling Smørgravdetailed in RFC1738.
1329364c532SDag-Erling SmørgravA regular expression which produces this syntax is:
13360245e42SDag-Erling Smørgrav.Bd -literal
13460245e42SDag-Erling Smørgrav    <scheme>:(//(<user>(:<pwd>)?@)?<host>(:<port>)?)?/(<document>)?
13560245e42SDag-Erling Smørgrav.Ed
13660245e42SDag-Erling Smørgrav.Pp
1371df2031cSDag-Erling SmørgravIf the URL does not seem to begin with a scheme name, the following
1381df2031cSDag-Erling Smørgravsyntax is assumed:
1391df2031cSDag-Erling Smørgrav.Bd -literal
1401df2031cSDag-Erling Smørgrav    ((<user>(:<pwd>)?@)?<host>(:<port>)?)?/(<document>)?
1411df2031cSDag-Erling Smørgrav.Ed
1421df2031cSDag-Erling Smørgrav.Pp
14360245e42SDag-Erling SmørgravNote that some components of the URL are not necessarily relevant to
14460245e42SDag-Erling Smørgravall URL schemes.
1451df2031cSDag-Erling SmørgravFor instance, the file scheme only needs the <scheme> and <document>
1461df2031cSDag-Erling Smørgravcomponents.
14760245e42SDag-Erling Smørgrav.Pp
1489a964d6aSDag-Erling Smørgrav.Fn fetchMakeURL
1499a964d6aSDag-Erling Smørgravand
15040ac2845SDag-Erling Smørgrav.Fn fetchParseURL
1519a964d6aSDag-Erling Smørgravreturn a pointer to a
152a7e16a9dSRuslan Ermilov.Vt url
15340ac2845SDag-Erling Smørgravstructure, which is defined as follows in
154fe08efe6SRuslan Ermilov.In fetch.h :
15540ac2845SDag-Erling Smørgrav.Bd -literal
15640ac2845SDag-Erling Smørgrav#define URL_SCHEMELEN 16
15740ac2845SDag-Erling Smørgrav#define URL_USERLEN 256
15840ac2845SDag-Erling Smørgrav#define URL_PWDLEN 256
15940ac2845SDag-Erling Smørgrav
16040ac2845SDag-Erling Smørgravstruct url {
16140ac2845SDag-Erling Smørgrav    char	 scheme[URL_SCHEMELEN+1];
16240ac2845SDag-Erling Smørgrav    char	 user[URL_USERLEN+1];
16340ac2845SDag-Erling Smørgrav    char	 pwd[URL_PWDLEN+1];
16440ac2845SDag-Erling Smørgrav    char	 host[MAXHOSTNAMELEN+1];
16540ac2845SDag-Erling Smørgrav    int		 port;
16640ac2845SDag-Erling Smørgrav    char	*doc;
16740ac2845SDag-Erling Smørgrav    off_t	 offset;
16840ac2845SDag-Erling Smørgrav    size_t	 length;
1697f92799fSMurray Stokely    time_t	 ims_time;
17040ac2845SDag-Erling Smørgrav};
17140ac2845SDag-Erling Smørgrav.Ed
17240ac2845SDag-Erling Smørgrav.Pp
1737f92799fSMurray StokelyThe
1747f92799fSMurray Stokely.Va ims_time
1757f92799fSMurray Stokelyfield stores the time value for
1767f92799fSMurray Stokely.Li If-Modified-Since
1777f92799fSMurray StokelyHTTP requests.
1787f92799fSMurray Stokely.Pp
17960245e42SDag-Erling SmørgravThe pointer returned by
1809a964d6aSDag-Erling Smørgrav.Fn fetchMakeURL
1819a964d6aSDag-Erling Smørgravor
18260245e42SDag-Erling Smørgrav.Fn fetchParseURL
18360245e42SDag-Erling Smørgravshould be freed using
18460245e42SDag-Erling Smørgrav.Fn fetchFreeURL .
18560245e42SDag-Erling Smørgrav.Pp
1861a5faa10SDag-Erling Smørgrav.Fn fetchXGetURL ,
1871a5faa10SDag-Erling Smørgrav.Fn fetchGetURL ,
188db5f8cebSDag-Erling Smørgravand
189db5f8cebSDag-Erling Smørgrav.Fn fetchPutURL
190db5f8cebSDag-Erling Smørgravconstitute the recommended interface to the
191db5f8cebSDag-Erling Smørgrav.Nm fetch
192c6ff3a1bSSheldon Hearnlibrary.
193c6ff3a1bSSheldon HearnThey examine the URL passed to them to determine the transfer
194db5f8cebSDag-Erling Smørgravmethod, and call the appropriate lower-level functions to perform the
195c6ff3a1bSSheldon Hearnactual transfer.
1961a5faa10SDag-Erling Smørgrav.Fn fetchXGetURL
1971a5faa10SDag-Erling Smørgravalso returns the remote document's metadata in the
198a7e16a9dSRuslan Ermilov.Vt url_stat
1991a5faa10SDag-Erling Smørgravstructure pointed to by the
2001a5faa10SDag-Erling Smørgrav.Fa us
2011a5faa10SDag-Erling Smørgravargument.
2021a5faa10SDag-Erling Smørgrav.Pp
203c6ff3a1bSSheldon HearnThe
204db5f8cebSDag-Erling Smørgrav.Fa flags
205c6ff3a1bSSheldon Hearnargument is a string of characters which specify transfer options.
206c6ff3a1bSSheldon HearnThe
207db5f8cebSDag-Erling Smørgravmeaning of the individual flags is scheme-dependent, and is detailed
208db5f8cebSDag-Erling Smørgravin the appropriate section below.
209db5f8cebSDag-Erling Smørgrav.Pp
210d8acd8dcSDag-Erling Smørgrav.Fn fetchStatURL
211d8acd8dcSDag-Erling Smørgravattempts to obtain the requested document's metadata and fill in the
2125e75e35cSDima Dorfmanstructure pointed to by its second argument.
213c6ff3a1bSSheldon HearnThe
214a7e16a9dSRuslan Ermilov.Vt url_stat
215d8acd8dcSDag-Erling Smørgravstructure is defined as follows in
216fe08efe6SRuslan Ermilov.In fetch.h :
217d8acd8dcSDag-Erling Smørgrav.Bd -literal
218d8acd8dcSDag-Erling Smørgravstruct url_stat {
219d8acd8dcSDag-Erling Smørgrav    off_t	 size;
2205aea254fSDag-Erling Smørgrav    time_t	 atime;
2215aea254fSDag-Erling Smørgrav    time_t	 mtime;
222d8acd8dcSDag-Erling Smørgrav};
223d8acd8dcSDag-Erling Smørgrav.Ed
224d8acd8dcSDag-Erling Smørgrav.Pp
22540ac2845SDag-Erling SmørgravIf the size could not be obtained from the server, the
22640ac2845SDag-Erling Smørgrav.Fa size
22740ac2845SDag-Erling Smørgravfield is set to -1.
22840ac2845SDag-Erling SmørgravIf the modification time could not be obtained from the server, the
22940ac2845SDag-Erling Smørgrav.Fa mtime
23040ac2845SDag-Erling Smørgravfield is set to the epoch.
23140ac2845SDag-Erling SmørgravIf the access time could not be obtained from the server, the
23240ac2845SDag-Erling Smørgrav.Fa atime
23340ac2845SDag-Erling Smørgravfield is set to the modification time.
23440ac2845SDag-Erling Smørgrav.Pp
235ce71b736SDag-Erling Smørgrav.Fn fetchListURL
236ce71b736SDag-Erling Smørgravattempts to list the contents of the directory pointed to by the URL
237c6ff3a1bSSheldon Hearnprovided.
238c6ff3a1bSSheldon HearnIf successful, it returns a malloced array of
239a7e16a9dSRuslan Ermilov.Vt url_ent
240c6ff3a1bSSheldon Hearnstructures.
241c6ff3a1bSSheldon HearnThe
242a7e16a9dSRuslan Ermilov.Vt url_ent
243ce71b736SDag-Erling Smørgravstructure is defined as follows in
244fe08efe6SRuslan Ermilov.In fetch.h :
245ce71b736SDag-Erling Smørgrav.Bd -literal
246ce71b736SDag-Erling Smørgravstruct url_ent {
247e97f516cSDag-Erling Smørgrav    char         name[PATH_MAX];
248ce71b736SDag-Erling Smørgrav    struct url_stat stat;
249ce71b736SDag-Erling Smørgrav};
250ce71b736SDag-Erling Smørgrav.Ed
251ce71b736SDag-Erling Smørgrav.Pp
252ce71b736SDag-Erling SmørgravThe list is terminated by an entry with an empty name.
253ce71b736SDag-Erling Smørgrav.Pp
254ce71b736SDag-Erling SmørgravThe pointer returned by
255ce71b736SDag-Erling Smørgrav.Fn fetchListURL
256ce71b736SDag-Erling Smørgravshould be freed using
257ce71b736SDag-Erling Smørgrav.Fn free .
258ce71b736SDag-Erling Smørgrav.Pp
2591a5faa10SDag-Erling Smørgrav.Fn fetchXGet ,
260d8acd8dcSDag-Erling Smørgrav.Fn fetchGet ,
261db5f8cebSDag-Erling Smørgrav.Fn fetchPut
2624ca1ab94SDag-Erling Smørgravand
263d8acd8dcSDag-Erling Smørgrav.Fn fetchStat
264d8acd8dcSDag-Erling Smørgravare similar to
2651a5faa10SDag-Erling Smørgrav.Fn fetchXGetURL ,
266d8acd8dcSDag-Erling Smørgrav.Fn fetchGetURL ,
267d8acd8dcSDag-Erling Smørgrav.Fn fetchPutURL
268d8acd8dcSDag-Erling Smørgravand
269d8acd8dcSDag-Erling Smørgrav.Fn fetchStatURL ,
270db5f8cebSDag-Erling Smørgravexcept that they expect a pre-parsed URL in the form of a pointer to
271d8acd8dcSDag-Erling Smørgrava
272a7e16a9dSRuslan Ermilov.Vt struct url
273d8acd8dcSDag-Erling Smørgravrather than a string.
2744ca1ab94SDag-Erling Smørgrav.Pp
2754ca1ab94SDag-Erling SmørgravAll of the
2761a5faa10SDag-Erling Smørgrav.Fn fetchXGetXXX ,
2774ca1ab94SDag-Erling Smørgrav.Fn fetchGetXXX
2784ca1ab94SDag-Erling Smørgravand
2794ca1ab94SDag-Erling Smørgrav.Fn fetchPutXXX
2804ca1ab94SDag-Erling Smørgravfunctions return a pointer to a stream which can be used to read or
281c6ff3a1bSSheldon Hearnwrite data from or to the requested document, respectively.
282c6ff3a1bSSheldon HearnNote that
2834ca1ab94SDag-Erling Smørgravalthough the implementation details of the individual access methods
2844ca1ab94SDag-Erling Smørgravvary, it can generally be assumed that a stream returned by one of the
2851a5faa10SDag-Erling Smørgrav.Fn fetchXGetXXX
2861a5faa10SDag-Erling Smørgravor
2874ca1ab94SDag-Erling Smørgrav.Fn fetchGetXXX
2884ca1ab94SDag-Erling Smørgravfunctions is read-only, and that a stream returned by one of the
2894ca1ab94SDag-Erling Smørgrav.Fn fetchPutXXX
2904ca1ab94SDag-Erling Smørgravfunctions is write-only.
2914ca1ab94SDag-Erling Smørgrav.Sh FILE SCHEME
2921a5faa10SDag-Erling Smørgrav.Fn fetchXGetFile ,
2934ca1ab94SDag-Erling Smørgrav.Fn fetchGetFile
2944ca1ab94SDag-Erling Smørgravand
2954ca1ab94SDag-Erling Smørgrav.Fn fetchPutFile
2964ca1ab94SDag-Erling Smørgravprovide access to documents which are files in a locally mounted file
297c6ff3a1bSSheldon Hearnsystem.
298c6ff3a1bSSheldon HearnOnly the <document> component of the URL is used.
2994ca1ab94SDag-Erling Smørgrav.Pp
3001a5faa10SDag-Erling Smørgrav.Fn fetchXGetFile
3011a5faa10SDag-Erling Smørgravand
3024ca1ab94SDag-Erling Smørgrav.Fn fetchGetFile
3031a5faa10SDag-Erling Smørgravdo not accept any flags.
3044ca1ab94SDag-Erling Smørgrav.Pp
3054ca1ab94SDag-Erling Smørgrav.Fn fetchPutFile
3064ca1ab94SDag-Erling Smørgravaccepts the
307a7e16a9dSRuslan Ermilov.Ql a
308c6ff3a1bSSheldon Hearn(append to file) flag.
309c6ff3a1bSSheldon HearnIf that flag is specified, the data written to
3104ca1ab94SDag-Erling Smørgravthe stream returned by
3114ca1ab94SDag-Erling Smørgrav.Fn fetchPutFile
3124ca1ab94SDag-Erling Smørgravwill be appended to the previous contents of the file, instead of
3134ca1ab94SDag-Erling Smørgravreplacing them.
3144ca1ab94SDag-Erling Smørgrav.Sh FTP SCHEME
3151a5faa10SDag-Erling Smørgrav.Fn fetchXGetFTP ,
3164ca1ab94SDag-Erling Smørgrav.Fn fetchGetFTP
3174ca1ab94SDag-Erling Smørgravand
3184ca1ab94SDag-Erling Smørgrav.Fn fetchPutFTP
3194ca1ab94SDag-Erling Smørgravimplement the FTP protocol as described in RFC959.
3204ca1ab94SDag-Erling Smørgrav.Pp
3214ca1ab94SDag-Erling SmørgravIf the
322ecd18c96SDag-Erling Smørgrav.Ql P
323ecd18c96SDag-Erling Smørgrav(not passive) flag is specified, an active (rather than passive)
324ecd18c96SDag-Erling Smørgravconnection will be attempted.
325ecd18c96SDag-Erling Smørgrav.Pp
326ecd18c96SDag-Erling SmørgravThe
327a7e16a9dSRuslan Ermilov.Ql p
328ecd18c96SDag-Erling Smørgravflag is supported for compatibility with earlier versions where active
329ecd18c96SDag-Erling Smørgravconnections were the default.
330ecd18c96SDag-Erling SmørgravIt has precedence over the
331ecd18c96SDag-Erling Smørgrav.Ql P
332ecd18c96SDag-Erling Smørgravflag, so if both are specified,
333ecd18c96SDag-Erling Smørgrav.Nm
334ecd18c96SDag-Erling Smørgravwill use a passive connection.
3354ca1ab94SDag-Erling Smørgrav.Pp
336f5f109a0SDag-Erling SmørgravIf the
337a7e16a9dSRuslan Ermilov.Ql l
338d5f175ceSDag-Erling Smørgrav(low) flag is specified, data sockets will be allocated in the low (or
339d5c24aa8SBill Fennerdefault) port range instead of the high port range (see
340f5f109a0SDag-Erling Smørgrav.Xr ip 4 ) .
341f5f109a0SDag-Erling Smørgrav.Pp
342f5f109a0SDag-Erling SmørgravIf the
343a7e16a9dSRuslan Ermilov.Ql d
344f5f109a0SDag-Erling Smørgrav(direct) flag is specified,
3451a5faa10SDag-Erling Smørgrav.Fn fetchXGetFTP ,
346f5f109a0SDag-Erling Smørgrav.Fn fetchGetFTP
347f5f109a0SDag-Erling Smørgravand
348f5f109a0SDag-Erling Smørgrav.Fn fetchPutFTP
349f5f109a0SDag-Erling Smørgravwill use a direct connection even if a proxy server is defined.
350f5f109a0SDag-Erling Smørgrav.Pp
3514ca1ab94SDag-Erling SmørgravIf no user name or password is given, the
3524ca1ab94SDag-Erling Smørgrav.Nm fetch
353c86c6f74SDag-Erling Smørgravlibrary will attempt an anonymous login, with user name "anonymous"
354c86c6f74SDag-Erling Smørgravand password "anonymous@<hostname>".
3554ca1ab94SDag-Erling Smørgrav.Sh HTTP SCHEME
3564ca1ab94SDag-Erling SmørgravThe
3571a5faa10SDag-Erling Smørgrav.Fn fetchXGetHTTP ,
3584ca1ab94SDag-Erling Smørgrav.Fn fetchGetHTTP
3594ca1ab94SDag-Erling Smørgravand
3604ca1ab94SDag-Erling Smørgrav.Fn fetchPutHTTP
361c6ff3a1bSSheldon Hearnfunctions implement the HTTP/1.1 protocol.
36236a142c4SRuslan ErmilovWith a little luck, there is
36306b533d3SDag-Erling Smørgraveven a chance that they comply with RFC2616 and RFC2617.
3644ca1ab94SDag-Erling Smørgrav.Pp
365f5f109a0SDag-Erling SmørgravIf the
366a7e16a9dSRuslan Ermilov.Ql d
367f5f109a0SDag-Erling Smørgrav(direct) flag is specified,
3681a5faa10SDag-Erling Smørgrav.Fn fetchXGetHTTP ,
369f5f109a0SDag-Erling Smørgrav.Fn fetchGetHTTP
370f5f109a0SDag-Erling Smørgravand
371f5f109a0SDag-Erling Smørgrav.Fn fetchPutHTTP
372f5f109a0SDag-Erling Smørgravwill use a direct connection even if a proxy server is defined.
373f5f109a0SDag-Erling Smørgrav.Pp
3747f92799fSMurray StokelyIf the
3757f92799fSMurray Stokely.Ql i
3767f92799fSMurray Stokely(if-modified-since) flag is specified, and
3777f92799fSMurray Stokelythe
3787f92799fSMurray Stokely.Va ims_time
3797f92799fSMurray Stokelyfield is set in
3807f92799fSMurray Stokely.Vt "struct url" ,
3817f92799fSMurray Stokelythen
3827f92799fSMurray Stokely.Fn fetchXGetHTTP
3837f92799fSMurray Stokelyand
3847f92799fSMurray Stokely.Fn fetchGetHTTP
3857f92799fSMurray Stokelywill send a conditional
3867f92799fSMurray Stokely.Li If-Modified-Since
3877f92799fSMurray StokelyHTTP header to only fetch the content if it is newer than
3887f92799fSMurray Stokely.Va ims_time .
3897f92799fSMurray Stokely.Pp
3904ca1ab94SDag-Erling SmørgravSince there seems to be no good way of implementing the HTTP PUT
3914ca1ab94SDag-Erling Smørgravmethod in a manner consistent with the rest of the
3924ca1ab94SDag-Erling Smørgrav.Nm fetch
3934ca1ab94SDag-Erling Smørgravlibrary,
3944ca1ab94SDag-Erling Smørgrav.Fn fetchPutHTTP
3954ca1ab94SDag-Erling Smørgravis currently unimplemented.
396dcd47379SDag-Erling Smørgrav.Sh HTTPS SCHEME
397dcd47379SDag-Erling SmørgravBased on HTTP SCHEME.
398dcd47379SDag-Erling SmørgravBy default the peer is verified using the CA bundle located in
399dcd47379SDag-Erling Smørgrav.Pa /etc/ssl/cert.pem .
400dcd47379SDag-Erling SmørgravThe file may contain multiple CA certificates.
401dcd47379SDag-Erling SmørgravA common source of a current CA bundle is
402dcd47379SDag-Erling Smørgrav.Pa \%security/ca_root_nss .
403dcd47379SDag-Erling Smørgrav.Pp
404dcd47379SDag-Erling SmørgravThe CA bundle used for peer verification can be changed by setting the
405dcd47379SDag-Erling Smørgravenvironment variables
406dcd47379SDag-Erling Smørgrav.Ev SSL_CA_CERT_FILE
407dcd47379SDag-Erling Smørgravto point to a concatenated bundle of trusted certificates and
408dcd47379SDag-Erling Smørgrav.Ev SSL_CA_CERT_PATH
409dcd47379SDag-Erling Smørgravto point to a directory containing hashes of trusted CAs (see
410dcd47379SDag-Erling Smørgrav.Xr verify 1 ) .
411dcd47379SDag-Erling Smørgrav.Pp
412dcd47379SDag-Erling SmørgravA certificate revocation list (CRL) can be used by setting the
413dcd47379SDag-Erling Smørgravenvironment variable
414dcd47379SDag-Erling Smørgrav.Ev SSL_CRL_FILE
415dcd47379SDag-Erling Smørgrav(see
416dcd47379SDag-Erling Smørgrav.Xr crl 1 ) .
417dcd47379SDag-Erling Smørgrav.Pp
418dcd47379SDag-Erling SmørgravPeer verification can be disabled by setting the environment variable
419dcd47379SDag-Erling Smørgrav.Ev SSL_NO_VERIFY_PEER .
420dcd47379SDag-Erling SmørgravNote that this also disables CRL checking.
421dcd47379SDag-Erling Smørgrav.Pp
422dcd47379SDag-Erling SmørgravBy default the service identity is verified according to the rules
423dcd47379SDag-Erling Smørgravdetailed in RFC6125 (also known as hostname verification).
424dcd47379SDag-Erling SmørgravThis feature can be disabled by setting the environment variable
425dcd47379SDag-Erling Smørgrav.Ev SSL_NO_VERIFY_HOSTNAME .
426dcd47379SDag-Erling Smørgrav.Pp
427dcd47379SDag-Erling SmørgravClient certificate based authentication is supported.
428dcd47379SDag-Erling SmørgravThe environment variable
429dcd47379SDag-Erling Smørgrav.Ev SSL_CLIENT_CERT_FILE
430dcd47379SDag-Erling Smørgravshould be set to point to a file containing key and client certificate
431dcd47379SDag-Erling Smørgravto be used in PEM format. In case the key is stored in a separate
432dcd47379SDag-Erling Smørgravfile, the environment variable
433dcd47379SDag-Erling Smørgrav.Ev SSL_CLIENT_KEY_FILE
434dcd47379SDag-Erling Smørgravcan be set to point to the key in PEM format.
435dcd47379SDag-Erling SmørgravIn case the key uses a password, the user will be prompted on standard
436dcd47379SDag-Erling Smørgravinput (see
437dcd47379SDag-Erling Smørgrav.Xr PEM 3 ) .
438dcd47379SDag-Erling Smørgrav.Pp
439dcd47379SDag-Erling SmørgravBy default
440dcd47379SDag-Erling Smørgrav.Nm libfetch
441dcd47379SDag-Erling Smørgravallows SSLv3 and TLSv1 when negotiating the connecting with the remote
442dcd47379SDag-Erling Smørgravpeer.
443dcd47379SDag-Erling SmørgravYou can change this behavior by setting the environment variable
444dcd47379SDag-Erling Smørgrav.Ev SSL_ALLOW_SSL2
445dcd47379SDag-Erling Smørgravto allow SSLv2 (not recommended) and
446dcd47379SDag-Erling Smørgrav.Ev SSL_NO_SSL3
447dcd47379SDag-Erling Smørgravor
448dcd47379SDag-Erling Smørgrav.Ev SSL_NO_TLS1
449dcd47379SDag-Erling Smørgravto disable the respective methods.
45006b533d3SDag-Erling Smørgrav.Sh AUTHENTICATION
45106b533d3SDag-Erling SmørgravApart from setting the appropriate environment variables and
45206b533d3SDag-Erling Smørgravspecifying the user name and password in the URL or the
453a7e16a9dSRuslan Ermilov.Vt struct url ,
45406b533d3SDag-Erling Smørgravthe calling program has the option of defining an authentication
45506b533d3SDag-Erling Smørgravfunction with the following prototype:
45606b533d3SDag-Erling Smørgrav.Pp
45706b533d3SDag-Erling Smørgrav.Ft int
45806b533d3SDag-Erling Smørgrav.Fn myAuthMethod "struct url *u"
45906b533d3SDag-Erling Smørgrav.Pp
46006b533d3SDag-Erling SmørgravThe callback function should fill in the
46106b533d3SDag-Erling Smørgrav.Fa user
46206b533d3SDag-Erling Smørgravand
46306b533d3SDag-Erling Smørgrav.Fa pwd
46406b533d3SDag-Erling Smørgravfields in the provided
465a7e16a9dSRuslan Ermilov.Vt struct url
46606b533d3SDag-Erling Smørgravand return 0 on success, or any other value to indicate failure.
46706b533d3SDag-Erling Smørgrav.Pp
46806b533d3SDag-Erling SmørgravTo register the authentication callback, simply set
469a7e16a9dSRuslan Ermilov.Va fetchAuthMethod
47006b533d3SDag-Erling Smørgravto point at it.
47106b533d3SDag-Erling SmørgravThe callback will be used whenever a site requires authentication and
4720227791bSRuslan Ermilovthe appropriate environment variables are not set.
47306b533d3SDag-Erling Smørgrav.Pp
47406b533d3SDag-Erling SmørgravThis interface is experimental and may be subject to change.
4754ca1ab94SDag-Erling Smørgrav.Sh RETURN VALUES
4764ca1ab94SDag-Erling Smørgrav.Fn fetchParseURL
4774ca1ab94SDag-Erling Smørgravreturns a pointer to a
478a7e16a9dSRuslan Ermilov.Vt struct url
479c6ff3a1bSSheldon Hearncontaining the individual components of the URL.
480c6ff3a1bSSheldon HearnIf it is
4814ca1ab94SDag-Erling Smørgravunable to allocate memory, or the URL is syntactically incorrect,
4824ca1ab94SDag-Erling Smørgrav.Fn fetchParseURL
4834ca1ab94SDag-Erling Smørgravreturns a NULL pointer.
4844ca1ab94SDag-Erling Smørgrav.Pp
485d8acd8dcSDag-Erling SmørgravThe
486d8acd8dcSDag-Erling Smørgrav.Fn fetchStat
487d8acd8dcSDag-Erling Smørgravfunctions return 0 on success and -1 on failure.
488d8acd8dcSDag-Erling Smørgrav.Pp
4894ca1ab94SDag-Erling SmørgravAll other functions return a stream pointer which may be used to
490d8acd8dcSDag-Erling Smørgravaccess the requested document, or NULL if an error occurred.
491d8acd8dcSDag-Erling Smørgrav.Pp
492ba101983SDag-Erling SmørgravThe following error codes are defined in
493fe08efe6SRuslan Ermilov.In fetch.h :
49415efcd39SAlexey Zelkin.Bl -tag -width 18n
495d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_ABORT
496d8acd8dcSDag-Erling SmørgravOperation aborted
497d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_AUTH
498d8acd8dcSDag-Erling SmørgravAuthentication failed
499d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_DOWN
500d8acd8dcSDag-Erling SmørgravService unavailable
501d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_EXISTS
502d8acd8dcSDag-Erling SmørgravFile exists
503d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_FULL
504d8acd8dcSDag-Erling SmørgravFile system full
505d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_INFO
506d8acd8dcSDag-Erling SmørgravInformational response
507d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_MEMORY
508d8acd8dcSDag-Erling SmørgravInsufficient memory
509d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_MOVED
510d8acd8dcSDag-Erling SmørgravFile has moved
511d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_NETWORK
512d8acd8dcSDag-Erling SmørgravNetwork error
513d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_OK
514d8acd8dcSDag-Erling SmørgravNo error
515d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_PROTO
516d8acd8dcSDag-Erling SmørgravProtocol error
517d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_RESOLV
518d8acd8dcSDag-Erling SmørgravResolver error
519d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_SERVER
520d8acd8dcSDag-Erling SmørgravServer error
521d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_TEMP
522d8acd8dcSDag-Erling SmørgravTemporary error
523d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_TIMEOUT
524d8acd8dcSDag-Erling SmørgravOperation timed out
525d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_UNAVAIL
526d8acd8dcSDag-Erling SmørgravFile is not available
527d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_UNKNOWN
528d8acd8dcSDag-Erling SmørgravUnknown error
529d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_URL
530d8acd8dcSDag-Erling SmørgravInvalid URL
531d8acd8dcSDag-Erling Smørgrav.El
532d8acd8dcSDag-Erling Smørgrav.Pp
533d8acd8dcSDag-Erling SmørgravThe accompanying error message includes a protocol-specific error code
5341a0a9345SRuslan Ermilovand message, e.g.\& "File is not available (404 Not Found)"
5354ca1ab94SDag-Erling Smørgrav.Sh ENVIRONMENT
5363a5146d9SRuslan Ermilov.Bl -tag -width ".Ev FETCH_BIND_ADDRESS"
537c42cb9d9SDag-Erling Smørgrav.It Ev FETCH_BIND_ADDRESS
538c42cb9d9SDag-Erling SmørgravSpecifies a hostname or IP address to which sockets used for outgoing
539c42cb9d9SDag-Erling Smørgravconnections will be bound.
540659e0d5eSDag-Erling Smørgrav.It Ev FTP_LOGIN
541659e0d5eSDag-Erling SmørgravDefault FTP login if none was provided in the URL.
54291c51046SDag-Erling Smørgrav.It Ev FTP_PASSIVE_MODE
543ecd18c96SDag-Erling SmørgravIf set to
5446c81eb52SDag-Erling Smørgrav.Ql no ,
545ecd18c96SDag-Erling Smørgravforces the FTP code to use active mode.
546ecd18c96SDag-Erling SmørgravIf set to any other value, forces passive mode even if the application
547ecd18c96SDag-Erling Smørgravrequested active mode.
54891c51046SDag-Erling Smørgrav.It Ev FTP_PASSWORD
54991c51046SDag-Erling SmørgravDefault FTP password if the remote server requests one and none was
55091c51046SDag-Erling Smørgravprovided in the URL.
551bc2a5e68SDag-Erling Smørgrav.It Ev FTP_PROXY
5521df2031cSDag-Erling SmørgravURL of the proxy to use for FTP requests.
5531df2031cSDag-Erling SmørgravThe document part is ignored.
5541df2031cSDag-Erling SmørgravFTP and HTTP proxies are supported; if no scheme is specified, FTP is
5551df2031cSDag-Erling Smørgravassumed.
5561df2031cSDag-Erling SmørgravIf the proxy is an FTP proxy,
557e0a9ca38SDag-Erling Smørgrav.Nm libfetch
558e0a9ca38SDag-Erling Smørgravwill send
559e0a9ca38SDag-Erling Smørgrav.Ql user@host
560e0a9ca38SDag-Erling Smørgravas user name to the proxy, where
561e0a9ca38SDag-Erling Smørgrav.Ql user
562e0a9ca38SDag-Erling Smørgravis the real user name, and
563e0a9ca38SDag-Erling Smørgrav.Ql host
564e0a9ca38SDag-Erling Smørgravis the name of the FTP server.
56589d755e1SDag-Erling Smørgrav.Pp
5662e83f638SDag-Erling SmørgravIf this variable is set to an empty string, no proxy will be used for
5672e83f638SDag-Erling SmørgravFTP requests, even if the
5682e83f638SDag-Erling Smørgrav.Ev HTTP_PROXY
5692e83f638SDag-Erling Smørgravvariable is set.
5704cee73c8SDag-Erling Smørgrav.It Ev ftp_proxy
5714cee73c8SDag-Erling SmørgravSame as
5724cee73c8SDag-Erling Smørgrav.Ev FTP_PROXY ,
5734cee73c8SDag-Erling Smørgravfor compatibility.
574*1453595fSDag-Erling Smørgrav.It Ev HTTP_ACCEPT
575*1453595fSDag-Erling SmørgravSpecifies the value of the
576*1453595fSDag-Erling Smørgrav.Va Accept
577*1453595fSDag-Erling Smørgravheader for HTTP requests.
578*1453595fSDag-Erling SmørgravIf empty, no
579*1453595fSDag-Erling Smørgrav.Va Accept
580*1453595fSDag-Erling Smørgravheader is sent.
581*1453595fSDag-Erling SmørgravThe default is
582*1453595fSDag-Erling Smørgrav.Dq */* .
58398f5573fSDag-Erling Smørgrav.It Ev HTTP_AUTH
58489d755e1SDag-Erling SmørgravSpecifies HTTP authorization parameters as a colon-separated list of
58589d755e1SDag-Erling Smørgravitems.
58698f5573fSDag-Erling SmørgravThe first and second item are the authorization scheme and realm
58798f5573fSDag-Erling Smørgravrespectively; further items are scheme-dependent.
58878122aacSDag-Erling SmørgravCurrently, the
58978122aacSDag-Erling Smørgrav.Dq basic
59078122aacSDag-Erling Smørgravand
59178122aacSDag-Erling Smørgrav.Dq digest
59278122aacSDag-Erling Smørgravauthorization methods are supported.
59389d755e1SDag-Erling Smørgrav.Pp
59478122aacSDag-Erling SmørgravBoth methods require two parameters: the user name and
59598f5573fSDag-Erling Smørgravpassword, in that order.
59689d755e1SDag-Erling Smørgrav.Pp
59789d755e1SDag-Erling SmørgravThis variable is only used if the server requires authorization and
59889d755e1SDag-Erling Smørgravno user name or password was specified in the URL.
599bc2a5e68SDag-Erling Smørgrav.It Ev HTTP_PROXY
6001df2031cSDag-Erling SmørgravURL of the proxy to use for HTTP requests.
6011df2031cSDag-Erling SmørgravThe document part is ignored.
6021df2031cSDag-Erling SmørgravOnly HTTP proxies are supported for HTTP requests.
603bc2a5e68SDag-Erling SmørgravIf no port number is specified, the default is 3128.
60489d755e1SDag-Erling Smørgrav.Pp
6051df2031cSDag-Erling SmørgravNote that this proxy will also be used for FTP documents, unless the
606e0a9ca38SDag-Erling Smørgrav.Ev FTP_PROXY
607e0a9ca38SDag-Erling Smørgravvariable is set.
6084cee73c8SDag-Erling Smørgrav.It Ev http_proxy
6094cee73c8SDag-Erling SmørgravSame as
6104cee73c8SDag-Erling Smørgrav.Ev HTTP_PROXY ,
6114cee73c8SDag-Erling Smørgravfor compatibility.
612bc2a5e68SDag-Erling Smørgrav.It Ev HTTP_PROXY_AUTH
61398f5573fSDag-Erling SmørgravSpecifies authorization parameters for the HTTP proxy in the same
614e0a9ca38SDag-Erling Smørgravformat as the
615e0a9ca38SDag-Erling Smørgrav.Ev HTTP_AUTH
616e0a9ca38SDag-Erling Smørgravvariable.
61789d755e1SDag-Erling Smørgrav.Pp
6181df2031cSDag-Erling SmørgravThis variable is used if and only if connected to an HTTP proxy, and
6191df2031cSDag-Erling Smørgravis ignored if a user and/or a password were specified in the proxy
6201df2031cSDag-Erling SmørgravURL.
621d5216a4fSDag-Erling Smørgrav.It Ev HTTP_REFERER
62257bd0fc6SJens SchweikhardtSpecifies the referrer URL to use for HTTP requests.
623d5216a4fSDag-Erling SmørgravIf set to
624d5216a4fSDag-Erling Smørgrav.Dq auto ,
62557bd0fc6SJens Schweikhardtthe document URL will be used as referrer URL.
6266a0cf64bSDag-Erling Smørgrav.It Ev HTTP_USER_AGENT
6276a0cf64bSDag-Erling SmørgravSpecifies the User-Agent string to use for HTTP requests.
6286a0cf64bSDag-Erling SmørgravThis can be useful when working with HTTP origin or proxy servers that
629a7e16a9dSRuslan Ermilovdifferentiate between user agents.
6300ab4a51eSDag-Erling Smørgrav.It Ev NETRC
6310ab4a51eSDag-Erling SmørgravSpecifies a file to use instead of
6320ab4a51eSDag-Erling Smørgrav.Pa ~/.netrc
6330ab4a51eSDag-Erling Smørgravto look up login names and passwords for FTP sites.
6340ab4a51eSDag-Erling SmørgravSee
6350ab4a51eSDag-Erling Smørgrav.Xr ftp 1
6360ab4a51eSDag-Erling Smørgravfor a description of the file format.
6370ab4a51eSDag-Erling SmørgravThis feature is experimental.
638e99ace35SDag-Erling Smørgrav.It Ev NO_PROXY
639e99ace35SDag-Erling SmørgravEither a single asterisk, which disables the use of proxies
640e99ace35SDag-Erling Smørgravaltogether, or a comma- or whitespace-separated list of hosts for
641e99ace35SDag-Erling Smørgravwhich proxies should not be used.
642e99ace35SDag-Erling Smørgrav.It Ev no_proxy
643e99ace35SDag-Erling SmørgravSame as
644e99ace35SDag-Erling Smørgrav.Ev NO_PROXY ,
645e99ace35SDag-Erling Smørgravfor compatibility.
646dcd47379SDag-Erling Smørgrav.It Ev SSL_ALLOW_SSL2
647dcd47379SDag-Erling SmørgravAllow SSL version 2 when negotiating the connection (not recommended).
648dcd47379SDag-Erling Smørgrav.It Ev SSL_CA_CERT_FILE
649dcd47379SDag-Erling SmørgravCA certificate bundle containing trusted CA certificates.
650dcd47379SDag-Erling SmørgravDefault value:
651dcd47379SDag-Erling Smørgrav.Pa /etc/ssl/cert.pem .
652dcd47379SDag-Erling Smørgrav.It Ev SSL_CA_CERT_PATH
653dcd47379SDag-Erling SmørgravPath containing trusted CA hashes.
654dcd47379SDag-Erling Smørgrav.It Ev SSL_CLIENT_CERT_FILE
655dcd47379SDag-Erling SmørgravPEM encoded client certificate/key which will be used in
656dcd47379SDag-Erling Smørgravclient certificate authentication.
657dcd47379SDag-Erling Smørgrav.It Ev SSL_CLIENT_KEY_FILE
658dcd47379SDag-Erling SmørgravPEM encoded client key in case key and client certificate
659dcd47379SDag-Erling Smørgravare stored separately.
660dcd47379SDag-Erling Smørgrav.It Ev SSL_CRL_FILE
661dcd47379SDag-Erling SmørgravFile containing certificate revocation list.
662dcd47379SDag-Erling Smørgrav.It Ev SSL_NO_SSL3
663dcd47379SDag-Erling SmørgravDon't allow SSL version 3 when negotiating the connection.
664dcd47379SDag-Erling Smørgrav.It Ev SSL_NO_TLS1
665dcd47379SDag-Erling SmørgravDon't allow TLV version 1 when negotiating the connection.
666dcd47379SDag-Erling Smørgrav.It Ev SSL_NO_VERIFY_HOSTNAME
667dcd47379SDag-Erling SmørgravIf set, do not verify that the hostname matches the subject of the
668dcd47379SDag-Erling Smørgravcertificate presented by the server.
669dcd47379SDag-Erling Smørgrav.It Ev SSL_NO_VERIFY_PEER
670dcd47379SDag-Erling SmørgravIf set, do not verify the peer certificate against trusted CAs.
671bc2a5e68SDag-Erling Smørgrav.El
6720315901cSTom Rhodes.Sh EXAMPLES
6730315901cSTom RhodesTo access a proxy server on
6740315901cSTom Rhodes.Pa proxy.example.com
6750315901cSTom Rhodesport 8080, set the
6760315901cSTom Rhodes.Ev HTTP_PROXY
6770315901cSTom Rhodesenvironment variable in a manner similar to this:
6780315901cSTom Rhodes.Pp
6790315901cSTom Rhodes.Dl HTTP_PROXY=http://proxy.example.com:8080
6800315901cSTom Rhodes.Pp
6810315901cSTom RhodesIf the proxy server requires authentication, there are
6820315901cSTom Rhodestwo options available for passing the authentication data.
6830315901cSTom RhodesThe first method is by using the proxy URL:
6840315901cSTom Rhodes.Pp
6850315901cSTom Rhodes.Dl HTTP_PROXY=http://<user>:<pwd>@proxy.example.com:8080
6860315901cSTom Rhodes.Pp
6870315901cSTom RhodesThe second method is by using the
6880315901cSTom Rhodes.Ev HTTP_PROXY_AUTH
6890315901cSTom Rhodesenvironment variable:
6900315901cSTom Rhodes.Bd -literal -offset indent
6910315901cSTom RhodesHTTP_PROXY=http://proxy.example.com:8080
6920315901cSTom RhodesHTTP_PROXY_AUTH=basic:*:<user>:<pwd>
6930315901cSTom Rhodes.Ed
694e99ace35SDag-Erling Smørgrav.Pp
695e99ace35SDag-Erling SmørgravTo disable the use of a proxy for an HTTP server running on the local
696e99ace35SDag-Erling Smørgravhost, define
697e99ace35SDag-Erling Smørgrav.Ev NO_PROXY
698e99ace35SDag-Erling Smørgravas follows:
699e99ace35SDag-Erling Smørgrav.Bd -literal -offset indent
700e99ace35SDag-Erling SmørgravNO_PROXY=localhost,127.0.0.1
701e99ace35SDag-Erling Smørgrav.Ed
702dcd47379SDag-Erling Smørgrav.Pp
703dcd47379SDag-Erling SmørgravAccess HTTPS website without any certificate verification whatsoever:
704dcd47379SDag-Erling Smørgrav.Bd -literal -offset indent
705dcd47379SDag-Erling SmørgravSSL_NO_VERIFY_PEER=1
706dcd47379SDag-Erling SmørgravSSL_NO_VERIFY_HOSTNAME=1
707dcd47379SDag-Erling Smørgrav.Ed
708dcd47379SDag-Erling Smørgrav.Pp
709dcd47379SDag-Erling SmørgravAccess HTTPS website using client certificate based authentication
710dcd47379SDag-Erling Smørgravand a private CA:
711dcd47379SDag-Erling Smørgrav.Bd -literal -offset indent
712dcd47379SDag-Erling SmørgravSSL_CLIENT_CERT_FILE=/path/to/client.pem
713dcd47379SDag-Erling SmørgravSSL_CA_CERT_FILE=/path/to/myca.pem
714dcd47379SDag-Erling Smørgrav.Ed
7154ca1ab94SDag-Erling Smørgrav.Sh SEE ALSO
7164ca1ab94SDag-Erling Smørgrav.Xr fetch 1 ,
717f5f109a0SDag-Erling Smørgrav.Xr ftpio 3 ,
718c86c6f74SDag-Erling Smørgrav.Xr ip 4
719c86c6f74SDag-Erling Smørgrav.Rs
720c86c6f74SDag-Erling Smørgrav.%A J. Postel
721c86c6f74SDag-Erling Smørgrav.%A J. K. Reynolds
722c86c6f74SDag-Erling Smørgrav.%D October 1985
723c86c6f74SDag-Erling Smørgrav.%B File Transfer Protocol
724c86c6f74SDag-Erling Smørgrav.%O RFC959
725c86c6f74SDag-Erling Smørgrav.Re
726c86c6f74SDag-Erling Smørgrav.Rs
727c86c6f74SDag-Erling Smørgrav.%A P. Deutsch
728c86c6f74SDag-Erling Smørgrav.%A A. Emtage
729c86c6f74SDag-Erling Smørgrav.%A A. Marine.
730c86c6f74SDag-Erling Smørgrav.%D May 1994
731c86c6f74SDag-Erling Smørgrav.%T How to Use Anonymous FTP
732c86c6f74SDag-Erling Smørgrav.%O RFC1635
73398849115SRuslan Ermilov.Re
7344ca1ab94SDag-Erling Smørgrav.Rs
7350f5fcaa3SSheldon Hearn.%A T. Berners-Lee
7360f5fcaa3SSheldon Hearn.%A L. Masinter
7370f5fcaa3SSheldon Hearn.%A M. McCahill
7384ca1ab94SDag-Erling Smørgrav.%D December 1994
7394ca1ab94SDag-Erling Smørgrav.%T Uniform Resource Locators (URL)
7404ca1ab94SDag-Erling Smørgrav.%O RFC1738
7414ca1ab94SDag-Erling Smørgrav.Re
7424ca1ab94SDag-Erling Smørgrav.Rs
7430f5fcaa3SSheldon Hearn.%A R. Fielding
7440f5fcaa3SSheldon Hearn.%A J. Gettys
7450f5fcaa3SSheldon Hearn.%A J. Mogul
7460f5fcaa3SSheldon Hearn.%A H. Frystyk
74706b533d3SDag-Erling Smørgrav.%A L. Masinter
74806b533d3SDag-Erling Smørgrav.%A P. Leach
7490f5fcaa3SSheldon Hearn.%A T. Berners-Lee
750d5c24aa8SBill Fenner.%D January 1999
7514ca1ab94SDag-Erling Smørgrav.%B Hypertext Transfer Protocol -- HTTP/1.1
75206b533d3SDag-Erling Smørgrav.%O RFC2616
75306b533d3SDag-Erling Smørgrav.Re
75406b533d3SDag-Erling Smørgrav.Rs
75506b533d3SDag-Erling Smørgrav.%A J. Franks
75606b533d3SDag-Erling Smørgrav.%A P. Hallam-Baker
75706b533d3SDag-Erling Smørgrav.%A J. Hostetler
75806b533d3SDag-Erling Smørgrav.%A S. Lawrence
75906b533d3SDag-Erling Smørgrav.%A P. Leach
76006b533d3SDag-Erling Smørgrav.%A A. Luotonen
76106b533d3SDag-Erling Smørgrav.%A L. Stewart
76206b533d3SDag-Erling Smørgrav.%D June 1999
76306b533d3SDag-Erling Smørgrav.%B HTTP Authentication: Basic and Digest Access Authentication
76406b533d3SDag-Erling Smørgrav.%O RFC2617
7654ca1ab94SDag-Erling Smørgrav.Re
7664ca1ab94SDag-Erling Smørgrav.Sh HISTORY
7674ca1ab94SDag-Erling SmørgravThe
7684ca1ab94SDag-Erling Smørgrav.Nm fetch
7694ca1ab94SDag-Erling Smørgravlibrary first appeared in
7704ca1ab94SDag-Erling Smørgrav.Fx 3.0 .
7714ca1ab94SDag-Erling Smørgrav.Sh AUTHORS
772725ab628SRuslan Ermilov.An -nosplit
7734ca1ab94SDag-Erling SmørgravThe
7744ca1ab94SDag-Erling Smørgrav.Nm fetch
7754ca1ab94SDag-Erling Smørgravlibrary was mostly written by
77609e06539SDag-Erling Smørgrav.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org
77778122aacSDag-Erling Smørgravwith numerous suggestions and contributions from
778d8acd8dcSDag-Erling Smørgrav.An Jordan K. Hubbard Aq jkh@FreeBSD.org ,
77978122aacSDag-Erling Smørgrav.An Eugene Skepner Aq eu@qub.com ,
78078122aacSDag-Erling Smørgrav.An Hajimu Umemoto Aq ume@FreeBSD.org ,
78178122aacSDag-Erling Smørgrav.An Henry Whincup Aq henry@techiebod.com ,
78278122aacSDag-Erling Smørgrav.An Jukka A. Ukkonen Aq jau@iki.fi ,
783dcd47379SDag-Erling Smørgrav.An Jean-Fran\(,cois Dockes Aq jf@dockes.org ,
784dcd47379SDag-Erling Smørgrav.An Michael Gmelin Aq freebsd@grem.de
78578122aacSDag-Erling Smørgravand others.
786d8acd8dcSDag-Erling SmørgravIt replaces the older
7874ca1ab94SDag-Erling Smørgrav.Nm ftpio
788d8acd8dcSDag-Erling Smørgravlibrary written by
7898d984020STom McLaughlin.An Poul-Henning Kamp Aq phk@FreeBSD.org
790d8acd8dcSDag-Erling Smørgravand
7914ca1ab94SDag-Erling Smørgrav.An Jordan K. Hubbard Aq jkh@FreeBSD.org .
7924ca1ab94SDag-Erling Smørgrav.Pp
7934ca1ab94SDag-Erling SmørgravThis manual page was written by
794dcd47379SDag-Erling Smørgrav.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org
795dcd47379SDag-Erling Smørgravand
796dcd47379SDag-Erling Smørgrav.An Michael Gmelin Aq freebsd@grem.de .
7974ca1ab94SDag-Erling Smørgrav.Sh BUGS
798c6ff3a1bSSheldon HearnSome parts of the library are not yet implemented.
799c6ff3a1bSSheldon HearnThe most notable
800d8acd8dcSDag-Erling Smørgravexamples of this are
801d8acd8dcSDag-Erling Smørgrav.Fn fetchPutHTTP ,
802ce71b736SDag-Erling Smørgrav.Fn fetchListHTTP ,
80315efcd39SAlexey Zelkin.Fn fetchListFTP
804d8acd8dcSDag-Erling Smørgravand FTP proxy support.
805d8acd8dcSDag-Erling Smørgrav.Pp
80636a142c4SRuslan ErmilovThere is no way to select a proxy at run-time other than setting the
807db5f8cebSDag-Erling Smørgrav.Ev HTTP_PROXY
808db5f8cebSDag-Erling Smørgravor
809db5f8cebSDag-Erling Smørgrav.Ev FTP_PROXY
810c6ff3a1bSSheldon Hearnenvironment variables as appropriate.
81198f5573fSDag-Erling Smørgrav.Pp
812842a95ccSDag-Erling Smørgrav.Nm libfetch
81398f5573fSDag-Erling Smørgravdoes not understand or obey 305 (Use Proxy) replies.
81498f5573fSDag-Erling Smørgrav.Pp
815842a95ccSDag-Erling SmørgravError numbers are unique only within a certain context; the error
816842a95ccSDag-Erling Smørgravcodes used for FTP and HTTP overlap, as do those used for resolver and
817c6ff3a1bSSheldon Hearnsystem errors.
818c6ff3a1bSSheldon HearnFor instance, error code 202 means "Command not
819842a95ccSDag-Erling Smørgravimplemented, superfluous at this site" in an FTP context and
820842a95ccSDag-Erling Smørgrav"Accepted" in an HTTP context.
821842a95ccSDag-Erling Smørgrav.Pp
822f5f109a0SDag-Erling Smørgrav.Fn fetchStatFTP
823f5f109a0SDag-Erling Smørgravdoes not check that the result of an MDTM command is a valid date.
824f5f109a0SDag-Erling Smørgrav.Pp
825dcd47379SDag-Erling SmørgravIn case password protected keys are used for client certificate based
826dcd47379SDag-Erling Smørgravauthentication the user is prompted for the password on each and every
827dcd47379SDag-Erling Smørgravfetch operation.
828dcd47379SDag-Erling Smørgrav.Pp
8291a5faa10SDag-Erling SmørgravThe man page is incomplete, poorly written and produces badly
8301a5faa10SDag-Erling Smørgravformatted text.
831db5f8cebSDag-Erling Smørgrav.Pp
832ba101983SDag-Erling SmørgravThe error reporting mechanism is unsatisfactory.
833ba101983SDag-Erling Smørgrav.Pp
834ba101983SDag-Erling SmørgravSome parts of the code are not fully reentrant.
835