diff --git a/3rdp/build/GNUmakefile b/3rdp/build/GNUmakefile index 4b8537726c068d879692555616883a47c501f222..1dfc9ba39aa81e2156a2bdf9bc134fd7432b2bf8 100644 --- a/3rdp/build/GNUmakefile +++ b/3rdp/build/GNUmakefile @@ -81,7 +81,7 @@ $(CRYPT_SRC): | $(3RDPSRCDIR) $(CRYPT_IDIR): | $(3RDPODIR) $(QUIET)$(IFNOTEXIST) mkdir $(CRYPT_IDIR) -$(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)build/terminal-params.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw32-static.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ranlib.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-noasm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zz-country.patch $(3RDP_ROOT)$(DIRSEP)build/cl-algorithms.patch $(3RDP_ROOT)$(DIRSEP)build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)$(DIRSEP)build/cl-macosx-minver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-endian.patch $(3RDP_ROOT)$(DIRSEP)build/cl-cryptodev.patch $(3RDP_ROOT)$(DIRSEP)build/cl-posix-me-gently.patch $(3RDP_ROOT)$(DIRSEP)build/cl-tpm-linux.patch $(3RDP_ROOT)$(DIRSEP)build/cl-PAM-noprompts.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zlib.patch $(3RDP_ROOT)$(DIRSEP)build/Dynamic-linked-static-lib.patch $(3RDP_ROOT)$(DIRSEP)build/SSL-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bigger-maxattribute.patch $(3RDP_ROOT)$(DIRSEP)build/cl-vcxproj.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw-vcver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-build-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-gcc-non-const-time-val.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-odbc.patch $(3RDP_ROOT)$(DIRSEP)build/cl-noasm-defines.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-RSA-suites.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ECC-RSA.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)$(DIRSEP)build/cl-more-RSA-ECC-fixes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-DH-key-init.patch $(3RDP_ROOT)$(DIRSEP)build/cl-clear-GCM-flag.patch $(3RDP_ROOT)$(DIRSEP)build/cl-use-ssh-ctr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-incCtr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-tpm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-via-aes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-just-use-cc.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-learn-numbers.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-no-safe-stack.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-allow-pkcs12.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-uint64_t-redefine.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-random-openbsd.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-openbsd-threads.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-allow-none-auth.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-mingw-add-m32.patch | $(CRYPT_SRC) $(CRYPT_IDIR) +$(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)build/terminal-params.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw32-static.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ranlib.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-noasm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zz-country.patch $(3RDP_ROOT)$(DIRSEP)build/cl-algorithms.patch $(3RDP_ROOT)$(DIRSEP)build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)$(DIRSEP)build/cl-macosx-minver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-endian.patch $(3RDP_ROOT)$(DIRSEP)build/cl-cryptodev.patch $(3RDP_ROOT)$(DIRSEP)build/cl-posix-me-gently.patch $(3RDP_ROOT)$(DIRSEP)build/cl-tpm-linux.patch $(3RDP_ROOT)$(DIRSEP)build/cl-PAM-noprompts.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zlib.patch $(3RDP_ROOT)$(DIRSEP)build/Dynamic-linked-static-lib.patch $(3RDP_ROOT)$(DIRSEP)build/SSL-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bigger-maxattribute.patch $(3RDP_ROOT)$(DIRSEP)build/cl-vcxproj.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw-vcver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-build-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-gcc-non-const-time-val.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-odbc.patch $(3RDP_ROOT)$(DIRSEP)build/cl-noasm-defines.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-RSA-suites.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ECC-RSA.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)$(DIRSEP)build/cl-more-RSA-ECC-fixes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-DH-key-init.patch $(3RDP_ROOT)$(DIRSEP)build/cl-clear-GCM-flag.patch $(3RDP_ROOT)$(DIRSEP)build/cl-use-ssh-ctr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-incCtr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-tpm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-via-aes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-just-use-cc.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-learn-numbers.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-no-safe-stack.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-allow-pkcs12.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-uint64_t-redefine.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-random-openbsd.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-openbsd-threads.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-allow-none-auth.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-mingw-add-m32.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-poll-not-select.patch | $(CRYPT_SRC) $(CRYPT_IDIR) @echo Creating $@ ... $(QUIET)-rm -rf $(CRYPT_SRC)/* $(QUIET)unzip -oa $(3RDPDISTDIR)$(DIRSEP)cryptlib.zip -d $(CRYPT_SRC) @@ -133,6 +133,7 @@ $(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)b $(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-openbsd-threads.patch $(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-allow-none-auth.patch $(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-mingw-add-m32.patch + $(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-poll-not-select.patch ifeq ($(os),win32) $(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make directories $(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make toolscripts diff --git a/3rdp/build/cl-poll-not-select.patch b/3rdp/build/cl-poll-not-select.patch new file mode 100644 index 0000000000000000000000000000000000000000..c0e56be56f3deb609032e851d8dfe6a421a79ada --- /dev/null +++ b/3rdp/build/cl-poll-not-select.patch @@ -0,0 +1,108 @@ +diff -ur ../cl-old/io/tcp_rw.c ./io/tcp_rw.c +--- ../cl-old/io/tcp_rw.c 2021-03-21 07:25:22.336553000 -0400 ++++ ./io/tcp_rw.c 2021-03-21 08:02:40.609845000 -0400 +@@ -20,6 +20,10 @@ + + #ifdef USE_TCP + ++#ifndef __WINDOWS__ ++#include <poll.h> ++#endif ++ + /**************************************************************************** + * * + * Network I/O Wait Management * +@@ -74,6 +78,7 @@ + { CRYPT_ERROR_OPEN, "unknown" }, { CRYPT_ERROR_OPEN, "unknown" } + }; + MONOTIMER_INFO timerInfo; ++#ifdef __WINDOWS__ + struct timeval tv; + fd_set readfds, writefds, exceptfds; + fd_set *readFDPtr = ( type == IOWAIT_READ || \ +@@ -81,6 +86,10 @@ + type == IOWAIT_ACCEPT ) ? &readfds : NULL; + fd_set *writeFDPtr = ( type == IOWAIT_WRITE || \ + type == IOWAIT_CONNECT ) ? &writefds : NULL; ++#else ++ struct pollfd fds; ++ int ptimeout; ++#endif + int selectIterations, status, LOOP_ITERATOR; + + assert( isWritePtr( netStream, sizeof( NET_STREAM_INFO ) ) ); +@@ -152,6 +161,20 @@ + status = setMonoTimer( &timerInfo, timeout ); + if( cryptStatusError( status ) ) + return( status ); ++ ++#ifndef __WINDOWS__ ++ fds.fd = netStream->netSocket; ++ fds.events = 0; ++ if (type == IOWAIT_READ || type == IOWAIT_CONNECT || type == IOWAIT_ACCEPT ) ++ fds.events |= POLLIN; ++ if (type == IOWAIT_WRITE || type == IOWAIT_CONNECT ) ++ fds.events |= POLLOUT; ++ if (timeout <= 0) ++ ptimeout = 5; ++ else ++ ptimeout = timeout * 1000; ++#endif ++ + LOOP_MED( ( selectIterations = 0, status = SOCKET_ERROR ), \ + isSocketError( status ) && \ + ( selectIterations <= 0 || \ +@@ -159,6 +182,7 @@ + selectIterations < 20, + selectIterations++ ) + { ++#ifdef __WINDOWS__ + if( readFDPtr != NULL ) + { + FD_ZERO( readFDPtr ); +@@ -186,6 +210,10 @@ + clearErrorState(); + status = select( ( int ) netStream->netSocket + 1, readFDPtr, + writeFDPtr, &exceptfds, &tv ); ++#else ++ fds.revents = 0; ++ status = poll(&fds, 1, ptimeout); ++#endif + + /* If there's a problem and it's not something transient like an + interrupted system call, exit. For a transient problem, we just +@@ -269,7 +297,11 @@ + false and an indicator to receive SIGURG's not set, the OOB data byte + just languishes in a side-buffer), however we shouldn't be receiving + OOB data so we treat that as an error too */ ++#ifdef __WINDOWS__ + if( FD_ISSET( netStream->netSocket, &exceptfds ) ) ++#else ++ if (fds.revents | (POLLERR | POLLNVAL)) ++#endif + { + int socketErrorCode; + +@@ -323,6 +355,7 @@ + + /* The socket is read for reading or writing */ + ENSURES( status > 0 ); ++#ifdef __WINDOWS__ + ENSURES( ( type == IOWAIT_READ && \ + FD_ISSET( netStream->netSocket, &readfds ) ) || \ + ( type == IOWAIT_WRITE && \ +@@ -331,6 +364,13 @@ + ( FD_ISSET( netStream->netSocket, &readfds ) || \ + FD_ISSET( netStream->netSocket, &writefds ) ) ) || \ + ( type == IOWAIT_ACCEPT ) ); ++#else ++ ENSURES( \ ++ ( type == IOWAIT_READ && (fds.revents & POLLIN) ) || \ ++ ( type == IOWAIT_WRITE && (fds.revents & POLLOUT) ) || \ ++ ( type == IOWAIT_CONNECT && (fds.revents & (POLLIN | POLLOUT) ) ) || \ ++ ( type == IOWAIT_ACCEPT ) ); ++#endif + return( CRYPT_OK ); + } + +Only in ./tools: endian