AmiSSL is an Amiga native library which provides a wrapper over OpenSSL.
It also requires all programs using it to use bsdsocket.library
directly, rather than accessing socket functions through clib, which
libcurl was not necessarily doing previously. Configure will now check
for the headers and ensure they are included if found.
Closes #3677
#endif
#endif
#else
+#ifdef HAVE_PROTO_BSDSOCKET_H
+#include <proto/bsdsocket.h>
+struct Library *SocketBase = NULL;
+#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#endif
#define RECVCALLCONV PASCAL
#else
+#ifdef HAVE_PROTO_BSDSOCKET_H
+#include <proto/bsdsocket.h>
+struct Library *SocketBase = NULL;
+#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#endif
#define RECVCALLCONV
#endif
+#ifndef HAVE_PROTO_BSDSOCKET_H
extern $recv_retv RECVCALLCONV
recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
+#endif
]],[[
$recv_arg1 s=0;
$recv_arg2 buf=0;
#endif
#endif
#else
+#ifdef HAVE_PROTO_BSDSOCKET_H
+#include <proto/bsdsocket.h>
+struct Library *SocketBase = NULL;
+#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#endif
#define SENDCALLCONV PASCAL
#else
+#ifdef HAVE_PROTO_BSDSOCKET_H
+#include <proto/bsdsocket.h>
+struct Library *SocketBase = NULL;
+#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#endif
#define SENDCALLCONV
#endif
+#ifndef HAVE_PROTO_BSDSOCKET_H
extern $send_retv SENDCALLCONV
send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
+#endif
]],[[
$send_arg1 s=0;
$send_arg3 len=0;
#endif
#endif
#else
+#ifdef HAVE_PROTO_BSDSOCKET_H
+#include <proto/bsdsocket.h>
+struct Library *SocketBase = NULL;
+#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [
AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
AC_MSG_CHECKING([for connect in libraries])
tst_connect_save_LIBS="$LIBS"
tst_connect_need_LIBS="unknown"
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
- #ifndef HAVE_WINDOWS_H
+ $curl_includes_bsdsocket
+ #if !defined(HAVE_WINDOWS_H) && !defined(HAVE_PROTO_BSDSOCKET_H)
int connect(int, void*, int);
#endif
]],[[
#endif
#endif
#ifndef HAVE_WINDOWS_H
+#ifdef HAVE_PROTO_BSDSOCKET_H
+#include <proto/bsdsocket.h>
+struct Library *SocketBase = NULL;
+#define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0)
+#endif
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#endif
#endif
#ifndef HAVE_WINDOWS_H
+#ifdef HAVE_PROTO_BSDSOCKET_H
+#include <proto/bsdsocket.h>
+struct Library *SocketBase = NULL;
+#define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0)
+#endif
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
long tv_usec;
};
#endif
+#ifndef HAVE_PROTO_BSDSOCKET_H
extern $sel_retv SELECTCALLCONV
select($sel_arg1,
$sel_arg234,
$sel_arg234,
$sel_arg234,
$sel_arg5);
+#endif
]],[[
$sel_arg1 nfds=0;
$sel_arg234 rfds=0;
dnl
dnl initialize all the info variables
- curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,schannel,secure-transport,mesalink} )"
+ curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,schannel,secure-transport,mesalink,amissl} )"
curl_ssh_msg="no (--with-libssh2)"
curl_zlib_msg="no (--with-zlib)"
curl_brotli_msg="no (--with-brotli)"
CURL_MAC_CFLAGS
CURL_SUPPORTS_BUILTIN_AVAILABLE
+
dnl ************************************************************
dnl switch off particular protocols
dnl
])
fi
+if test "$HAVE_GETHOSTBYNAME" != "1"
+then
+ dnl This is for AmigaOS with bsdsocket.library - needs testing before -lnet
+ AC_MSG_CHECKING([for gethostbyname for AmigaOS bsdsocket.library])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <proto/bsdsocket.h>
+struct Library *SocketBase = NULL;
+ ]],[[
+ gethostbyname("www.dummysite.com");
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ HAVE_GETHOSTBYNAME="1"
+ HAVE_PROTO_BSDSOCKET_H="1"
+ AC_DEFINE(HAVE_PROTO_BSDSOCKET_H, 1, [if Amiga bsdsocket.library is in use])
+ AC_SUBST(HAVE_PROTO_BSDSOCKET_H, [1])
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+fi
+
if test "$HAVE_GETHOSTBYNAME" != "1"
then
dnl gethostbyname in the network lib - for Haiku OS
AC_MSG_RESULT(no)
fi
+OPT_AMISSL=no
+AC_ARG_WITH(amissl,dnl
+AC_HELP_STRING([--with-amissl],[enable Amiga native SSL/TLS (AmiSSL)])
+AC_HELP_STRING([--without-amissl], [disable Amiga native SSL/TLS (AmiSSL)]),
+ OPT_AMISSL=$withval)
+
+AC_MSG_CHECKING([whether to enable Amiga native SSL/TLS (AmiSSL)])
+if test "$HAVE_PROTO_BSDSOCKET_H" == "1"; then
+ if test -z "$ssl_backends" -o "x$OPT_AMISSL" != xno; then
+ ssl_msg=
+ if test "x$OPT_AMISSL" != "xno"; then
+ AC_MSG_RESULT(yes)
+ ssl_msg="AmiSSL"
+ test amissl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ AMISSL_ENABLED=1
+ LIBS="-lamisslauto $LIBS"
+ AC_DEFINE(USE_AMISSL, 1, [if AmiSSL is in use])
+ AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use])
+ else
+ AC_MSG_RESULT(no)
+ fi
+ test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
+ else
+ AC_MSG_RESULT(no)
+ fi
+else
+ AC_MSG_RESULT(no)
+fi
+
dnl **********************************************************************
dnl Check for the presence of SSL libraries and headers
dnl **********************************************************************
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi
-case "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$SECURETRANSPORT_ENABLED$MESALINK_ENABLED" in
+case "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$SECURETRANSPORT_ENABLED$MESALINK_ENABLED$AMISSL_ENABLED" in
x)
AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.])
- AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-schannel, --with-secure-transport, or --with-mesalink to address this.])
+ AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-schannel, --with-secure-transport, --with-mesalink or --with-amissl to address this.])
;;
x1)
# one SSL backend is enabled
]
)
+
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
CURL_CHECK_VARIADIC_MACROS
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
#include "curl_setup.h"
-#if defined(__AMIGA__) && !defined(__ixemul__)
-
-#include <amitcp/socketbasetags.h>
+#ifdef __AMIGA__
+# include "amigaos.h"
+# if defined(HAVE_PROTO_BSDSOCKET_H) && !defined(USE_AMISSL)
+# include <amitcp/socketbasetags.h>
+# endif
+# ifdef __libnix__
+# include <stabs.h>
+# endif
+#endif
-#include "amigaos.h"
+/* The last #include files should be: */
+#include "curl_memory.h"
+#include "memdebug.h"
+#ifdef __AMIGA__
+#if defined(HAVE_PROTO_BSDSOCKET_H) && !defined(USE_AMISSL)
struct Library *SocketBase = NULL;
extern int errno, h_errno;
#ifdef __libnix__
-#include <stabs.h>
void __request(const char *msg);
#else
# define __request(msg) Printf(msg "\n\a")
ADD2EXIT(Curl_amiga_cleanup, -50);
#endif
-#endif /* __AMIGA__ && ! __ixemul__ */
+#endif /* HAVE_PROTO_BSDSOCKET_H */
+
+#ifdef USE_AMISSL
+void Curl_amiga_X509_free(X509 *a)
+{
+ X509_free(a);
+}
+#endif /* USE_AMISSL */
+#endif /* __AMIGA__ */
+
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
***************************************************************************/
#include "curl_setup.h"
-#if defined(__AMIGA__) && !defined(__ixemul__)
+#if defined(__AMIGA__) && defined(HAVE_BSDSOCKET_H) && !defined(USE_AMISSL)
bool Curl_amiga_init();
void Curl_amiga_cleanup();
#endif
+#ifdef USE_AMISSL
+#include <openssl/x509v3.h>
+void Curl_amiga_X509_free(X509 *a);
+#endif /* USE_AMISSL */
+
#endif /* HEADER_CURL_AMIGAOS_H */
+
#endif
#ifdef __AMIGA__
-# ifndef __ixemul__
-# include <exec/types.h>
-# include <exec/execbase.h>
-# include <proto/exec.h>
-# include <proto/dos.h>
+# include <exec/types.h>
+# include <exec/execbase.h>
+# include <proto/exec.h>
+# include <proto/dos.h>
+# ifdef HAVE_PROTO_BSDSOCKET_H
+# include <proto/bsdsocket.h> /* ensure bsdsocket.library use */
# define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0)
# endif
#endif
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
gcry_md_close(*ctx);
}
-#elif defined(USE_OPENSSL)
+#elif defined(USE_OPENSSL) && !defined(USE_AMISSL)
/* When OpenSSL is available we use the MD5-function from OpenSSL */
#include <openssl/md5.h>
#include "curl_memory.h"
#include <openssl/buffer.h>
#include <openssl/pkcs12.h>
+#ifdef USE_AMISSL
+#include "amigaos.h"
+#endif
+
#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_OCSP)
#include <openssl/ocsp.h>
#endif
fail:
EVP_PKEY_free(pri);
X509_free(x509);
+#ifdef USE_AMISSL
+ sk_X509_pop_free(ca, Curl_amiga_X509_free);
+#else
sk_X509_pop_free(ca, X509_free);
-
+#endif
if(!cert_done)
return 0; /* failure! */
break;
])
+dnl CURL_INCLUDES_BSDSOCKET
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when bsdsocket.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_BSDSOCKET], [
+curl_includes_bsdsocket="\
+/* includes start */
+#ifdef HAVE_PROTO_BSDSOCKET_H
+# include <proto/bsdsocket.h>
+ struct Library *SocketBase = NULL;
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ proto/bsdsocket.h,
+ [], [], [ $curl_includes_bsdsocket])
+])
+
+
dnl CURL_PREPROCESS_CALLCONV
dnl -------------------------------------------------
dnl Set up variable with a preprocessor block which
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_socket
]],[[
if(0 != closesocket(0))
AC_MSG_CHECKING([if closesocket is prototyped])
AC_EGREP_CPP([closesocket],[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_socket
],[
AC_MSG_RESULT([yes])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_socket
]],[[
if(0 != closesocket(0))
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
$curl_includes_socket
]],[[
AC_MSG_CHECKING([if connect is prototyped])
AC_EGREP_CPP([connect],[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
$curl_includes_socket
],[
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
$curl_includes_socket
]],[[
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_netdb
]],[[
if(0 != gethostbyaddr(0, 0, 0))
AC_MSG_CHECKING([if gethostbyaddr is prototyped])
AC_EGREP_CPP([gethostbyaddr],[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_netdb
],[
AC_MSG_RESULT([yes])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_netdb
]],[[
if(0 != gethostbyaddr(0, 0, 0))
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_netdb
]],[[
if(0 != gai_strerror(0))
AC_MSG_CHECKING([if gai_strerror is prototyped])
AC_EGREP_CPP([gai_strerror],[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_netdb
],[
AC_MSG_RESULT([yes])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_netdb
]],[[
if(0 != gai_strerror(0))
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_netdb
]],[[
if(0 != gethostbyname(0))
AC_MSG_CHECKING([if gethostbyname is prototyped])
AC_EGREP_CPP([gethostbyname],[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_netdb
],[
AC_MSG_RESULT([yes])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_netdb
]],[[
if(0 != gethostbyname(0))
AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
+ AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
#
tst_links_gethostname="unknown"
tst_proto_gethostname="unknown"
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_unistd
]],[[
if(0 != gethostname(0, 0))
AC_MSG_CHECKING([if gethostname is prototyped])
AC_EGREP_CPP([gethostname],[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_unistd
],[
AC_MSG_RESULT([yes])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_unistd
]],[[
if(0 != gethostname(0, 0))
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_unistd
$curl_preprocess_callconv
extern int FUNCALLCONV gethostname($tst_arg1, $tst_arg2);
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
]],[[
if(0 != ioctlsocket(0, 0, 0))
return 1;
AC_MSG_CHECKING([if ioctlsocket is prototyped])
AC_EGREP_CPP([ioctlsocket],[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
],[
AC_MSG_RESULT([yes])
tst_proto_ioctlsocket="yes"
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
]],[[
if(0 != ioctlsocket(0, 0, 0))
return 1;
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
]],[[
int flags = 0;
if(0 != ioctlsocket(0, FIONBIO, &flags))
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
]],[[
if(0 != setsockopt(0, 0, 0, 0, 0))
AC_MSG_CHECKING([if setsockopt is prototyped])
AC_EGREP_CPP([setsockopt],[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
],[
AC_MSG_RESULT([yes])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
]],[[
if(0 != setsockopt(0, 0, 0, 0, 0))
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
]],[[
if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
$curl_includes_socket
]],[[
AC_MSG_CHECKING([if socket is prototyped])
AC_EGREP_CPP([socket],[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
$curl_includes_socket
],[
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_winsock2
+ $curl_includes_bsdsocket
$curl_includes_sys_socket
$curl_includes_socket
]],[[