Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Try to make libfecth more portable
Vsevolod Stakhov committed 11 years ago
commit 2d62e8010782cb394297c9d649890d473252dbd2
parent 64a2425
6 files changed +30 -11
modified external/Makefile.am
@@ -243,7 +243,7 @@ libsqlite_static_la_SOURCES= $(libsqlite_la_SOURCES)
libsqlite_static_la_CFLAGS=	$(sqlite_common_cflags) -static
libsqlite_static_la_LDFLAGS=	-all-static

-
libfetch_common_cflags=	-DWITH_SSL -Wno-pointer-sign
+
libfetch_common_cflags=	-I$(top_srcdir)/compat -DWITH_SSL -Wno-pointer-sign
libfetch_la_CFLAGS=	$(libfetch_common_cflags) -shared
libfetch_la_SOURCES=	libfetch/common.c \
			libfetch/fetch.c \
modified external/libfetch/common.c
@@ -28,6 +28,8 @@
 */

#include <sys/cdefs.h>
+
#include "bsd_compat.h"
+

__FBSDID("$FreeBSD: head/lib/libfetch/common.c 273124 2014-10-15 07:35:50Z des $");

#include <sys/param.h>
@@ -224,7 +226,9 @@ fetch_reopen(int sd)
	if ((conn = calloc(1, sizeof(*conn))) == NULL)
		return (NULL);
	fcntl(sd, F_SETFD, FD_CLOEXEC);
+
#ifdef SO_NOSIGPIPE
	setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof opt);
+
#endif
	conn->sd = sd;
	++conn->ref;
	return (conn);
modified external/libfetch/fetch.c
@@ -27,6 +27,7 @@
 */

#include <sys/cdefs.h>
+
#include "bsd_compat.h"
__FBSDID("$FreeBSD: head/lib/libfetch/fetch.c 252375 2013-06-29 15:51:27Z kientzle $");

#include <sys/param.h>
modified external/libfetch/file.c
@@ -27,6 +27,7 @@
 */

#include <sys/cdefs.h>
+
#include "bsd_compat.h"
__FBSDID("$FreeBSD: head/lib/libfetch/file.c 240495 2012-09-14 12:15:13Z eadler $");

#include <sys/param.h>
modified external/libfetch/ftp.c
@@ -27,6 +27,7 @@
 */

#include <sys/cdefs.h>
+
#include "bsd_compat.h"
__FBSDID("$FreeBSD: head/lib/libfetch/ftp.c 226537 2011-10-19 11:43:51Z des $");

/*
@@ -133,7 +134,9 @@ unmappedaddr(struct sockaddr_in6 *sin6)
	sin4->sin_addr.s_addr = addr;
	sin4->sin_port = port;
	sin4->sin_family = AF_INET;
+
#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
	sin4->sin_len = sizeof(struct sockaddr_in);
+
#endif
}

/*
@@ -486,7 +489,7 @@ struct ftpio {

static int	 ftp_readfn(void *, char *, int);
static int	 ftp_writefn(void *, const char *, int);
-
static fpos_t	 ftp_seekfn(void *, fpos_t, int);
+
static off_t	 ftp_seekfn(void *, off_t, int);
static int	 ftp_closefn(void *);

static int
@@ -549,18 +552,18 @@ ftp_writefn(void *v, const char *buf, int len)
	return (-1);
}

-
static fpos_t
-
ftp_seekfn(void *v, fpos_t pos __unused, int whence __unused)
+
static off_t
+
ftp_seekfn(void *v, off_t pos __unused, int whence __unused)
{
	struct ftpio *io;

	io = (struct ftpio *)v;
	if (io == NULL) {
		errno = EBADF;
-
		return (-1);
+
		return ((off_t)-1);
	}
	errno = ESPIPE;
-
	return (-1);
+
	return ((off_t)-1);
}

static int
@@ -770,7 +773,8 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file,
		if (bindaddr != NULL && *bindaddr != '\0' &&
		    fetch_bind(sd, sa.ss_family, bindaddr) != 0)
			goto sysouch;
-
		if (connect(sd, (struct sockaddr *)&sa, sa.ss_len) == -1)
+

+
		if (connect(sd, (struct sockaddr *)&sa, l) == -1)
			goto sysouch;

		/* make the server initiate the transfer */
@@ -784,12 +788,14 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file,
		u_int32_t a;
		u_short p;
		int arg, d;
+
		socklen_t sslen;
		char *ap;
		char hname[INET6_ADDRSTRLEN];

		switch (sa.ss_family) {
		case AF_INET6:
			((struct sockaddr_in6 *)&sa)->sin6_port = 0;
+
			sslen = sizeof(struct sockaddr_in6);
#ifdef IPV6_PORTRANGE
			arg = low ? IPV6_PORTRANGE_DEFAULT : IPV6_PORTRANGE_HIGH;
			if (setsockopt(sd, IPPROTO_IPV6, IPV6_PORTRANGE,
@@ -799,15 +805,18 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file,
			break;
		case AF_INET:
			((struct sockaddr_in *)&sa)->sin_port = 0;
+
			sslen = sizeof(struct sockaddr_in);
+
#ifdef IP_PORTRANGE
			arg = low ? IP_PORTRANGE_DEFAULT : IP_PORTRANGE_HIGH;
			if (setsockopt(sd, IPPROTO_IP, IP_PORTRANGE,
				(char *)&arg, sizeof(arg)) == -1)
				goto sysouch;
+
#endif
			break;
		}
		if (verbose)
			fetch_info("binding data socket");
-
		if (bind(sd, (struct sockaddr *)&sa, sa.ss_len) == -1)
+
		if (bind(sd, (struct sockaddr *)&sa, sslen) == -1)
			goto sysouch;
		if (listen(sd, 1) == -1)
			goto sysouch;
@@ -830,7 +839,7 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file,
			e = -1;
			sin6 = (struct sockaddr_in6 *)&sa;
			sin6->sin6_scope_id = 0;
-
			if (getnameinfo((struct sockaddr *)&sa, sa.ss_len,
+
			if (getnameinfo((struct sockaddr *)&sa, sizeof(struct sockaddr_in6),
				hname, sizeof(hname),
				NULL, 0, NI_NUMERICHOST) == 0) {
				e = ftp_cmd(conn, "EPRT |%d|%s|%d|", 2, hname,
modified external/libfetch/http.c
@@ -27,6 +27,7 @@
 */

#include <sys/cdefs.h>
+
#include "bsd_compat.h"
__FBSDID("$FreeBSD: head/lib/libfetch/http.c 267133 2014-06-05 22:16:26Z bapt $");

/*
@@ -60,7 +61,7 @@ __FBSDID("$FreeBSD: head/lib/libfetch/http.c 267133 2014-06-05 22:16:26Z bapt $"
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */
-

+
#define _XOPEN_SOURCE
#include <sys/param.h>
#include <sys/socket.h>
#include <sys/time.h>
@@ -1421,9 +1422,10 @@ http_connect(struct url *URL, struct url *purl, const char *flags)
		fetch_syserr();
		return (NULL);
	}
-

+
#ifdef TCP_NOPUSH
	val = 1;
	setsockopt(conn->sd, IPPROTO_TCP, TCP_NOPUSH, &val, sizeof(val));
+
#endif

	return (conn);
}
@@ -1725,9 +1727,11 @@ http_request_body(struct url *URL, const char *op, struct url_stat *us,
		 * be compatible with such configurations, fiddle with socket
		 * options to force the pending data to be written.
		 */
+
#ifdef TCP_NOPUSH
		val = 0;
		setsockopt(conn->sd, IPPROTO_TCP, TCP_NOPUSH, &val,
			   sizeof(val));
+
#endif
		val = 1;
		setsockopt(conn->sd, IPPROTO_TCP, TCP_NODELAY, &val,
			   sizeof(val));