From: David van Moolenbroek Date: Sat, 19 Sep 2015 23:46:56 +0000 (+0000) Subject: libfetch: switch to external/bsd version X-Git-Url: http://zhaoyanbai.com/repos/man.dig.html?a=commitdiff_plain;h=refs%2Fchanges%2F84%2F3184%2F2;p=minix.git libfetch: switch to external/bsd version Change-Id: I7eb6fbf0ae6c008e399fe9bffdfc2b98dfed3432 --- diff --git a/distrib/sets/lists/minix/mi b/distrib/sets/lists/minix/mi index 1cf94a9b5..8ab16714b 100644 --- a/distrib/sets/lists/minix/mi +++ b/distrib/sets/lists/minix/mi @@ -2122,6 +2122,10 @@ ./usr/lib/libexpat.so.2 minix-sys ./usr/lib/libexpat.so.2.1 minix-sys ./usr/lib/libfetch.a minix-sys +./usr/lib/libfetch_pic.a minix-sys +./usr/lib/libfetch.so minix-sys +./usr/lib/libfetch.so.3 minix-sys +./usr/lib/libfetch.so.3.0 minix-sys ./usr/lib/libfl.a minix-sys ./usr/lib/libform.a minix-sys ./usr/lib/libform_pic.a minix-sys @@ -3474,6 +3478,7 @@ ./usr/man/man3/fesetenv.3 minix-sys ./usr/man/man3/fesetexceptflag.3 minix-sys ./usr/man/man3/fesetround.3 minix-sys +./usr/man/man3/fetch.3 minix-sys ./usr/man/man3/fetestexcept.3 minix-sys ./usr/man/man3/feupdateenv.3 minix-sys ./usr/man/man3/fflush.3 minix-sys diff --git a/external/bsd/Makefile b/external/bsd/Makefile index 40200a964..6776000d3 100644 --- a/external/bsd/Makefile +++ b/external/bsd/Makefile @@ -2,7 +2,7 @@ .include -SUBDIR= byacc file flex less \ +SUBDIR= byacc fetch file flex less \ libarchive libevent mdocml \ tmux diff --git a/external/bsd/fetch/Makefile b/external/bsd/fetch/Makefile new file mode 100644 index 000000000..da77391a9 --- /dev/null +++ b/external/bsd/fetch/Makefile @@ -0,0 +1,5 @@ +# $NetBSD: Makefile,v 1.1 2008/09/30 19:09:00 joerg Exp $ + +SUBDIR= lib + +.include diff --git a/external/bsd/fetch/Makefile.inc b/external/bsd/fetch/Makefile.inc new file mode 100644 index 000000000..4bf21635e --- /dev/null +++ b/external/bsd/fetch/Makefile.inc @@ -0,0 +1,9 @@ +# $NetBSD: Makefile.inc,v 1.1 2008/09/30 19:09:00 joerg Exp $ + +.include + +LIBFETCHDIR= ${NETBSDSRCDIR}/external/bsd/fetch/dist/libfetch + +USE_FORT?= yes # complex string handling + +WARNS?= 4 diff --git a/minix/lib/libfetch/common.c b/external/bsd/fetch/dist/libfetch/common.c similarity index 98% rename from minix/lib/libfetch/common.c rename to external/bsd/fetch/dist/libfetch/common.c index 72988e5eb..c39168857 100644 --- a/minix/lib/libfetch/common.c +++ b/external/bsd/fetch/dist/libfetch/common.c @@ -1,4 +1,4 @@ -/* $NetBSD: common.c,v 1.27 2010/06/13 21:38:09 joerg Exp $ */ +/* $NetBSD: common.c,v 1.2 2011/06/25 20:27:01 christos Exp $ */ /*- * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav * Copyright (c) 2008, 2010 Joerg Sonnenberger @@ -33,7 +33,7 @@ #if HAVE_CONFIG_H #include "config.h" #endif -#if !defined(NETBSD) && !defined(__minix) +#ifndef NETBSD #include #endif @@ -50,7 +50,7 @@ #if defined(HAVE_INTTYPES_H) || defined(NETBSD) #include #endif -#if !defined(NETBSD) && !defined(__minix) +#ifndef NETBSD #include #else #include @@ -66,6 +66,7 @@ #include #endif +#include "fetch.h" #include "common.h" /*** Local data **************************************************************/ @@ -149,15 +150,11 @@ fetch_syserr(void) case EADDRNOTAVAIL: case ENETDOWN: case ENETUNREACH: -#if defined(ENETRESET) case ENETRESET: -#endif case EHOSTUNREACH: fetchLastErrCode = FETCH_NETWORK; break; -#if defined(ECONNABORTED) case ECONNABORTED: -#endif case ECONNRESET: fetchLastErrCode = FETCH_ABORT; break; @@ -165,9 +162,7 @@ fetch_syserr(void) fetchLastErrCode = FETCH_TIMEOUT; break; case ECONNREFUSED: -#if defined(EHOSTDOWN) case EHOSTDOWN: -#endif fetchLastErrCode = FETCH_DOWN; break; default: @@ -321,7 +316,6 @@ fetch_connect(struct url *url, int af, int verbose) if ((conn = fetch_reopen(sd)) == NULL) { fetch_syserr(); close(sd); - return (NULL); } conn->cache_url = fetchCopyURL(url); conn->cache_af = af; @@ -545,7 +539,7 @@ fetch_read(conn_t *conn, char *buf, size_t len) } #ifdef WITH_SSL if (conn->ssl != NULL) - rlen = SSL_read(conn->ssl, buf, len); + rlen = SSL_read(conn->ssl, buf, (int)len); else #endif rlen = read(conn->sd, buf, len); @@ -594,7 +588,7 @@ fetch_getln(conn_t *conn) return (-1); if (len == 0) break; - next = memchr(conn->buf + conn->buflen, '\n', len); + next = memchr(conn->buf + conn->buflen, '\n', (size_t)len); conn->buflen += len; if (conn->buflen == conn->bufsize && next == NULL) { tmp = conn->buf; @@ -680,7 +674,7 @@ fetch_write(conn_t *conn, const void *buf, size_t len) errno = 0; #ifdef WITH_SSL if (conn->ssl != NULL) - wlen = SSL_write(conn->ssl, buf, len); + wlen = SSL_write(conn->ssl, buf, (int)len); else #endif #ifndef MSG_NOSIGNAL diff --git a/minix/lib/libfetch/common.h b/external/bsd/fetch/dist/libfetch/common.h similarity index 95% rename from minix/lib/libfetch/common.h rename to external/bsd/fetch/dist/libfetch/common.h index 42f2f80c5..12f27861b 100644 --- a/minix/lib/libfetch/common.h +++ b/external/bsd/fetch/dist/libfetch/common.h @@ -1,4 +1,4 @@ -/* $NetBSD: common.h,v 1.16 2010/03/21 16:48:43 joerg Exp $ */ +/* $NetBSD: common.h,v 1.1.1.7 2010/03/24 20:51:42 joerg Exp $ */ /*- * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav * All rights reserved. @@ -32,8 +32,6 @@ #ifndef _COMMON_H_INCLUDED #define _COMMON_H_INCLUDED -#include - #define FTP_DEFAULT_PORT 21 #define HTTP_DEFAULT_PORT 80 #define FTP_DEFAULT_PROXY_PORT 21 @@ -49,7 +47,7 @@ #if !defined(__sun) && !defined(__hpux) && !defined(__INTERIX) && \ !defined(__digital__) && !defined(__linux) && !defined(__MINT__) && \ - !defined(__sgi) && !defined(__minix) + !defined(__sgi) #define HAVE_SA_LEN #endif @@ -92,8 +90,7 @@ struct fetcherr { void fetch_seterr(struct fetcherr *, int); void fetch_syserr(void); -void fetch_info(const char *, ...) - __attribute__((__format__(__printf__, 1, 2))); +void fetch_info(const char *, ...); int fetch_default_port(const char *); int fetch_default_proxy_port(const char *); int fetch_bind(int, int, const char *); diff --git a/minix/lib/libfetch/errlist.sh b/external/bsd/fetch/dist/libfetch/errlist.sh similarity index 79% rename from minix/lib/libfetch/errlist.sh rename to external/bsd/fetch/dist/libfetch/errlist.sh index 84779fe99..6de3265cd 100755 --- a/minix/lib/libfetch/errlist.sh +++ b/external/bsd/fetch/dist/libfetch/errlist.sh @@ -1,5 +1,5 @@ #!/bin/sh -# $NetBSD: errlist.sh,v 1.2 2008/10/06 12:58:29 joerg Exp $ +# $NetBSD: errlist.sh,v 1.1.1.4 2009/04/04 23:26:03 joerg Exp $ printf "static struct fetcherr $1[] = {\n" while read code type msg; do diff --git a/external/bsd/fetch/dist/libfetch/fetch.3 b/external/bsd/fetch/dist/libfetch/fetch.3 new file mode 100644 index 000000000..0eefce2c8 --- /dev/null +++ b/external/bsd/fetch/dist/libfetch/fetch.3 @@ -0,0 +1,781 @@ +.\"- +.\" Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav +.\" Copyright (c) 2010 Joerg Sonnenberger +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD: fetch.3,v 1.64 2007/12/18 11:03:26 des Exp $ +.\" $NetBSD: fetch.3,v 1.2 2013/07/20 21:40:04 wiz Exp $ +.\" +.Dd January 22, 2010 +.Dt FETCH 3 +.Os +.Sh NAME +.Nm fetchMakeURL , +.Nm fetchParseURL , +.Nm fetchCopyURL , +.Nm fetchFreeURL , +.Nm fetchXGetURL , +.Nm fetchGetURL , +.Nm fetchPutURL , +.Nm fetchStatURL , +.Nm fetchListURL , +.Nm fetchXGet , +.Nm fetchGet , +.Nm fetchPut , +.Nm fetchStat , +.Nm fetchList , +.Nm fetchXGetFile , +.Nm fetchGetFile , +.Nm fetchPutFile , +.Nm fetchStatFile , +.Nm fetchListFile , +.Nm fetchXGetHTTP , +.Nm fetchGetHTTP , +.Nm fetchPutHTTP , +.Nm fetchStatHTTP , +.Nm fetchListHTTP , +.Nm fetchXGetFTP , +.Nm fetchGetFTP , +.Nm fetchPutFTP , +.Nm fetchStatFTP , +.Nm fetchListFTP +.Nm fetchInitURLList , +.Nm fetchFreeURLList , +.Nm fetchUnquotePath , +.Nm fetchUnquoteFilename , +.Nm fetchStringifyURL , +.Nm fetchConnectionCacheInit , +.Nm fetchConnectionCacheClose , +.Nm fetch +.Nd file transfer functions +.Sh LIBRARY +.Lb libfetch +.Sh SYNOPSIS +.In stdio.h +.In fetch.h +.Ft struct url * +.Fn fetchMakeURL "const char *scheme" "const char *host" "int port" "const char *doc" "const char *user" "const char *pwd" +.Ft struct url * +.Fn fetchParseURL "const char *URL" +.Ft struct url * +.Fn fetchCopyURL "const struct url *u" +.Ft void +.Fn fetchFreeURL "struct url *u" +.Ft fetchIO * +.Fn fetchXGetURL "const char *URL" "struct url_stat *us" "const char *flags" +.Ft fetchIO * +.Fn fetchGetURL "const char *URL" "const char *flags" +.Ft fetchIO * +.Fn fetchPutURL "const char *URL" "const char *flags" +.Ft int +.Fn fetchStatURL "const char *URL" "struct url_stat *us" "const char *flags" +.Ft int +.Fn fetchListURL "struct url_list *list" "const char *URL" "const char *flags" +.Ft fetchIO * +.Fn fetchXGet "struct url *u" "struct url_stat *us" "const char *flags" +.Ft fetchIO * +.Fn fetchGet "struct url *u" "const char *flags" +.Ft fetchIO * +.Fn fetchPut "struct url *u" "const char *flags" +.Ft int +.Fn fetchStat "struct url *u" "struct url_stat *us" "const char *flags" +.Ft int +.Fn fetchList "struct url_list *list" "struct url *u" "const char *flags" +.Ft fetchIO * +.Fn fetchXGetFile "struct url *u" "struct url_stat *us" "const char *flags" +.Ft fetchIO * +.Fn fetchGetFile "struct url *u" "const char *flags" +.Ft fetchIO * +.Fn fetchPutFile "struct url *u" "const char *flags" +.Ft int +.Fn fetchStatFile "struct url *u" "struct url_stat *us" "const char *flags" +.Ft int +.Fn fetchListFile "struct url_list *list" "struct url *u" "const char *flags" +.Ft fetchIO * +.Fn fetchXGetHTTP "struct url *u" "struct url_stat *us" "const char *flags" +.Ft fetchIO * +.Fn fetchGetHTTP "struct url *u" "const char *flags" +.Ft fetchIO * +.Fn fetchPutHTTP "struct url *u" "const char *flags" +.Ft int +.Fn fetchStatHTTP "struct url *u" "struct url_stat *us" "const char *flags" +.Ft int +.Fn fetchListHTTP "struct url_list *list" "struct url *u" "const char *flags" +.Ft fetchIO * +.Fn fetchXGetFTP "struct url *u" "struct url_stat *us" "const char *flags" +.Ft fetchIO * +.Fn fetchGetFTP "struct url *u" "const char *flags" +.Ft fetchIO * +.Fn fetchPutFTP "struct url *u" "const char *flags" +.Ft int +.Fn fetchStatFTP "struct url *u" "struct url_stat *us" "const char *flags" +.Ft int +.Fn fetchListFTP "struct url_list *list" "struct url *u" "const char *flags" +.Ft void +.Fn fetchInitURLList "struct url_list *ul" +.Ft int +.Fn fetchAppendURLList "struct url_list *dst" "const struct url_list *src" +.Ft void +.Fn fetchFreeURLList "struct url_list *ul" +.Ft char * +.Fn fetchUnquotePath "struct url *u" +.Ft char * +.Fn fetchUnquoteFilename "struct url *u" +.Ft char * +.Fn fetchStringifyURL "const struct url *u" +.Ft void +.Fn fetchConnectionCacheInit "int global" "int per_host" +.Ft void +.Fn fetchConnectionCacheClose "void" +.Sh DESCRIPTION +These functions implement a high-level library for retrieving and +uploading files using Uniform Resource Locators (URLs). +.Pp +.Fn fetchParseURL +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 RFC 1738. +A regular expression which produces this syntax is: +.Bd -literal -offset indent +\*[Lt]scheme\*[Gt]:(//(\*[Lt]user\*[Gt](:\*[Lt]pwd\*[Gt])?@)?\*[Lt]host\*[Gt](:\*[Lt]port\*[Gt])?)?/(\*[Lt]document\*[Gt])? +.Ed +.Pp +If the URL does not seem to begin with a scheme name, it is assumed to be a local path. +Only absolute path names are accepted. +.Pp +Note that some components of the URL are not necessarily relevant to +all URL schemes. +For instance, the file scheme only needs the +.Aq scheme +and +.Aq document +components. +.Fn fetchParseURL +quotes any unsafe character in the URL automatically. +This is not done by +.Fn fetchMakeURL . +.Fn fetchCopyURL +copies an existing +.Vt url +structure. +.Pp +.Fn fetchMakeURL , +.Fn fetchParseURL , +and +.Fn fetchCopyURL +return a pointer to a +.Vt url +structure, which is defined as follows in +.In fetch.h : +.Bd -literal +#define URL_SCHEMELEN 16 +#define URL_USERLEN 256 +#define URL_PWDLEN 256 +#define URL_HOSTLEN 255 + +struct url { + char scheme[URL_SCHEMELEN + 1]; + char user[URL_USERLEN + 1]; + char pwd[URL_PWDLEN + 1]; + char host[URL_HOSTLEN + 1]; + int port; + char *doc; + off_t offset; + size_t length; + time_t last_modified; +}; +.Ed +.Pp +The pointer returned by +.Fn fetchMakeURL , +.Fn fetchCopyURL , +and +.Fn fetchParseURL +should be freed using +.Fn fetchFreeURL . +The size of +.Vt struct URL +is not part of the ABI. +.Pp +.Fn fetchXGetURL , +.Fn fetchGetURL , +and +.Fn fetchPutURL +constitute the recommended interface to the +.Nm fetch +library. +They examine the URL passed to them to determine the transfer +method, and call the appropriate lower-level functions to perform the +actual transfer. +.Fn fetchXGetURL +also returns the remote document's metadata in the +.Vt url_stat +structure pointed to by the +.Fa us +argument. +.Pp +The +.Fa flags +argument is a string of characters which specify transfer options. +The +meaning of the individual flags is scheme-dependent, and is detailed +in the appropriate section below. +.Pp +.Fn fetchStatURL +attempts to obtain the requested document's metadata and fill in the +structure pointed to by its second argument. +The +.Vt url_stat +structure is defined as follows in +.In fetch.h : +.Bd -literal +struct url_stat { + off_t size; + time_t atime; + time_t mtime; +}; +.Ed +.Pp +If the size could not be obtained from the server, the +.Fa size +field is set to \-1. +If the modification time could not be obtained from the server, the +.Fa mtime +field is set to the epoch. +If the access time could not be obtained from the server, the +.Fa atime +field is set to the modification time. +.Pp +.Fn fetchListURL +attempts to list the contents of the directory pointed to by the URL provided. +The pattern can be a simple glob-like expression as hint. +Callers should not depend on the server to filter names. +If successful, it appends the list of entries to the +.Vt url_list +structure. +The +.Vt url_list +structure is defined as follows in +.In fetch.h : +.Bd -literal +struct url_list { + size_t length; + size_t alloc_size; + struct url *urls; +}; +.Ed +.Pp +The list should be initialized by calling +.Fn fetchInitURLList +and the entries be freed by calling +.Fn fetchFreeURLList . +The function +.Fn fetchAppendURLList +can be used to append one URL lists to another. +If the +.Ql c +(cache result) flag is specified, the library is allowed to internally +cache the result. +.Pp +.Fn fetchStringifyURL +returns the URL as string. +.Fn fetchUnquotePath +returns the path name part of the URL with any quoting undone. +Query arguments and fragment identifiers are not included. +.Fn fetchUnquoteFilename +returns the last component of the path name as returned by +.Fn fetchUnquotePath . +.Fn fetchStringifyURL , +.Fn fetchUnquotePath , +and +.Fn fetchUnquoteFilename +return a string that should be deallocated with +.Fn free +after use. +.Pp +.Fn fetchConnectionCacheInit +enables the connection cache. +The first argument specifies the global limit on cached connections. +The second argument specifies the host limit. +Entries are considered to specify the same host, if the host name +from the URL is identical, indepent of the address or address family. +.Fn fetchConnectionCacheClose +flushed the connection cache and closes all cached connections. +.Pp +.Fn fetchXGet , +.Fn fetchGet , +.Fn fetchPut , +and +.Fn fetchStat +are similar to +.Fn fetchXGetURL , +.Fn fetchGetURL , +.Fn fetchPutURL , +and +.Fn fetchStatURL , +except that they expect a pre-parsed URL in the form of a pointer to +a +.Vt struct url +rather than a string. +.Pp +All of the +.Fn fetchXGetXXX , +.Fn fetchGetXXX , +and +.Fn fetchPutXXX +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 generally be assumed that a stream returned by one of the +.Fn fetchXGetXXX +or +.Fn fetchGetXXX +functions is read-only, and that a stream returned by one of the +.Fn fetchPutXXX +functions is write-only. +.Sh PROTOCOL INDEPENDENT FLAGS +If the +.Ql i +(if-modified-since) flag is specified, the library will try to fetch +the content only if it is newer than +.Va last_modified . +For HTTP an +.Li If-Modified-Since +HTTP header is sent. +For FTP a +.Li MTDM +command is sent first and compared locally. +For FILE the source file is compared. +.Sh FILE SCHEME +.Fn fetchXGetFile , +.Fn fetchGetFile , +and +.Fn fetchPutFile +provide access to documents which are files in a locally mounted file +system. +Only the +.Aq document +component of the URL is used. +.Pp +.Fn fetchXGetFile +and +.Fn fetchGetFile +do not accept any flags. +.Pp +.Fn fetchPutFile +accepts the +.Ql a +(append to file) flag. +If that flag is specified, the data written to +the stream returned by +.Fn fetchPutFile +will be appended to the previous contents of the file, instead of +replacing them. +.Sh FTP SCHEME +.Fn fetchXGetFTP , +.Fn fetchGetFTP , +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 a +(active) flag is specified, a passive connection is not tried and active mode +is used directly. +.Pp +If the +.Ql l +(low) flag is specified, data sockets will be allocated in the low (or +default) port range instead of the high port range (see +.Xr ip 4 ) . +.Pp +If the +.Ql d +(direct) flag is specified, +.Fn fetchXGetFTP , +.Fn fetchGetFTP , +and +.Fn fetchPutFTP +will use a direct connection even if a proxy server is defined. +.Pp +If no user name or password is given, the +.Nm fetch +library will attempt an anonymous login, with user name "anonymous" +and password "anonymous@\*[Lt]hostname\*[Gt]". +.Sh HTTP SCHEME +The +.Fn fetchXGetHTTP , +.Fn fetchGetHTTP , +and +.Fn fetchPutHTTP +functions implement the HTTP/1.1 protocol. +With a little luck, there is +even a chance that they comply with RFC 2616 and RFC 2617. +.Pp +If the +.Ql d +(direct) flag is specified, +.Fn fetchXGetHTTP , +.Fn fetchGetHTTP , +and +.Fn fetchPutHTTP +will use a direct connection even if a proxy server is defined. +.Pp +Since there seems to be no good way of implementing the HTTP PUT +method in a manner consistent with the rest of the +.Nm fetch +library, +.Fn fetchPutHTTP +is currently unimplemented. +.Sh AUTHENTICATION +Apart from setting the appropriate environment variables and +specifying the user name and password in the URL or the +.Vt struct url , +the calling program has the option of defining an authentication +function with the following prototype: +.Pp +.Ft int +.Fn myAuthMethod "struct url *u" +.Pp +The callback function should fill in the +.Fa user +and +.Fa pwd +fields in the provided +.Vt struct url +and return 0 on success, or any other value to indicate failure. +.Pp +To register the authentication callback, simply set +.Va fetchAuthMethod +to point at it. +The callback will be used whenever a site requires authentication and +the appropriate environment variables are not set. +.Pp +This interface is experimental and may be subject to change. +.Sh RETURN VALUES +.Fn fetchParseURL +returns a pointer to a +.Vt struct url +containing the individual components of the URL. +If it is +unable to allocate memory, or the URL is syntactically incorrect, +.Fn fetchParseURL +returns a +.Dv NULL +pointer. +.Pp +The +.Fn fetchStat +functions return 0 on success and \-1 on failure. +.Pp +All other functions return a stream pointer which may be used to +access the requested document, or +.Dv NULL +if an error occurred. +.Pp +The following error codes are defined in +.In fetch.h : +.Bl -tag -width 18n +.It Bq Er FETCH_ABORT +Operation aborted +.It Bq Er FETCH_AUTH +Authentication failed +.It Bq Er FETCH_DOWN +Service unavailable +.It Bq Er FETCH_EXISTS +File exists +.It Bq Er FETCH_FULL +File system full +.It Bq Er FETCH_INFO +Informational response +.It Bq Er FETCH_MEMORY +Insufficient memory +.It Bq Er FETCH_MOVED +File has moved +.It Bq Er FETCH_NETWORK +Network error +.It Bq Er FETCH_OK +No error +.It Bq Er FETCH_PROTO +Protocol error +.It Bq Er FETCH_RESOLV +Resolver error +.It Bq Er FETCH_SERVER +Server error +.It Bq Er FETCH_TEMP +Temporary error +.It Bq Er FETCH_TIMEOUT +Operation timed out +.It Bq Er FETCH_UNAVAIL +File is not available +.It Bq Er FETCH_UNKNOWN +Unknown error +.It Bq Er FETCH_URL +Invalid URL +.El +.Pp +The accompanying error message includes a protocol-specific error code +and message, e.g.\& "File is not available (404 Not Found)" +.Sh ENVIRONMENT +.Bl -tag -width ".Ev FETCH_BIND_ADDRESS" +.It Ev FETCH_BIND_ADDRESS +Specifies a host name or IP address to which sockets used for outgoing +connections will be bound. +.It Ev FTP_LOGIN +Default FTP login if none was provided in the URL. +.It Ev FTP_PASSIVE_MODE +If set to anything but +.Ql no , +forces the FTP code to use passive mode. +.It Ev FTP_PASSWORD +Default FTP password if the remote server requests one and none was +provided in the URL. +.It Ev FTP_PROXY +URL of the proxy to use for FTP requests. +The document part is ignored. +FTP and HTTP proxies are supported; if no scheme is specified, FTP is +assumed. +If the proxy is an FTP proxy, +.Nm libfetch +will send +.Ql user@host +as user name to the proxy, where +.Ql user +is the real user name, and +.Ql host +is the name of the FTP server. +.Pp +If this variable is set to an empty string, no proxy will be used for +FTP requests, even if the +.Ev HTTP_PROXY +variable is set. +.It Ev ftp_proxy +Same as +.Ev FTP_PROXY , +for compatibility. +.It Ev HTTP_AUTH +Specifies HTTP authorization parameters as a colon-separated list of +items. +The first and second item are the authorization scheme and realm +respectively; further items are scheme-dependent. +Currently, only basic authorization is supported. +.Pp +Basic authorization requires two parameters: the user name and +password, in that order. +.Pp +This variable is only used if the server requires authorization and +no user name or password was specified in the URL. +.It Ev HTTP_PROXY +URL of the proxy to use for HTTP requests. +The document part is ignored. +Only HTTP proxies are supported for HTTP requests. +If no port number is specified, the default is 3128. +.Pp +Note that this proxy will also be used for FTP documents, unless the +.Ev FTP_PROXY +variable is set. +.It Ev http_proxy +Same as +.Ev HTTP_PROXY , +for compatibility. +.It Ev HTTP_PROXY_AUTH +Specifies authorization parameters for the HTTP proxy in the same +format as the +.Ev HTTP_AUTH +variable. +.Pp +This variable is used if and only if connected to an HTTP proxy, and +is ignored if a user and/or a password were specified in the proxy +URL. +.It Ev HTTP_REFERER +Specifies the referrer URL to use for HTTP requests. +If set to +.Dq auto , +the document URL will be used as referrer URL. +.It Ev HTTP_USER_AGENT +Specifies the User-Agent string to use for HTTP requests. +This can be useful when working with HTTP origin or proxy servers that +differentiate between user agents. +.It Ev NETRC +Specifies a file to use instead of +.Pa ~/.netrc +to look up login names and passwords for FTP sites. +See +.Xr ftp 1 +for a description of the file format. +This feature is experimental. +.It Ev NO_PROXY +Either a single asterisk, which disables the use of proxies +altogether, or a comma- or whitespace-separated list of hosts for +which proxies should not be used. +.It Ev no_proxy +Same as +.Ev NO_PROXY , +for compatibility. +.El +.Sh EXAMPLES +To access a proxy server on +.Pa proxy.example.com +port 8080, set the +.Ev HTTP_PROXY +environment variable in a manner similar to this: +.Pp +.Dl HTTP_PROXY=http://proxy.example.com:8080 +.Pp +If the proxy server requires authentication, there are +two options available for passing the authentication data. +The first method is by using the proxy URL: +.Pp +.Dl HTTP_PROXY=http://\*[Lt]user\*[Gt]:\*[Lt]pwd\*[Gt]@proxy.example.com:8080 +.Pp +The second method is by using the +.Ev HTTP_PROXY_AUTH +environment variable: +.Bd -literal -offset indent +HTTP_PROXY=http://proxy.example.com:8080 +HTTP_PROXY_AUTH=basic:*:\*[Lt]user\*[Gt]:\*[Lt]pwd\*[Gt] +.Ed +.Pp +To disable the use of a proxy for an HTTP server running on the local +host, define +.Ev NO_PROXY +as follows: +.Bd -literal -offset indent +NO_PROXY=localhost,127.0.0.1 +.Ed +.Sh SEE ALSO +.\" .Xr fetch 1 , +.\" .Xr ftpio 3 , +.Xr ftp 1 , +.Xr ip 4 +.Rs +.%A J. Postel +.%A J. K. Reynolds +.%D October 1985 +.%B File Transfer Protocol +.%O RFC 959 +.Re +.Rs +.%A P. Deutsch +.%A A. Emtage +.%A A. Marine +.%D May 1994 +.%T How to Use Anonymous FTP +.%O RFC 1635 +.Re +.Rs +.%A T. Berners-Lee +.%A L. Masinter +.%A M. McCahill +.%D December 1994 +.%T Uniform Resource Locators (URL) +.%O RFC 1738 +.Re +.Rs +.%A R. Fielding +.%A J. Gettys +.%A J. Mogul +.%A H. Frystyk +.%A L. Masinter +.%A P. Leach +.%A T. Berners-Lee +.%D January 1999 +.%B Hypertext Transfer Protocol -- HTTP/1.1 +.%O RFC 2616 +.Re +.Rs +.%A J. Franks +.%A P. Hallam-Baker +.%A J. Hostetler +.%A S. Lawrence +.%A P. Leach +.%A A. Luotonen +.%A L. Stewart +.%D June 1999 +.%B HTTP Authentication: Basic and Digest Access Authentication +.%O RFC 2617 +.Re +.Sh HISTORY +The +.Nm fetch +library first appeared in +.Fx 3.0 . +.Sh AUTHORS +.An -nosplit +The +.Nm fetch +library was mostly written by +.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org +with numerous suggestions from +.An Jordan K. Hubbard Aq Mt jkh@FreeBSD.org , +.An Eugene Skepner Aq Mt eu@qub.com +and other +.Fx +developers. +It replaces the older +.Nm ftpio +library written by +.An Poul-Henning Kamp Aq Mt phk@FreeBSD.org +and +.An Jordan K. Hubbard Aq Mt jkh@FreeBSD.org . +.Pp +This manual page was written by +.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org . +.Sh BUGS +Some parts of the library are not yet implemented. +The most notable +examples of this are +.Fn fetchPutHTTP +and FTP proxy support. +.Pp +There is no way to select a proxy at run-time other than setting the +.Ev HTTP_PROXY +or +.Ev FTP_PROXY +environment variables as appropriate. +.Pp +.Nm libfetch +does not understand or obey 305 (Use Proxy) replies. +.Pp +Error numbers are unique only within a certain context; the error +codes used for FTP and HTTP overlap, as do those used for resolver and +system errors. +For instance, error code 202 means "Command not +implemented, superfluous at this site" in an FTP context and +"Accepted" in an HTTP context. +.Pp +.Fn fetchStatFTP +does not check that the result of an MDTM command is a valid date. +.Pp +The man page is incomplete, poorly written and produces badly +formatted text. +.Pp +The error reporting mechanism is unsatisfactory. +.Pp +Some parts of the code are not fully reentrant. diff --git a/minix/lib/libfetch/fetch.c b/external/bsd/fetch/dist/libfetch/fetch.c similarity index 99% rename from minix/lib/libfetch/fetch.c rename to external/bsd/fetch/dist/libfetch/fetch.c index 9acd135fe..ae4aa412a 100644 --- a/minix/lib/libfetch/fetch.c +++ b/external/bsd/fetch/dist/libfetch/fetch.c @@ -1,4 +1,4 @@ -/* $NetBSD: fetch.c,v 1.19 2009/08/11 20:48:06 joerg Exp $ */ +/* $NetBSD: fetch.c,v 1.1.1.8 2009/08/21 15:12:27 joerg Exp $ */ /*- * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav * Copyright (c) 2008 Joerg Sonnenberger @@ -33,7 +33,7 @@ #if HAVE_CONFIG_H #include "config.h" #endif -#if !defined(NETBSD) && !defined(__minix) +#ifndef NETBSD #include #endif @@ -43,6 +43,7 @@ #include #include +#include "fetch.h" #include "common.h" auth_t fetchAuthMethod; diff --git a/minix/include/fetch.h b/external/bsd/fetch/dist/libfetch/fetch.h similarity index 98% rename from minix/include/fetch.h rename to external/bsd/fetch/dist/libfetch/fetch.h index 307548643..aff3e86cc 100644 --- a/minix/include/fetch.h +++ b/external/bsd/fetch/dist/libfetch/fetch.h @@ -1,4 +1,4 @@ -/* $NetBSD: fetch.h,v 1.16 2010/01/22 13:21:09 joerg Exp $ */ +/* $NetBSD: fetch.h,v 1.1.1.7 2010/01/30 21:26:11 joerg Exp $ */ /*- * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav * All rights reserved. diff --git a/minix/lib/libfetch/file.c b/external/bsd/fetch/dist/libfetch/file.c similarity index 96% rename from minix/lib/libfetch/file.c rename to external/bsd/fetch/dist/libfetch/file.c index 7b2c2233b..cdd7142f0 100644 --- a/minix/lib/libfetch/file.c +++ b/external/bsd/fetch/dist/libfetch/file.c @@ -1,4 +1,4 @@ -/* $NetBSD: file.c,v 1.15 2009/10/15 12:36:57 joerg Exp $ */ +/* $NetBSD: file.c,v 1.2 2011/06/25 20:27:01 christos Exp $ */ /*- * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav * Copyright (c) 2008, 2009 Joerg Sonnenberger @@ -33,7 +33,7 @@ #if HAVE_CONFIG_H #include "config.h" #endif -#if !defined(NETBSD) && !defined(__minix) +#ifndef NETBSD #include #endif @@ -47,6 +47,7 @@ #include #include +#include "fetch.h" #include "common.h" static int fetch_stat_file(int, struct url_stat *); @@ -203,7 +204,8 @@ fetch_stat_file(int fd, struct url_stat *us) } int -fetchStatFile(struct url *u, struct url_stat *us, const char *flags) +/*ARGSUSED*/ +fetchStatFile(struct url *u, struct url_stat *us, const char *flags __unused) { char *path; int fd, rv; @@ -228,7 +230,9 @@ fetchStatFile(struct url *u, struct url_stat *us, const char *flags) } int -fetchListFile(struct url_list *ue, struct url *u, const char *pattern, const char *flags) +/*ARGSUSED*/ +fetchListFile(struct url_list *ue, struct url *u, const char *pattern, + const char *flags __unused) { char *path; struct dirent *de; diff --git a/minix/lib/libfetch/ftp.c b/external/bsd/fetch/dist/libfetch/ftp.c similarity index 92% rename from minix/lib/libfetch/ftp.c rename to external/bsd/fetch/dist/libfetch/ftp.c index 8fd4e0010..f1541e836 100644 --- a/minix/lib/libfetch/ftp.c +++ b/external/bsd/fetch/dist/libfetch/ftp.c @@ -1,4 +1,4 @@ -/* $NetBSD: ftp.c,v 1.35 2010/03/21 16:48:43 joerg Exp $ */ +/* $NetBSD: ftp.c,v 1.6 2013/10/19 22:58:40 mrg Exp $ */ /*- * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav * Copyright (c) 2008, 2009, 2010 Joerg Sonnenberger @@ -65,7 +65,7 @@ #if HAVE_CONFIG_H #include "config.h" #endif -#if !defined(NETBSD) && !defined(__minix) +#ifndef NETBSD #include #endif @@ -82,7 +82,7 @@ #include #endif #include -#if !defined(NETBSD) && !defined(__minix) +#ifndef NETBSD #include #include #else @@ -94,6 +94,7 @@ #include #include +#include "fetch.h" #include "common.h" #include "ftperr.h" @@ -130,9 +131,6 @@ isdigit((unsigned char)foo[2]) && \ foo[3] == '-') -#define MINBUFSIZE 4096 - -#ifdef INET6 /* * Translate IPv4 mapped IPv6 address to IPv4 address */ @@ -140,14 +138,16 @@ static void unmappedaddr(struct sockaddr_in6 *sin6, socklen_t *len) { struct sockaddr_in *sin4; + void *addrp; uint32_t addr; int port; if (sin6->sin6_family != AF_INET6 || !IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) return; - sin4 = (struct sockaddr_in *)sin6; - addr = *(uint32_t *)&sin6->sin6_addr.s6_addr[12]; + sin4 = (struct sockaddr_in *)(void *)sin6; + addrp = &sin6->sin6_addr.s6_addr[12]; + addr = *(uint32_t *)addrp; port = sin6->sin6_port; memset(sin4, 0, sizeof(struct sockaddr_in)); sin4->sin_addr.s_addr = addr; @@ -158,7 +158,6 @@ unmappedaddr(struct sockaddr_in6 *sin6, socklen_t *len) sin4->sin_len = sizeof(struct sockaddr_in); #endif } -#endif /* * Get server response @@ -199,17 +198,13 @@ ftp_chkerr(conn_t *conn) /* * Send a command and check reply */ -static int ftp_cmd(conn_t *conn, const char *fmt, ...) - __attribute__((__format__(__printf__, 2, 3))); - -#ifndef __minix static int ftp_cmd(conn_t *conn, const char *fmt, ...) { va_list ap; size_t len; char *msg; - int r; + ssize_t r; va_start(ap, fmt); len = vasprintf(&msg, fmt, ap); @@ -231,40 +226,12 @@ ftp_cmd(conn_t *conn, const char *fmt, ...) return (ftp_chkerr(conn)); } -#else -static int -ftp_cmd(conn_t *conn, const char *fmt, ...) -{ - va_list ap; - size_t len; - char msg[MINBUFSIZE]; - int r; - - va_start(ap, fmt); - len = vsnprintf(&msg[0], MINBUFSIZE, fmt, ap); - va_end(ap); - - if (len >= MINBUFSIZE) { - errno = ENOMEM; - fetch_syserr(); - return (-1); - } - - r = fetch_write(conn, msg, len); - - if (r == -1) { - fetch_syserr(); - return (-1); - } - return (ftp_chkerr(conn)); -} -#endif /* * Return a pointer to the filename part of a path */ static const char * -ftp_filename(const char *file, int *len, int *type, int subdir) +ftp_filename(const char *file, size_t *len, int *type, int subdir) { const char *s; @@ -291,6 +258,7 @@ ftp_pwd(conn_t *conn, char **pwd) { char *src, *dst, *end; int q; + size_t len; if (conn->err != FTP_WORKING_DIRECTORY && conn->err != FTP_FILE_ACTION_OK) @@ -299,7 +267,8 @@ ftp_pwd(conn_t *conn, char **pwd) src = conn->buf + 4; if (src >= end || *src++ != '"') return (FTP_PROTOCOL_ERROR); - *pwd = malloc(end - src + 1); + len = end - src + 1; + *pwd = malloc(len); if (*pwd == NULL) return (FTP_PROTOCOL_ERROR); for (q = 0, dst = *pwd; src < end; ++src) { @@ -330,7 +299,8 @@ ftp_cwd(conn_t *conn, const char *path, int subdir) { const char *beg, *end; char *pwd, *dst; - int e, i, len; + int e; + size_t i, len; if (*path != '/') { ftp_seterr(501); @@ -360,18 +330,7 @@ ftp_cwd(conn_t *conn, const char *path, int subdir) } else if (strcmp(conn->ftp_home, "/") == 0) { dst = strdup(path - 1); } else { -#ifndef __minix asprintf(&dst, "%s/%s", conn->ftp_home, path); -#else - if((dst = malloc(sizeof(char)*MINBUFSIZE)) != NULL) { - len = snprintf(dst, MINBUFSIZE, "%s/%s", conn->ftp_home, path); - - if(len >= MINBUFSIZE) { - free(dst); - dst = NULL; - } - } -#endif } if (dst == NULL) { fetch_syserr(); @@ -388,7 +347,7 @@ ftp_cwd(conn_t *conn, const char *path, int subdir) len = strlen(pwd); /* Look for a common prefix between PWD and dir to fetch. */ - for (i = 0; i <= len && i <= end - dst; ++i) + for (i = 0; i <= len && i <= (size_t)(end - dst); ++i) if (pwd[i] != dst[i]) break; /* Keep going up a dir until we have a matching prefix. */ @@ -455,6 +414,7 @@ ftp_mode_type(conn_t *conn, int mode, int type) case 0: case 's': mode = 'S'; + /*FALLTHROUGH*/ case 'S': break; default: @@ -483,14 +443,17 @@ ftp_mode_type(conn_t *conn, int mode, int type) case 0: case 'i': type = 'I'; + /*FALLTHROUGH*/ case 'I': break; case 'a': type = 'A'; + /*FALLTHROUGH*/ case 'A': break; case 'd': type = 'D'; + /*FALLTHROUGH*/ case 'D': /* can't handle yet */ default: @@ -510,7 +473,8 @@ ftp_stat(conn_t *conn, const char *file, struct url_stat *us) { char *ln; const char *filename; - int filenamelen, type; + size_t filenamelen; + int type; struct tm tm; time_t t; int e; @@ -598,7 +562,7 @@ static ssize_t ftp_readfn(void *v, void *buf, size_t len) { struct ftpio *io; - int r; + ssize_t r; io = (struct ftpio *)v; if (io == NULL) { @@ -631,7 +595,7 @@ static ssize_t ftp_writefn(void *v, const void *buf, size_t len) { struct ftpio *io; - int w; + ssize_t w; io = (struct ftpio *)v; if (io == NULL) { @@ -665,7 +629,6 @@ static void ftp_closefn(void *v) { struct ftpio *io; - int r; io = (struct ftpio *)v; if (io == NULL) { @@ -681,7 +644,7 @@ ftp_closefn(void *v) fetch_close(io->dconn); io->dconn = NULL; io->dir = -1; - r = ftp_chkerr(io->cconn); + (void)ftp_chkerr(io->cconn); fetch_cache_put(io->cconn, ftp_disconnect); free(io); return; @@ -722,7 +685,8 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file, const char *op_ar } u; const char *bindaddr; const char *filename; - int filenamelen, type; + size_t filenamelen; + int type; int low, pasv, verbose; int e, sd = -1; socklen_t l; @@ -750,10 +714,8 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file, const char *op_ar l = sizeof(u.ss); if (getsockname(conn->sd, &u.sa, &l) == -1) goto sysouch; -#ifdef INET6 if (u.ss.ss_family == AF_INET6) unmappedaddr(&u.sin6, &l); -#endif retry_mode: @@ -777,7 +739,6 @@ retry_mode: if ((e = ftp_cmd(conn, "PASV\r\n")) != FTP_PASSIVE_MODE) goto ouch; break; -#ifdef INET6 case AF_INET6: if ((e = ftp_cmd(conn, "EPSV\r\n")) != FTP_EPASSIVE_MODE) { if (e == -1) @@ -787,7 +748,6 @@ retry_mode: goto ouch; } break; -#endif default: e = FTP_PROTOCOL_ERROR; /* XXX: error code should be prepared */ goto ouch; @@ -809,7 +769,7 @@ retry_mode: } l = (e == FTP_PASSIVE_MODE ? 6 : 21); for (i = 0; *p && i < l; i++, p++) - addr[i] = strtol(p, &p, 10); + addr[i] = (unsigned char)strtol(p, &p, 10); if (i < l) { e = FTP_PROTOCOL_ERROR; goto ouch; @@ -850,12 +810,9 @@ retry_mode: l = sizeof(u.ss); if (getpeername(conn->sd, &u.sa, &l) == -1) goto sysouch; -#ifdef INET6 if (u.ss.ss_family == AF_INET6) unmappedaddr(&u.sin6, &l); -#endif switch (u.ss.ss_family) { -#ifdef INET6 case AF_INET6: if (e == FTP_EPASSIVE_MODE) u.sin6.sin6_port = htons(port); @@ -864,7 +821,6 @@ retry_mode: memcpy(&u.sin6.sin6_port, addr + 19, 2); } break; -#endif case AF_INET: if (e == FTP_EPASSIVE_MODE) u.sin4.sin_port = htons(port); @@ -906,29 +862,24 @@ retry_mode: int arg; #endif int d; -#ifdef INET6 - char *ap; char hname[INET6_ADDRSTRLEN]; -#endif switch (u.ss.ss_family) { -#ifdef INET6 case AF_INET6: u.sin6.sin6_port = 0; #ifdef IPV6_PORTRANGE arg = low ? IPV6_PORTRANGE_DEFAULT : IPV6_PORTRANGE_HIGH; if (setsockopt(sd, IPPROTO_IPV6, IPV6_PORTRANGE, - (char *)&arg, sizeof(arg)) == -1) + &arg, (socklen_t)sizeof(arg)) == -1) goto sysouch; #endif break; -#endif case AF_INET: u.sin4.sin_port = 0; #ifdef IP_PORTRANGE arg = low ? IP_PORTRANGE_DEFAULT : IP_PORTRANGE_HIGH; if (setsockopt(sd, IPPROTO_IP, IP_PORTRANGE, - (char *)&arg, sizeof(arg)) == -1) + &arg, (socklen_t)sizeof(arg)) == -1) goto sysouch; #endif break; @@ -950,15 +901,13 @@ retry_mode: e = ftp_cmd(conn, "PORT %d,%d,%d,%d,%d,%d\r\n", (a >> 24) & 0xff, (a >> 16) & 0xff, (a >> 8) & 0xff, a & 0xff, - (p >> 8) & 0xff, p & 0xff); + ((unsigned int)p >> 8) & 0xff, p & 0xff); break; -#ifdef INET6 case AF_INET6: -#define UC(b) (((int)b)&0xff) e = -1; u.sin6.sin6_scope_id = 0; if (getnameinfo(&u.sa, l, - hname, sizeof(hname), + hname, (socklen_t)sizeof(hname), NULL, 0, NI_NUMERICHOST) == 0) { e = ftp_cmd(conn, "EPRT |%d|%s|%d|\r\n", 2, hname, htons(u.sin6.sin6_port)); @@ -966,20 +915,20 @@ retry_mode: goto ouch; } if (e != FTP_OK) { - ap = (char *)&u.sin6.sin6_addr; + uint8_t aa[sizeof(u.sin6.sin6_addr)]; + memcpy(aa, &u.sin6.sin6_addr, sizeof(aa)); + p = ntohs(u.sin6.sin6_port); e = ftp_cmd(conn, "LPRT %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n", 6, 16, - UC(ap[0]), UC(ap[1]), UC(ap[2]), UC(ap[3]), - UC(ap[4]), UC(ap[5]), UC(ap[6]), UC(ap[7]), - UC(ap[8]), UC(ap[9]), UC(ap[10]), UC(ap[11]), - UC(ap[12]), UC(ap[13]), UC(ap[14]), UC(ap[15]), + aa[ 0], aa[ 1], aa[ 2], aa[ 3], + aa[ 4], aa[ 5], aa[ 6], aa[ 7], + aa[ 8], aa[ 9], aa[10], aa[11], + aa[12], aa[13], aa[14], aa[15], 2, - (ntohs(u.sin6.sin6_port) >> 8) & 0xff, - ntohs(u.sin6.sin6_port) & 0xff); + ((unsigned int)p >> 8) & 0xff, p & 0xff); } break; -#endif default: e = FTP_PROTOCOL_ERROR; /* XXX: error code should be prepared */ goto ouch; @@ -987,17 +936,10 @@ retry_mode: if (e != FTP_OK) goto ouch; -#ifndef __minix /* seek to required offset */ if (offset) if (ftp_cmd(conn, "REST %llu\r\n", (unsigned long long)offset) != FTP_FILE_OK) goto sysouch; -#else -/* seek to required offset */ - if (offset) - if (ftp_cmd(conn, "REST %lu\r\n", (unsigned long)offset) != FTP_FILE_OK) - goto sysouch; -#endif /* make the server initiate the transfer */ if (verbose) @@ -1103,10 +1045,9 @@ ftp_connect(struct url *url, struct url *purl, const char *flags) verbose = CHECK_FLAG('v'); if (CHECK_FLAG('4')) af = AF_INET; -#ifdef INET6 else if (CHECK_FLAG('6')) af = AF_INET6; -#endif + if (direct) purl = NULL; @@ -1165,17 +1106,22 @@ static struct url * ftp_get_proxy(struct url * url, const char *flags) { struct url *purl; - char *p; + char *p, *fp, *FP, *hp, *HP; if (flags != NULL && strchr(flags, 'd') != NULL) - return (NULL); + return NULL; if (fetch_no_proxy_match(url->host)) - return (NULL); - if (((p = getenv("FTP_PROXY")) || (p = getenv("ftp_proxy")) || - (p = getenv("HTTP_PROXY")) || (p = getenv("http_proxy"))) && + return NULL; + + FP = getenv("FTP_PROXY"); + fp = getenv("ftp_proxy"); + HP = getenv("HTTP_PROXY"); + hp = getenv("http_proxy"); + + if ((((p = FP) || (p = fp) || (p = HP) || (p = hp))) && *p && (purl = fetchParseURL(p)) != NULL) { if (!*purl->scheme) { - if (getenv("FTP_PROXY") || getenv("ftp_proxy")) + if (fp || FP) strcpy(purl->scheme, SCHEME_FTP); else strcpy(purl->scheme, SCHEME_HTTP); @@ -1184,10 +1130,10 @@ ftp_get_proxy(struct url * url, const char *flags) purl->port = fetch_default_proxy_port(purl->scheme); if (strcasecmp(purl->scheme, SCHEME_FTP) == 0 || strcasecmp(purl->scheme, SCHEME_HTTP) == 0) - return (purl); + return purl; fetchFreeURL(purl); } - return (NULL); + return NULL; } /* diff --git a/minix/lib/libfetch/ftp.errors b/external/bsd/fetch/dist/libfetch/ftp.errors similarity index 96% rename from minix/lib/libfetch/ftp.errors rename to external/bsd/fetch/dist/libfetch/ftp.errors index e9c4950d3..0fd8fd786 100644 --- a/minix/lib/libfetch/ftp.errors +++ b/external/bsd/fetch/dist/libfetch/ftp.errors @@ -1,4 +1,4 @@ -# $NetBSD: ftp.errors,v 1.2 2008/10/06 12:58:29 joerg Exp $ +# $NetBSD: ftp.errors,v 1.1.1.4 2009/04/04 23:26:05 joerg Exp $ # $FreeBSD: ftp.errors,v 1.6 2002/10/30 06:06:16 des Exp $ # # This list is taken from RFC 959. diff --git a/minix/lib/libfetch/http.c b/external/bsd/fetch/dist/libfetch/http.c similarity index 95% rename from minix/lib/libfetch/http.c rename to external/bsd/fetch/dist/libfetch/http.c index a374d2405..5aac09007 100644 --- a/minix/lib/libfetch/http.c +++ b/external/bsd/fetch/dist/libfetch/http.c @@ -1,4 +1,4 @@ -/* $NetBSD: http.c,v 1.29 2010/01/24 19:10:35 joerg Exp $ */ +/* $NetBSD: http.c,v 1.2 2011/06/25 20:27:01 christos Exp $ */ /*- * Copyright (c) 2000-2004 Dag-Erling Coïdan Smørgrav * Copyright (c) 2003 Thomas Klausner @@ -68,15 +68,13 @@ #define _GNU_SOURCE #endif -#ifndef __minix /* Needed for gmtime_r on Interix */ #define _REENTRANT -#endif #if HAVE_CONFIG_H #include "config.h" #endif -#if !defined(NETBSD) && !defined(__minix) +#ifndef NETBSD #include #endif @@ -87,7 +85,7 @@ #include #include #include -#if !defined(NETBSD) && !defined(__minix) +#ifndef NETBSD #include #else #include @@ -100,7 +98,7 @@ #include #include -#if !defined(NETBSD) && !defined(__minix) +#ifndef NETBSD #include #else #include @@ -108,6 +106,7 @@ #include +#include "fetch.h" #include "common.h" #include "httperr.h" @@ -134,7 +133,6 @@ #define HTTP_ERROR(xyz) ((xyz) > 400 && (xyz) < 599) -#define MINBUFSIZE 4096 /***************************************************************************** * I/O functions for decoding chunked streams @@ -148,7 +146,7 @@ struct httpio char *buf; /* chunk buffer */ size_t bufsize; /* size of chunk buffer */ ssize_t buflen; /* amount of data currently in buffer */ - int bufpos; /* current read offset in buffer */ + size_t bufpos; /* current read offset in buffer */ int eof; /* end-of-file flag */ int error; /* error flag */ size_t chunksize; /* remaining size of current chunk */ @@ -158,7 +156,7 @@ struct httpio /* * Get next chunk header */ -static int +static ssize_t http_new_chunk(struct httpio *io) { char *p; @@ -207,7 +205,7 @@ http_growbuf(struct httpio *io, size_t len) /* * Fill the input buffer, do chunk decoding on the fly */ -static int +static ssize_t http_fillbuf(struct httpio *io, size_t len) { if (io->error) @@ -288,7 +286,7 @@ http_readfn(void *v, void *buf, size_t len) for (pos = 0; len > 0; pos += l, len -= l) { /* empty buffer */ - if (!io->buf || io->bufpos == io->buflen) + if (!io->buf || (ssize_t)io->bufpos == io->buflen) if (http_fillbuf(io, len) < 1) break; l = io->buflen - io->bufpos; @@ -327,7 +325,7 @@ http_closefn(void *v) val = 0; setsockopt(io->conn->sd, IPPROTO_TCP, TCP_NODELAY, &val, - sizeof(val)); + (socklen_t)sizeof(val)); fetch_cache_put(io->conn, fetch_close); #ifdef TCP_NOPUSH val = 1; @@ -406,17 +404,13 @@ static struct { /* * Send a formatted line; optionally echo to terminal */ -static int http_cmd(conn_t *conn, const char *fmt, ...) - __attribute__((__format__(__printf__, 2, 3))); - -#ifndef __minix static int http_cmd(conn_t *conn, const char *fmt, ...) { va_list ap; size_t len; char *msg; - int r; + ssize_t r; va_start(ap, fmt); len = vasprintf(&msg, fmt, ap); @@ -438,35 +432,7 @@ http_cmd(conn_t *conn, const char *fmt, ...) return (0); } -#else -static int -http_cmd(conn_t *conn, const char *fmt, ...) -{ - va_list ap; - size_t len; - char msg[MINBUFSIZE]; - int r; - - va_start(ap, fmt); - len = vsnprintf(&msg[0], MINBUFSIZE, fmt, ap); - va_end(ap); - - if (len >= MINBUFSIZE) { - errno = ENOMEM; - fetch_syserr(); - return (-1); - } - - r = fetch_write(conn, &msg[0], len); - if (r == -1) { - fetch_syserr(); - return (-1); - } - - return (0); -} -#endif /* * Get and parse status line */ @@ -638,7 +604,7 @@ http_base64(const char *src) "0123456789+/"; char *str, *dst; size_t l; - int t, r; + unsigned int t, r; l = strlen(src); if ((str = malloc(((l + 2) / 3) * 4 + 1)) == NULL) @@ -685,7 +651,6 @@ http_base64(const char *src) /* * Encode username and password */ -#ifndef __minix static int http_basic_auth(conn_t *conn, const char *hdr, const char *usr, const char *pwd) { @@ -702,24 +667,7 @@ http_basic_auth(conn_t *conn, const char *hdr, const char *usr, const char *pwd) free(auth); return (r); } -#else -static int -http_basic_auth(conn_t *conn, const char *hdr, const char *usr, const char *pwd) -{ - char upw[MINBUFSIZE], *auth; - int len, r; - len = snprintf(&upw[0], MINBUFSIZE, "%s:%s", usr, pwd); - if (len >= MINBUFSIZE) - return -1; - auth = http_base64(&upw[0]); - if (auth == NULL) - return (-1); - r = http_cmd(conn, "%s: Basic %s\r\n", hdr, auth); - free(auth); - return (r); -} -#endif /* * Send an authorization header */ @@ -996,13 +944,8 @@ http_request(struct url *URL, const char *op, struct url_stat *us, http_cmd(conn, "User-Agent: %s\r\n", p); else http_cmd(conn, "User-Agent: %s\r\n", _LIBFETCH_VER); -#ifndef __minix if (url->offset > 0) http_cmd(conn, "Range: bytes=%lld-\r\n", (long long)url->offset); -#else - if (url->offset > 0) - http_cmd(conn, "Range: bytes=%ld-\r\n", (long)url->offset); -#endif http_cmd(conn, "\r\n"); /* @@ -1019,7 +962,7 @@ http_request(struct url *URL, const char *op, struct url_stat *us, #endif val = 1; setsockopt(conn->sd, IPPROTO_TCP, TCP_NODELAY, &val, - sizeof(val)); + (socklen_t)sizeof(val)); /* get reply */ switch (http_get_reply(conn)) { @@ -1295,7 +1238,8 @@ fetchGetHTTP(struct url *URL, const char *flags) * Store a file by HTTP */ fetchIO * -fetchPutHTTP(struct url *URL, const char *flags) +/*ARGSUSED*/ +fetchPutHTTP(struct url *URL __unused, const char *flags __unused) { fprintf(stderr, "fetchPutHTTP(): not implemented\n"); return (NULL); @@ -1487,7 +1431,8 @@ static struct http_index_cache *index_cache; * List a directory */ int -fetchListHTTP(struct url_list *ue, struct url *url, const char *pattern, const char *flags) +/*ARGSUSED*/ +fetchListHTTP(struct url_list *ue, struct url *url, const char *pattern __unused, const char *flags) { fetchIO *f; char buf[2 * PATH_MAX]; diff --git a/minix/lib/libfetch/http.errors b/external/bsd/fetch/dist/libfetch/http.errors similarity index 94% rename from minix/lib/libfetch/http.errors rename to external/bsd/fetch/dist/libfetch/http.errors index 004aac27b..700f51c50 100644 --- a/minix/lib/libfetch/http.errors +++ b/external/bsd/fetch/dist/libfetch/http.errors @@ -1,5 +1,5 @@ # $FreeBSD: http.errors,v 1.5 2001/05/23 18:52:02 des Exp $ -# $NetBSD: http.errors,v 1.3 2009/02/05 16:59:45 joerg Exp $ +# $NetBSD: http.errors,v 1.1.1.5 2009/04/04 23:26:06 joerg Exp $ # # This list is taken from RFC 2068. # diff --git a/external/bsd/fetch/lib/Makefile b/external/bsd/fetch/lib/Makefile new file mode 100644 index 000000000..abb069a33 --- /dev/null +++ b/external/bsd/fetch/lib/Makefile @@ -0,0 +1,39 @@ +# $NetBSD: Makefile,v 1.8 2011/08/17 09:20:14 christos Exp $ + +LIB= fetch +SRCS= fetch.c common.c ftp.c http.c file.c +DPSRCS= ftperr.h httperr.h +INCS= fetch.h +INCSDIR= /usr/include +MAN= fetch.3 +CLEANFILES= ftperr.h httperr.h + +.include + +CPPFLAGS+= -I. +CPPFLAGS+= -DNETBSD +CPPFLAGS+= -DFTP_COMBINE_CWDS +CPPFLAGS+= -DINET6 + +.if (${MKCRYPTO} != "no") +CPPFLAGS+= -DWITH_SSL + +LDADD= -lssl -lcrypto + +LIBDPLIBS+= ssl ${NETBSDSRCDIR}/crypto/external/bsd/openssl/lib/libssl \ + crypto ${NETBSDSRCDIR}/crypto/external/bsd/openssl/lib/libcrypto +.endif + +CLEANFILES+= ftperr.h httperr.h + +.PATH: ${LIBFETCHDIR} + +ftperr.h: ${LIBFETCHDIR}/ftp.errors ${LIBFETCHDIR}/errlist.sh + ${HOST_SH} ${LIBFETCHDIR}/errlist.sh ftp_errlist FTP \ + ${LIBFETCHDIR}/ftp.errors > ${.TARGET} + +httperr.h: ${LIBFETCHDIR}/http.errors ${LIBFETCHDIR}/errlist.sh + ${HOST_SH} ${LIBFETCHDIR}/errlist.sh http_errlist HTTP \ + ${LIBFETCHDIR}/http.errors > ${.TARGET} + +.include diff --git a/external/bsd/fetch/lib/shlib_version b/external/bsd/fetch/lib/shlib_version new file mode 100644 index 000000000..c5a972db0 --- /dev/null +++ b/external/bsd/fetch/lib/shlib_version @@ -0,0 +1,6 @@ +# $NetBSD: shlib_version,v 1.3 2009/07/20 17:30:53 christos Exp $ +# Remember to update distrib/sets/lists/base/shl.* when changing +# + +major=3 +minor=0 diff --git a/lib/Makefile b/lib/Makefile index 936b1404e..139449be1 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -40,7 +40,6 @@ SUBDIR+= ../minix/lib/libasyn \ ../minix/lib/libddekit \ ../minix/lib/libdevman \ ../minix/lib/libexec \ - ../minix/lib/libfetch \ ../minix/lib/libfsdriver \ ../minix/lib/libinputdriver \ ../minix/lib/libminc \ @@ -248,7 +247,7 @@ SUBDIR+= ../crypto/external/bsd/netpgp/lib # depends on libcrypto, ... .endif SUBDIR+= ../external/bsd/libevent/lib # depends on libcrypto -#SUBDIR+= ../external/bsd/fetch/lib # depends on libssl +SUBDIR+= ../external/bsd/fetch/lib # depends on libssl .if (${MKLDAP} != "no") SUBDIR+= ../external/bsd/openldap/lib # depends on libcrypto, ... diff --git a/minix/include/Makefile b/minix/include/Makefile index 510fd5338..fbad7bc95 100644 --- a/minix/include/Makefile +++ b/minix/include/Makefile @@ -2,7 +2,7 @@ NOOBJ= # defined -INCS+= env.h fetch.h lib.h libutil.h varargs.h configfile.h +INCS+= env.h lib.h libutil.h varargs.h configfile.h .include diff --git a/minix/lib/Makefile b/minix/lib/Makefile index 752269a51..f470db834 100644 --- a/minix/lib/Makefile +++ b/minix/lib/Makefile @@ -12,7 +12,6 @@ SUBDIR+= libchardriver SUBDIR+= libddekit SUBDIR+= libdevman SUBDIR+= libexec -SUBDIR+= libfetch SUBDIR+= libfsdriver SUBDIR+= libinputdriver SUBDIR+= libminc diff --git a/minix/lib/libfetch/Makefile b/minix/lib/libfetch/Makefile deleted file mode 100644 index d69c95a2e..000000000 --- a/minix/lib/libfetch/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -# $NetBSD: Makefile,v 1.5 2010/02/24 22:00:51 joerg Exp $ - -LIB= fetch -SRCS= fetch.c common.c ftp.c http.c file.c -#DPSRCS= ftperr.h httperr.h -# CLEANFILES= ftperr.h httperr.h -MKLINT= no -MKPIC= no -MKPROFILE= no - -.include - -CPPFLAGS+= -I. -CPPFLAGS+= -D_LARGEFILE_SOURCE -D_LARGE_FILES - -FETCH_WITH_INET6?= no -FETCH_WITH_OPENSSL?= no - -.if !empty(FETCH_WITH_INET6:M[yY][eE][sS]) -CPPFLAGS+= -DINET6 -.endif - -.if !empty(FETCH_WITH_OPENSSL:M[yY][eE][sS]) -CPPFLAGS+= -DWITH_SSL -LDADD= -lssl -lcrypto -.endif - -CPPFLAGS+= -DFTP_COMBINE_CWDS - -# WARNS?= 4 - -#ftperr.h: ${.CURDIR}/ftp.errors ${.CURDIR}/Makefile ${.CURDIR}/errlist.sh -# ${.CURDIR}/errlist.sh ftp_errlist FTP \ -# ${.CURDIR}/ftp.errors > ${.TARGET} -# -#httperr.h: ${.CURDIR}/http.errors ${.CURDIR}/Makefile ${.CURDIR}/errlist.sh -# ${.CURDIR}/errlist.sh http_errlist HTTP \ -# ${.CURDIR}/http.errors > ${.TARGET} - -.include diff --git a/minix/lib/libfetch/fetch.cat3 b/minix/lib/libfetch/fetch.cat3 deleted file mode 100644 index f112d6a45..000000000 --- a/minix/lib/libfetch/fetch.cat3 +++ /dev/null @@ -1,526 +0,0 @@ -FETCH(3) NetBSD Library Functions Manual FETCH(3) - -NNAAMMEE - ffeettcchhMMaakkeeUURRLL, ffeettcchhPPaarrsseeUURRLL, ffeettcchhCCooppyyUURRLL, ffeettcchhFFrreeeeUURRLL, ffeettcchhXXGGeettUURRLL, - ffeettcchhGGeettUURRLL, ffeettcchhPPuuttUURRLL, ffeettcchhSSttaattUURRLL, ffeettcchhLLiissttUURRLL, ffeettcchhXXGGeett, - ffeettcchhGGeett, ffeettcchhPPuutt, ffeettcchhSSttaatt, ffeettcchhLLiisstt, ffeettcchhXXGGeettFFiillee, ffeettcchhGGeettFFiillee, - ffeettcchhPPuuttFFiillee, ffeettcchhSSttaattFFiillee, ffeettcchhLLiissttFFiillee, ffeettcchhXXGGeettHHTTTTPP, ffeettcchhGGeettHHTTTTPP, - ffeettcchhPPuuttHHTTTTPP, ffeettcchhSSttaattHHTTTTPP, ffeettcchhLLiissttHHTTTTPP, ffeettcchhXXGGeettFFTTPP, ffeettcchhGGeettFFTTPP, - ffeettcchhPPuuttFFTTPP, ffeettcchhSSttaattFFTTPP, ffeettcchhLLiissttFFTTPP ffeettcchhIInniittUURRLLLLiisstt, - ffeettcchhFFrreeeeUURRLLLLiisstt, ffeettcchhUUnnqquuootteePPaatthh, ffeettcchhUUnnqquuootteeFFiilleennaammee, - ffeettcchhSSttrriinnggiiffyyUURRLL, ffeettcchhCCoonnnneeccttiioonnCCaacchheeIInniitt, ffeettcchhCCoonnnneeccttiioonnCCaacchheeCClloossee, - ffeettcchh -- file transfer functions - -LLIIBBRRAARRYY - File Transfer Library for URLs (libfetch, -lfetch) - -SSYYNNOOPPSSIISS - ##iinncclluuddee <> - ##iinncclluuddee <> - - _s_t_r_u_c_t _u_r_l _* - ffeettcchhMMaakkeeUURRLL(_c_o_n_s_t _c_h_a_r _*_s_c_h_e_m_e, _c_o_n_s_t _c_h_a_r _*_h_o_s_t, _i_n_t _p_o_r_t, - _c_o_n_s_t _c_h_a_r _*_d_o_c, _c_o_n_s_t _c_h_a_r _*_u_s_e_r, _c_o_n_s_t _c_h_a_r _*_p_w_d); - - _s_t_r_u_c_t _u_r_l _* - ffeettcchhPPaarrsseeUURRLL(_c_o_n_s_t _c_h_a_r _*_U_R_L); - - _s_t_r_u_c_t _u_r_l _* - ffeettcchhCCooppyyUURRLL(_c_o_n_s_t _s_t_r_u_c_t _u_r_l _*_u); - - _v_o_i_d - ffeettcchhFFrreeeeUURRLL(_s_t_r_u_c_t _u_r_l _*_u); - - _f_e_t_c_h_I_O _* - ffeettcchhXXGGeettUURRLL(_c_o_n_s_t _c_h_a_r _*_U_R_L, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhGGeettUURRLL(_c_o_n_s_t _c_h_a_r _*_U_R_L, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhPPuuttUURRLL(_c_o_n_s_t _c_h_a_r _*_U_R_L, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhSSttaattUURRLL(_c_o_n_s_t _c_h_a_r _*_U_R_L, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhLLiissttUURRLL(_s_t_r_u_c_t _u_r_l___l_i_s_t _*_l_i_s_t, _c_o_n_s_t _c_h_a_r _*_U_R_L, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhXXGGeett(_s_t_r_u_c_t _u_r_l _*_u, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhGGeett(_s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhPPuutt(_s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhSSttaatt(_s_t_r_u_c_t _u_r_l _*_u, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhLLiisstt(_s_t_r_u_c_t _u_r_l___l_i_s_t _*_l_i_s_t, _s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhXXGGeettFFiillee(_s_t_r_u_c_t _u_r_l _*_u, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhGGeettFFiillee(_s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhPPuuttFFiillee(_s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhSSttaattFFiillee(_s_t_r_u_c_t _u_r_l _*_u, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhLLiissttFFiillee(_s_t_r_u_c_t _u_r_l___l_i_s_t _*_l_i_s_t, _s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhXXGGeettHHTTTTPP(_s_t_r_u_c_t _u_r_l _*_u, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhGGeettHHTTTTPP(_s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhPPuuttHHTTTTPP(_s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhSSttaattHHTTTTPP(_s_t_r_u_c_t _u_r_l _*_u, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhLLiissttHHTTTTPP(_s_t_r_u_c_t _u_r_l___l_i_s_t _*_l_i_s_t, _s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhXXGGeettFFTTPP(_s_t_r_u_c_t _u_r_l _*_u, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhGGeettFFTTPP(_s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _f_e_t_c_h_I_O _* - ffeettcchhPPuuttFFTTPP(_s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhSSttaattFFTTPP(_s_t_r_u_c_t _u_r_l _*_u, _s_t_r_u_c_t _u_r_l___s_t_a_t _*_u_s, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _i_n_t - ffeettcchhLLiissttFFTTPP(_s_t_r_u_c_t _u_r_l___l_i_s_t _*_l_i_s_t, _s_t_r_u_c_t _u_r_l _*_u, _c_o_n_s_t _c_h_a_r _*_f_l_a_g_s); - - _v_o_i_d - ffeettcchhIInniittUURRLLLLiisstt(_s_t_r_u_c_t _u_r_l___l_i_s_t _*_u_l); - - _i_n_t - ffeettcchhAAppppeennddUURRLLLLiisstt(_s_t_r_u_c_t _u_r_l___l_i_s_t _*_d_s_t, _c_o_n_s_t _s_t_r_u_c_t _u_r_l___l_i_s_t _*_s_r_c); - - _v_o_i_d - ffeettcchhFFrreeeeUURRLLLLiisstt(_s_t_r_u_c_t _u_r_l___l_i_s_t _*_u_l); - - _c_h_a_r _* - ffeettcchhUUnnqquuootteePPaatthh(_s_t_r_u_c_t _u_r_l _*_u); - - _c_h_a_r _* - ffeettcchhUUnnqquuootteeFFiilleennaammee(_s_t_r_u_c_t _u_r_l _*_u); - - _c_h_a_r _* - ffeettcchhSSttrriinnggiiffyyUURRLL(_c_o_n_s_t _s_t_r_u_c_t _u_r_l _*_u); - - _v_o_i_d - ffeettcchhCCoonnnneeccttiioonnCCaacchheeIInniitt(_i_n_t _g_l_o_b_a_l, _i_n_t _p_e_r___h_o_s_t); - - _v_o_i_d - ffeettcchhCCoonnnneeccttiioonnCCaacchheeCClloossee(_v_o_i_d); - -DDEESSCCRRIIPPTTIIOONN - These functions implement a high-level library for retrieving and upload- - ing files using Uniform Resource Locators (URLs). - - 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 RFC 1738. A regular expression which produces - this syntax is: - - :(//((:)?@)?(:)?)?/()? - - If the URL does not seem to begin with a scheme name, it is assumed to be - a local path. Only absolute path names are accepted. - - Note that some components of the URL are not necessarily relevant to all - URL schemes. For instance, the file scheme only needs the and - components. ffeettcchhPPaarrsseeUURRLL() quotes any unsafe character in - 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 - _u_r_l structure, which is defined as follows in <_f_e_t_c_h_._h>: - - #define URL_SCHEMELEN 16 - #define URL_USERLEN 256 - #define URL_PWDLEN 256 - #define URL_HOSTLEN 255 - - struct url { - char scheme[URL_SCHEMELEN + 1]; - char user[URL_USERLEN + 1]; - char pwd[URL_PWDLEN + 1]; - char host[URL_HOSTLEN + 1]; - int port; - char *doc; - off_t offset; - size_t length; - time_t last_modified; - }; - - The pointer returned by ffeettcchhMMaakkeeUURRLL(), ffeettcchhCCooppyyUURRLL(), and - ffeettcchhPPaarrsseeUURRLL() should be freed using ffeettcchhFFrreeeeUURRLL(). The size of _s_t_r_u_c_t - _U_R_L is not part of the ABI. - - ffeettcchhXXGGeettUURRLL(), ffeettcchhGGeettUURRLL(), and ffeettcchhPPuuttUURRLL() constitute the recom- - mended interface to the ffeettcchh library. They examine the URL passed to - them to determine the transfer method, and call the appropriate lower- - level functions to perform the actual transfer. ffeettcchhXXGGeettUURRLL() also - returns the remote document's metadata in the _u_r_l___s_t_a_t structure pointed - to by the _u_s argument. - - The _f_l_a_g_s argument is a string of characters which specify transfer - options. The meaning of the individual flags is scheme-dependent, and is - detailed in the appropriate section below. - - ffeettcchhSSttaattUURRLL() attempts to obtain the requested document's metadata and - fill in the structure pointed to by its second argument. The _u_r_l___s_t_a_t - structure is defined as follows in <_f_e_t_c_h_._h>: - - struct url_stat { - off_t size; - time_t atime; - time_t mtime; - }; - - If the size could not be obtained from the server, the _s_i_z_e field is set - to -1. If the modification time could not be obtained from the server, - the _m_t_i_m_e field is set to the epoch. If the access time could not be - obtained from the server, the _a_t_i_m_e field is set to the modification - time. - - ffeettcchhLLiissttUURRLL() attempts to list the contents of the directory pointed to - by the URL provided. The pattern can be a simple glob-like expression as - hint. Callers should not depend on the server to filter names. If suc- - cessful, it appends the list of entries to the _u_r_l___l_i_s_t structure. The - _u_r_l___l_i_s_t structure is defined as follows in <_f_e_t_c_h_._h>: - - struct url_list { - size_t length; - size_t alloc_size; - struct url *urls; - }; - - The list should be initialized by calling ffeettcchhIInniittUURRLLLLiisstt() and the - entries be freed by calling ffeettcchhFFrreeeeUURRLLLLiisstt(). The function - ffeettcchhAAppppeennddUURRLLLLiisstt() can be used to append one URL lists to another. If - the `c' (cache result) flag is specified, the library is allowed to - internally cache the result. - - 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(), - and ffeettcchhUUnnqquuootteeFFiilleennaammee() return a string that should be deallocated - with ffrreeee() after use. - - ffeettcchhCCoonnnneeccttiioonnCCaacchheeIInniitt() enables the connection cache. The first argu- - ment specifies the global limit on cached connections. The second argu- - ment specifies the host limit. Entries are considered to specify the - same host, if the host name from the URL is identical, indepent of the - address or address family. ffeettcchhCCoonnnneeccttiioonnCCaacchheeCClloossee() flushed the con- - nection cache and closes all cached connections. - - 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 - 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- - erally be assumed that a stream returned by one of the ffeettcchhXXGGeettXXXXXX() or - ffeettcchhGGeettXXXXXX() functions is read-only, and that a stream returned by one - of the ffeettcchhPPuuttXXXXXX() functions is write-only. - -PPRROOTTOOCCOOLL IINNDDEEPPEENNDDEENNTT FFLLAAGGSS - If the `i' (if-modified-since) flag is specified, the library will try to - fetch the content only if it is newer than _l_a_s_t___m_o_d_i_f_i_e_d. For HTTP an - If-Modified-Since HTTP header is sent. For FTP a MTDM command is sent - first and compared locally. For FILE the source file is compared. - -FFIILLEE SSCCHHEEMMEE - ffeettcchhXXGGeettFFiillee(), ffeettcchhGGeettFFiillee(), and ffeettcchhPPuuttFFiillee() provide access to - documents which are files in a locally mounted file system. Only the - component of the URL is used. - - ffeettcchhXXGGeettFFiillee() and ffeettcchhGGeettFFiillee() do not accept any flags. - - ffeettcchhPPuuttFFiillee() accepts the `a' (append to file) flag. If that flag is - specified, the data written to the stream returned by ffeettcchhPPuuttFFiillee() will - be appended to the previous contents of the file, instead of replacing - them. - -FFTTPP SSCCHHEEMMEE - ffeettcchhXXGGeettFFTTPP(), ffeettcchhGGeettFFTTPP(), and ffeettcchhPPuuttFFTTPP() implement the FTP proto- - col as described in RFC 959. - - 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 - ffeettcchhPPuuttFFTTPP() will use a direct connection even if a proxy server is - defined. - - If no user name or password is given, the ffeettcchh library will attempt an - anonymous login, with user name "anonymous" and password "anony- - mous@". - -HHTTTTPP SSCCHHEEMMEE - 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 RFC 2616 and RFC 2617. - - If the `d' (direct) flag is specified, ffeettcchhXXGGeettHHTTTTPP(), ffeettcchhGGeettHHTTTTPP(), - and ffeettcchhPPuuttHHTTTTPP() will use a direct connection even if a proxy server is - defined. - - Since there seems to be no good way of implementing the HTTP PUT method - in a manner consistent with the rest of the ffeettcchh library, ffeettcchhPPuuttHHTTTTPP() - is currently unimplemented. - -AAUUTTHHEENNTTIICCAATTIIOONN - Apart from setting the appropriate environment variables and specifying - the user name and password in the URL or the _s_t_r_u_c_t _u_r_l, the calling pro- - gram has the option of defining an authentication function with the fol- - lowing prototype: - - _i_n_t mmyyAAuutthhMMeetthhoodd(_s_t_r_u_c_t _u_r_l _*_u) - - The callback function should fill in the _u_s_e_r and _p_w_d fields in the pro- - vided _s_t_r_u_c_t _u_r_l and return 0 on success, or any other value to indicate - failure. - - To register the authentication callback, simply set _f_e_t_c_h_A_u_t_h_M_e_t_h_o_d to - point at it. The callback will be used whenever a site requires authen- - tication and the appropriate environment variables are not set. - - This interface is experimental and may be subject to change. - -RREETTUURRNN VVAALLUUEESS - ffeettcchhPPaarrsseeUURRLL() returns a pointer to a _s_t_r_u_c_t _u_r_l containing the individ- - ual components of the URL. If it is unable to allocate memory, or the - URL is syntactically incorrect, ffeettcchhPPaarrsseeUURRLL() returns a NULL pointer. - - The ffeettcchhSSttaatt() functions return 0 on success and -1 on failure. - - All other functions return a stream pointer which may be used to access - the requested document, or NULL if an error occurred. - - The following error codes are defined in <_f_e_t_c_h_._h>: - - [FETCH_ABORT] Operation aborted - - [FETCH_AUTH] Authentication failed - - [FETCH_DOWN] Service unavailable - - [FETCH_EXISTS] File exists - - [FETCH_FULL] File system full - - [FETCH_INFO] Informational response - - [FETCH_MEMORY] Insufficient memory - - [FETCH_MOVED] File has moved - - [FETCH_NETWORK] Network error - - [FETCH_OK] No error - - [FETCH_PROTO] Protocol error - - [FETCH_RESOLV] Resolver error - - [FETCH_SERVER] Server error - - [FETCH_TEMP] Temporary error - - [FETCH_TIMEOUT] Operation timed out - - [FETCH_UNAVAIL] File is not available - - [FETCH_UNKNOWN] Unknown error - - [FETCH_URL] Invalid URL - - The accompanying error message includes a protocol-specific error code - and message, e.g. "File is not available (404 Not Found)" - -EENNVVIIRROONNMMEENNTT - 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. - - FTP_PASSIVE_MODE If set to anything but `no', forces the FTP code to - use passive mode. - - FTP_PASSWORD Default FTP password if the remote server requests - one and none was provided in the URL. - - FTP_PROXY URL of the proxy to use for FTP requests. The docu- - ment part is ignored. FTP and HTTP proxies are sup- - ported; if no scheme is specified, FTP is assumed. - If the proxy is an FTP proxy, lliibbffeettcchh will send - `user@host' as user name to the proxy, where `user' - is the real user name, and `host' is the name of the - FTP server. - - If this variable is set to an empty string, no proxy - will be used for FTP requests, even if the HTTP_PROXY - variable is set. - - ftp_proxy Same as FTP_PROXY, for compatibility. - - HTTP_AUTH Specifies HTTP authorization parameters as a colon- - separated list of items. The first and second item - are the authorization scheme and realm respectively; - further items are scheme-dependent. Currently, only - basic authorization is supported. - - Basic authorization requires two parameters: the user - name and password, in that order. - - This variable is only used if the server requires - authorization and no user name or password was speci- - fied in the URL. - - HTTP_PROXY URL of the proxy to use for HTTP requests. The docu- - ment part is ignored. Only HTTP proxies are sup- - ported for HTTP requests. If no port number is spec- - ified, the default is 3128. - - Note that this proxy will also be used for FTP docu- - ments, unless the FTP_PROXY variable is set. - - http_proxy Same as HTTP_PROXY, for compatibility. - - HTTP_PROXY_AUTH Specifies authorization parameters for the HTTP proxy - in the same format as the HTTP_AUTH variable. - - This variable is used if and only if connected to an - HTTP proxy, and is ignored if a user and/or a pass- - word were specified in the proxy URL. - - HTTP_REFERER Specifies the referrer URL to use for HTTP requests. - If set to ``auto'', the document URL will be used as - referrer URL. - - HTTP_USER_AGENT Specifies the User-Agent string to use for HTTP - requests. This can be useful when working with HTTP - origin or proxy servers that differentiate between - user agents. - - NETRC Specifies a file to use instead of _~_/_._n_e_t_r_c to look - up login names and passwords for FTP sites. See - ftp(1) for a description of the file format. This - feature is experimental. - - NO_PROXY Either a single asterisk, which disables the use of - proxies altogether, or a comma- or whitespace-sepa- - rated list of hosts for which proxies should not be - used. - - no_proxy Same as NO_PROXY, for compatibility. - -EEXXAAMMPPLLEESS - To access a proxy server on _p_r_o_x_y_._e_x_a_m_p_l_e_._c_o_m port 8080, set the - HTTP_PROXY environment variable in a manner similar to this: - - HTTP_PROXY=http://proxy.example.com:8080 - - If the proxy server requires authentication, there are two options avail- - able for passing the authentication data. The first method is by using - the proxy URL: - - HTTP_PROXY=http://:@proxy.example.com:8080 - - The second method is by using the HTTP_PROXY_AUTH environment variable: - - HTTP_PROXY=http://proxy.example.com:8080 - HTTP_PROXY_AUTH=basic:*:: - - To disable the use of a proxy for an HTTP server running on the local - host, define NO_PROXY as follows: - - NO_PROXY=localhost,127.0.0.1 - -SSEEEE AALLSSOO - 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, 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, - 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, 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, - 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, RFC 2617. - -HHIISSTTOORRYY - The ffeettcchh library first appeared in FreeBSD 3.0. - -AAUUTTHHOORRSS - The ffeettcchh library was mostly written by Dag-Erling Smørgrav - with numerous suggestions from Jordan K. Hubbard - , Eugene Skepner and other FreeBSD develop- - ers. It replaces the older ffttppiioo library written by Poul-Henning Kamp - and Jordan K. Hubbard . - - This manual page was written by Dag-Erling Smørgrav . - -BBUUGGSS - Some parts of the library are not yet implemented. The most notable - examples of this are ffeettcchhPPuuttHHTTTTPP() and FTP proxy support. - - There is no way to select a proxy at run-time other than setting the - HTTP_PROXY or FTP_PROXY environment variables as appropriate. - - lliibbffeettcchh does not understand or obey 305 (Use Proxy) replies. - - Error numbers are unique only within a certain context; the error codes - used for FTP and HTTP overlap, as do those used for resolver and system - errors. For instance, error code 202 means "Command not implemented, - superfluous at this site" in an FTP context and "Accepted" in an HTTP - context. - - ffeettcchhSSttaattFFTTPP() does not check that the result of an MDTM command is a - valid date. - - The man page is incomplete, poorly written and produces badly formatted - text. - - The error reporting mechanism is unsatisfactory. - - Some parts of the code are not fully reentrant. - -NetBSD 5.0 January 22, 2010 NetBSD 5.0 diff --git a/minix/lib/libfetch/ftperr.h b/minix/lib/libfetch/ftperr.h deleted file mode 100644 index 272add64c..000000000 --- a/minix/lib/libfetch/ftperr.h +++ /dev/null @@ -1,45 +0,0 @@ -static struct fetcherr ftp_errlist[] = { - { 110, FETCH_OK, "Restart marker reply" }, - { 120, FETCH_TEMP, "Service ready in a few minutes" }, - { 125, FETCH_OK, "Data connection already open; transfer starting" }, - { 150, FETCH_OK, "File status okay; about to open data connection" }, - { 200, FETCH_OK, "Command okay" }, - { 202, FETCH_PROTO, "Command not implemented, superfluous at this site" }, - { 211, FETCH_INFO, "System status, or system help reply" }, - { 212, FETCH_INFO, "Directory status" }, - { 213, FETCH_INFO, "File status" }, - { 214, FETCH_INFO, "Help message" }, - { 215, FETCH_INFO, "Set system type" }, - { 220, FETCH_OK, "Service ready for new user" }, - { 221, FETCH_OK, "Service closing control connection" }, - { 225, FETCH_OK, "Data connection open; no transfer in progress" }, - { 226, FETCH_OK, "Requested file action successful" }, - { 227, FETCH_OK, "Entering Passive Mode" }, - { 229, FETCH_OK, "Entering Extended Passive Mode" }, - { 230, FETCH_OK, "User logged in, proceed" }, - { 250, FETCH_OK, "Requested file action okay, completed" }, - { 257, FETCH_OK, "File/directory created" }, - { 331, FETCH_AUTH, "User name okay, need password" }, - { 332, FETCH_AUTH, "Need account for login" }, - { 350, FETCH_OK, "Requested file action pending further information" }, - { 421, FETCH_DOWN, "Service not available, closing control connection" }, - { 425, FETCH_NETWORK, "Can't open data connection" }, - { 426, FETCH_ABORT, "Connection closed; transfer aborted" }, - { 450, FETCH_UNAVAIL, "File unavailable (e.g., file busy)" }, - { 451, FETCH_SERVER, "Requested action aborted: local error in processing" }, - { 452, FETCH_FULL, "Insufficient storage space in system" }, - { 500, FETCH_PROTO, "Syntax error, command unrecognized" }, - { 501, FETCH_PROTO, "Syntax error in parameters or arguments" }, - { 502, FETCH_PROTO, "Command not implemented" }, - { 503, FETCH_PROTO, "Bad sequence of commands" }, - { 504, FETCH_PROTO, "Command not implemented for that parameter" }, - { 530, FETCH_AUTH, "Not logged in" }, - { 532, FETCH_AUTH, "Need account for storing files" }, - { 535, FETCH_PROTO, "Bug in MediaHawk Video Kernel FTP server" }, - { 550, FETCH_UNAVAIL, "File unavailable (e.g., file not found, no access)" }, - { 551, FETCH_PROTO, "Requested action aborted. Page type unknown" }, - { 552, FETCH_FULL, "Exceeded storage allocation" }, - { 553, FETCH_EXISTS, "File name not allowed" }, - { 999, FETCH_PROTO, "Protocol error" }, - { -1, FETCH_UNKNOWN, "Unknown FTP error" } -}; diff --git a/minix/lib/libfetch/httperr.h b/minix/lib/libfetch/httperr.h deleted file mode 100644 index 6a00dbedd..000000000 --- a/minix/lib/libfetch/httperr.h +++ /dev/null @@ -1,44 +0,0 @@ -static struct fetcherr http_errlist[] = { - { 100, FETCH_OK, "Continue" }, - { 101, FETCH_OK, "Switching Protocols" }, - { 200, FETCH_OK, "OK" }, - { 201, FETCH_OK, "Created" }, - { 202, FETCH_OK, "Accepted" }, - { 203, FETCH_INFO, "Non-Authoritative Information" }, - { 204, FETCH_OK, "No Content" }, - { 205, FETCH_OK, "Reset Content" }, - { 206, FETCH_OK, "Partial Content" }, - { 300, FETCH_MOVED, "Multiple Choices" }, - { 301, FETCH_MOVED, "Moved Permanently" }, - { 302, FETCH_MOVED, "Moved Temporarily" }, - { 303, FETCH_MOVED, "See Other" }, - { 304, FETCH_UNCHANGED, "Not Modified" }, - { 305, FETCH_INFO, "Use Proxy" }, - { 307, FETCH_MOVED, "Temporary Redirect" }, - { 400, FETCH_PROTO, "Bad Request" }, - { 401, FETCH_AUTH, "Unauthorized" }, - { 402, FETCH_AUTH, "Payment Required" }, - { 403, FETCH_AUTH, "Forbidden" }, - { 404, FETCH_UNAVAIL, "Not Found" }, - { 405, FETCH_PROTO, "Method Not Allowed" }, - { 406, FETCH_PROTO, "Not Acceptable" }, - { 407, FETCH_AUTH, "Proxy Authentication Required" }, - { 408, FETCH_TIMEOUT, "Request Time-out" }, - { 409, FETCH_EXISTS, "Conflict" }, - { 410, FETCH_UNAVAIL, "Gone" }, - { 411, FETCH_PROTO, "Length Required" }, - { 412, FETCH_SERVER, "Precondition Failed" }, - { 413, FETCH_PROTO, "Request Entity Too Large" }, - { 414, FETCH_PROTO, "Request-URI Too Large" }, - { 415, FETCH_PROTO, "Unsupported Media Type" }, - { 416, FETCH_UNAVAIL, "Requested Range Not Satisfiable" }, - { 417, FETCH_SERVER, "Expectation Failed" }, - { 500, FETCH_SERVER, "Internal Server Error" }, - { 501, FETCH_PROTO, "Not Implemented" }, - { 502, FETCH_SERVER, "Bad Gateway" }, - { 503, FETCH_TEMP, "Service Unavailable" }, - { 504, FETCH_TIMEOUT, "Gateway Time-out" }, - { 505, FETCH_PROTO, "HTTP Version not supported" }, - { 999, FETCH_PROTO, "Protocol error" }, - { -1, FETCH_UNKNOWN, "Unknown HTTP error" } -};