libfetch: sync with freebsd
authorJoris Giovannangeli <joris@giovannangeli.fr>
Thu, 5 Jun 2014 13:34:12 +0000 (15:34 +0200)
committerJoris Giovannangeli <joris@giovannangeli.fr>
Thu, 5 Jun 2014 13:42:04 +0000 (15:42 +0200)
lib/libfetch/common.c
lib/libfetch/common.h
lib/libfetch/fetch.3
lib/libfetch/http.c

index fd87ef2..4d63eda 100644 (file)
  * 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: head/lib/libfetch/common.c 261284 2014-01-30 08:37:23Z des $
+ * $FreeBSD: head/lib/libfetch/common.c 266291 2014-05-17 03:39:56Z des $
  */
 
+#include <sys/cdefs.h>
 #include <sys/param.h>
 #include <sys/socket.h>
 #include <sys/time.h>
@@ -687,6 +687,8 @@ fetch_ssl_setup_transport_layer(SSL_CTX *ctx, int verbose)
 /*
  * Configure peer verification based on environment.
  */
+#define LOCAL_CERT_FILE        "/usr/local/etc/ssl/cert.pem"
+#define BASE_CERT_FILE  "/etc/ssl/cert.pem"
 static int
 fetch_ssl_setup_peer_verification(SSL_CTX *ctx, int verbose)
 {
@@ -695,8 +697,12 @@ fetch_ssl_setup_peer_verification(SSL_CTX *ctx, int verbose)
        const char *ca_cert_file, *ca_cert_path, *crl_file;
 
        if (getenv("SSL_NO_VERIFY_PEER") == NULL) {
-               ca_cert_file = getenv("SSL_CA_CERT_FILE") != NULL ?
-                   getenv("SSL_CA_CERT_FILE") : "/etc/ssl/cert.pem";
+               ca_cert_file = getenv("SSL_CA_CERT_FILE");
+               if (ca_cert_file == NULL &&
+                   access(LOCAL_CERT_FILE, R_OK) == 0)
+                       ca_cert_file = LOCAL_CERT_FILE;
+               if (ca_cert_file == NULL)
+                       ca_cert_file = BASE_CERT_FILE;
                ca_cert_path = getenv("SSL_CA_CERT_PATH");
                if (verbose) {
                        fetch_info("Peer verification enabled");
@@ -982,26 +988,26 @@ fetch_read(conn_t *conn, char *buf, size_t len)
                        return (-1);
                }
                // assert(rlen == FETCH_READ_WAIT);
-                       if (fetchTimeout > 0) {
-                               gettimeofday(&now, NULL);
-                               if (!timercmp(&timeout, &now, >)) {
-                                       errno = ETIMEDOUT;
-                                       fetch_syserr();
-                                       return (-1);
-                               }
-                               timersub(&timeout, &now, &delta);
+               if (fetchTimeout > 0) {
+                       gettimeofday(&now, NULL);
+                       if (!timercmp(&timeout, &now, >)) {
+                               errno = ETIMEDOUT;
+                               fetch_syserr();
+                               return (-1);
+                       }
+                       timersub(&timeout, &now, &delta);
                        deltams = delta.tv_sec * 1000 +
                            delta.tv_usec / 1000;;
-                       }
-                       errno = 0;
+               }
+               errno = 0;
                pfd.revents = 0;
                if (poll(&pfd, 1, deltams) < 0) {
                        if (errno == EINTR && fetchRestartCalls)
-                                               continue;
-                               fetch_syserr();
-                               return (-1);
-                       }
+                               continue;
+                       fetch_syserr();
+                       return (-1);
                }
+       }
        return (rlen);
 }
 
index 9a90357..4dc9fff 100644 (file)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 1998-2014 Dag-Erling Smørgrav
+ * Copyright (c) 1998-2014 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
index 5136ede..135dd74 100644 (file)
@@ -128,7 +128,7 @@ uploading files using Uniform Resource Locators (URLs).
 .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.
+detailed in RFC1738.
 A regular expression which produces this syntax is:
 .Bd -literal
     <scheme>:(//(<user>(:<pwd>)?@)?<host>(:<port>)?)?/(<document>)?
@@ -316,7 +316,7 @@ replacing them.
 .Fn fetchGetFTP
 and
 .Fn fetchPutFTP
-implement the FTP protocol as described in RFC 959.
+implement the FTP protocol as described in RFC959.
 .Pp
 If the
 .Ql P
@@ -360,7 +360,7 @@ 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.
+even a chance that they comply with RFC2616 and RFC2617.
 .Pp
 If the
 .Ql d
@@ -721,7 +721,7 @@ SSL_CA_CERT_FILE=/path/to/myca.pem
 .%A J. K. Reynolds
 .%D October 1985
 .%B File Transfer Protocol
-.%O RFC 959
+.%O RFC959
 .Re
 .Rs
 .%A P. Deutsch
@@ -729,7 +729,7 @@ SSL_CA_CERT_FILE=/path/to/myca.pem
 .%A A. Marine.
 .%D May 1994
 .%T How to Use Anonymous FTP
-.%O RFC 1635
+.%O RFC1635
 .Re
 .Rs
 .%A T. Berners-Lee
@@ -737,7 +737,7 @@ SSL_CA_CERT_FILE=/path/to/myca.pem
 .%A M. McCahill
 .%D December 1994
 .%T Uniform Resource Locators (URL)
-.%O RFC 1738
+.%O RFC1738
 .Re
 .Rs
 .%A R. Fielding
@@ -749,7 +749,7 @@ SSL_CA_CERT_FILE=/path/to/myca.pem
 .%A T. Berners-Lee
 .%D January 1999
 .%B Hypertext Transfer Protocol -- HTTP/1.1
-.%O RFC 2616
+.%O RFC2616
 .Re
 .Rs
 .%A J. Franks
@@ -761,7 +761,7 @@ SSL_CA_CERT_FILE=/path/to/myca.pem
 .%A L. Stewart
 .%D June 1999
 .%B HTTP Authentication: Basic and Digest Access Authentication
-.%O RFC 2617
+.%O RFC2617
 .Re
 .Sh HISTORY
 The
@@ -822,6 +822,10 @@ implemented, superfluous at this site" in an FTP context and
 .Fn fetchStatFTP
 does not check that the result of an MDTM command is a valid date.
 .Pp
+In case password protected keys are used for client certificate based
+authentication the user is prompted for the password on each and every
+fetch operation.
+.Pp
 The man page is incomplete, poorly written and produces badly
 formatted text.
 .Pp
index 42c0595..b48d895 100644 (file)
@@ -277,8 +277,8 @@ http_readfn(void *v, char *buf, int len)
        if (!io->buf || io->bufpos == io->buflen) {
                if ((rlen = http_fillbuf(io, len)) < 0) {
                        if ((errno = io->error) == EINTR)
-                       io->error = 0;
-               return (-1);
+                               io->error = 0;
+                       return (-1);
                } else if (rlen == 0) {
                        return (0);
        }