git-subtree-dir: libssh2
git-subtree-split: 6c7769dcc4
tags/ggatessh-v1.0.0
| @@ -0,0 +1,9 @@ | |||||
| root = true | |||||
| [*.{c, h}] | |||||
| end_of_line = lf | |||||
| insert_final_newline = true | |||||
| indent_style = space | |||||
| indent_size = 4 | |||||
| trim_trailing_whitespace = true | |||||
| max_line_length = 80 | |||||
| @@ -0,0 +1,2 @@ | |||||
| win32/msvcproj.head -crlf | |||||
| win32/msvcproj.foot -crlf | |||||
| @@ -0,0 +1,26 @@ | |||||
| --- | |||||
| name: Bug report | |||||
| about: Create a report to help us improve | |||||
| title: '' | |||||
| labels: '' | |||||
| assignees: '' | |||||
| --- | |||||
| **Describe the bug** | |||||
| A clear and concise description of what the bug is. | |||||
| **To Reproduce** | |||||
| Steps to reproduce the behavior. | |||||
| A recipe or example code that reproduces the problem? A stack trace from a crash | |||||
| **Expected behavior** | |||||
| A clear and concise description of what you expected to happen. | |||||
| **Version (please complete the following information):** | |||||
| - OS: [e.g. iOS] | |||||
| - libssh2 version [e.g. 1.8.0] | |||||
| **Additional context** | |||||
| Add any other context about the problem here. | |||||
| @@ -0,0 +1,17 @@ | |||||
| # Number of days of inactivity before an issue becomes stale | |||||
| daysUntilStale: 120 | |||||
| # Number of days of inactivity before a stale issue is closed | |||||
| daysUntilClose: 30 | |||||
| # Issues with these labels will never be considered stale | |||||
| exemptLabels: | |||||
| - pinned | |||||
| - security | |||||
| # Label to use when marking an issue as stale | |||||
| staleLabel: stale | |||||
| # Comment to post when marking an issue as stale. Set to `false` to disable | |||||
| markComment: > | |||||
| This issue has been automatically marked as stale because it has not had | |||||
| recent activity. It will be closed if no further activity occurs. Thank you | |||||
| for your contributions. | |||||
| # Comment to post when closing a stale issue. Set to `false` to disable | |||||
| closeComment: false | |||||
| @@ -0,0 +1,37 @@ | |||||
| .deps | |||||
| .libs | |||||
| *.lib | |||||
| *.pdb | |||||
| *.dll | |||||
| *.exe | |||||
| *.obj | |||||
| .*.swp | |||||
| Debug | |||||
| Release | |||||
| *.exp | |||||
| Makefile | |||||
| Makefile.in | |||||
| aclocal.m4 | |||||
| autom4te.cache | |||||
| compile | |||||
| test-driver | |||||
| config.guess | |||||
| config.log | |||||
| config.status | |||||
| config.sub | |||||
| configure | |||||
| depcomp | |||||
| libtool | |||||
| ltmain.sh | |||||
| missing | |||||
| ssh2_sample | |||||
| libssh2-*.tar.gz | |||||
| install-sh | |||||
| *.o | |||||
| *.lo | |||||
| *.la | |||||
| mkinstalldirs | |||||
| tags | |||||
| libssh2.pc | |||||
| TAGS | |||||
| *~ | |||||
| @@ -0,0 +1,130 @@ | |||||
| # Copyright (c) 2014 Alexander Lamaison <alexander.lamaison@gmail.com> | |||||
| # | |||||
| # Redistribution and use in source and binary forms, | |||||
| # with or without modification, are permitted provided | |||||
| # that the following conditions are met: | |||||
| # | |||||
| # Redistributions of source code must retain the above | |||||
| # copyright notice, this list of conditions and the | |||||
| # following disclaimer. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # Neither the name of the copyright holder nor the names | |||||
| # of any other contributors may be used to endorse or | |||||
| # promote products derived from this software without | |||||
| # specific prior written permission. | |||||
| # | |||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. | |||||
| sudo: required | |||||
| services: | |||||
| - docker | |||||
| language: c | |||||
| compiler: | |||||
| - gcc | |||||
| - clang | |||||
| addons: | |||||
| chrome: stable | |||||
| env: | |||||
| matrix: | |||||
| - B=style | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF B=configure | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=64 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=Libgcrypt BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - ADDRESS_SIZE=32 CRYPTO_BACKEND=mbedTLS BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=ON B=cmake | |||||
| - B=fuzzer | |||||
| before_install: | |||||
| - if [ $ADDRESS_SIZE = '32' ]; then sudo dpkg --add-architecture i386; fi | |||||
| - if [ $ADDRESS_SIZE = '32' ]; then sudo apt-get update -qq; fi | |||||
| - if [ $ADDRESS_SIZE = '32' ]; then sudo apt-get install -y gcc-multilib; fi | |||||
| - if [ $ADDRESS_SIZE = '32' ]; then sudo apt-get install -y libssl-dev:i386 libgcrypt20-dev:i386 build-essential gcc-multilib; fi | |||||
| - if [ $ADDRESS_SIZE = '32' ]; then sudo dpkg --purge --force-depends gcc-multilib && sudo dpkg --purge --force-depends libssl-dev; fi | |||||
| - if [ $ADDRESS_SIZE = '64' ]; then sudo apt-get install -y libssl-dev; fi | |||||
| - if [ $ADDRESS_SIZE = '64' ]; then sudo apt-get install -y libgcrypt11-dev; fi | |||||
| - if [ $ADDRESS_SIZE = '32' ]; then export TOOLCHAIN_OPTION="-DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-Linux-32.cmake"; fi | |||||
| - if [ $CRYPTO_BACKEND = 'mbedTLS' ]; then | |||||
| MBEDTLSVER=mbedtls-2.7.0; | |||||
| curl -L https://github.com/ARMmbed/mbedtls/archive/$MBEDTLSVER.tar.gz | tar -xzf -; | |||||
| cd mbedtls-$MBEDTLSVER; | |||||
| cmake $TOOLCHAIN_OPTION -DUSE_SHARED_MBEDTLS_LIBRARY=ON -DCMAKE_INSTALL_PREFIX:PATH=../usr .; | |||||
| make -j3 install; | |||||
| cd ..; | |||||
| export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/usr/lib; | |||||
| export TOOLCHAIN_OPTION="$TOOLCHAIN_OPTION -DCMAKE_PREFIX_PATH=$PWD/usr"; | |||||
| fi | |||||
| install: | |||||
| script: | |||||
| - | | |||||
| if [ "$B" = "style" ]; then | |||||
| ./buildconf | |||||
| ./configure | |||||
| make checksrc | |||||
| fi | |||||
| - | | |||||
| if [ "$B" = "configure" ]; then | |||||
| autoreconf -fi | |||||
| ./configure --enable-debug --enable-werror | |||||
| make | |||||
| make check | |||||
| fi | |||||
| - | | |||||
| if [ "$B" = "cmake" ]; then | |||||
| mkdir bin | |||||
| cd bin | |||||
| cmake $TOOLCHAIN_OPTION -DCRYPTO_BACKEND=$CRYPTO_BACKEND -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS -DENABLE_ZLIB_COMPRESSION=$ENABLE_ZLIB_COMPRESSION .. && cmake --build . && CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target test && cmake --build . --target package | |||||
| fi | |||||
| - | | |||||
| if [ "$B" = "fuzzer" ]; then | |||||
| ./tests/ossfuzz/travisoss.sh | |||||
| fi | |||||
| # whitelist branches to avoid testing feature branches twice (as branch and as pull request) | |||||
| branches: | |||||
| only: | |||||
| - master | |||||
| @@ -0,0 +1,109 @@ | |||||
| # Copyright (c) 2014, 2015 Alexander Lamaison <alexander.lamaison@gmail.com> | |||||
| # | |||||
| # Redistribution and use in source and binary forms, | |||||
| # with or without modification, are permitted provided | |||||
| # that the following conditions are met: | |||||
| # | |||||
| # Redistributions of source code must retain the above | |||||
| # copyright notice, this list of conditions and the | |||||
| # following disclaimer. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # Neither the name of the copyright holder nor the names | |||||
| # of any other contributors may be used to endorse or | |||||
| # promote products derived from this software without | |||||
| # specific prior written permission. | |||||
| # | |||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. | |||||
| cmake_minimum_required(VERSION 2.8.11) | |||||
| set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) | |||||
| project(libssh2 C) | |||||
| set(PROJECT_URL "https://www.libssh2.org/") | |||||
| set(PROJECT_DESCRIPTION "The SSH library") | |||||
| if (CMAKE_VERSION VERSION_LESS "3.1") | |||||
| if (CMAKE_C_COMPILER_ID STREQUAL "GNU") | |||||
| set (CMAKE_C_FLAGS "--std=gnu90 ${CMAKE_C_FLAGS}") | |||||
| endif() | |||||
| else() | |||||
| set (CMAKE_C_STANDARD 90) | |||||
| endif() | |||||
| option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF) | |||||
| # Parse version | |||||
| file(READ ${CMAKE_CURRENT_SOURCE_DIR}/include/libssh2.h _HEADER_CONTENTS) | |||||
| string( | |||||
| REGEX REPLACE ".*#define LIBSSH2_VERSION[ \t]+\"([^\"]+)\".*" "\\1" | |||||
| LIBSSH2_VERSION "${_HEADER_CONTENTS}") | |||||
| string( | |||||
| REGEX REPLACE ".*#define LIBSSH2_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" | |||||
| LIBSSH2_VERSION_MAJOR "${_HEADER_CONTENTS}") | |||||
| string( | |||||
| REGEX REPLACE ".*#define LIBSSH2_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" | |||||
| LIBSSH2_VERSION_MINOR "${_HEADER_CONTENTS}") | |||||
| string( | |||||
| REGEX REPLACE ".*#define LIBSSH2_VERSION_PATCH[ \t]+([0-9]+).*" "\\1" | |||||
| LIBSSH2_VERSION_PATCH "${_HEADER_CONTENTS}") | |||||
| if(NOT LIBSSH2_VERSION OR | |||||
| NOT LIBSSH2_VERSION_MAJOR MATCHES "^[0-9]+$" OR | |||||
| NOT LIBSSH2_VERSION_MINOR MATCHES "^[0-9]+$" OR | |||||
| NOT LIBSSH2_VERSION_PATCH MATCHES "^[0-9]+$") | |||||
| message( | |||||
| FATAL_ERROR | |||||
| "Unable to parse version from" | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/include/libssh2.h") | |||||
| endif() | |||||
| include(GNUInstallDirs) | |||||
| install( | |||||
| FILES docs/AUTHORS COPYING docs/HACKING README RELEASE-NOTES NEWS | |||||
| DESTINATION ${CMAKE_INSTALL_DOCDIR}) | |||||
| include(max_warnings) | |||||
| include(FeatureSummary) | |||||
| add_subdirectory(src) | |||||
| option(BUILD_EXAMPLES "Build libssh2 examples" ON) | |||||
| if(BUILD_EXAMPLES) | |||||
| add_subdirectory(example) | |||||
| endif() | |||||
| option(BUILD_TESTING "Build libssh2 test suite" ON) | |||||
| if(BUILD_TESTING) | |||||
| enable_testing() | |||||
| add_subdirectory(tests) | |||||
| endif() | |||||
| add_subdirectory(docs) | |||||
| feature_summary(WHAT ALL) | |||||
| set(CPACK_PACKAGE_VERSION_MAJOR ${LIBSSH2_VERSION_MAJOR}) | |||||
| set(CPACK_PACKAGE_VERSION_MINOR ${LIBSSH2_VERSION_MINOR}) | |||||
| set(CPACK_PACKAGE_VERSION_PATCH ${LIBSSH2_VERSION_PATCH}) | |||||
| set(CPACK_PACKAGE_VERSION ${LIBSSH2_VERSION}) | |||||
| include(CPack) | |||||
| @@ -0,0 +1,42 @@ | |||||
| /* Copyright (c) 2004-2007 Sara Golemon <sarag@libssh2.org> | |||||
| * Copyright (c) 2005,2006 Mikhail Gusarov <dottedmag@dottedmag.net> | |||||
| * Copyright (c) 2006-2007 The Written Word, Inc. | |||||
| * Copyright (c) 2007 Eli Fant <elifantu@mail.ru> | |||||
| * Copyright (c) 2009-2019 Daniel Stenberg | |||||
| * Copyright (C) 2008, 2009 Simon Josefsson | |||||
| * All rights reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, | |||||
| * with or without modification, are permitted provided | |||||
| * that the following conditions are met: | |||||
| * | |||||
| * Redistributions of source code must retain the above | |||||
| * copyright notice, this list of conditions and the | |||||
| * following disclaimer. | |||||
| * | |||||
| * 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. | |||||
| * | |||||
| * Neither the name of the copyright holder nor the names | |||||
| * of any other contributors may be used to endorse or | |||||
| * promote products derived from this software without | |||||
| * specific prior written permission. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. | |||||
| */ | |||||
| @@ -0,0 +1,3 @@ | |||||
| CRYPTO_CSOURCES = openssl.c | |||||
| CRYPTO_HHEADERS = openssl.h | |||||
| CRYPTO_LTLIBS = $(LTLIBSSL) | |||||
| @@ -0,0 +1,3 @@ | |||||
| CRYPTO_CSOURCES = wincng.c | |||||
| CRYPTO_HHEADERS = wincng.h | |||||
| CRYPTO_LTLIBS = $(LTLIBBCRYPT) $(LTLIBCRYPT32) | |||||
| @@ -0,0 +1,154 @@ | |||||
| AUTOMAKE_OPTIONS = foreign nostdinc | |||||
| SUBDIRS = src tests docs | |||||
| if BUILD_EXAMPLES | |||||
| SUBDIRS += example | |||||
| endif | |||||
| pkgconfigdir = $(libdir)/pkgconfig | |||||
| pkgconfig_DATA = libssh2.pc | |||||
| include_HEADERS = \ | |||||
| include/libssh2.h \ | |||||
| include/libssh2_publickey.h \ | |||||
| include/libssh2_sftp.h | |||||
| NETWAREFILES = nw/keepscreen.c \ | |||||
| nw/nwlib.c \ | |||||
| nw/GNUmakefile \ | |||||
| nw/test/GNUmakefile | |||||
| DSP = win32/libssh2.dsp | |||||
| VCPROJ = win32/libssh2.vcproj | |||||
| DISTCLEANFILES = $(DSP) | |||||
| VMSFILES = vms/libssh2_make_example.dcl vms/libssh2_make_help.dcl \ | |||||
| vms/libssh2_make_kit.dcl vms/libssh2_make_lib.dcl vms/man2help.c \ | |||||
| vms/readme.vms vms/libssh2_config.h | |||||
| WIN32FILES = win32/GNUmakefile win32/test/GNUmakefile \ | |||||
| win32/libssh2_config.h win32/config.mk win32/rules.mk \ | |||||
| win32/Makefile.Watcom win32/libssh2.dsw win32/tests.dsp $(DSP) \ | |||||
| win32/msvcproj.head win32/msvcproj.foot win32/libssh2.rc | |||||
| OS400FILES = os400/README400 os400/initscript.sh os400/make.sh \ | |||||
| os400/make-src.sh os400/make-rpg.sh os400/make-include.sh \ | |||||
| os400/os400sys.c os400/ccsid.c \ | |||||
| os400/libssh2_config.h os400/macros.h os400/libssh2_ccsid.h \ | |||||
| os400/include/alloca.h os400/include/sys/socket.h os400/include/stdio.h \ | |||||
| os400/libssh2rpg/libssh2.rpgle.in \ | |||||
| os400/libssh2rpg/libssh2_ccsid.rpgle.in \ | |||||
| os400/libssh2rpg/libssh2_publickey.rpgle \ | |||||
| os400/libssh2rpg/libssh2_sftp.rpgle \ | |||||
| Makefile.os400qc3.inc | |||||
| EXTRA_DIST = $(WIN32FILES) $(NETWAREFILES) get_ver.awk \ | |||||
| maketgz NMakefile RELEASE-NOTES libssh2.pc.in $(VMSFILES) config.rpath \ | |||||
| CMakeLists.txt cmake $(OS400FILES) | |||||
| ACLOCAL_AMFLAGS = -I m4 | |||||
| .PHONY: ChangeLog | |||||
| ChangeLog: | |||||
| echo "see NEWS" > ./ChangeLog | |||||
| DISTCLEANFILES += ChangeLog | |||||
| dist-hook: | |||||
| rm -rf $(top_builddir)/tests/log | |||||
| find $(distdir) -name "*.dist" -exec rm {} \; | |||||
| (distit=`find $(srcdir) -name "*.dist"`; \ | |||||
| for file in $$distit; do \ | |||||
| strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \ | |||||
| cp $$file $(distdir)$$strip; \ | |||||
| done) | |||||
| # Code Coverage | |||||
| init-coverage: | |||||
| make clean | |||||
| lcov --directory . --zerocounters | |||||
| COVERAGE_CCOPTS ?= "-g --coverage" | |||||
| COVERAGE_OUT ?= docs/coverage | |||||
| build-coverage: | |||||
| make CFLAGS=$(COVERAGE_CCOPTS) check | |||||
| mkdir -p $(COVERAGE_OUT) | |||||
| lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \ | |||||
| --capture | |||||
| gen-coverage: | |||||
| genhtml --output-directory $(COVERAGE_OUT) \ | |||||
| $(COVERAGE_OUT)/$(PACKAGE).info \ | |||||
| --highlight --frames --legend \ | |||||
| --title "$(PACKAGE_NAME)" | |||||
| coverage: init-coverage build-coverage gen-coverage | |||||
| # DSP/VCPROJ generation adapted from libcurl | |||||
| # only OpenSSL and WinCNG are supported with this build system | |||||
| CRYPTO_CSOURCES = openssl.c wincng.c mbedtls.c | |||||
| CRYPTO_HHEADERS = openssl.h wincng.h mbedtls.h | |||||
| # Makefile.inc provides the CSOURCES and HHEADERS defines | |||||
| include Makefile.inc | |||||
| WIN32SOURCES = $(CSOURCES) | |||||
| WIN32HEADERS = $(HHEADERS) libssh2_config.h | |||||
| $(DSP): win32/msvcproj.head win32/msvcproj.foot Makefile.am | |||||
| echo "creating $(DSP)" | |||||
| @( (cat $(srcdir)/win32/msvcproj.head; \ | |||||
| echo "# Begin Group \"Source Files\""; \ | |||||
| echo ""; \ | |||||
| echo "# PROP Default_Filter \"cpp;c;cxx\""; \ | |||||
| win32_srcs='$(WIN32SOURCES)'; \ | |||||
| sorted_srcs=`for file in $$win32_srcs; do echo $$file; done | sort`; \ | |||||
| for file in $$sorted_srcs; do \ | |||||
| echo "# Begin Source File"; \ | |||||
| echo ""; \ | |||||
| echo "SOURCE=..\\src\\"$$file; \ | |||||
| echo "# End Source File"; \ | |||||
| done; \ | |||||
| echo "# End Group"; \ | |||||
| echo "# Begin Group \"Header Files\""; \ | |||||
| echo ""; \ | |||||
| echo "# PROP Default_Filter \"h;hpp;hxx\""; \ | |||||
| win32_hdrs='$(WIN32HEADERS)'; \ | |||||
| sorted_hdrs=`for file in $$win32_hdrs; do echo $$file; done | sort`; \ | |||||
| for file in $$sorted_hdrs; do \ | |||||
| echo "# Begin Source File"; \ | |||||
| echo ""; \ | |||||
| if [ "$$file" = "libssh2_config.h" ]; \ | |||||
| then \ | |||||
| echo "SOURCE=.\\"$$file; \ | |||||
| else \ | |||||
| echo "SOURCE=..\\src\\"$$file; \ | |||||
| fi; \ | |||||
| echo "# End Source File"; \ | |||||
| done; \ | |||||
| echo "# End Group"; \ | |||||
| cat $(srcdir)/win32/msvcproj.foot) | \ | |||||
| awk '{printf("%s\r\n", gensub("\r", "", "g"))}' > $@ ) | |||||
| $(VCPROJ): win32/vc8proj.head win32/vc8proj.foot Makefile.am | |||||
| echo "creating $(VCPROJ)" | |||||
| @( (cat $(srcdir)/vc8proj.head; \ | |||||
| win32_srcs='$(WIN32SOURCES)'; \ | |||||
| sorted_srcs=`for file in $$win32_srcs; do echo $$file; done | sort`; \ | |||||
| for file in $$sorted_srcs; do \ | |||||
| echo "<File RelativePath=\""..\src\$$file"\"></File>"; \ | |||||
| done; \ | |||||
| echo "</Filter><Filter Name=\"Header Files\">"; \ | |||||
| win32_hdrs='$(WIN32HEADERS)'; \ | |||||
| sorted_hdrs=`for file in $$win32_hdrs; do echo $$file; done | sort`; \ | |||||
| for file in $$sorted_hdrs; do \ | |||||
| echo "<File RelativePath=\""..\src\$$file"\"></File>"; \ | |||||
| done; \ | |||||
| cat $(srcdir)/vc8proj.foot) | \ | |||||
| awk '{printf("%s\r\n", gensub("\r", "", "g"))}' > $@ ) | |||||
| checksrc: | |||||
| perl src/checksrc.pl -i4 -m79 -ASIZEOFNOPAREN -ASNPRINTF -ACOPYRIGHT \ | |||||
| -AFOPENMODE -Wsrc/libssh2_config.h src/*.[ch] include/*.h example/*.c \ | |||||
| tests/*.[ch] | |||||
| @@ -0,0 +1,7 @@ | |||||
| CSOURCES = channel.c comp.c crypt.c hostkey.c kex.c mac.c misc.c \ | |||||
| packet.c publickey.c scp.c session.c sftp.c userauth.c transport.c \ | |||||
| version.c knownhost.c agent.c $(CRYPTO_CSOURCES) pem.c keepalive.c global.c \ | |||||
| blowfish.c bcrypt_pbkdf.c | |||||
| HHEADERS = libssh2_priv.h $(CRYPTO_HHEADERS) transport.h channel.h comp.h \ | |||||
| mac.h misc.h packet.h userauth.h session.h sftp.h crypto.h blf.h | |||||
| @@ -0,0 +1,3 @@ | |||||
| CRYPTO_CSOURCES = libgcrypt.c | |||||
| CRYPTO_HHEADERS = libgcrypt.h | |||||
| CRYPTO_LTLIBS = $(LTLIBGCRYPT) | |||||
| @@ -0,0 +1,3 @@ | |||||
| CRYPTO_CSOURCES = mbedtls.c | |||||
| CRYPTO_HHEADERS = mbedtls.h | |||||
| CRYPTO_LTLIBS = $(LTLIBMBEDCRYPTO) | |||||
| @@ -0,0 +1,2 @@ | |||||
| CRYPTO_CSOURCES = os400qc3.c | |||||
| CRYPTO_HHEADERS = os400qc3.h | |||||
| @@ -0,0 +1,3 @@ | |||||
| The old NEWS file. | |||||
| NEWS is now generated from git and put into the release tarballs. | |||||
| @@ -0,0 +1,33 @@ | |||||
| !include "win32/config.mk" | |||||
| !if "$(WITH_WINCNG)" == "1" | |||||
| !include "Makefile.WinCNG.inc" | |||||
| !else | |||||
| !include "Makefile.OpenSSL.inc" | |||||
| !endif | |||||
| !include "Makefile.inc" | |||||
| OBJECTS=$(CSOURCES:.c=.obj) | |||||
| # SUBDIRS=src example | |||||
| SUBDIRS=src | |||||
| all-sub: win32\objects.mk | |||||
| -for %D in ($(SUBDIRS)) do $(MAKE) /nologo /f %D/NMakefile BUILD=$(BUILD) SUBDIR=%D all-sub | |||||
| clean: | |||||
| -rmdir 2>NUL /s/q $(TARGET) | |||||
| -del 2>NUL win32\objects.mk | |||||
| real-clean vclean: clean | |||||
| -del 2>NUL libssh2.dll | |||||
| -del 2>NUL libssh2.exp | |||||
| -del 2>NUL libssh2.ilk | |||||
| -del 2>NUL libssh2.lib | |||||
| -del 2>NUL *.pdb | |||||
| win32\objects.mk: Makefile.inc | |||||
| @echo OBJECTS = \>$@ | |||||
| @for %O in ($(OBJECTS)) do @echo $$(INTDIR)\%O \>>$@ | |||||
| @echo $$(EOL)>>$@ | |||||
| @@ -0,0 +1,19 @@ | |||||
| libssh2 - SSH2 library | |||||
| ====================== | |||||
| libssh2 is a library implementing the SSH2 protocol, available under | |||||
| the revised BSD license. | |||||
| Web site: https://www.libssh2.org/ | |||||
| Mailing list: https://cool.haxx.se/mailman/listinfo/libssh2-devel | |||||
| License: see COPYING | |||||
| Source code: https://github.com/libssh2/libssh2 | |||||
| Web site source code: https://github.com/libssh2/www | |||||
| Installation instructions are in: | |||||
| - docs/INSTALL_CMAKE for CMake | |||||
| - docs/INSTALL_AUTOTOOLS for Autotools | |||||
| @@ -0,0 +1,16 @@ | |||||
| # libssh2 - SSH2 library | |||||
| libssh2 is a library implementing the SSH2 protocol, available under | |||||
| the revised BSD license. | |||||
| [Web site](https://www.libssh2.org/) | |||||
| [Mailing list](https://cool.haxx.se/mailman/listinfo/libssh2-devel) | |||||
| [BSD Licensed](https://libssh2.org/license.html) | |||||
| [Web site source code](https://github.com/libssh2/www) | |||||
| Installation instructions: | |||||
| - [for CMake](docs/INSTALL_CMAKE.md) | |||||
| - [for autotools](docs/INSTALL_AUTOTOOLS) | |||||
| @@ -0,0 +1,44 @@ | |||||
| libssh2 1.9.0 | |||||
| This release includes the following enhancements and bugfixes: | |||||
| o adds ECDSA keys and host key support when using OpenSSL | |||||
| o adds ED25519 key and host key support when using OpenSSL 1.1.1 | |||||
| o adds OpenSSH style key file reading | |||||
| o adds AES CTR mode support when using WinCNG | |||||
| o adds PEM passphrase protected file support for Libgcrypt and WinCNG | |||||
| o adds SHA256 hostkey fingerprint | |||||
| o adds libssh2_agent_get_identity_path() and libssh2_agent_set_identity_path() | |||||
| o adds explicit zeroing of sensitive data in memory | |||||
| o adds additional bounds checks to network buffer reads | |||||
| o adds the ability to use the server default permissions when creating sftp directories | |||||
| o adds support for building with OpenSSL no engine flag | |||||
| o adds support for building with LibreSSL | |||||
| o increased sftp packet size to 256k | |||||
| o fixed oversized packet handling in sftp | |||||
| o fixed building with OpenSSL 1.1 | |||||
| o fixed a possible crash if sftp stat gets an unexpected response | |||||
| o fixed incorrect parsing of the KEX preference string value | |||||
| o fixed conditional RSA and AES-CTR support | |||||
| o fixed a small memory leak during the key exchange process | |||||
| o fixed a possible memory leak of the ssh banner string | |||||
| o fixed various small memory leaks in the backends | |||||
| o fixed possible out of bounds read when parsing public keys from the server | |||||
| o fixed possible out of bounds read when parsing invalid PEM files | |||||
| o no longer null terminates the scp remote exec command | |||||
| o now handle errors when diffie hellman key pair generation fails | |||||
| o fixed compiling on Windows with the flag STDCALL=ON | |||||
| o improved building instructions | |||||
| o improved unit tests | |||||
| This release would not have looked like this without help, code, reports and | |||||
| advice from friends like these: | |||||
| Peter Surge, Will Cosgrove, Daniel Stenberg, Alex Arslan, Alex Crichton, | |||||
| Thomas Bleeker, Keno Fischer, Marc Hörsken, Marcel Raad, Viktor Szakats, | |||||
| Kamil Dudka, Panos, Etienne Samson, Tseng Jun, Brendan Shanks, doublex, | |||||
| Erik B, Jakob Egger, Thomas Lochmatter, alex-weaver, Adrian Moran, Zenju, | |||||
| gartens, Matthew D. Fuller, Ryan Kelley, Zhen-Huan HWANG, Orivej Desh, | |||||
| Alexander Curtiss | |||||
| (29 contributors) | |||||
| @@ -0,0 +1,512 @@ | |||||
| dnl ********************************************************************** | |||||
| dnl CURL_DETECT_ICC ([ACTION-IF-YES]) | |||||
| dnl | |||||
| dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES | |||||
| dnl sets the $ICC variable to "yes" or "no" | |||||
| dnl ********************************************************************** | |||||
| AC_DEFUN([CURL_DETECT_ICC], | |||||
| [ | |||||
| ICC="no" | |||||
| AC_MSG_CHECKING([for icc in use]) | |||||
| if test "$GCC" = "yes"; then | |||||
| dnl check if this is icc acting as gcc in disguise | |||||
| AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER], | |||||
| dnl action if the text is found, this it has not been replaced by the | |||||
| dnl cpp | |||||
| ICC="no", | |||||
| dnl the text was not found, it was replaced by the cpp | |||||
| ICC="yes" | |||||
| AC_MSG_RESULT([yes]) | |||||
| [$1] | |||||
| ) | |||||
| fi | |||||
| if test "$ICC" = "no"; then | |||||
| # this is not ICC | |||||
| AC_MSG_RESULT([no]) | |||||
| fi | |||||
| ]) | |||||
| dnl We create a function for detecting which compiler we use and then set as | |||||
| dnl pendantic compiler options as possible for that particular compiler. The | |||||
| dnl options are only used for debug-builds. | |||||
| AC_DEFUN([CURL_CC_DEBUG_OPTS], | |||||
| [ | |||||
| if test "z$ICC" = "z"; then | |||||
| CURL_DETECT_ICC | |||||
| fi | |||||
| if test "$GCC" = "yes"; then | |||||
| dnl figure out gcc version! | |||||
| AC_MSG_CHECKING([gcc version]) | |||||
| gccver=`$CC -dumpversion` | |||||
| num1=`echo $gccver | cut -d . -f1` | |||||
| num2=`echo $gccver | cut -d . -f2` | |||||
| gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null` | |||||
| AC_MSG_RESULT($gccver) | |||||
| if test "$ICC" = "yes"; then | |||||
| dnl this is icc, not gcc. | |||||
| dnl ICC warnings we ignore: | |||||
| dnl * 269 warns on our "%Od" printf formatters for curl_off_t output: | |||||
| dnl "invalid format string conversion" | |||||
| dnl * 279 warns on static conditions in while expressions | |||||
| dnl * 981 warns on "operands are evaluated in unspecified order" | |||||
| dnl * 1418 "external definition with no prior declaration" | |||||
| dnl * 1419 warns on "external declaration in primary source file" | |||||
| dnl which we know and do on purpose. | |||||
| WARN="-wd279,269,981,1418,1419" | |||||
| if test "$gccnum" -gt "600"; then | |||||
| dnl icc 6.0 and older doesn't have the -Wall flag | |||||
| WARN="-Wall $WARN" | |||||
| fi | |||||
| else dnl $ICC = yes | |||||
| dnl this is a set of options we believe *ALL* gcc versions support: | |||||
| WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes" | |||||
| dnl -Wcast-align is a bit too annoying on all gcc versions ;-) | |||||
| if test "$gccnum" -ge "207"; then | |||||
| dnl gcc 2.7 or later | |||||
| WARN="$WARN -Wmissing-declarations" | |||||
| fi | |||||
| if test "$gccnum" -gt "295"; then | |||||
| dnl only if the compiler is newer than 2.95 since we got lots of | |||||
| dnl "`_POSIX_C_SOURCE' is not defined" in system headers with | |||||
| dnl gcc 2.95.4 on FreeBSD 4.9! | |||||
| WARN="$WARN -Wundef -Wno-long-long -Wsign-compare" | |||||
| fi | |||||
| if test "$gccnum" -ge "296"; then | |||||
| dnl gcc 2.96 or later | |||||
| WARN="$WARN -Wfloat-equal" | |||||
| fi | |||||
| if test "$gccnum" -gt "296"; then | |||||
| dnl this option does not exist in 2.96 | |||||
| WARN="$WARN -Wno-format-nonliteral" | |||||
| fi | |||||
| dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on | |||||
| dnl on i686-Linux as it gives us heaps with false positives. | |||||
| dnl Also, on gcc 4.0.X it is totally unbearable and complains all | |||||
| dnl over making it unusable for generic purposes. Let's not use it. | |||||
| if test "$gccnum" -ge "303"; then | |||||
| dnl gcc 3.3 and later | |||||
| WARN="$WARN -Wendif-labels -Wstrict-prototypes" | |||||
| fi | |||||
| if test "$gccnum" -ge "304"; then | |||||
| # try these on gcc 3.4 | |||||
| WARN="$WARN -Wdeclaration-after-statement" | |||||
| fi | |||||
| for flag in $CPPFLAGS; do | |||||
| case "$flag" in | |||||
| -I*) | |||||
| dnl Include path, provide a -isystem option for the same dir | |||||
| dnl to prevent warnings in those dirs. The -isystem was not very | |||||
| dnl reliable on earlier gcc versions. | |||||
| add=`echo $flag | sed 's/^-I/-isystem /g'` | |||||
| WARN="$WARN $add" | |||||
| ;; | |||||
| esac | |||||
| done | |||||
| fi dnl $ICC = no | |||||
| CFLAGS="$CFLAGS $WARN" | |||||
| AC_MSG_NOTICE([Added this set of compiler options: $WARN]) | |||||
| else dnl $GCC = yes | |||||
| AC_MSG_NOTICE([Added no extra compiler options]) | |||||
| fi dnl $GCC = yes | |||||
| dnl strip off optimizer flags | |||||
| NEWFLAGS="" | |||||
| for flag in $CFLAGS; do | |||||
| case "$flag" in | |||||
| -O*) | |||||
| dnl echo "cut off $flag" | |||||
| ;; | |||||
| *) | |||||
| NEWFLAGS="$NEWFLAGS $flag" | |||||
| ;; | |||||
| esac | |||||
| done | |||||
| CFLAGS=$NEWFLAGS | |||||
| ]) dnl end of AC_DEFUN() | |||||
| dnl CURL_CHECK_NONBLOCKING_SOCKET | |||||
| dnl ------------------------------------------------- | |||||
| dnl Check for how to set a socket to non-blocking state. There seems to exist | |||||
| dnl four known different ways, with the one used almost everywhere being POSIX | |||||
| dnl and XPG3, while the other different ways for different systems (old BSD, | |||||
| dnl Windows and Amiga). | |||||
| dnl | |||||
| dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the | |||||
| dnl O_NONBLOCK define is found but does not work. This condition is attempted | |||||
| dnl to get caught in this script by using an excessive number of #ifdefs... | |||||
| dnl | |||||
| AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET], | |||||
| [ | |||||
| AC_MSG_CHECKING([non-blocking sockets style]) | |||||
| AC_TRY_COMPILE([ | |||||
| /* headers for O_NONBLOCK test */ | |||||
| #include <sys/types.h> | |||||
| #include <unistd.h> | |||||
| #include <fcntl.h> | |||||
| ],[ | |||||
| /* try to compile O_NONBLOCK */ | |||||
| #if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) | |||||
| # if defined(__SVR4) || defined(__srv4__) | |||||
| # define PLATFORM_SOLARIS | |||||
| # else | |||||
| # define PLATFORM_SUNOS4 | |||||
| # endif | |||||
| #endif | |||||
| #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41) | |||||
| # define PLATFORM_AIX_V3 | |||||
| #endif | |||||
| #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__) | |||||
| #error "O_NONBLOCK does not work on this platform" | |||||
| #endif | |||||
| int socket; | |||||
| int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK); | |||||
| ],[ | |||||
| dnl the O_NONBLOCK test was fine | |||||
| nonblock="O_NONBLOCK" | |||||
| AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets]) | |||||
| ],[ | |||||
| dnl the code was bad, try a different program now, test 2 | |||||
| AC_TRY_COMPILE([ | |||||
| /* headers for FIONBIO test */ | |||||
| #include <unistd.h> | |||||
| #include <stropts.h> | |||||
| ],[ | |||||
| /* FIONBIO source test (old-style unix) */ | |||||
| int socket; | |||||
| int flags = ioctl(socket, FIONBIO, &flags); | |||||
| ],[ | |||||
| dnl FIONBIO test was good | |||||
| nonblock="FIONBIO" | |||||
| AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets]) | |||||
| ],[ | |||||
| dnl FIONBIO test was also bad | |||||
| dnl the code was bad, try a different program now, test 3 | |||||
| AC_TRY_COMPILE([ | |||||
| /* headers for ioctlsocket test (Windows) */ | |||||
| #undef inline | |||||
| #ifdef HAVE_WINDOWS_H | |||||
| #ifndef WIN32_LEAN_AND_MEAN | |||||
| #define WIN32_LEAN_AND_MEAN | |||||
| #endif | |||||
| #include <windows.h> | |||||
| #ifdef HAVE_WINSOCK2_H | |||||
| #include <winsock2.h> | |||||
| #else | |||||
| #ifdef HAVE_WINSOCK_H | |||||
| #include <winsock.h> | |||||
| #endif | |||||
| #endif | |||||
| #endif | |||||
| ],[ | |||||
| /* ioctlsocket source code */ | |||||
| SOCKET sd; | |||||
| unsigned long flags = 0; | |||||
| sd = socket(0, 0, 0); | |||||
| ioctlsocket(sd, FIONBIO, &flags); | |||||
| ],[ | |||||
| dnl ioctlsocket test was good | |||||
| nonblock="ioctlsocket" | |||||
| AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets]) | |||||
| ],[ | |||||
| dnl ioctlsocket didnt compile!, go to test 4 | |||||
| AC_TRY_LINK([ | |||||
| /* headers for IoctlSocket test (Amiga?) */ | |||||
| #include <sys/ioctl.h> | |||||
| ],[ | |||||
| /* IoctlSocket source code */ | |||||
| int socket; | |||||
| int flags = IoctlSocket(socket, FIONBIO, (long)1); | |||||
| ],[ | |||||
| dnl ioctlsocket test was good | |||||
| nonblock="IoctlSocket" | |||||
| AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets]) | |||||
| ],[ | |||||
| dnl Ioctlsocket didnt compile, do test 5! | |||||
| AC_TRY_COMPILE([ | |||||
| /* headers for SO_NONBLOCK test (BeOS) */ | |||||
| #include <socket.h> | |||||
| ],[ | |||||
| /* SO_NONBLOCK source code */ | |||||
| long b = 1; | |||||
| int socket; | |||||
| int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); | |||||
| ],[ | |||||
| dnl the SO_NONBLOCK test was good | |||||
| nonblock="SO_NONBLOCK" | |||||
| AC_DEFINE(HAVE_SO_NONBLOCK, 1, [use SO_NONBLOCK for non-blocking sockets]) | |||||
| ],[ | |||||
| dnl test 5 didnt compile! | |||||
| nonblock="nada" | |||||
| AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets]) | |||||
| ]) | |||||
| dnl end of fifth test | |||||
| ]) | |||||
| dnl end of forth test | |||||
| ]) | |||||
| dnl end of third test | |||||
| ]) | |||||
| dnl end of second test | |||||
| ]) | |||||
| dnl end of non-blocking try-compile test | |||||
| AC_MSG_RESULT($nonblock) | |||||
| if test "$nonblock" = "nada"; then | |||||
| AC_MSG_WARN([non-block sockets disabled]) | |||||
| fi | |||||
| ]) | |||||
| dnl CURL_CHECK_NEED_REENTRANT_SYSTEM | |||||
| dnl ------------------------------------------------- | |||||
| dnl Checks if the preprocessor _REENTRANT definition | |||||
| dnl must be unconditionally done for this platform. | |||||
| dnl Internal macro for CURL_CONFIGURE_REENTRANT. | |||||
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_SYSTEM], [ | |||||
| case $host in | |||||
| *-*-solaris* | *-*-hpux*) | |||||
| tmp_need_reentrant="yes" | |||||
| ;; | |||||
| *) | |||||
| tmp_need_reentrant="no" | |||||
| ;; | |||||
| esac | |||||
| ]) | |||||
| dnl CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT | |||||
| dnl ------------------------------------------------- | |||||
| dnl This macro ensures that configuration tests done | |||||
| dnl after this will execute with preprocessor symbol | |||||
| dnl _REENTRANT defined. This macro also ensures that | |||||
| dnl the generated config file defines NEED_REENTRANT | |||||
| dnl and that in turn setup.h will define _REENTRANT. | |||||
| dnl Internal macro for CURL_CONFIGURE_REENTRANT. | |||||
| AC_DEFUN([CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT], [ | |||||
| AC_DEFINE(NEED_REENTRANT, 1, | |||||
| [Define to 1 if _REENTRANT preprocessor symbol must be defined.]) | |||||
| cat >>confdefs.h <<_EOF | |||||
| #ifndef _REENTRANT | |||||
| # define _REENTRANT | |||||
| #endif | |||||
| _EOF | |||||
| ]) | |||||
| dnl CURL_CONFIGURE_REENTRANT | |||||
| dnl ------------------------------------------------- | |||||
| dnl This first checks if the preprocessor _REENTRANT | |||||
| dnl symbol is already defined. If it isn't currently | |||||
| dnl defined a set of checks are performed to verify | |||||
| dnl if its definition is required to make visible to | |||||
| dnl the compiler a set of *_r functions. Finally, if | |||||
| dnl _REENTRANT is already defined or needed it takes | |||||
| dnl care of making adjustments necessary to ensure | |||||
| dnl that it is defined equally for further configure | |||||
| dnl tests and generated config file. | |||||
| AC_DEFUN([CURL_CONFIGURE_REENTRANT], [ | |||||
| AC_PREREQ([2.50])dnl | |||||
| # | |||||
| AC_MSG_CHECKING([if _REENTRANT is already defined]) | |||||
| AC_COMPILE_IFELSE([ | |||||
| AC_LANG_PROGRAM([[ | |||||
| ]],[[ | |||||
| #ifdef _REENTRANT | |||||
| int dummy=1; | |||||
| #else | |||||
| force compilation error | |||||
| #endif | |||||
| ]]) | |||||
| ],[ | |||||
| AC_MSG_RESULT([yes]) | |||||
| tmp_reentrant_initially_defined="yes" | |||||
| ],[ | |||||
| AC_MSG_RESULT([no]) | |||||
| tmp_reentrant_initially_defined="no" | |||||
| ]) | |||||
| # | |||||
| if test "$tmp_reentrant_initially_defined" = "no"; then | |||||
| AC_MSG_CHECKING([if _REENTRANT is actually needed]) | |||||
| CURL_CHECK_NEED_REENTRANT_SYSTEM | |||||
| if test "$tmp_need_reentrant" = "yes"; then | |||||
| AC_MSG_RESULT([yes]) | |||||
| else | |||||
| AC_MSG_RESULT([no]) | |||||
| fi | |||||
| fi | |||||
| # | |||||
| AC_MSG_CHECKING([if _REENTRANT is onwards defined]) | |||||
| if test "$tmp_reentrant_initially_defined" = "yes" || | |||||
| test "$tmp_need_reentrant" = "yes"; then | |||||
| CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT | |||||
| AC_MSG_RESULT([yes]) | |||||
| else | |||||
| AC_MSG_RESULT([no]) | |||||
| fi | |||||
| # | |||||
| ]) | |||||
| dnl LIBSSH2_LIB_HAVE_LINKFLAGS | |||||
| dnl -------------------------- | |||||
| dnl Wrapper around AC_LIB_HAVE_LINKFLAGS to also check $prefix/lib, if set. | |||||
| dnl | |||||
| dnl autoconf only checks $prefix/lib64 if gcc -print-search-dirs output | |||||
| dnl includes a directory named lib64. So, to find libraries in $prefix/lib | |||||
| dnl we append -L$prefix/lib to LDFLAGS before checking. | |||||
| dnl | |||||
| dnl For conveniece, $4 is expanded if [lib]$1 is found. | |||||
| AC_DEFUN([LIBSSH2_LIB_HAVE_LINKFLAGS], [ | |||||
| libssh2_save_CPPFLAGS="$CPPFLAGS" | |||||
| libssh2_save_LDFLAGS="$LDFLAGS" | |||||
| if test "${with_lib$1_prefix+set}" = set; then | |||||
| CPPFLAGS="$CPPFLAGS${CPPFLAGS:+ }-I${with_lib$1_prefix}/include" | |||||
| LDFLAGS="$LDFLAGS${LDFLAGS:+ }-L${with_lib$1_prefix}/lib" | |||||
| fi | |||||
| AC_LIB_HAVE_LINKFLAGS([$1], [$2], [$3]) | |||||
| LDFLAGS="$libssh2_save_LDFLAGS" | |||||
| if test "$ac_cv_lib$1" = "yes"; then : | |||||
| $4 | |||||
| else | |||||
| CPPFLAGS="$libssh2_save_CPPFLAGS" | |||||
| fi | |||||
| ]) | |||||
| AC_DEFUN([LIBSSH2_CHECK_CRYPTO], [ | |||||
| if test "$use_crypto" = "auto" && test "$found_crypto" = "none" || test "$use_crypto" = "$1"; then | |||||
| m4_case([$1], | |||||
| [openssl], [ | |||||
| LIBSSH2_LIB_HAVE_LINKFLAGS([ssl], [crypto], [#include <openssl/ssl.h>], [ | |||||
| AC_DEFINE(LIBSSH2_OPENSSL, 1, [Use $1]) | |||||
| LIBSREQUIRED="$LIBSREQUIRED${LIBSREQUIRED:+ }libssl libcrypto" | |||||
| # Not all OpenSSL have AES-CTR functions. | |||||
| libssh2_save_LIBS="$LIBS" | |||||
| LIBS="$LIBS $LIBSSL" | |||||
| AC_CHECK_FUNCS(EVP_aes_128_ctr) | |||||
| LIBS="$libssh2_save_LIBS" | |||||
| found_crypto="$1" | |||||
| found_crypto_str="OpenSSL (AES-CTR: ${ac_cv_func_EVP_aes_128_ctr:-N/A})" | |||||
| ]) | |||||
| ], | |||||
| [libgcrypt], [ | |||||
| LIBSSH2_LIB_HAVE_LINKFLAGS([gcrypt], [], [#include <gcrypt.h>], [ | |||||
| AC_DEFINE(LIBSSH2_LIBGCRYPT, 1, [Use $1]) | |||||
| found_crypto="$1" | |||||
| ]) | |||||
| ], | |||||
| [mbedtls], [ | |||||
| LIBSSH2_LIB_HAVE_LINKFLAGS([mbedcrypto], [], [#include <mbedtls/version.h>], [ | |||||
| AC_DEFINE(LIBSSH2_MBEDTLS, 1, [Use $1]) | |||||
| LIBS="$LIBS -lmbedcrypto" | |||||
| found_crypto="$1" | |||||
| support_clear_memory=yes | |||||
| ]) | |||||
| ], | |||||
| [wincng], [ | |||||
| # Look for Windows Cryptography API: Next Generation | |||||
| AC_CHECK_HEADERS([ntdef.h ntstatus.h], [], [], [#include <windows.h>]) | |||||
| AC_CHECK_DECLS([SecureZeroMemory], [], [], [#include <windows.h>]) | |||||
| LIBSSH2_LIB_HAVE_LINKFLAGS([crypt32], [], [ | |||||
| #include <windows.h> | |||||
| #include <wincrypt.h> | |||||
| ]) | |||||
| LIBSSH2_LIB_HAVE_LINKFLAGS([bcrypt], [], [ | |||||
| #include <windows.h> | |||||
| #include <bcrypt.h> | |||||
| ], [ | |||||
| AC_DEFINE(LIBSSH2_WINCNG, 1, [Use $1]) | |||||
| found_crypto="$1" | |||||
| found_crypto_str="Windows Cryptography API: Next Generation" | |||||
| support_clear_memory="$ac_cv_have_decl_SecureZeroMemory" | |||||
| ]) | |||||
| ], | |||||
| ) | |||||
| test "$found_crypto" = "none" && | |||||
| crypto_errors="${crypto_errors}No $1 crypto library found! | |||||
| " | |||||
| fi | |||||
| ]) | |||||
| dnl LIBSSH2_CHECK_OPTION_WERROR | |||||
| dnl ------------------------------------------------- | |||||
| dnl Verify if configure has been invoked with option | |||||
| dnl --enable-werror or --disable-werror, and set | |||||
| dnl shell variable want_werror as appropriate. | |||||
| AC_DEFUN([LIBSSH2_CHECK_OPTION_WERROR], [ | |||||
| AC_BEFORE([$0],[LIBSSH2_CHECK_COMPILER])dnl | |||||
| AC_MSG_CHECKING([whether to enable compiler warnings as errors]) | |||||
| OPT_COMPILER_WERROR="default" | |||||
| AC_ARG_ENABLE(werror, | |||||
| AC_HELP_STRING([--enable-werror],[Enable compiler warnings as errors]) | |||||
| AC_HELP_STRING([--disable-werror],[Disable compiler warnings as errors]), | |||||
| OPT_COMPILER_WERROR=$enableval) | |||||
| case "$OPT_COMPILER_WERROR" in | |||||
| no) | |||||
| dnl --disable-werror option used | |||||
| want_werror="no" | |||||
| ;; | |||||
| default) | |||||
| dnl configure option not specified | |||||
| want_werror="no" | |||||
| ;; | |||||
| *) | |||||
| dnl --enable-werror option used | |||||
| want_werror="yes" | |||||
| ;; | |||||
| esac | |||||
| AC_MSG_RESULT([$want_werror]) | |||||
| if test X"$want_werror" = Xyes; then | |||||
| CFLAGS="$CFLAGS -Werror" | |||||
| fi | |||||
| ]) | |||||
| @@ -0,0 +1,109 @@ | |||||
| # Copyright (c) 2014, Ruslan Baratov | |||||
| # Copyright (c) 2014, 2016 Alexander Lamaison | |||||
| # All rights reserved. | |||||
| # | |||||
| # Redistribution and use in source and binary forms, with or without | |||||
| # modification, are permitted provided that the following conditions are met: | |||||
| # | |||||
| # * Redistributions of source code must retain the above copyright notice, this | |||||
| # list of conditions and the following disclaimer. | |||||
| # | |||||
| # * 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. | |||||
| os: Visual Studio 2015 | |||||
| environment: | |||||
| matrix: | |||||
| - GENERATOR: "Visual Studio 14 2015" | |||||
| BUILD_SHARED_LIBS: ON | |||||
| CRYPTO_BACKEND: "OpenSSL" | |||||
| - GENERATOR: "Visual Studio 14 2015" | |||||
| BUILD_SHARED_LIBS: OFF | |||||
| CRYPTO_BACKEND: "OpenSSL" | |||||
| - GENERATOR: "Visual Studio 12 2013" | |||||
| BUILD_SHARED_LIBS: ON | |||||
| CRYPTO_BACKEND: "OpenSSL" | |||||
| - GENERATOR: "Visual Studio 12 2013" | |||||
| BUILD_SHARED_LIBS: OFF | |||||
| CRYPTO_BACKEND: "OpenSSL" | |||||
| - GENERATOR: "Visual Studio 14 2015" | |||||
| BUILD_SHARED_LIBS: ON | |||||
| CRYPTO_BACKEND: "WinCNG" | |||||
| - GENERATOR: "Visual Studio 14 2015" | |||||
| BUILD_SHARED_LIBS: OFF | |||||
| CRYPTO_BACKEND: "WinCNG" | |||||
| - GENERATOR: "Visual Studio 12 2013" | |||||
| BUILD_SHARED_LIBS: ON | |||||
| CRYPTO_BACKEND: "WinCNG" | |||||
| - GENERATOR: "Visual Studio 12 2013" | |||||
| BUILD_SHARED_LIBS: OFF | |||||
| CRYPTO_BACKEND: "WinCNG" | |||||
| digitalocean_access_token: | |||||
| secure: 8qRitvrj69Xhf0Tmu27xnz5drmL2YhmOJLGpXIkYyTCC0JNtBoXW6fMcF3u4Uj1+pIQ+TjegQOwYimlz0oivKTro3v3EXro+osAMNJG6NKc= | |||||
| platform: | |||||
| - x86 | |||||
| - x64 | |||||
| configuration: | |||||
| # - Debug | |||||
| - Release | |||||
| matrix: | |||||
| fast_finish: true | |||||
| allow_failures: | |||||
| - GENERATOR: "Visual Studio 9 2008" | |||||
| platform: x64 | |||||
| install: | |||||
| - choco install -y docker | |||||
| - choco install -y docker-machine | |||||
| build_script: | |||||
| - ps: if($env:PLATFORM -eq "x64") { $env:CMAKE_GEN_SUFFIX=" Win64" } | |||||
| - cmake "-G%GENERATOR%%CMAKE_GEN_SUFFIX%" -DBUILD_SHARED_LIBS=%BUILD_SHARED_LIBS% -DCRYPTO_BACKEND=%CRYPTO_BACKEND% -H. -B_builds | |||||
| - cmake --build _builds --config "%CONFIGURATION%" | |||||
| before_test: | |||||
| - set DOCKER_MACHINE_NAME=appveyor-%APPVEYOR_PROJECT_SLUG%-%APPVEYOR_JOB_ID% | |||||
| - ps: if($env:digitalocean_access_token) { echo "Using DigitalOcean for testing." } else { echo "DigitalOcean not available. Skipping testing." } | |||||
| - ps: if($env:digitalocean_access_token) { docker-machine create --driver digitalocean --digitalocean-access-token $($env:digitalocean_access_token) $($env:DOCKER_MACHINE_NAME) } | |||||
| - ps: if($env:digitalocean_access_token) { docker-machine env $($env:DOCKER_MACHINE_NAME) --shell powershell | Invoke-Expression } | |||||
| test_script: | |||||
| - ps: cd _builds | |||||
| - ps: if($env:digitalocean_access_token) { ctest -VV -C $($env:CONFIGURATION) --output-on-failure } | |||||
| after_test: | |||||
| - ps: if($env:digitalocean_access_token) { docker-machine rm -y $($env:DOCKER_MACHINE_NAME) } | |||||
| on_failure: | |||||
| - ps: if($env:digitalocean_access_token) { docker-machine rm -y $($env:DOCKER_MACHINE_NAME) } | |||||
| - ps: if(Test-Path _builds/CMakeFiles/CMakeOutput.log) { cat _builds/CMakeFiles/CMakeOutput.log } | |||||
| - ps: if(Test-Path _builds/CMakeFiles/CMakeError.log) { cat _builds/CMakeFiles/CMakeError.log } | |||||
| # whitelist branches to avoid testing feature branches twice (as branch and as pull request) | |||||
| branches: | |||||
| only: | |||||
| - master | |||||
| @@ -0,0 +1,8 @@ | |||||
| #!/bin/sh | |||||
| echo "***" >&2 | |||||
| echo "*** Do not use buildconf. Instead, just use: autoreconf -fi" >&2 | |||||
| echo "*** Doing it for you now, but buildconf may disapear in the future." >&2 | |||||
| echo "***" >&2 | |||||
| exec ${AUTORECONF:-autoreconf} -fi "${@}" | |||||
| @@ -0,0 +1,81 @@ | |||||
| # Copyright (c) 2014 Alexander Lamaison <alexander.lamaison@gmail.com> | |||||
| # | |||||
| # Redistribution and use in source and binary forms, | |||||
| # with or without modification, are permitted provided | |||||
| # that the following conditions are met: | |||||
| # | |||||
| # Redistributions of source code must retain the above | |||||
| # copyright notice, this list of conditions and the | |||||
| # following disclaimer. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # Neither the name of the copyright holder nor the names | |||||
| # of any other contributors may be used to endorse or | |||||
| # promote products derived from this software without | |||||
| # specific prior written permission. | |||||
| # | |||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. | |||||
| # - check_function_exists_maybe_need_library(<function> <var> [lib1 ... libn]) | |||||
| # | |||||
| # Check if function is available for linking, first without extra libraries, and | |||||
| # then, if not found that way, linking in each optional library as well. This | |||||
| # function is similar to autotools AC_SEARCH_LIBS. | |||||
| # | |||||
| # If the function if found, this will define <var>. | |||||
| # | |||||
| # If the function was only found by linking in an additional library, this | |||||
| # will define NEED_LIB_LIBX, where LIBX is the one of lib1 to libn that | |||||
| # makes the function available, in uppercase. | |||||
| # | |||||
| # The following variables may be set before calling this macro to | |||||
| # modify the way the check is run: | |||||
| # | |||||
| # CMAKE_REQUIRED_FLAGS = string of compile command line flags | |||||
| # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) | |||||
| # CMAKE_REQUIRED_INCLUDES = list of include directories | |||||
| # CMAKE_REQUIRED_LIBRARIES = list of libraries to link | |||||
| # | |||||
| include(CheckFunctionExists) | |||||
| include(CheckLibraryExists) | |||||
| function(check_function_exists_may_need_library function variable) | |||||
| check_function_exists(${function} ${variable}) | |||||
| if(NOT ${variable}) | |||||
| foreach(lib ${ARGN}) | |||||
| string(TOUPPER ${lib} UP_LIB) | |||||
| # Use new variable to prevent cache from previous step shortcircuiting | |||||
| # new test | |||||
| check_library_exists(${lib} ${function} "" HAVE_${function}_IN_${lib}) | |||||
| if(HAVE_${function}_IN_${lib}) | |||||
| set(${variable} 1 CACHE INTERNAL | |||||
| "Function ${function} found in library ${lib}") | |||||
| set(NEED_LIB_${UP_LIB} 1 CACHE INTERNAL | |||||
| "Need to link ${lib}") | |||||
| break() | |||||
| endif() | |||||
| endforeach() | |||||
| endif() | |||||
| endfunction() | |||||
| @@ -0,0 +1,119 @@ | |||||
| include(CheckCSourceCompiles) | |||||
| # - check_nonblocking_socket_support() | |||||
| # | |||||
| # Check for how to set a socket to non-blocking state. There seems to exist | |||||
| # four known different ways, with the one used almost everywhere being POSIX | |||||
| # and XPG3, while the other different ways for different systems (old BSD, | |||||
| # Windows and Amiga). | |||||
| # | |||||
| # One of the following variables will be set indicating the supported | |||||
| # method (if any): | |||||
| # HAVE_O_NONBLOCK | |||||
| # HAVE_FIONBIO | |||||
| # HAVE_IOCTLSOCKET | |||||
| # HAVE_IOCTLSOCKET_CASE | |||||
| # HAVE_SO_NONBLOCK | |||||
| # HAVE_DISABLED_NONBLOCKING | |||||
| # | |||||
| # The following variables may be set before calling this macro to | |||||
| # modify the way the check is run: | |||||
| # | |||||
| # CMAKE_REQUIRED_FLAGS = string of compile command line flags | |||||
| # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) | |||||
| # CMAKE_REQUIRED_INCLUDES = list of include directories | |||||
| # CMAKE_REQUIRED_LIBRARIES = list of libraries to link | |||||
| # | |||||
| macro(check_nonblocking_socket_support) | |||||
| # There are two known platforms (AIX 3.x and SunOS 4.1.x) where the | |||||
| # O_NONBLOCK define is found but does not work. | |||||
| check_c_source_compiles(" | |||||
| #include <sys/types.h> | |||||
| #include <unistd.h> | |||||
| #include <fcntl.h> | |||||
| #if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) | |||||
| # if defined(__SVR4) || defined(__srv4__) | |||||
| # define PLATFORM_SOLARIS | |||||
| # else | |||||
| # define PLATFORM_SUNOS4 | |||||
| # endif | |||||
| #endif | |||||
| #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41) | |||||
| # define PLATFORM_AIX_V3 | |||||
| #endif | |||||
| #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__) | |||||
| #error \"O_NONBLOCK does not work on this platform\" | |||||
| #endif | |||||
| int main() | |||||
| { | |||||
| int socket; | |||||
| int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK); | |||||
| }" | |||||
| HAVE_O_NONBLOCK) | |||||
| if(NOT HAVE_O_NONBLOCK) | |||||
| check_c_source_compiles("/* FIONBIO test (old-style unix) */ | |||||
| #include <unistd.h> | |||||
| #include <stropts.h> | |||||
| int main() | |||||
| { | |||||
| int socket; | |||||
| int flags = ioctl(socket, FIONBIO, &flags); | |||||
| }" | |||||
| HAVE_FIONBIO) | |||||
| if(NOT HAVE_FIONBIO) | |||||
| check_c_source_compiles("/* ioctlsocket test (Windows) */ | |||||
| #undef inline | |||||
| #ifndef WIN32_LEAN_AND_MEAN | |||||
| #define WIN32_LEAN_AND_MEAN | |||||
| #endif | |||||
| #include <windows.h> | |||||
| #include <winsock2.h> | |||||
| int main() | |||||
| { | |||||
| SOCKET sd; | |||||
| unsigned long flags = 0; | |||||
| sd = socket(0, 0, 0); | |||||
| ioctlsocket(sd, FIONBIO, &flags); | |||||
| }" | |||||
| HAVE_IOCTLSOCKET) | |||||
| if(NOT HAVE_IOCTLSOCKET) | |||||
| check_c_source_compiles("/* IoctlSocket test (Amiga?) */ | |||||
| #include <sys/ioctl.h> | |||||
| int main() | |||||
| { | |||||
| int socket; | |||||
| int flags = IoctlSocket(socket, FIONBIO, (long)1); | |||||
| }" | |||||
| HAVE_IOCTLSOCKET_CASE) | |||||
| if(NOT HAVE_IOCTLSOCKET_CASE) | |||||
| check_c_source_compiles("/* SO_NONBLOCK test (BeOS) */ | |||||
| #include <socket.h> | |||||
| int main() | |||||
| { | |||||
| long b = 1; | |||||
| int socket; | |||||
| int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); | |||||
| }" | |||||
| HAVE_SO_NONBLOCK) | |||||
| if(NOT HAVE_SO_NONBLOCK) | |||||
| # No non-blocking socket method found | |||||
| set(HAVE_DISABLED_NONBLOCKING 1) | |||||
| endif() | |||||
| endif() | |||||
| endif() | |||||
| endif() | |||||
| endif() | |||||
| endmacro() | |||||
| @@ -0,0 +1,72 @@ | |||||
| # Copyright (c) 2014 Alexander Lamaison <alexander.lamaison@gmail.com> | |||||
| # | |||||
| # Redistribution and use in source and binary forms, | |||||
| # with or without modification, are permitted provided | |||||
| # that the following conditions are met: | |||||
| # | |||||
| # Redistributions of source code must retain the above | |||||
| # copyright notice, this list of conditions and the | |||||
| # following disclaimer. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # Neither the name of the copyright holder nor the names | |||||
| # of any other contributors may be used to endorse or | |||||
| # promote products derived from this software without | |||||
| # specific prior written permission. | |||||
| # | |||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. | |||||
| include(CMakeParseArguments) | |||||
| function(ADD_TARGET_TO_COPY_DEPENDENCIES) | |||||
| set(options) | |||||
| set(oneValueArgs TARGET) | |||||
| set(multiValueArgs DEPENDENCIES BEFORE_TARGETS) | |||||
| cmake_parse_arguments(COPY | |||||
| "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) | |||||
| if(NOT COPY_DEPENDENCIES) | |||||
| return() | |||||
| endif() | |||||
| # Using a custom target to drive custom commands stops multiple | |||||
| # parallel builds trying to kick off the commands at the same time | |||||
| add_custom_target(${COPY_TARGET}) | |||||
| foreach(target ${COPY_BEFORE_TARGETS}) | |||||
| add_dependencies(${target} ${COPY_TARGET}) | |||||
| endforeach() | |||||
| foreach(dependency ${COPY_DEPENDENCIES}) | |||||
| add_custom_command( | |||||
| TARGET ${COPY_TARGET} | |||||
| DEPENDS ${dependency} | |||||
| # Make directory first otherwise file is copied in place of | |||||
| # directory instead of into it | |||||
| COMMAND ${CMAKE_COMMAND} | |||||
| ARGS -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} | |||||
| COMMAND ${CMAKE_COMMAND} | |||||
| ARGS -E copy ${dependency} ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} | |||||
| VERBATIM) | |||||
| endforeach() | |||||
| endfunction() | |||||
| @@ -0,0 +1,53 @@ | |||||
| # Copyright (c) 2014 Alexander Lamaison <alexander.lamaison@gmail.com> | |||||
| # | |||||
| # Redistribution and use in source and binary forms, | |||||
| # with or without modification, are permitted provided | |||||
| # that the following conditions are met: | |||||
| # | |||||
| # Redistributions of source code must retain the above | |||||
| # copyright notice, this list of conditions and the | |||||
| # following disclaimer. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # Neither the name of the copyright holder nor the names | |||||
| # of any other contributors may be used to endorse or | |||||
| # promote products derived from this software without | |||||
| # specific prior written permission. | |||||
| # | |||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. | |||||
| # - Try to find Libgcrypt | |||||
| # This will define all or none of: | |||||
| # LIBGCRYPT_FOUND - if Libgcrypt headers and library was found | |||||
| # LIBGCRYPT_INCLUDE_DIRS - The Libgcrypt include directories | |||||
| # LIBGCRYPT_LIBRARIES - The libraries needed to use Libgcrypt | |||||
| find_path(LIBGCRYPT_INCLUDE_DIR gcrypt.h) | |||||
| find_library(LIBGCRYPT_LIBRARY NAMES gcrypt libgcrypt) | |||||
| set(LIBGCRYPT_LIBRARIES ${LIBGCRYPT_LIBRARY}) | |||||
| set(LIBGCRYPT_INCLUDE_DIRS ${LIBGCRYPT_INCLUDE_DIR}) | |||||
| include(FindPackageHandleStandardArgs) | |||||
| find_package_handle_standard_args(Libgcrypt DEFAULT_MSG | |||||
| LIBGCRYPT_LIBRARY LIBGCRYPT_INCLUDE_DIR) | |||||
| mark_as_advanced(LIBGCRYPT_INCLUDE_DIR LIBGCRYPT_LIBRARY) | |||||
| @@ -0,0 +1,64 @@ | |||||
| # - Try to find mbedTLS | |||||
| # Once done this will define | |||||
| # | |||||
| # Read-Only variables | |||||
| # MBEDTLS_FOUND - system has mbedTLS | |||||
| # MBEDTLS_INCLUDE_DIR - the mbedTLS include directory | |||||
| # MBEDTLS_LIBRARY_DIR - the mbedTLS library directory | |||||
| # MBEDTLS_LIBRARIES - Link these to use mbedTLS | |||||
| # MBEDTLS_LIBRARY - path to mbedTLS library | |||||
| # MBEDX509_LIBRARY - path to mbedTLS X.509 library | |||||
| # MBEDCRYPTO_LIBRARY - path to mbedTLS Crypto library | |||||
| FIND_PATH(MBEDTLS_INCLUDE_DIR mbedtls/version.h) | |||||
| IF(MBEDTLS_INCLUDE_DIR AND MBEDTLS_LIBRARIES) | |||||
| # Already in cache, be silent | |||||
| SET(MBEDTLS_FIND_QUIETLY TRUE) | |||||
| ENDIF() | |||||
| FIND_LIBRARY(MBEDTLS_LIBRARY NAMES mbedtls libmbedtls libmbedx509) | |||||
| FIND_LIBRARY(MBEDX509_LIBRARY NAMES mbedx509 libmbedx509) | |||||
| FIND_LIBRARY(MBEDCRYPTO_LIBRARY NAMES mbedcrypto libmbedcrypto) | |||||
| IF(MBEDTLS_INCLUDE_DIR AND MBEDTLS_LIBRARY AND MBEDX509_LIBRARY AND MBEDCRYPTO_LIBRARY) | |||||
| SET(MBEDTLS_FOUND TRUE) | |||||
| ENDIF() | |||||
| IF(MBEDTLS_FOUND) | |||||
| #Â split mbedTLS into -L and -l linker options, so we can set them for pkg-config | |||||
| GET_FILENAME_COMPONENT(MBEDTLS_LIBRARY_DIR ${MBEDTLS_LIBRARY} PATH) | |||||
| GET_FILENAME_COMPONENT(MBEDTLS_LIBRARY_FILE ${MBEDTLS_LIBRARY} NAME_WE) | |||||
| GET_FILENAME_COMPONENT(MBEDX509_LIBRARY_FILE ${MBEDX509_LIBRARY} NAME_WE) | |||||
| GET_FILENAME_COMPONENT(MBEDCRYPTO_LIBRARY_FILE ${MBEDCRYPTO_LIBRARY} NAME_WE) | |||||
| STRING(REGEX REPLACE "^lib" "" MBEDTLS_LIBRARY_FILE ${MBEDTLS_LIBRARY_FILE}) | |||||
| STRING(REGEX REPLACE "^lib" "" MBEDX509_LIBRARY_FILE ${MBEDX509_LIBRARY_FILE}) | |||||
| STRING(REGEX REPLACE "^lib" "" MBEDCRYPTO_LIBRARY_FILE ${MBEDCRYPTO_LIBRARY_FILE}) | |||||
| SET(MBEDTLS_LIBRARIES "-L${MBEDTLS_LIBRARY_DIR} -l${MBEDTLS_LIBRARY_FILE} -l${MBEDX509_LIBRARY_FILE} -l${MBEDCRYPTO_LIBRARY_FILE}") | |||||
| IF(NOT MBEDTLS_FIND_QUIETLY) | |||||
| MESSAGE(STATUS "Found mbedTLS:") | |||||
| FILE(READ ${MBEDTLS_INCLUDE_DIR}/mbedtls/version.h MBEDTLSCONTENT) | |||||
| STRING(REGEX MATCH "MBEDTLS_VERSION_STRING +\"[0-9|.]+\"" MBEDTLSMATCH ${MBEDTLSCONTENT}) | |||||
| IF (MBEDTLSMATCH) | |||||
| STRING(REGEX REPLACE "MBEDTLS_VERSION_STRING +\"([0-9|.]+)\"" "\\1" MBEDTLS_VERSION ${MBEDTLSMATCH}) | |||||
| MESSAGE(STATUS " version ${MBEDTLS_VERSION}") | |||||
| ENDIF(MBEDTLSMATCH) | |||||
| MESSAGE(STATUS " TLS: ${MBEDTLS_LIBRARY}") | |||||
| MESSAGE(STATUS " X509: ${MBEDX509_LIBRARY}") | |||||
| MESSAGE(STATUS " Crypto: ${MBEDCRYPTO_LIBRARY}") | |||||
| ENDIF(NOT MBEDTLS_FIND_QUIETLY) | |||||
| ELSE(MBEDTLS_FOUND) | |||||
| IF(MBEDTLS_FIND_REQUIRED) | |||||
| MESSAGE(FATAL_ERROR "Could not find mbedTLS") | |||||
| ENDIF(MBEDTLS_FIND_REQUIRED) | |||||
| ENDIF(MBEDTLS_FOUND) | |||||
| MARK_AS_ADVANCED( | |||||
| MBEDTLS_INCLUDE_DIR | |||||
| MBEDTLS_LIBRARY_DIR | |||||
| MBEDTLS_LIBRARIES | |||||
| MBEDTLS_LIBRARY | |||||
| MBEDX509_LIBRARY | |||||
| MBEDCRYPTO_LIBRARY | |||||
| ) | |||||
| @@ -0,0 +1,64 @@ | |||||
| # Copyright (c) 2014 Alexander Lamaison <alexander.lamaison@gmail.com> | |||||
| # | |||||
| # Redistribution and use in source and binary forms, | |||||
| # with or without modification, are permitted provided | |||||
| # that the following conditions are met: | |||||
| # | |||||
| # Redistributions of source code must retain the above | |||||
| # copyright notice, this list of conditions and the | |||||
| # following disclaimer. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # Neither the name of the copyright holder nor the names | |||||
| # of any other contributors may be used to endorse or | |||||
| # promote products derived from this software without | |||||
| # specific prior written permission. | |||||
| # | |||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. | |||||
| # Some systems have their socket functions in a library. | |||||
| # (Solaris -lsocket/-lnsl, Windows -lws2_32). This macro appends those | |||||
| # libraries to the given list | |||||
| macro(append_needed_socket_libraries LIBRARIES_LIST) | |||||
| if(CMAKE_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_SIZEOF_VOID_P EQUAL 4) | |||||
| # x86 Windows uses STDCALL for these functions, so their names are mangled, | |||||
| # meaning the platform checks don't work. Hardcoding these until we get | |||||
| # a better solution. | |||||
| set(HAVE_SOCKET 1) | |||||
| set(HAVE_SELECT 1) | |||||
| set(HAVE_INET_ADDR 1) | |||||
| set(NEED_LIB_WS2_32 1) | |||||
| else() | |||||
| check_function_exists_may_need_library(socket HAVE_SOCKET socket ws2_32) | |||||
| check_function_exists_may_need_library(select HAVE_SELECT ws2_32) | |||||
| check_function_exists_may_need_library(inet_addr HAVE_INET_ADDR nsl ws2_32) | |||||
| endif() | |||||
| if(NEED_LIB_SOCKET) | |||||
| list(APPEND ${LIBRARIES_LIST} socket) | |||||
| endif() | |||||
| if(NEED_LIB_NSL) | |||||
| list(APPEND ${LIBRARIES_LIST} nsl) | |||||
| endif() | |||||
| if(NEED_LIB_WS2_32) | |||||
| list(APPEND ${LIBRARIES_LIST} ws2_32) | |||||
| endif() | |||||
| endmacro() | |||||
| @@ -0,0 +1,42 @@ | |||||
| # Copyright (c) 2014 Alexander Lamaison <alexander.lamaison@gmail.com> | |||||
| # | |||||
| # Redistribution and use in source and binary forms, | |||||
| # with or without modification, are permitted provided | |||||
| # that the following conditions are met: | |||||
| # | |||||
| # Redistributions of source code must retain the above | |||||
| # copyright notice, this list of conditions and the | |||||
| # following disclaimer. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # Neither the name of the copyright holder nor the names | |||||
| # of any other contributors may be used to endorse or | |||||
| # promote products derived from this software without | |||||
| # specific prior written permission. | |||||
| # | |||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. | |||||
| # Cross-compile 32-bit binary on 64-bit linux host | |||||
| set(CMAKE_SYSTEM_NAME Linux) | |||||
| set(CMAKE_SYSTEM_VERSION 1) | |||||
| set(CMAKE_SYSTEM_PROCESSOR "i386") | |||||
| set(CMAKE_CXX_COMPILER_ARG1 "-m32") | |||||
| set(CMAKE_C_COMPILER_ARG1 "-m32") | |||||
| @@ -0,0 +1,23 @@ | |||||
| if(MSVC) | |||||
| # Use the highest warning level for visual studio. | |||||
| if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | |||||
| string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | |||||
| else() | |||||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") | |||||
| endif() | |||||
| if(CMAKE_C_FLAGS MATCHES "/W[0-4]") | |||||
| string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") | |||||
| else() | |||||
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") | |||||
| endif() | |||||
| # Disable broken warnings | |||||
| add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) | |||||
| elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) | |||||
| if(NOT CMAKE_CXX_FLAGS MATCHES "-Wall") | |||||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") | |||||
| endif() | |||||
| if(NOT CMAKE_C_FLAGS MATCHES "-Wall") | |||||
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") | |||||
| endif() | |||||
| endif() | |||||
| @@ -0,0 +1,660 @@ | |||||
| #! /bin/sh | |||||
| # Output a system dependent set of variables, describing how to set the | |||||
| # run time search path of shared libraries in an executable. | |||||
| # | |||||
| # Copyright 1996-2006 Free Software Foundation, Inc. | |||||
| # Taken from GNU libtool, 2001 | |||||
| # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 | |||||
| # | |||||
| # This file is free software; the Free Software Foundation gives | |||||
| # unlimited permission to copy and/or distribute it, with or without | |||||
| # modifications, as long as this notice is preserved. | |||||
| # | |||||
| # The first argument passed to this file is the canonical host specification, | |||||
| # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM | |||||
| # or | |||||
| # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM | |||||
| # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld | |||||
| # should be set by the caller. | |||||
| # | |||||
| # The set of defined variables is at the end of this script. | |||||
| # Known limitations: | |||||
| # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer | |||||
| # than 256 bytes, otherwise the compiler driver will dump core. The only | |||||
| # known workaround is to choose shorter directory names for the build | |||||
| # directory and/or the installation directory. | |||||
| # All known linkers require a `.a' archive for static linking (except MSVC, | |||||
| # which needs '.lib'). | |||||
| libext=a | |||||
| shrext=.so | |||||
| host="$1" | |||||
| host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` | |||||
| host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` | |||||
| host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` | |||||
| # Code taken from libtool.m4's _LT_CC_BASENAME. | |||||
| for cc_temp in $CC""; do | |||||
| case $cc_temp in | |||||
| compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; | |||||
| distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; | |||||
| \-*) ;; | |||||
| *) break;; | |||||
| esac | |||||
| done | |||||
| cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` | |||||
| # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. | |||||
| wl= | |||||
| if test "$GCC" = yes; then | |||||
| wl='-Wl,' | |||||
| else | |||||
| case "$host_os" in | |||||
| aix*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| darwin*) | |||||
| case $cc_basename in | |||||
| xlc*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| esac | |||||
| ;; | |||||
| mingw* | pw32* | os2*) | |||||
| ;; | |||||
| hpux9* | hpux10* | hpux11*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| irix5* | irix6* | nonstopux*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| newsos6) | |||||
| ;; | |||||
| linux*) | |||||
| case $cc_basename in | |||||
| icc* | ecc*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| pgcc | pgf77 | pgf90) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| ccc*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| como) | |||||
| wl='-lopt=' | |||||
| ;; | |||||
| *) | |||||
| case `$CC -V 2>&1 | sed 5q` in | |||||
| *Sun\ C*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| esac | |||||
| ;; | |||||
| esac | |||||
| ;; | |||||
| osf3* | osf4* | osf5*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| sco3.2v5*) | |||||
| ;; | |||||
| solaris*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| sunos4*) | |||||
| wl='-Qoption ld ' | |||||
| ;; | |||||
| sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| sysv4*MP*) | |||||
| ;; | |||||
| unicos*) | |||||
| wl='-Wl,' | |||||
| ;; | |||||
| uts4*) | |||||
| ;; | |||||
| esac | |||||
| fi | |||||
| # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. | |||||
| hardcode_libdir_flag_spec= | |||||
| hardcode_libdir_separator= | |||||
| hardcode_direct=no | |||||
| hardcode_minus_L=no | |||||
| case "$host_os" in | |||||
| cygwin* | mingw* | pw32*) | |||||
| # FIXME: the MSVC++ port hasn't been tested in a loooong time | |||||
| # When not using gcc, we currently assume that we are using | |||||
| # Microsoft Visual C++. | |||||
| if test "$GCC" != yes; then | |||||
| with_gnu_ld=no | |||||
| fi | |||||
| ;; | |||||
| interix*) | |||||
| # we just hope/assume this is gcc and not c89 (= MSVC++) | |||||
| with_gnu_ld=yes | |||||
| ;; | |||||
| openbsd*) | |||||
| with_gnu_ld=no | |||||
| ;; | |||||
| esac | |||||
| ld_shlibs=yes | |||||
| if test "$with_gnu_ld" = yes; then | |||||
| # Set some defaults for GNU ld with shared library support. These | |||||
| # are reset later if shared libraries are not supported. Putting them | |||||
| # here allows them to be overridden if necessary. | |||||
| # Unlike libtool, we use -rpath here, not --rpath, since the documented | |||||
| # option of GNU ld is called -rpath, not --rpath. | |||||
| hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||||
| case "$host_os" in | |||||
| aix3* | aix4* | aix5*) | |||||
| # On AIX/PPC, the GNU linker is very broken | |||||
| if test "$host_cpu" != ia64; then | |||||
| ld_shlibs=no | |||||
| fi | |||||
| ;; | |||||
| amigaos*) | |||||
| hardcode_libdir_flag_spec='-L$libdir' | |||||
| hardcode_minus_L=yes | |||||
| # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports | |||||
| # that the semantics of dynamic libraries on AmigaOS, at least up | |||||
| # to version 4, is to share data among multiple programs linked | |||||
| # with the same dynamic library. Since this doesn't match the | |||||
| # behavior of shared libraries on other platforms, we cannot use | |||||
| # them. | |||||
| ld_shlibs=no | |||||
| ;; | |||||
| beos*) | |||||
| if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then | |||||
| : | |||||
| else | |||||
| ld_shlibs=no | |||||
| fi | |||||
| ;; | |||||
| cygwin* | mingw* | pw32*) | |||||
| # hardcode_libdir_flag_spec is actually meaningless, as there is | |||||
| # no search path for DLLs. | |||||
| hardcode_libdir_flag_spec='-L$libdir' | |||||
| if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then | |||||
| : | |||||
| else | |||||
| ld_shlibs=no | |||||
| fi | |||||
| ;; | |||||
| interix3*) | |||||
| hardcode_direct=no | |||||
| hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | |||||
| ;; | |||||
| linux*) | |||||
| if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then | |||||
| : | |||||
| else | |||||
| ld_shlibs=no | |||||
| fi | |||||
| ;; | |||||
| netbsd*) | |||||
| ;; | |||||
| solaris*) | |||||
| if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then | |||||
| ld_shlibs=no | |||||
| elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then | |||||
| : | |||||
| else | |||||
| ld_shlibs=no | |||||
| fi | |||||
| ;; | |||||
| sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) | |||||
| case `$LD -v 2>&1` in | |||||
| *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) | |||||
| ld_shlibs=no | |||||
| ;; | |||||
| *) | |||||
| if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then | |||||
| hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' | |||||
| else | |||||
| ld_shlibs=no | |||||
| fi | |||||
| ;; | |||||
| esac | |||||
| ;; | |||||
| sunos4*) | |||||
| hardcode_direct=yes | |||||
| ;; | |||||
| *) | |||||
| if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then | |||||
| : | |||||
| else | |||||
| ld_shlibs=no | |||||
| fi | |||||
| ;; | |||||
| esac | |||||
| if test "$ld_shlibs" = no; then | |||||
| hardcode_libdir_flag_spec= | |||||
| fi | |||||
| else | |||||
| case "$host_os" in | |||||
| aix3*) | |||||
| # Note: this linker hardcodes the directories in LIBPATH if there | |||||
| # are no directories specified by -L. | |||||
| hardcode_minus_L=yes | |||||
| if test "$GCC" = yes; then | |||||
| # Neither direct hardcoding nor static linking is supported with a | |||||
| # broken collect2. | |||||
| hardcode_direct=unsupported | |||||
| fi | |||||
| ;; | |||||
| aix4* | aix5*) | |||||
| if test "$host_cpu" = ia64; then | |||||
| # On IA64, the linker does run time linking by default, so we don't | |||||
| # have to do anything special. | |||||
| aix_use_runtimelinking=no | |||||
| else | |||||
| aix_use_runtimelinking=no | |||||
| # Test if we are trying to use run time linking or normal | |||||
| # AIX style linking. If -brtl is somewhere in LDFLAGS, we | |||||
| # need to do runtime linking. | |||||
| case $host_os in aix4.[23]|aix4.[23].*|aix5*) | |||||
| for ld_flag in $LDFLAGS; do | |||||
| if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then | |||||
| aix_use_runtimelinking=yes | |||||
| break | |||||
| fi | |||||
| done | |||||
| ;; | |||||
| esac | |||||
| fi | |||||
| hardcode_direct=yes | |||||
| hardcode_libdir_separator=':' | |||||
| if test "$GCC" = yes; then | |||||
| case $host_os in aix4.[012]|aix4.[012].*) | |||||
| collect2name=`${CC} -print-prog-name=collect2` | |||||
| if test -f "$collect2name" && \ | |||||
| strings "$collect2name" | grep resolve_lib_name >/dev/null | |||||
| then | |||||
| # We have reworked collect2 | |||||
| hardcode_direct=yes | |||||
| else | |||||
| # We have old collect2 | |||||
| hardcode_direct=unsupported | |||||
| hardcode_minus_L=yes | |||||
| hardcode_libdir_flag_spec='-L$libdir' | |||||
| hardcode_libdir_separator= | |||||
| fi | |||||
| ;; | |||||
| esac | |||||
| fi | |||||
| # Begin _LT_AC_SYS_LIBPATH_AIX. | |||||
| echo 'int main () { return 0; }' > conftest.c | |||||
| ${CC} ${LDFLAGS} conftest.c -o conftest | |||||
| aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } | |||||
| }'` | |||||
| if test -z "$aix_libpath"; then | |||||
| aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } | |||||
| }'` | |||||
| fi | |||||
| if test -z "$aix_libpath"; then | |||||
| aix_libpath="/usr/lib:/lib" | |||||
| fi | |||||
| rm -f conftest.c conftest | |||||
| # End _LT_AC_SYS_LIBPATH_AIX. | |||||
| if test "$aix_use_runtimelinking" = yes; then | |||||
| hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" | |||||
| else | |||||
| if test "$host_cpu" = ia64; then | |||||
| hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' | |||||
| else | |||||
| hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" | |||||
| fi | |||||
| fi | |||||
| ;; | |||||
| amigaos*) | |||||
| hardcode_libdir_flag_spec='-L$libdir' | |||||
| hardcode_minus_L=yes | |||||
| # see comment about different semantics on the GNU ld section | |||||
| ld_shlibs=no | |||||
| ;; | |||||
| bsdi[45]*) | |||||
| ;; | |||||
| cygwin* | mingw* | pw32*) | |||||
| # When not using gcc, we currently assume that we are using | |||||
| # Microsoft Visual C++. | |||||
| # hardcode_libdir_flag_spec is actually meaningless, as there is | |||||
| # no search path for DLLs. | |||||
| hardcode_libdir_flag_spec=' ' | |||||
| libext=lib | |||||
| ;; | |||||
| darwin* | rhapsody*) | |||||
| hardcode_direct=no | |||||
| if test "$GCC" = yes ; then | |||||
| : | |||||
| else | |||||
| case $cc_basename in | |||||
| xlc*) | |||||
| ;; | |||||
| *) | |||||
| ld_shlibs=no | |||||
| ;; | |||||
| esac | |||||
| fi | |||||
| ;; | |||||
| dgux*) | |||||
| hardcode_libdir_flag_spec='-L$libdir' | |||||
| ;; | |||||
| freebsd1*) | |||||
| ld_shlibs=no | |||||
| ;; | |||||
| freebsd2.2*) | |||||
| hardcode_libdir_flag_spec='-R$libdir' | |||||
| hardcode_direct=yes | |||||
| ;; | |||||
| freebsd2*) | |||||
| hardcode_direct=yes | |||||
| hardcode_minus_L=yes | |||||
| ;; | |||||
| freebsd* | kfreebsd*-gnu | dragonfly*) | |||||
| hardcode_libdir_flag_spec='-R$libdir' | |||||
| hardcode_direct=yes | |||||
| ;; | |||||
| hpux9*) | |||||
| hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' | |||||
| hardcode_libdir_separator=: | |||||
| hardcode_direct=yes | |||||
| # hardcode_minus_L: Not really in the search PATH, | |||||
| # but as the default location of the library. | |||||
| hardcode_minus_L=yes | |||||
| ;; | |||||
| hpux10*) | |||||
| if test "$with_gnu_ld" = no; then | |||||
| hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' | |||||
| hardcode_libdir_separator=: | |||||
| hardcode_direct=yes | |||||
| # hardcode_minus_L: Not really in the search PATH, | |||||
| # but as the default location of the library. | |||||
| hardcode_minus_L=yes | |||||
| fi | |||||
| ;; | |||||
| hpux11*) | |||||
| if test "$with_gnu_ld" = no; then | |||||
| hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' | |||||
| hardcode_libdir_separator=: | |||||
| case $host_cpu in | |||||
| hppa*64*|ia64*) | |||||
| hardcode_direct=no | |||||
| ;; | |||||
| *) | |||||
| hardcode_direct=yes | |||||
| # hardcode_minus_L: Not really in the search PATH, | |||||
| # but as the default location of the library. | |||||
| hardcode_minus_L=yes | |||||
| ;; | |||||
| esac | |||||
| fi | |||||
| ;; | |||||
| irix5* | irix6* | nonstopux*) | |||||
| hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||||
| hardcode_libdir_separator=: | |||||
| ;; | |||||
| netbsd*) | |||||
| hardcode_libdir_flag_spec='-R$libdir' | |||||
| hardcode_direct=yes | |||||
| ;; | |||||
| newsos6) | |||||
| hardcode_direct=yes | |||||
| hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||||
| hardcode_libdir_separator=: | |||||
| ;; | |||||
| openbsd*) | |||||
| hardcode_direct=yes | |||||
| if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then | |||||
| hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | |||||
| else | |||||
| case "$host_os" in | |||||
| openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) | |||||
| hardcode_libdir_flag_spec='-R$libdir' | |||||
| ;; | |||||
| *) | |||||
| hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | |||||
| ;; | |||||
| esac | |||||
| fi | |||||
| ;; | |||||
| os2*) | |||||
| hardcode_libdir_flag_spec='-L$libdir' | |||||
| hardcode_minus_L=yes | |||||
| ;; | |||||
| osf3*) | |||||
| hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||||
| hardcode_libdir_separator=: | |||||
| ;; | |||||
| osf4* | osf5*) | |||||
| if test "$GCC" = yes; then | |||||
| hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||||
| else | |||||
| # Both cc and cxx compiler support -rpath directly | |||||
| hardcode_libdir_flag_spec='-rpath $libdir' | |||||
| fi | |||||
| hardcode_libdir_separator=: | |||||
| ;; | |||||
| solaris*) | |||||
| hardcode_libdir_flag_spec='-R$libdir' | |||||
| ;; | |||||
| sunos4*) | |||||
| hardcode_libdir_flag_spec='-L$libdir' | |||||
| hardcode_direct=yes | |||||
| hardcode_minus_L=yes | |||||
| ;; | |||||
| sysv4) | |||||
| case $host_vendor in | |||||
| sni) | |||||
| hardcode_direct=yes # is this really true??? | |||||
| ;; | |||||
| siemens) | |||||
| hardcode_direct=no | |||||
| ;; | |||||
| motorola) | |||||
| hardcode_direct=no #Motorola manual says yes, but my tests say they lie | |||||
| ;; | |||||
| esac | |||||
| ;; | |||||
| sysv4.3*) | |||||
| ;; | |||||
| sysv4*MP*) | |||||
| if test -d /usr/nec; then | |||||
| ld_shlibs=yes | |||||
| fi | |||||
| ;; | |||||
| sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) | |||||
| ;; | |||||
| sysv5* | sco3.2v5* | sco5v6*) | |||||
| hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' | |||||
| hardcode_libdir_separator=':' | |||||
| ;; | |||||
| uts4*) | |||||
| hardcode_libdir_flag_spec='-L$libdir' | |||||
| ;; | |||||
| *) | |||||
| ld_shlibs=no | |||||
| ;; | |||||
| esac | |||||
| fi | |||||
| # Check dynamic linker characteristics | |||||
| # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. | |||||
| # Unlike libtool.m4, here we don't care about _all_ names of the library, but | |||||
| # only about the one the linker finds when passed -lNAME. This is the last | |||||
| # element of library_names_spec in libtool.m4, or possibly two of them if the | |||||
| # linker has special search rules. | |||||
| library_names_spec= # the last element of library_names_spec in libtool.m4 | |||||
| libname_spec='lib$name' | |||||
| case "$host_os" in | |||||
| aix3*) | |||||
| library_names_spec='$libname.a' | |||||
| ;; | |||||
| aix4* | aix5*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| amigaos*) | |||||
| library_names_spec='$libname.a' | |||||
| ;; | |||||
| beos*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| bsdi[45]*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| cygwin* | mingw* | pw32*) | |||||
| shrext=.dll | |||||
| library_names_spec='$libname.dll.a $libname.lib' | |||||
| ;; | |||||
| darwin* | rhapsody*) | |||||
| shrext=.dylib | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| dgux*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| freebsd1*) | |||||
| ;; | |||||
| kfreebsd*-gnu) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| freebsd* | dragonfly*) | |||||
| case "$host_os" in | |||||
| freebsd[123]*) | |||||
| library_names_spec='$libname$shrext$versuffix' ;; | |||||
| *) | |||||
| library_names_spec='$libname$shrext' ;; | |||||
| esac | |||||
| ;; | |||||
| gnu*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| hpux9* | hpux10* | hpux11*) | |||||
| case $host_cpu in | |||||
| ia64*) | |||||
| shrext=.so | |||||
| ;; | |||||
| hppa*64*) | |||||
| shrext=.sl | |||||
| ;; | |||||
| *) | |||||
| shrext=.sl | |||||
| ;; | |||||
| esac | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| interix3*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| irix5* | irix6* | nonstopux*) | |||||
| library_names_spec='$libname$shrext' | |||||
| case "$host_os" in | |||||
| irix5* | nonstopux*) | |||||
| libsuff= shlibsuff= | |||||
| ;; | |||||
| *) | |||||
| case $LD in | |||||
| *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; | |||||
| *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; | |||||
| *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; | |||||
| *) libsuff= shlibsuff= ;; | |||||
| esac | |||||
| ;; | |||||
| esac | |||||
| ;; | |||||
| linux*oldld* | linux*aout* | linux*coff*) | |||||
| ;; | |||||
| linux*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| knetbsd*-gnu) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| netbsd*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| newsos6) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| nto-qnx*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| openbsd*) | |||||
| library_names_spec='$libname$shrext$versuffix' | |||||
| ;; | |||||
| os2*) | |||||
| libname_spec='$name' | |||||
| shrext=.dll | |||||
| library_names_spec='$libname.a' | |||||
| ;; | |||||
| osf3* | osf4* | osf5*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| solaris*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| sunos4*) | |||||
| library_names_spec='$libname$shrext$versuffix' | |||||
| ;; | |||||
| sysv4 | sysv4.3*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| sysv4*MP*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| uts4*) | |||||
| library_names_spec='$libname$shrext' | |||||
| ;; | |||||
| esac | |||||
| sed_quote_subst='s/\(["`$\\]\)/\\\1/g' | |||||
| escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` | |||||
| shlibext=`echo "$shrext" | sed -e 's,^\.,,'` | |||||
| escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` | |||||
| escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` | |||||
| escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` | |||||
| LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF | |||||
| # How to pass a linker flag through the compiler. | |||||
| wl="$escaped_wl" | |||||
| # Static library suffix (normally "a"). | |||||
| libext="$libext" | |||||
| # Shared library suffix (normally "so"). | |||||
| shlibext="$shlibext" | |||||
| # Format of library name prefix. | |||||
| libname_spec="$escaped_libname_spec" | |||||
| # Library names that the linker finds when passed -lNAME. | |||||
| library_names_spec="$escaped_library_names_spec" | |||||
| # Flag to hardcode \$libdir into a binary during linking. | |||||
| # This must work even if \$libdir does not exist. | |||||
| hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" | |||||
| # Whether we need a single -rpath flag with a separated argument. | |||||
| hardcode_libdir_separator="$hardcode_libdir_separator" | |||||
| # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the | |||||
| # resulting binary. | |||||
| hardcode_direct="$hardcode_direct" | |||||
| # Set to yes if using the -LDIR flag during linking hardcodes DIR into the | |||||
| # resulting binary. | |||||
| hardcode_minus_L="$hardcode_minus_L" | |||||
| EOF | |||||
| @@ -0,0 +1,412 @@ | |||||
| # AC_PREREQ(2.57) | |||||
| AC_INIT(libssh2, [-], libssh2-devel@cool.haxx.se) | |||||
| AC_CONFIG_MACRO_DIR([m4]) | |||||
| AC_CONFIG_SRCDIR([src]) | |||||
| AC_CONFIG_HEADERS([src/libssh2_config.h]) | |||||
| AM_MAINTAINER_MODE | |||||
| m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) | |||||
| dnl SED is needed by some of the tools | |||||
| AC_PATH_PROG( SED, sed, sed-was-not-found-by-configure, | |||||
| $PATH:/usr/bin:/usr/local/bin) | |||||
| AC_SUBST(SED) | |||||
| if test "x$SED" = "xsed-was-not-found-by-configure"; then | |||||
| AC_MSG_WARN([sed was not found, this may ruin your chances to build fine]) | |||||
| fi | |||||
| dnl figure out the libssh2 version | |||||
| LIBSSH2VER=`$SED -ne 's/^#define LIBSSH2_VERSION *"\(.*\)"/\1/p' ${srcdir}/include/libssh2.h` | |||||
| AM_INIT_AUTOMAKE | |||||
| AC_MSG_CHECKING([libssh2 version]) | |||||
| AC_MSG_RESULT($LIBSSH2VER) | |||||
| AC_SUBST(LIBSSH2VER) | |||||
| AB_VERSION=$LIBSSH2VER | |||||
| AB_INIT | |||||
| # Check for the OS. | |||||
| # Daniel's note: this should not be necessary and we need to work to | |||||
| # get this removed. | |||||
| AC_CANONICAL_HOST | |||||
| case "$host" in | |||||
| *-mingw*) | |||||
| CFLAGS="$CFLAGS -DLIBSSH2_WIN32" | |||||
| LIBS="$LIBS -lws2_32" | |||||
| ;; | |||||
| *-cygwin) | |||||
| CFLAGS="$CFLAGS -DLIBSSH2_WIN32" | |||||
| ;; | |||||
| *darwin*) | |||||
| CFLAGS="$CFLAGS -DLIBSSH2_DARWIN" | |||||
| ;; | |||||
| *hpux*) | |||||
| ;; | |||||
| *osf*) | |||||
| CFLAGS="$CFLAGS -D_POSIX_PII_SOCKET" | |||||
| ;; | |||||
| *) | |||||
| ;; | |||||
| esac | |||||
| AC_CHECK_TYPE(long long, | |||||
| [AC_DEFINE(HAVE_LONGLONG, 1, | |||||
| [Define to 1 if the compiler supports the 'long long' data type.])] | |||||
| longlong="yes" | |||||
| ) | |||||
| dnl Our configure and build reentrant settings | |||||
| CURL_CONFIGURE_REENTRANT | |||||
| # Some systems (Solaris?) have socket() in -lsocket. | |||||
| AC_SEARCH_LIBS(socket, socket) | |||||
| # Solaris has inet_addr() in -lnsl. | |||||
| AC_SEARCH_LIBS(inet_addr, nsl) | |||||
| AC_SUBST(LIBS) | |||||
| AC_PROG_CC | |||||
| AC_PROG_CXX | |||||
| AC_PROG_INSTALL | |||||
| AC_PROG_LN_S | |||||
| AC_PROG_MAKE_SET | |||||
| AC_PATH_PROGS(SSHD, [sshd], [], | |||||
| [$PATH$PATH_SEPARATOR/usr/libexec$PATH_SEPARATOR]dnl | |||||
| [/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc]) | |||||
| AM_CONDITIONAL(SSHD, test -n "$SSHD") | |||||
| AC_LIBTOOL_WIN32_DLL | |||||
| AC_PROG_LIBTOOL | |||||
| AC_C_BIGENDIAN | |||||
| dnl check for how to do large files | |||||
| AC_SYS_LARGEFILE | |||||
| # Crypto backends | |||||
| found_crypto=none | |||||
| found_crypto_str="" | |||||
| support_clear_memory=no | |||||
| crypto_errors="" | |||||
| m4_set_add([crypto_backends], [openssl]) | |||||
| m4_set_add([crypto_backends], [libgcrypt]) | |||||
| m4_set_add([crypto_backends], [mbedtls]) | |||||
| m4_set_add([crypto_backends], [wincng]) | |||||
| AC_ARG_WITH([crypto], | |||||
| AC_HELP_STRING([--with-crypto=auto|]m4_set_contents([crypto_backends], [|]), | |||||
| [Select crypto backend (default: auto)]), | |||||
| use_crypto=$withval, | |||||
| use_crypto=auto | |||||
| ) | |||||
| case "${use_crypto}" in | |||||
| auto|m4_set_contents([crypto_backends], [|])) | |||||
| m4_set_map([crypto_backends], [LIBSSH2_CHECK_CRYPTO]) | |||||
| ;; | |||||
| yes|"") | |||||
| crypto_errors="No crypto backend specified!" | |||||
| ;; | |||||
| *) | |||||
| crypto_errors="Unknown crypto backend '${use_crypto}' specified!" | |||||
| ;; | |||||
| esac | |||||
| if test "$found_crypto" = "none"; then | |||||
| crypto_errors="${crypto_errors} | |||||
| Specify --with-crypto=\$backend and/or the neccessary library search prefix. | |||||
| Known crypto backends: auto, m4_set_contents([crypto_backends], [, ])" | |||||
| AS_MESSAGE([ERROR: ${crypto_errors}]) | |||||
| else | |||||
| test "$found_crypto_str" = "" && found_crypto_str="$found_crypto" | |||||
| fi | |||||
| m4_set_foreach([crypto_backends], [backend], | |||||
| [AM_CONDITIONAL(m4_toupper(backend), test "$found_crypto" = "backend")] | |||||
| ) | |||||
| m4_undefine([backend]) | |||||
| # libz | |||||
| AC_ARG_WITH([libz], | |||||
| AC_HELP_STRING([--with-libz],[Use libz for compression]), | |||||
| use_libz=$withval, | |||||
| use_libz=auto) | |||||
| found_libz=no | |||||
| libz_errors="" | |||||
| if test "$use_libz" != no; then | |||||
| AC_LIB_HAVE_LINKFLAGS([z], [], [#include <zlib.h>]) | |||||
| if test "$ac_cv_libz" != yes; then | |||||
| if test "$use_libz" = auto; then | |||||
| AC_MSG_NOTICE([Cannot find libz, disabling compression]) | |||||
| found_libz="disabled; no libz found" | |||||
| else | |||||
| libz_errors="No libz found! | |||||
| Try --with-libz-prefix=PATH if you know that you have it." | |||||
| AS_MESSAGE([ERROR: $libz_errors]) | |||||
| fi | |||||
| else | |||||
| AC_DEFINE(LIBSSH2_HAVE_ZLIB, 1, [Compile in zlib support]) | |||||
| LIBSREQUIRED="$LIBSREQUIRED${LIBSREQUIRED:+ }zlib" | |||||
| found_libz="yes" | |||||
| fi | |||||
| fi | |||||
| AC_SUBST(LIBSREQUIRED) | |||||
| # | |||||
| # Optional Settings | |||||
| # | |||||
| AC_ARG_ENABLE(crypt-none, | |||||
| AC_HELP_STRING([--enable-crypt-none],[Permit "none" cipher -- NOT RECOMMENDED]), | |||||
| [AC_DEFINE(LIBSSH2_CRYPT_NONE, 1, [Enable "none" cipher -- NOT RECOMMENDED])]) | |||||
| AC_ARG_ENABLE(mac-none, | |||||
| AC_HELP_STRING([--enable-mac-none],[Permit "none" MAC -- NOT RECOMMENDED]), | |||||
| [AC_DEFINE(LIBSSH2_MAC_NONE, 1, [Enable "none" MAC -- NOT RECOMMENDED])]) | |||||
| AC_ARG_ENABLE(gex-new, | |||||
| AC_HELP_STRING([--disable-gex-new],[Disable "new" diffie-hellman-group-exchange-sha1 method]), | |||||
| [GEX_NEW=$enableval]) | |||||
| if test "$GEX_NEW" != "no"; then | |||||
| AC_DEFINE(LIBSSH2_DH_GEX_NEW, 1, [Enable newer diffie-hellman-group-exchange-sha1 syntax]) | |||||
| fi | |||||
| AC_ARG_ENABLE(clear-memory, | |||||
| AC_HELP_STRING([--disable-clear-memory],[Disable clearing of memory before being freed]), | |||||
| [CLEAR_MEMORY=$enableval]) | |||||
| if test "$CLEAR_MEMORY" != "no"; then | |||||
| if test "$support_clear_memory" = "yes"; then | |||||
| AC_DEFINE(LIBSSH2_CLEAR_MEMORY, 1, [Enable clearing of memory before being freed]) | |||||
| enable_clear_memory=yes | |||||
| else | |||||
| if test "$CLEAR_MEMORY" = "yes"; then | |||||
| AC_MSG_ERROR([secure clearing/zeroing of memory is not supported by the selected crypto backend]) | |||||
| else | |||||
| AC_MSG_WARN([secure clearing/zeroing of memory is not supported by the selected crypto backend]) | |||||
| fi | |||||
| enable_clear_memory=unsupported | |||||
| fi | |||||
| else | |||||
| if test "$support_clear_memory" = "yes"; then | |||||
| enable_clear_memory=no | |||||
| else | |||||
| AC_MSG_WARN([secure clearing/zeroing of memory is not supported by the selected crypto backend]) | |||||
| enable_clear_memory=unsupported | |||||
| fi | |||||
| fi | |||||
| dnl ************************************************************ | |||||
| dnl option to switch on compiler debug options | |||||
| dnl | |||||
| AC_MSG_CHECKING([whether to enable pedantic and debug compiler options]) | |||||
| AC_ARG_ENABLE(debug, | |||||
| AC_HELP_STRING([--enable-debug],[Enable pedantic and debug options]) | |||||
| AC_HELP_STRING([--disable-debug],[Disable debug options]), | |||||
| [ case "$enable_debug" in | |||||
| no) | |||||
| AC_MSG_RESULT(no) | |||||
| CPPFLAGS="$CPPFLAGS -DNDEBUG" | |||||
| ;; | |||||
| *) AC_MSG_RESULT(yes) | |||||
| enable_debug=yes | |||||
| CPPFLAGS="$CPPFLAGS -DLIBSSH2DEBUG" | |||||
| CFLAGS="$CFLAGS -g" | |||||
| dnl set compiler "debug" options to become more picky, and remove | |||||
| dnl optimize options from CFLAGS | |||||
| CURL_CC_DEBUG_OPTS | |||||
| ;; | |||||
| esac | |||||
| ], | |||||
| enable_debug=no | |||||
| AC_MSG_RESULT(no) | |||||
| ) | |||||
| dnl ************************************************************ | |||||
| dnl Enable hiding of internal symbols in library to reduce its size and | |||||
| dnl speed dynamic linking of applications. This currently is only supported | |||||
| dnl on gcc >= 4.0 and SunPro C. | |||||
| dnl | |||||
| AC_MSG_CHECKING([whether to enable hidden symbols in the library]) | |||||
| AC_ARG_ENABLE(hidden-symbols, | |||||
| AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library]) | |||||
| AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]), | |||||
| [ case "$enableval" in | |||||
| no) | |||||
| AC_MSG_RESULT(no) | |||||
| ;; | |||||
| *) | |||||
| AC_MSG_CHECKING([whether $CC supports it]) | |||||
| if test "$GCC" = yes ; then | |||||
| if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then | |||||
| AC_MSG_RESULT(yes) | |||||
| AC_DEFINE(LIBSSH2_API, [__attribute__ ((visibility ("default")))], [to make a symbol visible]) | |||||
| CFLAGS="$CFLAGS -fvisibility=hidden" | |||||
| else | |||||
| AC_MSG_RESULT(no) | |||||
| fi | |||||
| else | |||||
| dnl Test for SunPro cc | |||||
| if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then | |||||
| AC_MSG_RESULT(yes) | |||||
| AC_DEFINE(LIBSSH2_API, [__global], [to make a symbol visible]) | |||||
| CFLAGS="$CFLAGS -xldscope=hidden" | |||||
| else | |||||
| AC_MSG_RESULT(no) | |||||
| fi | |||||
| fi | |||||
| ;; | |||||
| esac ], | |||||
| AC_MSG_RESULT(no) | |||||
| ) | |||||
| # Build example applications? | |||||
| AC_MSG_CHECKING([whether to build example applications]) | |||||
| AC_ARG_ENABLE([examples-build], | |||||
| AC_HELP_STRING([--enable-examples-build], [Build example applications (this is the default)]) | |||||
| AC_HELP_STRING([--disable-examples-build], [Do not build example applications]), | |||||
| [case "$enableval" in | |||||
| no | false) | |||||
| build_examples='no' | |||||
| ;; | |||||
| *) | |||||
| build_examples='yes' | |||||
| ;; | |||||
| esac], [build_examples='yes']) | |||||
| AC_MSG_RESULT($build_examples) | |||||
| AM_CONDITIONAL([BUILD_EXAMPLES], [test "x$build_examples" != "xno"]) | |||||
| # Build OSS fuzzing targets? | |||||
| AC_ARG_ENABLE([ossfuzzers], | |||||
| [AS_HELP_STRING([--enable-ossfuzzers], | |||||
| [Whether to generate the fuzzers for OSS-Fuzz])], | |||||
| [have_ossfuzzers=yes], [have_ossfuzzers=no]) | |||||
| AM_CONDITIONAL([USE_OSSFUZZERS], [test "x$have_ossfuzzers" = "xyes"]) | |||||
| # Set the correct flags for the given fuzzing engine. | |||||
| AC_SUBST([LIB_FUZZING_ENGINE]) | |||||
| AM_CONDITIONAL([USE_OSSFUZZ_FLAG], [test "x$LIB_FUZZING_ENGINE" = "x-fsanitize=fuzzer"]) | |||||
| AM_CONDITIONAL([USE_OSSFUZZ_STATIC], [test -f "$LIB_FUZZING_ENGINE"]) | |||||
| # Checks for header files. | |||||
| # AC_HEADER_STDC | |||||
| AC_CHECK_HEADERS([errno.h fcntl.h stdio.h stdlib.h unistd.h sys/uio.h]) | |||||
| AC_CHECK_HEADERS([sys/select.h sys/socket.h sys/ioctl.h sys/time.h]) | |||||
| AC_CHECK_HEADERS([arpa/inet.h netinet/in.h]) | |||||
| AC_CHECK_HEADERS([sys/un.h], [have_sys_un_h=yes], [have_sys_un_h=no]) | |||||
| AM_CONDITIONAL([HAVE_SYS_UN_H], test "x$have_sys_un_h" = xyes) | |||||
| case $host in | |||||
| *-*-cygwin* | *-*-cegcc*) | |||||
| # These are POSIX-like systems using BSD-like sockets API. | |||||
| ;; | |||||
| *) | |||||
| AC_CHECK_HEADERS([windows.h winsock2.h ws2tcpip.h]) | |||||
| ;; | |||||
| esac | |||||
| case $host in | |||||
| *darwin*|*interix*) | |||||
| dnl poll() does not work on these platforms | |||||
| dnl Interix: "does provide poll(), but the implementing developer must | |||||
| dnl have been in a bad mood, because poll() only works on the /proc | |||||
| dnl filesystem here" | |||||
| dnl Mac OS X's poll has funny behaviors, like: | |||||
| dnl not being able to do poll on no fildescriptors (10.3?) | |||||
| dnl not being able to poll on some files (like anything in /dev) | |||||
| dnl not having reliable timeout support | |||||
| dnl inconsistent return of POLLHUP where other implementations give POLLIN | |||||
| AC_MSG_NOTICE([poll use is disabled on this platform]) | |||||
| ;; | |||||
| *) | |||||
| AC_CHECK_FUNCS(poll) | |||||
| ;; | |||||
| esac | |||||
| AC_CHECK_FUNCS(gettimeofday select strtoll memset_s) | |||||
| dnl Check for select() into ws2_32 for Msys/Mingw | |||||
| if test "$ac_cv_func_select" != "yes"; then | |||||
| AC_MSG_CHECKING([for select in ws2_32]) | |||||
| AC_TRY_LINK([ | |||||
| #ifdef HAVE_WINSOCK2_H | |||||
| #ifndef WIN32_LEAN_AND_MEAN | |||||
| #define WIN32_LEAN_AND_MEAN | |||||
| #endif | |||||
| #include <winsock2.h> | |||||
| #endif | |||||
| ],[ | |||||
| select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL); | |||||
| ],[ | |||||
| AC_MSG_RESULT([yes]) | |||||
| HAVE_SELECT="1" | |||||
| AC_DEFINE_UNQUOTED(HAVE_SELECT, 1, | |||||
| [Define to 1 if you have the select function.]) | |||||
| ],[ | |||||
| AC_MSG_RESULT([no]) | |||||
| ]) | |||||
| fi | |||||
| AC_FUNC_ALLOCA | |||||
| # Checks for typedefs, structures, and compiler characteristics. | |||||
| AC_C_CONST | |||||
| AC_C_INLINE | |||||
| CURL_CHECK_NONBLOCKING_SOCKET | |||||
| missing_required_deps=0 | |||||
| if test "${libz_errors}" != ""; then | |||||
| AS_MESSAGE([ERROR: ${libz_errors}]) | |||||
| missing_required_deps=1 | |||||
| fi | |||||
| if test "$found_crypto" = "none"; then | |||||
| AS_MESSAGE([ERROR: ${crypto_errors}]) | |||||
| missing_required_deps=1 | |||||
| fi | |||||
| if test $missing_required_deps = 1; then | |||||
| AC_MSG_ERROR([Required dependencies are missing!]) | |||||
| fi | |||||
| # Configure parameters | |||||
| LIBSSH2_CHECK_OPTION_WERROR | |||||
| AC_CONFIG_FILES([Makefile | |||||
| src/Makefile | |||||
| tests/Makefile | |||||
| tests/ossfuzz/Makefile | |||||
| example/Makefile | |||||
| docs/Makefile | |||||
| libssh2.pc]) | |||||
| AC_OUTPUT | |||||
| AC_MSG_NOTICE([summary of build options: | |||||
| version: ${LIBSSH2VER} | |||||
| Host type: ${host} | |||||
| Install prefix: ${prefix} | |||||
| Compiler: ${CC} | |||||
| Compiler flags: ${CFLAGS} | |||||
| Library types: Shared=${enable_shared}, Static=${enable_static} | |||||
| Crypto library: ${found_crypto_str} | |||||
| Clear memory: $enable_clear_memory | |||||
| Debug build: $enable_debug | |||||
| Build examples: $build_examples | |||||
| Path to sshd: $ac_cv_path_SSHD (only for self-tests) | |||||
| zlib compression: ${found_libz} | |||||
| ]) | |||||
| @@ -0,0 +1,3 @@ | |||||
| Makefile | |||||
| Makefile.in | |||||
| coverage | |||||
| @@ -0,0 +1,79 @@ | |||||
| libssh2 is the result of many friendly people. This list is an attempt to | |||||
| mention all contributors. If we've missed anyone, tell us! | |||||
| This list of names is a-z sorted. | |||||
| Adam Gobiowski | |||||
| Alexander Holyapin | |||||
| Alexander Lamaison | |||||
| Alfred Gebert | |||||
| Ben Kibbey | |||||
| Bjorn Stenborg | |||||
| Carlo Bramini | |||||
| Cristian RodrĂguez | |||||
| Daiki Ueno | |||||
| Dan Casey | |||||
| Dan Fandrich | |||||
| Daniel Stenberg | |||||
| Dave Hayden | |||||
| Dave McCaldon | |||||
| David J Sullivan | |||||
| David Robins | |||||
| Dmitry Smirnov | |||||
| Douglas Masterson | |||||
| Edink Kadribasic | |||||
| Erik Brossler | |||||
| Francois Dupoux | |||||
| Gellule Xg | |||||
| Grubsky Grigory | |||||
| Guenter Knauf | |||||
| Heiner Steven | |||||
| Henrik Nordstrom | |||||
| James Housleys | |||||
| Jasmeet Bagga | |||||
| Jean-Louis Charton | |||||
| Jernej Kovacic | |||||
| Joey Degges | |||||
| John Little | |||||
| Jose Baars | |||||
| Jussi Mononen | |||||
| Kamil Dudka | |||||
| Lars Nordin | |||||
| Mark McPherson | |||||
| Mark Smith | |||||
| Markus Moeller | |||||
| Matt Lilley | |||||
| Matthew Booth | |||||
| Maxime Larocque | |||||
| Mike Protts | |||||
| Mikhail Gusarov | |||||
| Neil Gierman | |||||
| Olivier Hervieu | |||||
| Paul Howarth | |||||
| Paul Querna | |||||
| Paul Veldkamp | |||||
| Peter Krempa | |||||
| Peter O'Gorman | |||||
| Peter Stuge | |||||
| Pierre Joye | |||||
| Rafael Kitover | |||||
| Romain Bondue | |||||
| Sara Golemon | |||||
| Satish Mittal | |||||
| Sean Peterson | |||||
| Selcuk Gueney | |||||
| Simon Hart | |||||
| Simon Josefsson | |||||
| Sofian Brabez | |||||
| Steven Ayre | |||||
| Steven Dake | |||||
| Steven Van Ingelgem | |||||
| TJ Saunders | |||||
| Tommy Lindgren | |||||
| Tor Arntsen | |||||
| Vincent Jaulin | |||||
| Vincent Torri | |||||
| Vlad Grachov | |||||
| Wez Furlong | |||||
| Yang Tse | |||||
| Zl Liu | |||||
| @@ -0,0 +1,29 @@ | |||||
| Creative people have written bindings or interfaces for various environments | |||||
| and programming languages. Using one of these bindings allows you to take | |||||
| advantage of libssh2 directly from within your favourite language. | |||||
| The bindings listed below are not part of the libssh2 distribution archives, | |||||
| but must be downloaded and installed separately. | |||||
| Cocoa/Objective-C | |||||
| https://github.com/karelia/libssh2_sftp-Cocoa-wrapper | |||||
| Haskell | |||||
| FFI bindings - https://hackage.haskell.org/package/libssh2 | |||||
| Perl | |||||
| Net::SSH2 - https://metacpan.org/pod/Net::SSH2 | |||||
| PHP | |||||
| ssh2 - https://pecl.php.net/package/ssh2 | |||||
| Python | |||||
| pylibssh2 - https://pypi.python.org/pypi/pylibssh2 | |||||
| Python-ctypes | |||||
| PySsh2 - https://github.com/gellule/PySsh2 | |||||
| Ruby | |||||
| libssh2-ruby - https://github.com/mitchellh/libssh2-ruby | |||||
| @@ -0,0 +1,210 @@ | |||||
| # Copyright (c) 2014 Alexander Lamaison <alexander.lamaison@gmail.com> | |||||
| # | |||||
| # Redistribution and use in source and binary forms, | |||||
| # with or without modification, are permitted provided | |||||
| # that the following conditions are met: | |||||
| # | |||||
| # Redistributions of source code must retain the above | |||||
| # copyright notice, this list of conditions and the | |||||
| # following disclaimer. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # Neither the name of the copyright holder nor the names | |||||
| # of any other contributors may be used to endorse or | |||||
| # promote products derived from this software without | |||||
| # specific prior written permission. | |||||
| # | |||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. | |||||
| set(MAN_PAGES | |||||
| libssh2_agent_connect.3 | |||||
| libssh2_agent_disconnect.3 | |||||
| libssh2_agent_free.3 | |||||
| libssh2_agent_get_identity.3 | |||||
| libssh2_agent_get_identity_path.3 | |||||
| libssh2_agent_init.3 | |||||
| libssh2_agent_list_identities.3 | |||||
| libssh2_agent_set_identity_path.3 | |||||
| libssh2_agent_userauth.3 | |||||
| libssh2_banner_set.3 | |||||
| libssh2_base64_decode.3 | |||||
| libssh2_channel_close.3 | |||||
| libssh2_channel_direct_tcpip.3 | |||||
| libssh2_channel_direct_tcpip_ex.3 | |||||
| libssh2_channel_eof.3 | |||||
| libssh2_channel_exec.3 | |||||
| libssh2_channel_flush.3 | |||||
| libssh2_channel_flush_ex.3 | |||||
| libssh2_channel_flush_stderr.3 | |||||
| libssh2_channel_forward_accept.3 | |||||
| libssh2_channel_forward_cancel.3 | |||||
| libssh2_channel_forward_listen.3 | |||||
| libssh2_channel_forward_listen_ex.3 | |||||
| libssh2_channel_free.3 | |||||
| libssh2_channel_get_exit_signal.3 | |||||
| libssh2_channel_get_exit_status.3 | |||||
| libssh2_channel_handle_extended_data.3 | |||||
| libssh2_channel_handle_extended_data2.3 | |||||
| libssh2_channel_ignore_extended_data.3 | |||||
| libssh2_channel_open_ex.3 | |||||
| libssh2_channel_open_session.3 | |||||
| libssh2_channel_process_startup.3 | |||||
| libssh2_channel_read.3 | |||||
| libssh2_channel_read_ex.3 | |||||
| libssh2_channel_read_stderr.3 | |||||
| libssh2_channel_receive_window_adjust.3 | |||||
| libssh2_channel_receive_window_adjust2.3 | |||||
| libssh2_channel_request_pty.3 | |||||
| libssh2_channel_request_pty_ex.3 | |||||
| libssh2_channel_request_pty_size.3 | |||||
| libssh2_channel_request_pty_size_ex.3 | |||||
| libssh2_channel_send_eof.3 | |||||
| libssh2_channel_set_blocking.3 | |||||
| libssh2_channel_setenv.3 | |||||
| libssh2_channel_setenv_ex.3 | |||||
| libssh2_channel_shell.3 | |||||
| libssh2_channel_subsystem.3 | |||||
| libssh2_channel_wait_closed.3 | |||||
| libssh2_channel_wait_eof.3 | |||||
| libssh2_channel_window_read.3 | |||||
| libssh2_channel_window_read_ex.3 | |||||
| libssh2_channel_window_write.3 | |||||
| libssh2_channel_window_write_ex.3 | |||||
| libssh2_channel_write.3 | |||||
| libssh2_channel_write_ex.3 | |||||
| libssh2_channel_write_stderr.3 | |||||
| libssh2_channel_x11_req.3 | |||||
| libssh2_channel_x11_req_ex.3 | |||||
| libssh2_exit.3 | |||||
| libssh2_free.3 | |||||
| libssh2_hostkey_hash.3 | |||||
| libssh2_init.3 | |||||
| libssh2_keepalive_config.3 | |||||
| libssh2_keepalive_send.3 | |||||
| libssh2_knownhost_add.3 | |||||
| libssh2_knownhost_addc.3 | |||||
| libssh2_knownhost_check.3 | |||||
| libssh2_knownhost_checkp.3 | |||||
| libssh2_knownhost_del.3 | |||||
| libssh2_knownhost_free.3 | |||||
| libssh2_knownhost_get.3 | |||||
| libssh2_knownhost_init.3 | |||||
| libssh2_knownhost_readfile.3 | |||||
| libssh2_knownhost_readline.3 | |||||
| libssh2_knownhost_writefile.3 | |||||
| libssh2_knownhost_writeline.3 | |||||
| libssh2_poll.3 | |||||
| libssh2_poll_channel_read.3 | |||||
| libssh2_publickey_add.3 | |||||
| libssh2_publickey_add_ex.3 | |||||
| libssh2_publickey_init.3 | |||||
| libssh2_publickey_list_fetch.3 | |||||
| libssh2_publickey_list_free.3 | |||||
| libssh2_publickey_remove.3 | |||||
| libssh2_publickey_remove_ex.3 | |||||
| libssh2_publickey_shutdown.3 | |||||
| libssh2_scp_recv.3 | |||||
| libssh2_scp_recv2.3 | |||||
| libssh2_scp_send.3 | |||||
| libssh2_scp_send64.3 | |||||
| libssh2_scp_send_ex.3 | |||||
| libssh2_session_abstract.3 | |||||
| libssh2_session_banner_get.3 | |||||
| libssh2_session_banner_set.3 | |||||
| libssh2_session_block_directions.3 | |||||
| libssh2_session_callback_set.3 | |||||
| libssh2_session_disconnect.3 | |||||
| libssh2_session_disconnect_ex.3 | |||||
| libssh2_session_flag.3 | |||||
| libssh2_session_free.3 | |||||
| libssh2_session_get_blocking.3 | |||||
| libssh2_session_get_timeout.3 | |||||
| libssh2_session_handshake.3 | |||||
| libssh2_session_hostkey.3 | |||||
| libssh2_session_init.3 | |||||
| libssh2_session_init_ex.3 | |||||
| libssh2_session_last_errno.3 | |||||
| libssh2_session_last_error.3 | |||||
| libssh2_session_set_last_error.3 | |||||
| libssh2_session_method_pref.3 | |||||
| libssh2_session_methods.3 | |||||
| libssh2_session_set_blocking.3 | |||||
| libssh2_session_set_timeout.3 | |||||
| libssh2_session_startup.3 | |||||
| libssh2_session_supported_algs.3 | |||||
| libssh2_sftp_close.3 | |||||
| libssh2_sftp_close_handle.3 | |||||
| libssh2_sftp_closedir.3 | |||||
| libssh2_sftp_fsetstat.3 | |||||
| libssh2_sftp_fstat.3 | |||||
| libssh2_sftp_fstat_ex.3 | |||||
| libssh2_sftp_fstatvfs.3 | |||||
| libssh2_sftp_fsync.3 | |||||
| libssh2_sftp_get_channel.3 | |||||
| libssh2_sftp_init.3 | |||||
| libssh2_sftp_last_error.3 | |||||
| libssh2_sftp_lstat.3 | |||||
| libssh2_sftp_mkdir.3 | |||||
| libssh2_sftp_mkdir_ex.3 | |||||
| libssh2_sftp_open.3 | |||||
| libssh2_sftp_open_ex.3 | |||||
| libssh2_sftp_opendir.3 | |||||
| libssh2_sftp_read.3 | |||||
| libssh2_sftp_readdir.3 | |||||
| libssh2_sftp_readdir_ex.3 | |||||
| libssh2_sftp_readlink.3 | |||||
| libssh2_sftp_realpath.3 | |||||
| libssh2_sftp_rename.3 | |||||
| libssh2_sftp_rename_ex.3 | |||||
| libssh2_sftp_rewind.3 | |||||
| libssh2_sftp_rmdir.3 | |||||
| libssh2_sftp_rmdir_ex.3 | |||||
| libssh2_sftp_seek.3 | |||||
| libssh2_sftp_seek64.3 | |||||
| libssh2_sftp_setstat.3 | |||||
| libssh2_sftp_shutdown.3 | |||||
| libssh2_sftp_stat.3 | |||||
| libssh2_sftp_stat_ex.3 | |||||
| libssh2_sftp_statvfs.3 | |||||
| libssh2_sftp_symlink.3 | |||||
| libssh2_sftp_symlink_ex.3 | |||||
| libssh2_sftp_tell.3 | |||||
| libssh2_sftp_tell64.3 | |||||
| libssh2_sftp_unlink.3 | |||||
| libssh2_sftp_unlink_ex.3 | |||||
| libssh2_sftp_write.3 | |||||
| libssh2_trace.3 | |||||
| libssh2_trace_sethandler.3 | |||||
| libssh2_userauth_authenticated.3 | |||||
| libssh2_userauth_hostbased_fromfile.3 | |||||
| libssh2_userauth_hostbased_fromfile_ex.3 | |||||
| libssh2_userauth_keyboard_interactive.3 | |||||
| libssh2_userauth_keyboard_interactive_ex.3 | |||||
| libssh2_userauth_list.3 | |||||
| libssh2_userauth_password.3 | |||||
| libssh2_userauth_password_ex.3 | |||||
| libssh2_userauth_publickey.3 | |||||
| libssh2_userauth_publickey_fromfile.3 | |||||
| libssh2_userauth_publickey_fromfile_ex.3 | |||||
| libssh2_userauth_publickey_frommemory.3 | |||||
| libssh2_version.3) | |||||
| include(GNUInstallDirs) | |||||
| install(FILES ${MAN_PAGES} DESTINATION ${CMAKE_INSTALL_MANDIR}/man3) | |||||
| @@ -0,0 +1,13 @@ | |||||
| libssh2 source code style guide: | |||||
| - 4 level indent | |||||
| - spaces-only (no tabs) | |||||
| - open braces on the if/for line: | |||||
| if (banana) { | |||||
| go_nuts(); | |||||
| } | |||||
| - keep source lines shorter than 80 columns | |||||
| - See libssh2-style.el for how to achieve this within Emacs | |||||
| @@ -0,0 +1,901 @@ | |||||
| Definitions needed to implement a specific crypto library | |||||
| This document offers some hints about implementing a new crypto library | |||||
| interface. | |||||
| A crypto library interface consists of at least a header file, defining | |||||
| entities referenced from the libssh2 core modules. | |||||
| Real code implementation (if needed), is left at the implementor's choice. | |||||
| This document lists the entities that must/may be defined in the header file. | |||||
| Procedures listed as "void" may indeed have a result type: the void indication | |||||
| indicates the libssh2 core modules never use the function result. | |||||
| 0) Build system. | |||||
| Adding a crypto backend to the autotools build system (./configure) is easy: | |||||
| 0.1) Add one new line in configure.ac | |||||
| m4_set_add([crypto_backends], [newname]) | |||||
| This automatically creates a --with-crypto=newname option. | |||||
| 0.2) Add an m4_case stanza to LIBSSH2_CRYPTO_CHECK in acinclude.m4 | |||||
| This must check for all required libraries, and if found set and AC_SUBST a | |||||
| variable with the library linking flags. The recommended method is to use | |||||
| LIBSSH2_LIB_HAVE_LINKFLAGS from LIBSSH2_CRYPTO_CHECK, which automatically | |||||
| creates and handles a --with-$newname-prefix option and sets an | |||||
| LTLIBNEWNAME variable on success. | |||||
| 0.3) Create Makefile.newname.inc in the top-level directory | |||||
| This must set CRYPTO_CSOURCES, CRYPTO_HHEADERS and CRYPTO_LTLIBS. | |||||
| Set CRYPTO_CSOURCES and CRYPTO_HHEADERS to the new backend source files | |||||
| and set CRYPTO_LTLIBS to the required library linking parameters, e.g. | |||||
| $(LTLIBNEWNAME) as generated by by LIBSSH2_LIB_HAVE_LINKFLAGS. | |||||
| 0.4) Add a new block in src/Makefile.am | |||||
| if NEWNAME | |||||
| include ../Makefile.newname.inc | |||||
| endif | |||||
| 1) Crypto library initialization/termination. | |||||
| void libssh2_crypto_init(void); | |||||
| Initializes the crypto library. May be an empty macro if not needed. | |||||
| void libssh2_crypto_exit(void); | |||||
| Terminates the crypto library use. May be an empty macro if not needed. | |||||
| 2) HMAC | |||||
| libssh2_hmac_ctx | |||||
| Type of an HMAC computation context. Generally a struct. | |||||
| Used for all hash algorithms. | |||||
| void libssh2_hmac_ctx_init(libssh2_hmac_ctx ctx); | |||||
| Initializes the HMAC computation context ctx. | |||||
| Called before setting-up the hash algorithm. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_hmac_update(libssh2_hmac_ctx ctx, | |||||
| const unsigned char *data, | |||||
| int datalen); | |||||
| Continue computation of an HMAC on datalen bytes at data using context ctx. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_hmac_final(libssh2_hmac_ctx ctx, | |||||
| unsigned char output[]); | |||||
| Get the computed HMAC from context ctx into the output buffer. The | |||||
| minimum data buffer size depends on the HMAC hash algorithm. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_hmac_cleanup(libssh2_hmac_ctx *ctx); | |||||
| Releases the HMAC computation context at ctx. | |||||
| 3) Hash algorithms. | |||||
| 3.1) SHA-1 | |||||
| Must always be implemented. | |||||
| SHA_DIGEST_LENGTH | |||||
| #define to 20, the SHA-1 digest length. | |||||
| libssh2_sha1_ctx | |||||
| Type of an SHA-1 computation context. Generally a struct. | |||||
| int libssh2_sha1_init(libssh2_sha1_ctx *x); | |||||
| Initializes the SHA-1 computation context at x. | |||||
| Returns 1 for success and 0 for failure | |||||
| void libssh2_sha1_update(libssh2_sha1_ctx ctx, | |||||
| const unsigned char *data, | |||||
| size_t len); | |||||
| Continue computation of SHA-1 on len bytes at data using context ctx. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_sha1_final(libssh2_sha1_ctx ctx, | |||||
| unsigned char output[SHA_DIGEST_LEN]); | |||||
| Get the computed SHA-1 signature from context ctx and store it into the | |||||
| output buffer. | |||||
| Release the context. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_hmac_sha1_init(libssh2_hmac_ctx *ctx, | |||||
| const void *key, | |||||
| int keylen); | |||||
| Setup the HMAC computation context ctx for an HMAC-SHA-1 computation using the | |||||
| keylen-byte key. Is invoked just after libssh2_hmac_ctx_init(). | |||||
| 3.2) SHA-256 | |||||
| Must always be implemented. | |||||
| SHA256_DIGEST_LENGTH | |||||
| #define to 32, the SHA-256 digest length. | |||||
| libssh2_sha256_ctx | |||||
| Type of an SHA-256 computation context. Generally a struct. | |||||
| int libssh2_sha256_init(libssh2_sha256_ctx *x); | |||||
| Initializes the SHA-256 computation context at x. | |||||
| Returns 1 for success and 0 for failure | |||||
| void libssh2_sha256_update(libssh2_sha256_ctx ctx, | |||||
| const unsigned char *data, | |||||
| size_t len); | |||||
| Continue computation of SHA-256 on len bytes at data using context ctx. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_sha256_final(libssh2_sha256_ctx ctx, | |||||
| unsigned char output[SHA256_DIGEST_LENGTH]); | |||||
| Gets the computed SHA-256 signature from context ctx into the output buffer. | |||||
| Release the context. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| int libssh2_sha256(const unsigned char *message, | |||||
| unsigned long len, | |||||
| unsigned char output[SHA256_DIGEST_LENGTH]); | |||||
| Computes the SHA-256 signature over the given message of length len and | |||||
| store the result into the output buffer. | |||||
| Return 1 if error, else 0. | |||||
| Note: Seems unused in current code, but defined in each crypto library backend. | |||||
| LIBSSH2_HMAC_SHA256 | |||||
| #define as 1 if the crypto library supports HMAC-SHA-256, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| void libssh2_hmac_sha256_init(libssh2_hmac_ctx *ctx, | |||||
| const void *key, | |||||
| int keylen); | |||||
| Setup the HMAC computation context ctx for an HMAC-256 computation using the | |||||
| keylen-byte key. Is invoked just after libssh2_hmac_ctx_init(). | |||||
| 3.3) SHA-384 | |||||
| Mandatory if ECDSA is implemented. Can be omitted otherwise. | |||||
| SHA384_DIGEST_LENGTH | |||||
| #define to 48, the SHA-384 digest length. | |||||
| libssh2_sha384_ctx | |||||
| Type of an SHA-384 computation context. Generally a struct. | |||||
| int libssh2_sha384_init(libssh2_sha384_ctx *x); | |||||
| Initializes the SHA-384 computation context at x. | |||||
| Returns 1 for success and 0 for failure | |||||
| void libssh2_sha384_update(libssh2_sha384_ctx ctx, | |||||
| const unsigned char *data, | |||||
| size_t len); | |||||
| Continue computation of SHA-384 on len bytes at data using context ctx. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_sha384_final(libssh2_sha384_ctx ctx, | |||||
| unsigned char output[SHA384_DIGEST_LENGTH]); | |||||
| Gets the computed SHA-384 signature from context ctx into the output buffer. | |||||
| Release the context. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| int libssh2_sha384(const unsigned char *message, | |||||
| unsigned long len, | |||||
| unsigned char output[SHA384_DIGEST_LENGTH]); | |||||
| Computes the SHA-384 signature over the given message of length len and | |||||
| store the result into the output buffer. | |||||
| Return 1 if error, else 0. | |||||
| 3.4) SHA-512 | |||||
| Must always be implemented. | |||||
| SHA512_DIGEST_LENGTH | |||||
| #define to 64, the SHA-512 digest length. | |||||
| libssh2_sha512_ctx | |||||
| Type of an SHA-512 computation context. Generally a struct. | |||||
| int libssh2_sha512_init(libssh2_sha512_ctx *x); | |||||
| Initializes the SHA-512 computation context at x. | |||||
| Returns 1 for success and 0 for failure | |||||
| void libssh2_sha512_update(libssh2_sha512_ctx ctx, | |||||
| const unsigned char *data, | |||||
| size_t len); | |||||
| Continue computation of SHA-512 on len bytes at data using context ctx. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_sha512_final(libssh2_sha512_ctx ctx, | |||||
| unsigned char output[SHA512_DIGEST_LENGTH]); | |||||
| Gets the computed SHA-512 signature from context ctx into the output buffer. | |||||
| Release the context. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| int libssh2_sha512(const unsigned char *message, | |||||
| unsigned long len, | |||||
| unsigned char output[SHA512_DIGEST_LENGTH]); | |||||
| Computes the SHA-512 signature over the given message of length len and | |||||
| store the result into the output buffer. | |||||
| Return 1 if error, else 0. | |||||
| Note: Seems unused in current code, but defined in each crypto library backend. | |||||
| LIBSSH2_HMAC_SHA512 | |||||
| #define as 1 if the crypto library supports HMAC-SHA-512, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| void libssh2_hmac_sha512_init(libssh2_hmac_ctx *ctx, | |||||
| const void *key, | |||||
| int keylen); | |||||
| Setup the HMAC computation context ctx for an HMAC-512 computation using the | |||||
| keylen-byte key. Is invoked just after libssh2_hmac_ctx_init(). | |||||
| 3.5) MD5 | |||||
| LIBSSH2_MD5 | |||||
| #define to 1 if the crypto library supports MD5, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| MD5_DIGEST_LENGTH | |||||
| #define to 16, the MD5 digest length. | |||||
| libssh2_md5_ctx | |||||
| Type of an MD5 computation context. Generally a struct. | |||||
| int libssh2_md5_init(libssh2_md5_ctx *x); | |||||
| Initializes the MD5 computation context at x. | |||||
| Returns 1 for success and 0 for failure | |||||
| void libssh2_md5_update(libssh2_md5_ctx ctx, | |||||
| const unsigned char *data, | |||||
| size_t len); | |||||
| Continues computation of MD5 on len bytes at data using context ctx. | |||||
| Returns 1 for success and 0 for failure. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_md5_final(libssh2_md5_ctx ctx, | |||||
| unsigned char output[MD5_DIGEST_LENGTH]); | |||||
| Gets the computed MD5 signature from context ctx into the output buffer. | |||||
| Release the context. | |||||
| Note: if the ctx parameter is modified by the underlying code, | |||||
| this procedure must be implemented as a macro to map ctx --> &ctx. | |||||
| void libssh2_hmac_md5_init(libssh2_hmac_ctx *ctx, | |||||
| const void *key, | |||||
| int keylen); | |||||
| Setup the HMAC computation context ctx for an HMAC-MD5 computation using the | |||||
| keylen-byte key. Is invoked just after libssh2_hmac_ctx_init(). | |||||
| 3.6) RIPEMD-160 | |||||
| LIBSSH2_HMAC_RIPEMD | |||||
| #define as 1 if the crypto library supports HMAC-RIPEMD-160, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| void libssh2_hmac_ripemd160_init(libssh2_hmac_ctx *ctx, | |||||
| const void *key, | |||||
| int keylen); | |||||
| Setup the HMAC computation context ctx for an HMAC-RIPEMD-160 computation using | |||||
| the keylen-byte key. Is invoked just after libssh2_hmac_ctx_init(). | |||||
| Returns 1 for success and 0 for failure. | |||||
| 4) Bidirectional key ciphers. | |||||
| _libssh2_cipher_ctx | |||||
| Type of a cipher computation context. | |||||
| _libssh2_cipher_type(name); | |||||
| Macro defining name as storage identifying a cipher algorithm for | |||||
| the crypto library interface. No trailing semicolon. | |||||
| int _libssh2_cipher_init(_libssh2_cipher_ctx *h, | |||||
| _libssh2_cipher_type(algo), | |||||
| unsigned char *iv, | |||||
| unsigned char *secret, | |||||
| int encrypt); | |||||
| Creates a cipher context for the given algorithm with the initialization vector | |||||
| iv and the secret key secret. Prepare for encryption or decryption depending on | |||||
| encrypt. | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_cipher_crypt(_libssh2_cipher_ctx *ctx, | |||||
| _libssh2_cipher_type(algo), | |||||
| int encrypt, | |||||
| unsigned char *block, | |||||
| size_t blocksize); | |||||
| Encrypt or decrypt in-place data at (block, blocksize) using the given | |||||
| context and/or algorithm. | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| void _libssh2_cipher_dtor(_libssh2_cipher_ctx *ctx); | |||||
| Release cipher context at ctx. | |||||
| 4.1) AES | |||||
| 4.1.1) AES in CBC block mode. | |||||
| LIBSSH2_AES | |||||
| #define as 1 if the crypto library supports AES in CBC mode, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| _libssh2_cipher_aes128 | |||||
| AES-128-CBC algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| _libssh2_cipher_aes192 | |||||
| AES-192-CBC algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| _libssh2_cipher_aes256 | |||||
| AES-256-CBC algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| 4.1.2) AES in CTR block mode. | |||||
| LIBSSH2_AES_CTR | |||||
| #define as 1 if the crypto library supports AES in CTR mode, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| _libssh2_cipher_aes128ctr | |||||
| AES-128-CTR algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| _libssh2_cipher_aes192ctr | |||||
| AES-192-CTR algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| _libssh2_cipher_aes256ctr | |||||
| AES-256-CTR algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| 4.2) Blowfish in CBC block mode. | |||||
| LIBSSH2_BLOWFISH | |||||
| #define as 1 if the crypto library supports blowfish in CBC mode, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| _libssh2_cipher_blowfish | |||||
| Blowfish-CBC algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| 4.3) RC4. | |||||
| LIBSSH2_RC4 | |||||
| #define as 1 if the crypto library supports RC4 (arcfour), else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| _libssh2_cipher_arcfour | |||||
| RC4 algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| 4.4) CAST5 in CBC block mode. | |||||
| LIBSSH2_CAST | |||||
| #define 1 if the crypto library supports cast, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| _libssh2_cipher_cast5 | |||||
| CAST5-CBC algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| 4.5) Tripple DES in CBC block mode. | |||||
| LIBSSH2_3DES | |||||
| #define as 1 if the crypto library supports TripleDES in CBC mode, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| _libssh2_cipher_3des | |||||
| TripleDES-CBC algorithm identifier initializer. | |||||
| #define with constant value of type _libssh2_cipher_type(). | |||||
| 5) Diffie-Hellman support. | |||||
| 5.1) Diffie-Hellman context. | |||||
| _libssh2_dh_ctx | |||||
| Type of a Diffie-Hellman computation context. | |||||
| Must always be defined. | |||||
| 5.2) Diffie-Hellman computation procedures. | |||||
| void libssh2_dh_init(_libssh2_dh_ctx *dhctx); | |||||
| Initializes the Diffie-Hellman context at `dhctx'. No effective context | |||||
| creation needed here. | |||||
| int libssh2_dh_key_pair(_libssh2_dh_ctx *dhctx, _libssh2_bn *public, | |||||
| _libssh2_bn *g, _libssh2_bn *p, int group_order, | |||||
| _libssh2_bn_ctx *bnctx); | |||||
| Generates a Diffie-Hellman key pair using base `g', prime `p' and the given | |||||
| `group_order'. Can use the given big number context `bnctx' if needed. | |||||
| The private key is stored as opaque in the Diffie-Hellman context `*dhctx' and | |||||
| the public key is returned in `public'. | |||||
| 0 is returned upon success, else -1. | |||||
| int libssh2_dh_secret(_libssh2_dh_ctx *dhctx, _libssh2_bn *secret, | |||||
| _libssh2_bn *f, _libssh2_bn *p, _libssh2_bn_ctx * bnctx) | |||||
| Computes the Diffie-Hellman secret from the previously created context `*dhctx', | |||||
| the public key `f' from the other party and the same prime `p' used at | |||||
| context creation. The result is stored in `secret'. | |||||
| 0 is returned upon success, else -1. | |||||
| void libssh2_dh_dtor(_libssh2_dh_ctx *dhctx) | |||||
| Destroys Diffie-Hellman context at `dhctx' and resets its storage. | |||||
| 6) Big numbers. | |||||
| Positive multi-byte integers support is sufficient. | |||||
| 6.1) Computation contexts. | |||||
| This has a real meaning if the big numbers computations need some context | |||||
| storage. If not, use a dummy type and functions (macros). | |||||
| _libssh2_bn_ctx | |||||
| Type of multiple precision computation context. May not be empty. if not used, | |||||
| #define as char, for example. | |||||
| _libssh2_bn_ctx _libssh2_bn_ctx_new(void); | |||||
| Returns a new multiple precision computation context. | |||||
| void _libssh2_bn_ctx_free(_libssh2_bn_ctx ctx); | |||||
| Releases a multiple precision computation context. | |||||
| 6.2) Computation support. | |||||
| _libssh2_bn | |||||
| Type of multiple precision numbers (aka bignumbers or huge integers) for the | |||||
| crypto library. | |||||
| _libssh2_bn * _libssh2_bn_init(void); | |||||
| Creates a multiple precision number (preset to zero). | |||||
| _libssh2_bn * _libssh2_bn_init_from_bin(void); | |||||
| Create a multiple precision number intended to be set by the | |||||
| _libssh2_bn_from_bin() function (see below). Unlike _libssh2_bn_init(), this | |||||
| code may be a dummy initializer if the _libssh2_bn_from_bin() actually | |||||
| allocates the number. Returns a value of type _libssh2_bn *. | |||||
| void _libssh2_bn_free(_libssh2_bn *bn); | |||||
| Destroys the multiple precision number at bn. | |||||
| unsigned long _libssh2_bn_bytes(_libssh2_bn *bn); | |||||
| Get the number of bytes needed to store the bits of the multiple precision | |||||
| number at bn. | |||||
| unsigned long _libssh2_bn_bits(_libssh2_bn *bn); | |||||
| Returns the number of bits of multiple precision number at bn. | |||||
| int _libssh2_bn_set_word(_libssh2_bn *bn, unsigned long val); | |||||
| Sets the value of bn to val. | |||||
| Returns 1 on success, 0 otherwise. | |||||
| _libssh2_bn * _libssh2_bn_from_bin(_libssh2_bn *bn, int len, | |||||
| const unsigned char *val); | |||||
| Converts the positive integer in big-endian form of length len at val | |||||
| into a _libssh2_bn and place it in bn. If bn is NULL, a new _libssh2_bn is | |||||
| created. | |||||
| Returns a pointer to target _libssh2_bn or NULL if error. | |||||
| int _libssh2_bn_to_bin(_libssh2_bn *bn, unsigned char *val); | |||||
| Converts the absolute value of bn into big-endian form and store it at | |||||
| val. val must point to _libssh2_bn_bytes(bn) bytes of memory. | |||||
| Returns the length of the big-endian number. | |||||
| 7) Private key algorithms. | |||||
| Format of an RSA public key: | |||||
| a) "ssh-rsa". | |||||
| b) RSA exponent, MSB first, with high order bit = 0. | |||||
| c) RSA modulus, MSB first, with high order bit = 0. | |||||
| Each item is preceded by its 32-bit byte length, MSB first. | |||||
| Format of a DSA public key: | |||||
| a) "ssh-dss". | |||||
| b) p, MSB first, with high order bit = 0. | |||||
| c) q, MSB first, with high order bit = 0. | |||||
| d) g, MSB first, with high order bit = 0. | |||||
| e) pub_key, MSB first, with high order bit = 0. | |||||
| Each item is preceded by its 32-bit byte length, MSB first. | |||||
| Format of an ECDSA public key: | |||||
| a) "ecdsa-sha2-nistp256" or "ecdsa-sha2-nistp384" or "ecdsa-sha2-nistp521". | |||||
| b) domain: "nistp256", "nistp384" or "nistp521" matching a). | |||||
| c) raw public key ("octal"). | |||||
| Each item is preceded by its 32-bit byte length, MSB first. | |||||
| Format of an ED25519 public key: | |||||
| a) "ssh-ed25519". | |||||
| b) raw key (32 bytes). | |||||
| Each item is preceded by its 32-bit byte length, MSB first. | |||||
| int _libssh2_pub_priv_keyfile(LIBSSH2_SESSION *session, | |||||
| unsigned char **method, | |||||
| size_t *method_len, | |||||
| unsigned char **pubkeydata, | |||||
| size_t *pubkeydata_len, | |||||
| const char *privatekey, | |||||
| const char *passphrase); | |||||
| Reads a private key from file privatekey and extract the public key --> | |||||
| (pubkeydata, pubkeydata_len). Store the associated method (ssh-rsa or ssh-dss) | |||||
| into (method, method_len). | |||||
| Both buffers have to be allocated using LIBSSH2_ALLOC(). | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_pub_priv_keyfilememory(LIBSSH2_SESSION *session, | |||||
| unsigned char **method, | |||||
| size_t *method_len, | |||||
| unsigned char **pubkeydata, | |||||
| size_t *pubkeydata_len, | |||||
| const char *privatekeydata, | |||||
| size_t privatekeydata_len, | |||||
| const char *passphrase); | |||||
| Gets a private key from bytes at (privatekeydata, privatekeydata_len) and | |||||
| extract the public key --> (pubkeydata, pubkeydata_len). Store the associated | |||||
| method (ssh-rsa or ssh-dss) into (method, method_len). | |||||
| Both buffers have to be allocated using LIBSSH2_ALLOC(). | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| 7.1) RSA | |||||
| LIBSSH2_RSA | |||||
| #define as 1 if the crypto library supports RSA, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| libssh2_rsa_ctx | |||||
| Type of an RSA computation context. Generally a struct. | |||||
| int _libssh2_rsa_new(libssh2_rsa_ctx **rsa, | |||||
| const unsigned char *edata, | |||||
| unsigned long elen, | |||||
| const unsigned char *ndata, | |||||
| unsigned long nlen, | |||||
| const unsigned char *ddata, | |||||
| unsigned long dlen, | |||||
| const unsigned char *pdata, | |||||
| unsigned long plen, | |||||
| const unsigned char *qdata, | |||||
| unsigned long qlen, | |||||
| const unsigned char *e1data, | |||||
| unsigned long e1len, | |||||
| const unsigned char *e2data, | |||||
| unsigned long e2len, | |||||
| const unsigned char *coeffdata, unsigned long coefflen); | |||||
| Creates a new context for RSA computations from key source values: | |||||
| pdata, plen Prime number p. Only used if private key known (ddata). | |||||
| qdata, qlen Prime number q. Only used if private key known (ddata). | |||||
| ndata, nlen Modulus n. | |||||
| edata, elen Exponent e. | |||||
| ddata, dlen e^-1 % phi(n) = private key. May be NULL if unknown. | |||||
| e1data, e1len dp = d % (p-1). Only used if private key known (dtata). | |||||
| e2data, e2len dq = d % (q-1). Only used if private key known (dtata). | |||||
| coeffdata, coefflen q^-1 % p. Only used if private key known. | |||||
| Returns 0 if OK. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| Note: the current generic code only calls this function with e and n (public | |||||
| key parameters): unless used internally by the backend, it is not needed to | |||||
| support the private key and the other parameters here. | |||||
| int _libssh2_rsa_new_private(libssh2_rsa_ctx **rsa, | |||||
| LIBSSH2_SESSION *session, | |||||
| const char *filename, | |||||
| unsigned const char *passphrase); | |||||
| Reads an RSA private key from file filename into a new RSA context. | |||||
| Must call _libssh2_init_if_needed(). | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_rsa_new_private_frommemory(libssh2_rsa_ctx **rsa, | |||||
| LIBSSH2_SESSION *session, | |||||
| const char *data, | |||||
| size_t data_len, | |||||
| unsigned const char *passphrase); | |||||
| Gets an RSA private key from data into a new RSA context. | |||||
| Must call _libssh2_init_if_needed(). | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_rsa_sha1_verify(libssh2_rsa_ctx *rsa, | |||||
| const unsigned char *sig, | |||||
| unsigned long sig_len, | |||||
| const unsigned char *m, unsigned long m_len); | |||||
| Verify (sig, sig_len) signature of (m, m_len) using an SHA-1 hash and the | |||||
| RSA context. | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_rsa_sha1_signv(LIBSSH2_SESSION *session, | |||||
| unsigned char **sig, size_t *siglen, | |||||
| int count, const struct iovec vector[], | |||||
| libssh2_rsa_ctx *ctx); | |||||
| RSA signs the SHA-1 hash computed over the count data chunks in vector. | |||||
| Signature is stored at (sig, siglen). | |||||
| Signature buffer must be allocated from the given session. | |||||
| Returns 0 if OK, else -1. | |||||
| Note: this procedure is optional: if provided, it MUST be defined as a macro. | |||||
| int _libssh2_rsa_sha1_sign(LIBSSH2_SESSION *session, | |||||
| libssh2_rsa_ctx *rsactx, | |||||
| const unsigned char *hash, | |||||
| size_t hash_len, | |||||
| unsigned char **signature, | |||||
| size_t *signature_len); | |||||
| RSA signs the (hash, hashlen) SHA-1 hash bytes and stores the allocated | |||||
| signature at (signature, signature_len). | |||||
| Signature buffer must be allocated from the given session. | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| Note: this procedure is not used if macro _libssh2_rsa_sha1_signv() is defined. | |||||
| void _libssh2_rsa_free(libssh2_rsa_ctx *rsactx); | |||||
| Releases the RSA computation context at rsactx. | |||||
| 7.2) DSA | |||||
| LIBSSH2_DSA | |||||
| #define as 1 if the crypto library supports DSA, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| libssh2_dsa_ctx | |||||
| Type of a DSA computation context. Generally a struct. | |||||
| int _libssh2_dsa_new(libssh2_dsa_ctx **dsa, | |||||
| const unsigned char *pdata, | |||||
| unsigned long plen, | |||||
| const unsigned char *qdata, | |||||
| unsigned long qlen, | |||||
| const unsigned char *gdata, | |||||
| unsigned long glen, | |||||
| const unsigned char *ydata, | |||||
| unsigned long ylen, | |||||
| const unsigned char *x, unsigned long x_len); | |||||
| Creates a new context for DSA computations from source key values: | |||||
| pdata, plen Prime number p. Only used if private key known (ddata). | |||||
| qdata, qlen Prime number q. Only used if private key known (ddata). | |||||
| gdata, glen G number. | |||||
| ydata, ylen Public key. | |||||
| xdata, xlen Private key. Only taken if xlen non-zero. | |||||
| Returns 0 if OK. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_dsa_new_private(libssh2_dsa_ctx **dsa, | |||||
| LIBSSH2_SESSION *session, | |||||
| const char *filename, | |||||
| unsigned const char *passphrase); | |||||
| Gets a DSA private key from file filename into a new DSA context. | |||||
| Must call _libssh2_init_if_needed(). | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_dsa_new_private_frommemory(libssh2_dsa_ctx **dsa, | |||||
| LIBSSH2_SESSION *session, | |||||
| const char *data, | |||||
| size_t data_len, | |||||
| unsigned const char *passphrase); | |||||
| Gets a DSA private key from the data_len-bytes data into a new DSA context. | |||||
| Must call _libssh2_init_if_needed(). | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_dsa_sha1_verify(libssh2_dsa_ctx *dsactx, | |||||
| const unsigned char *sig, | |||||
| const unsigned char *m, unsigned long m_len); | |||||
| Verify (sig, siglen) signature of (m, m_len) using an SHA-1 hash and the | |||||
| DSA context. | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_dsa_sha1_sign(libssh2_dsa_ctx *dsactx, | |||||
| const unsigned char *hash, | |||||
| unsigned long hash_len, unsigned char *sig); | |||||
| DSA signs the (hash, hash_len) data using SHA-1 and store the signature at sig. | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| void _libssh2_dsa_free(libssh2_dsa_ctx *dsactx); | |||||
| Releases the DSA computation context at dsactx. | |||||
| 7.3) ECDSA | |||||
| LIBSSH2_ECDSA | |||||
| #define as 1 if the crypto library supports ECDSA, else 0. | |||||
| If defined as 0, _libssh2_ec_key should be defined as void and the rest of | |||||
| this section can be omitted. | |||||
| EC_MAX_POINT_LEN | |||||
| Maximum point length. Usually defined as ((528 * 2 / 8) + 1) (= 133). | |||||
| libssh2_ecdsa_ctx | |||||
| Type of an ECDSA computation context. Generally a struct. | |||||
| _libssh2_ec_key | |||||
| Type of an elliptic curve key. | |||||
| libssh2_curve_type | |||||
| An enum type defining curve types. Current supported identifiers are: | |||||
| LIBSSH2_EC_CURVE_NISTP256 | |||||
| LIBSSH2_EC_CURVE_NISTP384 | |||||
| LIBSSH2_EC_CURVE_NISTP521 | |||||
| int _libssh2_ecdsa_create_key(_libssh2_ec_key **out_private_key, | |||||
| unsigned char **out_public_key_octal, | |||||
| size_t *out_public_key_octal_len, | |||||
| libssh2_curve_type curve_type); | |||||
| Create a new ECDSA private key of type curve_type and return it at | |||||
| out_private_key. If out_public_key_octal is not NULL, store an allocated | |||||
| pointer to the associated public key in "octal" form in it and its length | |||||
| at out_public_key_octal_len. | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ecdsa_new_private(libssh2_ecdsa_ctx **ec_ctx, | |||||
| LIBSSH2_SESSION * session, | |||||
| const char *filename, | |||||
| unsigned const char *passphrase); | |||||
| Reads an ECDSA private key from PEM file filename into a new ECDSA context. | |||||
| Must call _libssh2_init_if_needed(). | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ecdsa_new_private_frommemory(libssh2_ecdsa_ctx ** ec_ctx, | |||||
| LIBSSH2_SESSION * session, | |||||
| const char *filedata, | |||||
| size_t filedata_len, | |||||
| unsigned const char *passphrase); | |||||
| Builds an ECDSA private key from PEM data at filedata of length filedata_len | |||||
| into a new ECDSA context stored at ec_ctx. | |||||
| Must call _libssh2_init_if_needed(). | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ecdsa_curve_name_with_octal_new(libssh2_ecdsa_ctx **ecdsactx, | |||||
| const unsigned char *k, | |||||
| size_t k_len, | |||||
| libssh2_curve_type type); | |||||
| Stores at ecdsactx a new ECDSA context associated with the given curve type | |||||
| and with "octal" form public key (k, k_len). | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ecdsa_new_openssh_private(libssh2_ecdsa_ctx **ec_ctx, | |||||
| LIBSSH2_SESSION * session, | |||||
| const char *filename, | |||||
| unsigned const char *passphrase); | |||||
| Reads a PEM-encoded ECDSA private key from file filename encrypted with | |||||
| passphrase and stores at ec_ctx a new ECDSA context for it. | |||||
| Return 0 if OK, else -1. | |||||
| Currently used only from openssl backend (ought to be private). | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ecdsa_sign(LIBSSH2_SESSION *session, libssh2_ecdsa_ctx *ec_ctx, | |||||
| const unsigned char *hash, unsigned long hash_len, | |||||
| unsigned char **signature, size_t *signature_len); | |||||
| ECDSA signs the (hash, hashlen) hash bytes and stores the allocated | |||||
| signature at (signature, signature_len). Hash algorithm used should be | |||||
| SHA-256, SHA-384 or SHA-512 depending on type stored in ECDSA context at ec_ctx. | |||||
| Signature buffer must be allocated from the given session. | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ecdsa_verify(libssh2_ecdsa_ctx *ctx, | |||||
| const unsigned char *r, size_t r_len, | |||||
| const unsigned char *s, size_t s_len, | |||||
| const unsigned char *m, size_t m_len); | |||||
| Verify the ECDSA signature made of (r, r_len) and (s, s_len) of (m, m_len) | |||||
| using the hash algorithm configured in the ECDSA context ctx. | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| libssh2_curve_type _libssh2_ecdsa_get_curve_type(libssh2_ecdsa_ctx *ecdsactx); | |||||
| Returns the curve type associated with given context. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ecdsa_curve_type_from_name(const char *name, | |||||
| libssh2_curve_type *out_type); | |||||
| Stores in out_type the curve type matching string name of the form | |||||
| "ecdsa-sha2-nistpxxx". | |||||
| Return 0 if OK, else -1. | |||||
| Currently used only from openssl backend (ought to be private). | |||||
| This procedure is already prototyped in crypto.h. | |||||
| void _libssh2_ecdsa_free(libssh2_ecdsa_ctx *ecdsactx); | |||||
| Releases the ECDSA computation context at ecdsactx. | |||||
| 7.4) ED25519 | |||||
| LIBSSH2_ED25519 | |||||
| #define as 1 if the crypto library supports ED25519, else 0. | |||||
| If defined as 0, the rest of this section can be omitted. | |||||
| libssh2_ed25519_ctx | |||||
| Type of an ED25519 computation context. Generally a struct. | |||||
| int _libssh2_curve25519_new(LIBSSH2_SESSION *session, libssh2_ed25519_ctx **ctx, | |||||
| uint8_t **out_public_key, | |||||
| uint8_t **out_private_key); | |||||
| Generates an ED25519 key pair, stores a pointer to them at out_private_key | |||||
| and out_public_key respectively and stores at ctx a new ED25519 context for | |||||
| this key. | |||||
| Argument ctx, out_private_key and out_public key may be NULL to disable storing | |||||
| the corresponding value. | |||||
| Length of each key is LIBSSH2_ED25519_KEY_LEN (32 bytes). | |||||
| Key buffers are allocated and should be released by caller after use. | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ed25519_new_private(libssh2_ed25519_ctx **ed_ctx, | |||||
| LIBSSH2_SESSION *session, | |||||
| const char *filename, | |||||
| const uint8_t *passphrase); | |||||
| Reads an ED25519 private key from PEM file filename into a new ED25519 context. | |||||
| Must call _libssh2_init_if_needed(). | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ed25519_new_public(libssh2_ed25519_ctx **ed_ctx, | |||||
| LIBSSH2_SESSION *session, | |||||
| const unsigned char *raw_pub_key, | |||||
| const uint8_t key_len); | |||||
| Stores at ed_ctx a new ED25519 key context for raw public key (raw_pub_key, | |||||
| key_len). | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ed25519_new_private_frommemory(libssh2_ed25519_ctx **ed_ctx, | |||||
| LIBSSH2_SESSION *session, | |||||
| const char *filedata, | |||||
| size_t filedata_len, | |||||
| unsigned const char *passphrase); | |||||
| Builds an ED25519 private key from PEM data at filedata of length filedata_len | |||||
| into a new ED25519 context stored at ed_ctx. | |||||
| Must call _libssh2_init_if_needed(). | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ed25519_sign(libssh2_ed25519_ctx *ctx, LIBSSH2_SESSION *session, | |||||
| uint8_t **out_sig, size_t *out_sig_len, | |||||
| const uint8_t *message, size_t message_len); | |||||
| ED25519 signs the (message, message_len) bytes and stores the allocated | |||||
| signature at (sig, sig_len). | |||||
| Signature buffer is allocated from the given session. | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_ed25519_verify(libssh2_ed25519_ctx *ctx, const uint8_t *s, | |||||
| size_t s_len, const uint8_t *m, size_t m_len); | |||||
| Verify (s, s_len) signature of (m, m_len) using the given ED25519 context. | |||||
| Return 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| int _libssh2_curve25519_gen_k(_libssh2_bn **k, | |||||
| uint8_t private_key[LIBSSH2_ED25519_KEY_LEN], | |||||
| uint8_t srvr_public_key[LIBSSH2_ED25519_KEY_LEN]); | |||||
| Computes a shared ED25519 secret key from the given raw server public key and | |||||
| raw client public key and stores it as a big number in *k. Big number should | |||||
| have been initialized before calling this function. | |||||
| Returns 0 if OK, else -1. | |||||
| This procedure is already prototyped in crypto.h. | |||||
| void _libssh2_ed25519_free(libssh2_ed25519_ctx *ed25519ctx); | |||||
| Releases the ED25519 computation context at ed25519ctx. | |||||
| 8) Miscellaneous | |||||
| void libssh2_prepare_iovec(struct iovec *vector, unsigned int len); | |||||
| Prepare len consecutive iovec slots before using them. | |||||
| In example, this is needed to preset unused structure slacks on platforms | |||||
| requiring it. | |||||
| If this is not needed, it should be defined as an empty macro. | |||||
| void _libssh2_random(unsigned char *buf, int len); | |||||
| Store len random bytes at buf. | |||||
| @@ -0,0 +1,355 @@ | |||||
| Installation Instructions | |||||
| ************************* | |||||
| Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free | |||||
| Software Foundation, Inc. | |||||
| This file is free documentation; the Free Software Foundation gives | |||||
| unlimited permission to copy, distribute and modify it. | |||||
| When Building directly from Master | |||||
| ================================== | |||||
| If you want to build directly from the git repository, you must first | |||||
| generate the configure script and Makefile using autotools. There is | |||||
| a convenience script that calls all tools in the correct order. Make | |||||
| sure that autoconf, automake and libtool are installed on your system, | |||||
| then execute: | |||||
| autoreconf -fi | |||||
| After executing this script, you can build the project as usual: | |||||
| ./configure | |||||
| make | |||||
| Basic Installation | |||||
| ================== | |||||
| These are generic installation instructions. | |||||
| The `configure' shell script attempts to guess correct values for | |||||
| various system-dependent variables used during compilation. It uses | |||||
| those values to create a `Makefile' in each directory of the package. | |||||
| It may also create one or more `.h' files containing system-dependent | |||||
| definitions. Finally, it creates a shell script `config.status' that | |||||
| you can run in the future to recreate the current configuration, and a | |||||
| file `config.log' containing compiler output (useful mainly for | |||||
| debugging `configure'). | |||||
| It can also use an optional file (typically called `config.cache' | |||||
| and enabled with `--cache-file=config.cache' or simply `-C') that saves | |||||
| the results of its tests to speed up reconfiguring. (Caching is | |||||
| disabled by default to prevent problems with accidental use of stale | |||||
| cache files.) | |||||
| If you need to do unusual things to compile the package, please try | |||||
| to figure out how `configure' could check whether to do them, and mail | |||||
| diffs or instructions to the address given in the `README' so they can | |||||
| be considered for the next release. If you are using the cache, and at | |||||
| some point `config.cache' contains results you don't want to keep, you | |||||
| may remove or edit it. | |||||
| The file `configure.ac' (or `configure.in') is used to create | |||||
| `configure' by a program called `autoconf'. You only need | |||||
| `configure.ac' if you want to change it or regenerate `configure' using | |||||
| a newer version of `autoconf'. | |||||
| The simplest way to compile this package is: | |||||
| 1. `cd' to the directory containing the package's source code and type | |||||
| `./configure' to configure the package for your system. If you're | |||||
| using `csh' on an old version of System V, you might need to type | |||||
| `sh ./configure' instead to prevent `csh' from trying to execute | |||||
| `configure' itself. | |||||
| Running `configure' takes awhile. While running, it prints some | |||||
| messages telling which features it is checking for. | |||||
| 2. Type `make' to compile the package. | |||||
| 3. Optionally, type `make check' to run any self-tests that come with | |||||
| the package. | |||||
| 4. Type `make install' to install the programs and any data files and | |||||
| documentation. | |||||
| 5. You can remove the program binaries and object files from the | |||||
| source code directory by typing `make clean'. To also remove the | |||||
| files that `configure' created (so you can compile the package for | |||||
| a different kind of computer), type `make distclean'. There is | |||||
| also a `make maintainer-clean' target, but that is intended mainly | |||||
| for the package's developers. If you use it, you may have to get | |||||
| all sorts of other programs in order to regenerate files that came | |||||
| with the distribution. | |||||
| Compilers and Options | |||||
| ===================== | |||||
| Some systems require unusual options for compilation or linking that the | |||||
| `configure' script does not know about. Run `./configure --help' for | |||||
| details on some of the pertinent environment variables. | |||||
| You can give `configure' initial values for configuration parameters | |||||
| by setting variables in the command line or in the environment. Here | |||||
| is an example: | |||||
| ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix | |||||
| *Note Defining Variables::, for more details. | |||||
| Compiling For Multiple Architectures | |||||
| ==================================== | |||||
| You can compile the package for more than one kind of computer at the | |||||
| same time, by placing the object files for each architecture in their | |||||
| own directory. To do this, you must use a version of `make' that | |||||
| supports the `VPATH' variable, such as GNU `make'. `cd' to the | |||||
| directory where you want the object files and executables to go and run | |||||
| the `configure' script. `configure' automatically checks for the | |||||
| source code in the directory that `configure' is in and in `..'. | |||||
| If you have to use a `make' that does not support the `VPATH' | |||||
| variable, you have to compile the package for one architecture at a | |||||
| time in the source code directory. After you have installed the | |||||
| package for one architecture, use `make distclean' before reconfiguring | |||||
| for another architecture. | |||||
| Installation Names | |||||
| ================== | |||||
| By default, `make install' installs the package's commands under | |||||
| `/usr/local/bin', include files under `/usr/local/include', etc. You | |||||
| can specify an installation prefix other than `/usr/local' by giving | |||||
| `configure' the option `--prefix=PREFIX'. | |||||
| You can specify separate installation prefixes for | |||||
| architecture-specific files and architecture-independent files. If you | |||||
| pass the option `--exec-prefix=PREFIX' to `configure', the package uses | |||||
| PREFIX as the prefix for installing programs and libraries. | |||||
| Documentation and other data files still use the regular prefix. | |||||
| In addition, if you use an unusual directory layout you can give | |||||
| options like `--bindir=DIR' to specify different values for particular | |||||
| kinds of files. Run `configure --help' for a list of the directories | |||||
| you can set and what kinds of files go in them. | |||||
| If the package supports it, you can cause programs to be installed | |||||
| with an extra prefix or suffix on their names by giving `configure' the | |||||
| option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. | |||||
| Optional Features | |||||
| ================= | |||||
| Some packages pay attention to `--enable-FEATURE' options to | |||||
| `configure', where FEATURE indicates an optional part of the package. | |||||
| They may also pay attention to `--with-PACKAGE' options, where PACKAGE | |||||
| is something like `gnu-as' or `x' (for the X Window System). The | |||||
| `README' should mention any `--enable-' and `--with-' options that the | |||||
| package recognizes. | |||||
| For packages that use the X Window System, `configure' can usually | |||||
| find the X include and library files automatically, but if it doesn't, | |||||
| you can use the `configure' options `--x-includes=DIR' and | |||||
| `--x-libraries=DIR' to specify their locations. | |||||
| Specifying the System Type | |||||
| ========================== | |||||
| There may be some features `configure' cannot figure out automatically, | |||||
| but needs to determine by the type of machine the package will run on. | |||||
| Usually, assuming the package is built to be run on the _same_ | |||||
| architectures, `configure' can figure that out, but if it prints a | |||||
| message saying it cannot guess the machine type, give it the | |||||
| `--build=TYPE' option. TYPE can either be a short name for the system | |||||
| type, such as `sun4', or a canonical name which has the form: | |||||
| CPU-COMPANY-SYSTEM | |||||
| where SYSTEM can have one of these forms: | |||||
| OS KERNEL-OS | |||||
| See the file `config.sub' for the possible values of each field. If | |||||
| `config.sub' isn't included in this package, then this package doesn't | |||||
| need to know the machine type. | |||||
| If you are _building_ compiler tools for cross-compiling, you should | |||||
| use the option `--target=TYPE' to select the type of system they will | |||||
| produce code for. | |||||
| If you want to _use_ a cross compiler, that generates code for a | |||||
| platform different from the build platform, you should specify the | |||||
| "host" platform (i.e., that on which the generated programs will | |||||
| eventually be run) with `--host=TYPE'. | |||||
| Sharing Defaults | |||||
| ================ | |||||
| If you want to set default values for `configure' scripts to share, you | |||||
| can create a site shell script called `config.site' that gives default | |||||
| values for variables like `CC', `cache_file', and `prefix'. | |||||
| `configure' looks for `PREFIX/share/config.site' if it exists, then | |||||
| `PREFIX/etc/config.site' if it exists. Or, you can set the | |||||
| `CONFIG_SITE' environment variable to the location of the site script. | |||||
| A warning: not all `configure' scripts look for a site script. | |||||
| Defining Variables | |||||
| ================== | |||||
| Variables not defined in a site shell script can be set in the | |||||
| environment passed to `configure'. However, some packages may run | |||||
| configure again during the build, and the customized values of these | |||||
| variables may be lost. In order to avoid this problem, you should set | |||||
| them in the `configure' command line, using `VAR=value'. For example: | |||||
| ./configure CC=/usr/local2/bin/gcc | |||||
| causes the specified `gcc' to be used as the C compiler (unless it is | |||||
| overridden in the site shell script). Here is a another example: | |||||
| /bin/bash ./configure CONFIG_SHELL=/bin/bash | |||||
| Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent | |||||
| configuration-related scripts to be executed by `/bin/bash'. | |||||
| `configure' Invocation | |||||
| ====================== | |||||
| `configure' recognizes the following options to control how it operates. | |||||
| `--help' | |||||
| `-h' | |||||
| Print a summary of the options to `configure', and exit. | |||||
| `--version' | |||||
| `-V' | |||||
| Print the version of Autoconf used to generate the `configure' | |||||
| script, and exit. | |||||
| `--cache-file=FILE' | |||||
| Enable the cache: use and save the results of the tests in FILE, | |||||
| traditionally `config.cache'. FILE defaults to `/dev/null' to | |||||
| disable caching. | |||||
| `--config-cache' | |||||
| `-C' | |||||
| Alias for `--cache-file=config.cache'. | |||||
| `--quiet' | |||||
| `--silent' | |||||
| `-q' | |||||
| Do not print messages saying which checks are being made. To | |||||
| suppress all normal output, redirect it to `/dev/null' (any error | |||||
| messages will still be shown). | |||||
| `--srcdir=DIR' | |||||
| Look for the package's source code in directory DIR. Usually | |||||
| `configure' can determine that directory automatically. | |||||
| `configure' also accepts some other, not widely useful, options. Run | |||||
| `configure --help' for more details. | |||||
| More configure options | |||||
| ====================== | |||||
| Some ./configure options deserve additional comments: | |||||
| * --enable-crypt-none | |||||
| The SSH2 Transport allows for unencrypted data | |||||
| transmission using the "none" cipher. Because this is | |||||
| such a huge security hole, it is typically disabled on | |||||
| SSH2 implementations and is disabled in libssh2 by | |||||
| default as well. | |||||
| Enabling this option will allow for "none" as a | |||||
| negotiable method, however it still requires that the | |||||
| method be advertized by the remote end and that no | |||||
| more-preferable methods are available. | |||||
| * --enable-mac-none | |||||
| The SSH2 Transport also allows implementations to | |||||
| forego a message authentication code. While this is | |||||
| less of a security risk than using a "none" cipher, it | |||||
| is still not recommended as disabling MAC hashes | |||||
| removes a layer of security. | |||||
| Enabling this option will allow for "none" as a | |||||
| negotiable method, however it still requires that the | |||||
| method be advertized by the remote end and that no | |||||
| more-preferable methods are available. | |||||
| * --disable-gex-new | |||||
| The diffie-hellman-group-exchange-sha1 (dh-gex) key | |||||
| exchange method originally defined an exchange | |||||
| negotiation using packet type 30 to request a | |||||
| generation pair based on a single target value. Later | |||||
| refinement of dh-gex provided for range and target | |||||
| values. By default libssh2 will use the newer range | |||||
| method. | |||||
| If you experience trouble connecting to an old SSH | |||||
| server using dh-gex, try this option to fallback on | |||||
| the older more reliable method. | |||||
| * --with-libgcrypt | |||||
| * --without-libgcrypt | |||||
| * --with-libgcrypt-prefix=DIR | |||||
| libssh2 can use the Libgcrypt library | |||||
| (https://www.gnupg.org/) for cryptographic operations. | |||||
| One of the cryptographic libraries is required. | |||||
| Configure will attempt to locate Libgcrypt | |||||
| automatically. | |||||
| If your installation of Libgcrypt is in another | |||||
| location, specify it using --with-libgcrypt-prefix. | |||||
| * --with-openssl | |||||
| * --without-openssl | |||||
| * --with-libssl-prefix=[DIR] | |||||
| libssh2 can use the OpenSSL library | |||||
| (https://www.openssl.org) for cryptographic operations. | |||||
| One of the cryptographic libraries is required. | |||||
| Configure will attempt to locate OpenSSL in the | |||||
| default location. | |||||
| If your installation of OpenSSL is in another | |||||
| location, specify it using --with-libssl-prefix. | |||||
| * --with-mbedtls | |||||
| * --without-mbedtls | |||||
| * --with-libmbedtls-prefix=[DIR] | |||||
| libssh2 can use the mbedTLS library | |||||
| (https://tls.mbed.org) for cryptographic operations. | |||||
| One of the cryptographic libraries is required. | |||||
| Configure will attempt to locate mbedTLS in the | |||||
| default location. | |||||
| If your installation of mbedTLS is in another | |||||
| location, specify it using --with-libmbedtls-prefix. | |||||
| * --with-libz | |||||
| * --without-libz | |||||
| * --with-libz-prefix=[DIR] | |||||
| If present, libssh2 will attempt to use the zlib | |||||
| (http://www.zlib.org) for payload compression, however | |||||
| zlib is not required. | |||||
| If your installation of Libz is in another location, | |||||
| specify it using --with-libz-prefix. | |||||
| * --enable-debug | |||||
| Will make the build use more pedantic and strict compiler | |||||
| options as well as enable the libssh2_trace() function (for | |||||
| showing debug traces). | |||||
| @@ -0,0 +1,188 @@ | |||||
| License: see COPYING | |||||
| Source code: https://github.com/libssh2/libssh2 | |||||
| Web site source code: https://github.com/libssh2/www | |||||
| Installation instructions are in docs/INSTALL | |||||
| ======= | |||||
| To build libssh2 you will need CMake v2.8 or later [1] and one of the | |||||
| following cryptography libraries: | |||||
| * OpenSSL | |||||
| * Libgcrypt | |||||
| * WinCNG | |||||
| * mbedTLS | |||||
| Getting started | |||||
| --------------- | |||||
| If you are happy with the default options, make a new build directory, | |||||
| change to it, configure the build environment and build the project: | |||||
| ``` | |||||
| mkdir bin | |||||
| cd bin | |||||
| cmake .. | |||||
| cmake --build . | |||||
| ``` | |||||
| libssh2 will be built as a static library and will use any | |||||
| cryptography library available. The library binary will be put in | |||||
| `bin/src`, with the examples in `bin/example` and the tests in | |||||
| `bin/tests`. | |||||
| Customising the build | |||||
| --------------------- | |||||
| Of course, you might want to customise the build options. You can | |||||
| pass the options to CMake on the command line: | |||||
| cmake -D<option>=<value> .. | |||||
| The following options are available: | |||||
| * `BUILD_SHARED_LIBS=OFF` | |||||
| Determines whether libssh2 is built as a static library or as a | |||||
| shared library (.dll/.so). Can be `ON` or `OFF`. | |||||
| * `CRYPTO_BACKEND=` | |||||
| Chooses a specific cryptography library to use for cryptographic | |||||
| operations. Can be `OpenSSL` (https://www.openssl.org), | |||||
| `Libgcrypt` (https://www.gnupg.org/), `WinCNG` (Windows Vista+), | |||||
| `mbedTLS` (https://tls.mbed.org/) or blank to use any library available. | |||||
| CMake will attempt to locate the libraries automatically. See [2] | |||||
| for more information. | |||||
| * `ENABLE_ZLIB_COMPRESSION=OFF` | |||||
| Will use zlib (http://www.zlib.org) for payload compression. Can | |||||
| be `ON` or `OFF`. | |||||
| * `ENABLE_CRYPT_NONE=OFF` | |||||
| The SSH2 Transport allows for unencrypted data transmission using | |||||
| the "none" cipher. Because this is such a huge security hole, it | |||||
| is typically disabled on SSH2 implementations and is disabled in | |||||
| libssh2 by default as well. | |||||
| Enabling this option will allow for "none" as a negotiable method, | |||||
| however it still requires that the method be advertized by the | |||||
| remote end and that no more-preferable methods are available. | |||||
| * `ENABLE_MAC_NONE=OFF` | |||||
| The SSH2 Transport also allows implementations to forego a message | |||||
| authentication code. While this is less of a security risk than | |||||
| using a "none" cipher, it is still not recommended as disabling | |||||
| MAC hashes removes a layer of security. | |||||
| Enabling this option will allow for "none" as a negotiable method, | |||||
| however it still requires that the method be advertized by the | |||||
| remote end and that no more-preferable methods are available. | |||||
| * `ENABLE_GEX_NEW=ON` | |||||
| The diffie-hellman-group-exchange-sha1 (dh-gex) key exchange | |||||
| method originally defined an exchange negotiation using packet | |||||
| type 30 to request a generation pair based on a single target | |||||
| value. Later refinement of dh-gex provided for range and target | |||||
| values. By default libssh2 will use the newer range method. | |||||
| If you experience trouble connecting to an old SSH server using | |||||
| dh-gex, try this option to fallback on the older more reliable | |||||
| method. | |||||
| * `ENABLE_DEBUG_LOGGING=ON` in Debug, `=OFF` in Release | |||||
| Will enable the libssh2_trace() function for showing debug traces. | |||||
| * `CLEAR_MEMORY=ON` | |||||
| Securely zero memory before freeing it (if the backend supports this). | |||||
| Build tools | |||||
| ----------- | |||||
| The previous examples used CMake to start the build using: | |||||
| cmake --build . | |||||
| Alternatively, once CMake has configured your project, you can just | |||||
| use your own build tool, e.g GNU make, Visual Studio, etc., from that | |||||
| point onwards. | |||||
| Tests | |||||
| ----- | |||||
| To test the build, run the appropriate test target for your build | |||||
| system. For example: | |||||
| ``` | |||||
| cmake --build . --target test | |||||
| ``` | |||||
| or | |||||
| ``` | |||||
| cmake --build . --target RUN_TESTS | |||||
| ``` | |||||
| How do I use libssh2 in my project if my project doesn't use CMake? | |||||
| ------------------------------------------------------------------- | |||||
| If you are not using CMake for your own project, install libssh2 | |||||
| ``` | |||||
| cmake <libssh2 source location> | |||||
| cmake --build . | |||||
| cmake --build . --target install | |||||
| ``` | |||||
| or | |||||
| ``` | |||||
| cmake --build . --target INSTALL | |||||
| ``` | |||||
| and then specify the install location to your project in the normal | |||||
| way for your build environment. If you don't like the default install | |||||
| location, add `-DCMAKE_INSTALL_PREFIX=<chosen prefix>` when initially | |||||
| configuring the project. | |||||
| How can I use libssh2 in my project if it also uses CMake? | |||||
| ---------------------------------------------------------- | |||||
| If your own project also uses CMake, you don't need to worry about | |||||
| setting it up with libssh2's location. Just add just the following | |||||
| lines and CMake will find libssh2 on your system, set up the necessary | |||||
| paths and link the library with your binary. | |||||
| find_package(Libssh2 REQUIRED CONFIG) | |||||
| target_link_libraries(my_project_target Libssh2::libssh2) | |||||
| Of course, you still have to make libssh2 available on your system | |||||
| first. You can install it in the traditional way shown above, but you | |||||
| don't have to. Instead you can just build it, which will export its | |||||
| location to the user package registry [3] where `find_package` will | |||||
| find it. | |||||
| You can even combine the two steps using a so-called 'superbuild' | |||||
| project [4] that downloads, builds and exports libssh2, and then | |||||
| builds your project: | |||||
| include(ExternalProject) | |||||
| ExternalProject_Add( | |||||
| Libssh2 | |||||
| URL <libssh2 download location> | |||||
| URL_HASH SHA1=<libssh2 archive SHA1> | |||||
| INSTALL_COMMAND "") | |||||
| ExternalProject_Add( | |||||
| MyProject DEPENDS Libssh2 | |||||
| SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src | |||||
| INSTALL_COMMAND "") | |||||
| [1] https://www.cmake.org/cmake/resources/software.html | |||||
| [2] https://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html | |||||
| [3] https://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html#package-registry | |||||
| [4] https://blog.kitware.com/wp-content/uploads/2016/01/kitware_quarterly1009.pdf | |||||
| @@ -0,0 +1,177 @@ | |||||
| # $Id: Makefile.am,v 1.37 2009/03/26 15:41:15 bagder Exp $ | |||||
| EXTRA_DIST = template.3 BINDINGS INSTALL_AUTOTOOLS INSTALL_CMAKE.md HACKING TODO \ | |||||
| AUTHORS CMakeLists.txt HACKING.CRYPTO SECURITY.md | |||||
| dist_man_MANS = \ | |||||
| libssh2_agent_connect.3 \ | |||||
| libssh2_agent_disconnect.3 \ | |||||
| libssh2_agent_free.3 \ | |||||
| libssh2_agent_get_identity.3 \ | |||||
| libssh2_agent_get_identity_path.3 \ | |||||
| libssh2_agent_init.3 \ | |||||
| libssh2_agent_list_identities.3 \ | |||||
| libssh2_agent_set_identity_path.3 \ | |||||
| libssh2_agent_userauth.3 \ | |||||
| libssh2_banner_set.3 \ | |||||
| libssh2_base64_decode.3 \ | |||||
| libssh2_channel_close.3 \ | |||||
| libssh2_channel_direct_tcpip.3 \ | |||||
| libssh2_channel_direct_tcpip_ex.3 \ | |||||
| libssh2_channel_eof.3 \ | |||||
| libssh2_channel_exec.3 \ | |||||
| libssh2_channel_flush.3 \ | |||||
| libssh2_channel_flush_ex.3 \ | |||||
| libssh2_channel_flush_stderr.3 \ | |||||
| libssh2_channel_forward_accept.3 \ | |||||
| libssh2_channel_forward_cancel.3 \ | |||||
| libssh2_channel_forward_listen.3 \ | |||||
| libssh2_channel_forward_listen_ex.3 \ | |||||
| libssh2_channel_free.3 \ | |||||
| libssh2_channel_get_exit_signal.3 \ | |||||
| libssh2_channel_get_exit_status.3 \ | |||||
| libssh2_channel_handle_extended_data.3 \ | |||||
| libssh2_channel_handle_extended_data2.3 \ | |||||
| libssh2_channel_ignore_extended_data.3 \ | |||||
| libssh2_channel_open_ex.3 \ | |||||
| libssh2_channel_open_session.3 \ | |||||
| libssh2_channel_process_startup.3 \ | |||||
| libssh2_channel_read.3 \ | |||||
| libssh2_channel_read_ex.3 \ | |||||
| libssh2_channel_read_stderr.3 \ | |||||
| libssh2_channel_receive_window_adjust.3 \ | |||||
| libssh2_channel_receive_window_adjust2.3 \ | |||||
| libssh2_channel_request_pty.3 \ | |||||
| libssh2_channel_request_pty_ex.3 \ | |||||
| libssh2_channel_request_pty_size.3 \ | |||||
| libssh2_channel_request_pty_size_ex.3 \ | |||||
| libssh2_channel_send_eof.3 \ | |||||
| libssh2_channel_set_blocking.3 \ | |||||
| libssh2_channel_setenv.3 \ | |||||
| libssh2_channel_setenv_ex.3 \ | |||||
| libssh2_channel_shell.3 \ | |||||
| libssh2_channel_subsystem.3 \ | |||||
| libssh2_channel_wait_closed.3 \ | |||||
| libssh2_channel_wait_eof.3 \ | |||||
| libssh2_channel_window_read.3 \ | |||||
| libssh2_channel_window_read_ex.3 \ | |||||
| libssh2_channel_window_write.3 \ | |||||
| libssh2_channel_window_write_ex.3 \ | |||||
| libssh2_channel_write.3 \ | |||||
| libssh2_channel_write_ex.3 \ | |||||
| libssh2_channel_write_stderr.3 \ | |||||
| libssh2_channel_x11_req.3 \ | |||||
| libssh2_channel_x11_req_ex.3 \ | |||||
| libssh2_exit.3 \ | |||||
| libssh2_free.3 \ | |||||
| libssh2_hostkey_hash.3 \ | |||||
| libssh2_init.3 \ | |||||
| libssh2_keepalive_config.3 \ | |||||
| libssh2_keepalive_send.3 \ | |||||
| libssh2_knownhost_add.3 \ | |||||
| libssh2_knownhost_addc.3 \ | |||||
| libssh2_knownhost_check.3 \ | |||||
| libssh2_knownhost_checkp.3 \ | |||||
| libssh2_knownhost_del.3 \ | |||||
| libssh2_knownhost_free.3 \ | |||||
| libssh2_knownhost_get.3 \ | |||||
| libssh2_knownhost_init.3 \ | |||||
| libssh2_knownhost_readfile.3 \ | |||||
| libssh2_knownhost_readline.3 \ | |||||
| libssh2_knownhost_writefile.3 \ | |||||
| libssh2_knownhost_writeline.3 \ | |||||
| libssh2_poll.3 \ | |||||
| libssh2_poll_channel_read.3 \ | |||||
| libssh2_publickey_add.3 \ | |||||
| libssh2_publickey_add_ex.3 \ | |||||
| libssh2_publickey_init.3 \ | |||||
| libssh2_publickey_list_fetch.3 \ | |||||
| libssh2_publickey_list_free.3 \ | |||||
| libssh2_publickey_remove.3 \ | |||||
| libssh2_publickey_remove_ex.3 \ | |||||
| libssh2_publickey_shutdown.3 \ | |||||
| libssh2_scp_recv.3 \ | |||||
| libssh2_scp_recv2.3 \ | |||||
| libssh2_scp_send.3 \ | |||||
| libssh2_scp_send64.3 \ | |||||
| libssh2_scp_send_ex.3 \ | |||||
| libssh2_session_abstract.3 \ | |||||
| libssh2_session_banner_get.3 \ | |||||
| libssh2_session_banner_set.3 \ | |||||
| libssh2_session_block_directions.3 \ | |||||
| libssh2_session_callback_set.3 \ | |||||
| libssh2_session_disconnect.3 \ | |||||
| libssh2_session_disconnect_ex.3 \ | |||||
| libssh2_session_flag.3 \ | |||||
| libssh2_session_free.3 \ | |||||
| libssh2_session_get_blocking.3 \ | |||||
| libssh2_session_get_timeout.3 \ | |||||
| libssh2_session_handshake.3 \ | |||||
| libssh2_session_hostkey.3 \ | |||||
| libssh2_session_init.3 \ | |||||
| libssh2_session_init_ex.3 \ | |||||
| libssh2_session_last_errno.3 \ | |||||
| libssh2_session_last_error.3 \ | |||||
| libssh2_session_set_last_error.3 \ | |||||
| libssh2_session_method_pref.3 \ | |||||
| libssh2_session_methods.3 \ | |||||
| libssh2_session_set_blocking.3 \ | |||||
| libssh2_session_set_timeout.3 \ | |||||
| libssh2_session_startup.3 \ | |||||
| libssh2_session_supported_algs.3 \ | |||||
| libssh2_sftp_close.3 \ | |||||
| libssh2_sftp_close_handle.3 \ | |||||
| libssh2_sftp_closedir.3 \ | |||||
| libssh2_sftp_fsetstat.3 \ | |||||
| libssh2_sftp_fstat.3 \ | |||||
| libssh2_sftp_fstat_ex.3 \ | |||||
| libssh2_sftp_fstatvfs.3 \ | |||||
| libssh2_sftp_fsync.3 \ | |||||
| libssh2_sftp_get_channel.3 \ | |||||
| libssh2_sftp_init.3 \ | |||||
| libssh2_sftp_last_error.3 \ | |||||
| libssh2_sftp_lstat.3 \ | |||||
| libssh2_sftp_mkdir.3 \ | |||||
| libssh2_sftp_mkdir_ex.3 \ | |||||
| libssh2_sftp_open.3 \ | |||||
| libssh2_sftp_open_ex.3 \ | |||||
| libssh2_sftp_opendir.3 \ | |||||
| libssh2_sftp_read.3 \ | |||||
| libssh2_sftp_readdir.3 \ | |||||
| libssh2_sftp_readdir_ex.3 \ | |||||
| libssh2_sftp_readlink.3 \ | |||||
| libssh2_sftp_realpath.3 \ | |||||
| libssh2_sftp_rename.3 \ | |||||
| libssh2_sftp_rename_ex.3 \ | |||||
| libssh2_sftp_rewind.3 \ | |||||
| libssh2_sftp_rmdir.3 \ | |||||
| libssh2_sftp_rmdir_ex.3 \ | |||||
| libssh2_sftp_seek.3 \ | |||||
| libssh2_sftp_seek64.3 \ | |||||
| libssh2_sftp_setstat.3 \ | |||||
| libssh2_sftp_shutdown.3 \ | |||||
| libssh2_sftp_stat.3 \ | |||||
| libssh2_sftp_stat_ex.3 \ | |||||
| libssh2_sftp_statvfs.3 \ | |||||
| libssh2_sftp_symlink.3 \ | |||||
| libssh2_sftp_symlink_ex.3 \ | |||||
| libssh2_sftp_tell.3 \ | |||||
| libssh2_sftp_tell64.3 \ | |||||
| libssh2_sftp_unlink.3 \ | |||||
| libssh2_sftp_unlink_ex.3 \ | |||||
| libssh2_sftp_write.3 \ | |||||
| libssh2_trace.3 \ | |||||
| libssh2_trace_sethandler.3 \ | |||||
| libssh2_userauth_authenticated.3 \ | |||||
| libssh2_userauth_hostbased_fromfile.3 \ | |||||
| libssh2_userauth_hostbased_fromfile_ex.3 \ | |||||
| libssh2_userauth_keyboard_interactive.3 \ | |||||
| libssh2_userauth_keyboard_interactive_ex.3 \ | |||||
| libssh2_userauth_list.3 \ | |||||
| libssh2_userauth_password.3 \ | |||||
| libssh2_userauth_password_ex.3 \ | |||||
| libssh2_userauth_publickey.3 \ | |||||
| libssh2_userauth_publickey_fromfile.3 \ | |||||
| libssh2_userauth_publickey_fromfile_ex.3 \ | |||||
| libssh2_userauth_publickey_frommemory.3 \ | |||||
| libssh2_version.3 | |||||
| @@ -0,0 +1,100 @@ | |||||
| libssh2 security | |||||
| ================ | |||||
| This document is intended to provide guidance on how security vulnerabilities | |||||
| should be handled in the libssh2 project. | |||||
| Publishing Information | |||||
| ---------------------- | |||||
| All known and public libssh2 vulnerabilities will be listed on [the libssh2 | |||||
| web site](https://www.libssh2.org/). | |||||
| Security vulnerabilities should not be entered in the project's public bug | |||||
| tracker unless the necessary configuration is in place to limit access to the | |||||
| issue to only the reporter and the project's security team. | |||||
| Vulnerability Handling | |||||
| ---------------------- | |||||
| The typical process for handling a new security vulnerability is as follows. | |||||
| No information should be made public about a vulnerability until it is | |||||
| formally announced at the end of this process. That means, for example that a | |||||
| bug tracker entry must NOT be created to track the issue since that will make | |||||
| the issue public and it should not be discussed on the project's public | |||||
| mailing list. Also messages associated with any commits should not make any | |||||
| reference to the security nature of the commit if done prior to the public | |||||
| announcement. | |||||
| - The person discovering the issue, the reporter, reports the vulnerability | |||||
| privately to `libssh2-security@haxx.se`. That's an email alias that reaches a | |||||
| handful of selected and trusted people. | |||||
| - Messages that do not relate to the reporting or managing of an undisclosed | |||||
| security vulnerability in libssh2 are ignored and no further action is | |||||
| required. | |||||
| - A person in the security team sends an e-mail to the original reporter to | |||||
| acknowledge the report. | |||||
| - The security team investigates the report and either rejects it or accepts | |||||
| it. | |||||
| - If the report is rejected, the team writes to the reporter to explain why. | |||||
| - If the report is accepted, the team writes to the reporter to let him/her | |||||
| know it is accepted and that they are working on a fix. | |||||
| - The security team discusses the problem, works out a fix, considers the | |||||
| impact of the problem and suggests a release schedule. This discussion | |||||
| should involve the reporter as much as possible. | |||||
| - The release of the information should be "as soon as possible" and is most | |||||
| often synced with an upcoming release that contains the fix. If the | |||||
| reporter, or anyone else, thinks the next planned release is too far away | |||||
| then a separate earlier release for security reasons should be considered. | |||||
| - Write a security advisory draft about the problem that explains what the | |||||
| problem is, its impact, which versions it affects, solutions or | |||||
| workarounds, when the release is out and make sure to credit all | |||||
| contributors properly. | |||||
| - Request a CVE number from | |||||
| [distros@openwall](http://oss-security.openwall.org/wiki/mailing-lists/distros) | |||||
| when also informing and preparing them for the upcoming public security | |||||
| vulnerability announcement - attach the advisory draft for information. Note | |||||
| that 'distros' won't accept an embargo longer than 14 days. | |||||
| - Update the "security advisory" with the CVE number. | |||||
| - The security team commits the fix in a private branch. The commit message | |||||
| should ideally contain the CVE number. This fix is usually also distributed | |||||
| to the 'distros' mailing list to allow them to use the fix prior to the | |||||
| public announcement. | |||||
| - At the day of the next release, the private branch is merged into the master | |||||
| branch and pushed. Once pushed, the information is accessible to the public | |||||
| and the actual release should follow suit immediately afterwards. | |||||
| - The project team creates a release that includes the fix. | |||||
| - The project team announces the release and the vulnerability to the world in | |||||
| the same manner we always announce releases. It gets sent to the libssh2 | |||||
| mailing list and the oss-security mailing list. | |||||
| - The security web page on the web site should get the new vulnerability | |||||
| mentioned. | |||||
| LIBSSH2-SECURITY (at haxx dot se) | |||||
| -------------------------------- | |||||
| Who is on this list? There are a couple of criteria you must meet, and then we | |||||
| might ask you to join the list or you can ask to join it. It really isn't very | |||||
| formal. We basically only require that you have a long-term presence in the | |||||
| libssh2 project and you have shown an understanding for the project and its way | |||||
| of working. You must've been around for a good while and you should have no | |||||
| plans in vanishing in the near future. | |||||
| We do not make the list of participants public mostly because it tends to vary | |||||
| somewhat over time and a list somewhere will only risk getting outdated. | |||||
| @@ -0,0 +1,174 @@ | |||||
| Things TODO | |||||
| =========== | |||||
| * Fix the numerous malloc+copy operations for sending data, see "Buffering | |||||
| Improvements" below for details | |||||
| * make sure the windowing code adapts better to slow situations so that it | |||||
| doesn't then use as much memory as today. Possibly by an app-controllable | |||||
| "Window mode"? | |||||
| * Decrease the number of mallocs. Everywhere. Will get easier once the | |||||
| buffering improvements have been done. | |||||
| * Use SO_NOSIGPIPE for Mac OS/BSD systems where MSG_NOSIGNAL doesn't | |||||
| exist/work | |||||
| * Extend the test suite to actually test lots of aspects of libssh2 | |||||
| * Fix all compiler warnings (some can't be done without API changes) | |||||
| * Expose error messages sent by the server | |||||
| * select() is troublesome with libssh2 when using multiple channels over | |||||
| the same session. See "New Transport API" below for more details. | |||||
| At next SONAME bump | |||||
| =================== | |||||
| * stop using #defined macros as part of the official API. The macros should | |||||
| either be turned into real functions or discarded from the API. | |||||
| * fix the parts of the API where object pointers and function pointers are | |||||
| mixed like libssh2_session_callback_set() | |||||
| * remove the following functions from the API/ABI | |||||
| libssh2_base64_decode() | |||||
| libssh2_session_flag() | |||||
| libssh2_channel_handle_extended_data() | |||||
| libssh2_channel_receive_window_adjust() | |||||
| libssh2_poll() | |||||
| libssh2_poll_channel_read() | |||||
| libssh2_session_startup() (libssh2_session_handshake() is the replacement) | |||||
| libssh2_banner_set() (libssh2_session_banner_set() is the repacement) | |||||
| * Rename a few function: | |||||
| libssh2_hostkey_hash => libssh2_session_hostkey_hash | |||||
| libssh2_banner_set => libssh2_session_banner_set | |||||
| * change 'int' to 'libssh2_socket_t' in the public API for sockets. | |||||
| * Use 'size_t' for string lengths in all functions. | |||||
| * Add a comment field to struct libssh2_knownhost. | |||||
| * remove the existing libssh2_knownhost_add() function and rename | |||||
| libssh2_knownhost_addc to become the new libssh2_knownhost_add instead | |||||
| * remove the existing libssh2_scp_send_ex() function and rename | |||||
| libssh2_scp_send64 to become the new libssh2_scp_send instead. | |||||
| * remove the existing libssh2_knownhost_check() functin and rename | |||||
| libssh2_knownhost_checkp() to become the new libssh2_knownhost_check instead | |||||
| Buffering Improvements | |||||
| ====================== | |||||
| transport_write | |||||
| - If this function gets called with a total packet size that is larger than | |||||
| 32K, it should create more than one SSH packet so that it keeps the largest | |||||
| one below 32K | |||||
| sftp_write | |||||
| - should not copy/allocate anything for the data, only create a header chunk | |||||
| and pass on the payload data to channel_write "pointed to" | |||||
| New Transport API | |||||
| ================= | |||||
| THE PROBLEM | |||||
| The problem in a nutshell is that when an application opens up multiple | |||||
| channels over a single session, those are all using the same socket. If the | |||||
| application is then using select() to wait for traffic (like any sensible app | |||||
| does) and wants to act on the data when select() tells there is something to | |||||
| for example read, what does an application do? | |||||
| With our current API, you have to loop over all the channels and read from | |||||
| them to see if they have data. This effectively makes blocking reads | |||||
| impossible. If the app has many channels in a setup like this, it even becomes | |||||
| slow. (The original API had the libssh2_poll_channel_read() and libssh2_poll() | |||||
| to somewhat overcome this hurdle, but they too have pretty much the same | |||||
| problems plus a few others.) | |||||
| Traffic in the other direction is similarly limited: the app has to try | |||||
| sending to all channels, even though some of them may very well not accept any | |||||
| data at that point. | |||||
| A SOLUTION | |||||
| I suggest we introduce two new helper functions: | |||||
| libssh2_transport_read() | |||||
| - Read "a bunch" of data from the given socket and returns information to the | |||||
| app about what channels that are now readable (ie they will not block when | |||||
| read from). The function can be called over and over and it will repeatedly | |||||
| return info about what channels that are readable at that moment. | |||||
| libssh2_transport_write() | |||||
| - Returns information about what channels that are writable, in the sense | |||||
| that they have windows set from the remote side that allows data to get | |||||
| sent. Writing to one of those channels will not block. Of course, the | |||||
| underlying socket may only accept a certain amount of data, so at the first | |||||
| short return, nothing more should be attempted to get sent until select() | |||||
| (or equivalent) has been used on the master socket again. | |||||
| I haven't yet figured out a sensible API for how these functions should return | |||||
| that info, but if we agree on the general principles I guess we can work that | |||||
| out. | |||||
| VOLUNTARY | |||||
| I wanted to mention that these two helper functions would not be mandatory | |||||
| in any way. They would just be there for those who want them, and existing | |||||
| programs can remain using the old functions only if they prefer to. | |||||
| New SFTP API | |||||
| ============ | |||||
| PURPOSE | |||||
| Provide API functions that explicitly tells at once that a (full) SFTP file | |||||
| transfer is wanted, to allow libssh2 to leverage on that knowledge to speed | |||||
| up things internally. It can for example do read ahead, buffer writes (merge | |||||
| small writes into larger chunks), better tune the SSH window and more. This | |||||
| sort of API is already provided for SCP transfers. | |||||
| API | |||||
| New functions: | |||||
| LIBSSH2_SFTP_HANDLE *libssh2_sftp_send(SFTP_SESSION *sftp, | |||||
| uint64_t filesize, | |||||
| char *remote_path, | |||||
| size_t remote_path_len, | |||||
| long mode); | |||||
| Tell libssh2 that a local file with a given size is about to get sent to | |||||
| the SFTP server. | |||||
| LIBSSH2_SFTP_HANDLE *libssh2_sftp_recv(); | |||||
| Tell libssh2 that a remote file is requested to get downloaded from the SFTP | |||||
| server. | |||||
| Only the setup of the file transfer is different from an application's point | |||||
| of view. Depending on direction of the transfer(s), the following already | |||||
| existing functions should then be used until the transfer is complete: | |||||
| libssh2_sftp_read() | |||||
| libssh2_sftp_write() | |||||
| HOW TO USE | |||||
| 1. Setup the transfer using one of the two new functions. | |||||
| 2. Loop through the reading or writing of data. | |||||
| 3. Cleanup the transfer | |||||
| @@ -0,0 +1,23 @@ | |||||
| .\" | |||||
| .\" Copyright (c) 2009 by Daiki Ueno | |||||
| .\" | |||||
| .TH libssh2_agent_connect 3 "23 Dec 2009" "libssh2 1.2" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_agent_connect - connect to an ssh-agent | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_agent_connect(LIBSSH2_AGENT *agent); | |||||
| .SH DESCRIPTION | |||||
| Connect to an ssh-agent running on the system. | |||||
| Call \fBlibssh2_agent_disconnect(3)\fP to close the connection after | |||||
| you're doing using it. | |||||
| .SH RETURN VALUE | |||||
| Returns 0 if succeeded, or a negative value for error. | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.2 | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_agent_init(3) | |||||
| .BR libssh2_agent_disconnect(3) | |||||
| @@ -0,0 +1,20 @@ | |||||
| .\" | |||||
| .\" Copyright (c) 2009 by Daiki Ueno | |||||
| .\" | |||||
| .TH libssh2_agent_disconnect 3 "23 Dec 2009" "libssh2 1.2" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_agent_disconnect - close a connection to an ssh-agent | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_agent_disconnect(LIBSSH2_AGENT *agent); | |||||
| .SH DESCRIPTION | |||||
| Close a connection to an ssh-agent. | |||||
| .SH RETURN VALUE | |||||
| Returns 0 if succeeded, or a negative value for error. | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.2 | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_agent_connect(3) | |||||
| .BR libssh2_agent_free(3) | |||||
| @@ -0,0 +1,20 @@ | |||||
| .\" | |||||
| .\" Copyright (c) 2009 by Daiki Ueno | |||||
| .\" | |||||
| .TH libssh2_agent_free 3 "28 May 2009" "libssh2 1.2" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_agent_free - free an ssh-agent handle | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| void libssh2_agent_free(LIBSSH2_AGENT *agent); | |||||
| .SH DESCRIPTION | |||||
| Free an ssh-agent handle. This function also frees the internal | |||||
| collection of public keys. | |||||
| .SH RETURN VALUE | |||||
| None. | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.2 | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_agent_init(3) | |||||
| .BR libssh2_agent_disconnect(3) | |||||
| @@ -0,0 +1,34 @@ | |||||
| .\" | |||||
| .\" Copyright (c) 2009 by Daiki Ueno | |||||
| .\" | |||||
| .TH libssh2_agent_get_identity 3 "23 Dec 2009" "libssh2 1.2" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_agent_get_identity - get a public key off the collection of public keys managed by ssh-agent | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_agent_get_identity(LIBSSH2_AGENT *agent, | |||||
| struct libssh2_agent_publickey **store, | |||||
| struct libssh2_agent_publickey *prev); | |||||
| .SH DESCRIPTION | |||||
| \fIlibssh2_agent_get_identity(3)\fP allows an application to iterate | |||||
| over all public keys in the collection managed by ssh-agent. | |||||
| \fIstore\fP should point to a pointer that gets filled in to point to the | |||||
| public key data. | |||||
| \fIprev\fP is a pointer to a previous 'struct libssh2_agent_publickey' | |||||
| as returned by a previous invoke of this function, or NULL to get the | |||||
| first entry in the internal collection. | |||||
| .SH RETURN VALUE | |||||
| Returns 0 if everything is fine and information about a host was stored in | |||||
| the \fIstore\fP struct. | |||||
| Returns 1 if it reached the end of public keys. | |||||
| Returns negative values for error | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.2 | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_agent_list_identities(3) | |||||
| .BR libssh2_agent_userauth(3) | |||||
| @@ -0,0 +1,22 @@ | |||||
| .\" | |||||
| .\" Copyright (c) 2019 by Will Cosgrove | |||||
| .\" | |||||
| .TH libssh2_agent_get_identity_path 3 "6 Mar 2019" "libssh2 1.9" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_agent_get_identity_path - gets the custom ssh-agent socket path | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| const char * | |||||
| libssh2_agent_get_identity_path(LIBSSH2_AGENT *agent); | |||||
| .SH DESCRIPTION | |||||
| Returns the custom agent identity socket path if set using libssh2_agent_set_identity_path() | |||||
| .SH RETURN VALUE | |||||
| Returns the socket path on disk. | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.9 | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_agent_init(3) | |||||
| .BR libssh2_agent_set_identity_path(3) | |||||
| @@ -0,0 +1,26 @@ | |||||
| .\" | |||||
| .\" Copyright (c) 2009 by Daiki Ueno | |||||
| .\" | |||||
| .TH libssh2_agent_init 3 "23 Dec 2009" "libssh2 1.2" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_agent_init - init an ssh-agent handle | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| LIBSSH2_AGENT *libssh2_agent_init(LIBSSH2_SESSION *session); | |||||
| .SH DESCRIPTION | |||||
| Init an ssh-agent handle. Returns the handle to an internal | |||||
| representation of an ssh-agent connection. After the successful | |||||
| initialization, an application can call \fBlibssh2_agent_connect(3)\fP | |||||
| to connect to a running ssh-agent. | |||||
| Call \fBlibssh2_agent_free(3)\fP to free the handle again after you're | |||||
| doing using it. | |||||
| .SH RETURN VALUE | |||||
| Returns a handle pointer or NULL if something went wrong. The returned handle | |||||
| is used as input to all other ssh-agent related functions libssh2 provides. | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.2 | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_agent_connect(3) | |||||
| .BR libssh2_agent_free(3) | |||||
| @@ -0,0 +1,24 @@ | |||||
| .\" | |||||
| .\" Copyright (c) 2009 by Daiki Ueno | |||||
| .\" | |||||
| .TH libssh2_agent_list_identities 3 "23 Dec 2009" "libssh2 1.2" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_agent_list_identities - request an ssh-agent to list of public keys. | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_agent_list_identities(LIBSSH2_AGENT *agent); | |||||
| .SH DESCRIPTION | |||||
| Request an ssh-agent to list of public keys, and stores them in the | |||||
| internal collection of the handle. Call | |||||
| \fIlibssh2_agent_get_identity(3)\fP to get a public key off the | |||||
| collection. | |||||
| .SH RETURN VALUE | |||||
| Returns 0 if succeeded, or a negative value for error. | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.2 | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_agent_connect(3) | |||||
| .BR libssh2_agent_get_identity(3) | |||||
| @@ -0,0 +1,22 @@ | |||||
| .\" | |||||
| .\" Copyright (c) 2019 by Will Cosgrove | |||||
| .\" | |||||
| .TH libssh2_agent_set_identity_path 3 "6 Mar 2019" "libssh2 1.9" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_agent_set_identity_path - set an ssh-agent socket path on disk | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| void | |||||
| libssh2_agent_set_identity_path(LIBSSH2_AGENT *agent, const char *path); | |||||
| .SH DESCRIPTION | |||||
| Allows a custom agent identity socket path instead of the default SSH_AUTH_SOCK env value | |||||
| .SH RETURN VALUE | |||||
| Returns void | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.9 | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_agent_init(3) | |||||
| .BR libssh2_agent_get_identity_path(3) | |||||
| @@ -0,0 +1,29 @@ | |||||
| .\" | |||||
| .\" Copyright (c) 2009 by Daiki Ueno | |||||
| .\" | |||||
| .TH libssh2_agent_userauth 3 "23 Dec 2009" "libssh2 1.2" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_agent_userauth - authenticate a session with a public key, with the help of ssh-agent | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_agent_userauth(LIBSSH2_AGENT *agent, | |||||
| const char *username, | |||||
| struct libssh2_agent_publickey *identity); | |||||
| .SH DESCRIPTION | |||||
| \fIagent\fP - ssh-agent handle as returned by | |||||
| .BR libssh2_agent_init(3) | |||||
| \fIusername\fP - Remote user name to authenticate as. | |||||
| \fIidentity\fP - Public key to authenticate with, as returned by | |||||
| .BR libssh2_agent_get_identity(3) | |||||
| Attempt public key authentication with the help of ssh-agent. | |||||
| .SH RETURN VALUE | |||||
| Returns 0 if succeeded, or a negative value for error. | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.2 | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_agent_init(3) | |||||
| .BR libssh2_agent_get_identity(3) | |||||
| @@ -0,0 +1,32 @@ | |||||
| .TH libssh2_banner_set 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_banner_set - set the SSH protocol banner for the local client | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_banner_set(LIBSSH2_SESSION *session, const char *banner); | |||||
| .SH DESCRIPTION | |||||
| This function is \fBDEPRECATED\fP. Use \fIlibssh2_session_banner_set(3)\fP | |||||
| instead! | |||||
| \fIsession\fP - Session instance as returned by | |||||
| .BR libssh2_session_init_ex(3) | |||||
| \fIbanner\fP - A pointer to a user defined banner | |||||
| Set the banner that will be sent to the remote host when the SSH session is | |||||
| started with | |||||
| .BR libssh2_session_handshake(3) | |||||
| This is optional; a banner corresponding to the protocol and libssh2 version will be sent by default. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH AVAILABILITY | |||||
| Marked as deprecated since 1.4.0 | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_ALLOC\fP - An internal memory allocation call failed. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_session_handshake(3) | |||||
| @@ -0,0 +1,25 @@ | |||||
| .TH libssh2_base64_decode 3 "23 Dec 2008" "libssh2 1.0" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_base64_decode - decode a base64 encoded string | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_base64_decode(LIBSSH2_SESSION *session, char **dest, | |||||
| unsigned int *dest_len, const char *src, | |||||
| unsigned int src_len); | |||||
| .SH DESCRIPTION | |||||
| This function is deemed DEPRECATED and will be removed from libssh2 in a | |||||
| future version. Don't use it! | |||||
| Decode a base64 chunk and store it into a newly allocated buffer. 'dest_len' | |||||
| will be set to hold the length of the returned buffer that '*dest' will point | |||||
| to. | |||||
| The returned buffer is allocated by this function, but it is not clear how to | |||||
| free that memory! | |||||
| .SH BUGS | |||||
| The memory that *dest points to is allocated by the malloc function libssh2 | |||||
| uses, but there's no way for an application to free this data in a safe and | |||||
| reliable way! | |||||
| .SH RETURN VALUE | |||||
| 0 if successful, \-1 if any error occurred. | |||||
| @@ -0,0 +1,29 @@ | |||||
| .TH libssh2_channel_close 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_close - close a channel | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_close(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - active channel stream to set closed status on. | |||||
| Close an active data channel. In practice this means sending an SSH_MSG_CLOSE | |||||
| packet to the remote host which serves as instruction that no further data | |||||
| will be sent to it. The remote host may still send data back until it sends | |||||
| its own close message in response. To wait for the remote end to close its | |||||
| connection as well, follow this command with | |||||
| .BR libssh2_channel_wait_closed(3) | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| @@ -0,0 +1,18 @@ | |||||
| .TH libssh2_channel_direct_tcpip 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_direct_tcpip - convenience macro for \fIlibssh2_channel_direct_tcpip_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| LIBSSH2_CHANNEL * | |||||
| libssh2_channel_direct_tcpip(LIBSSH2_SESSION *session, const char *host, int port); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_direct_tcpip_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_direct_tcpip_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_direct_tcpip_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_direct_tcpip_ex(3) | |||||
| @@ -0,0 +1,35 @@ | |||||
| .TH libssh2_channel_direct_tcpip_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_direct_tcpip_ex - Tunnel a TCP connection through an SSH session | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| LIBSSH2_CHANNEL * | |||||
| libssh2_channel_direct_tcpip_ex(LIBSSH2_SESSION *session, const char *host, int port, const char *shost, int sport); | |||||
| LIBSSH2_CHANNEL * | |||||
| libssh2_channel_direct_tcpip(LIBSSH2_SESSION *session, const char *host, int port); | |||||
| .SH DESCRIPTION | |||||
| \fIsession\fP - Session instance as returned by | |||||
| .BR libssh2_session_init_ex(3) | |||||
| \fIhost\fP - Third party host to connect to using the SSH host as a proxy. | |||||
| \fIport\fP - Port on third party host to connect to. | |||||
| \fIshost\fP - Host to tell the SSH server the connection originated on. | |||||
| \fIsport\fP - Port to tell the SSH server the connection originated from. | |||||
| Tunnel a TCP/IP connection through the SSH transport via the remote host to | |||||
| a third party. Communication from the client to the SSH server remains | |||||
| encrypted, communication from the server to the 3rd party host travels | |||||
| in cleartext. | |||||
| .SH RETURN VALUE | |||||
| Pointer to a newly allocated LIBSSH2_CHANNEL instance, or NULL on errors. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_ALLOC\fP - An internal memory allocation call failed. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_session_init_ex(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_eof 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_eof - check a channel's EOF status | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_eof(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - active channel stream to set closed status on. | |||||
| Check if the remote host has sent an EOF status for the selected stream. | |||||
| .SH RETURN VALUE | |||||
| Returns 1 if the remote host has sent EOF, otherwise 0. Negative on | |||||
| failure. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_close(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_exec 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_exec - convenience macro for \fIlibssh2_channel_process_startup(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_exec(LIBSSH2_CHANNEL *channel, const char *command); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_process_startup(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_process_startup(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_process_startup(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_process_startup(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_flush 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_flush - convenience macro for \fIlibssh2_channel_flush_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_flush(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_flush_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_flush_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_flush_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_flush_ex(3) | |||||
| @@ -0,0 +1,32 @@ | |||||
| .TH libssh2_channel_flush_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_flush_ex - flush a channel | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_flush_ex(LIBSSH2_CHANNEL *channel, int streamid); | |||||
| int | |||||
| libssh2_channel_flush(LIBSSH2_CHANNEL *channel); | |||||
| int | |||||
| libssh2_channel_flush_stderr(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - Active channel stream to flush. | |||||
| \fIstreamid\fP - Specific substream number to flush. Groups of substreams may | |||||
| be flushed by passing on of the following Constants. | |||||
| .br | |||||
| \fBLIBSSH2_CHANNEL_FLUSH_EXTENDED_DATA\fP: Flush all extended data substreams | |||||
| .br | |||||
| \fBLIBSSH2_CHANNEL_FLUSH_ALL\fP: Flush all substreams | |||||
| Flush the read buffer for a given channel instance. Individual substreams may | |||||
| be flushed by number or using one of the provided macros. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_flush_stderr 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_flush_stderr - convenience macro for \fIlibssh2_channel_flush_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_flush_stderr(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_flush_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_flush_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_flush_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_flush_ex(3) | |||||
| @@ -0,0 +1,20 @@ | |||||
| .TH libssh2_channel_forward_accept 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_forward_accept - accept a queued connection | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| LIBSSH2_CHANNEL * | |||||
| libssh2_channel_forward_accept(LIBSSH2_LISTENER *listener); | |||||
| .SH DESCRIPTION | |||||
| \fIlistener\fP is a forwarding listener instance as returned by | |||||
| \fBlibssh2_channel_forward_listen_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| A newly allocated channel instance or NULL on failure. | |||||
| .SH ERRORS | |||||
| When this function returns NULL use \fIlibssh2_session_last_errno(3)\fP to | |||||
| extract the error code. If that code is \fILIBSSH2_ERROR_EAGAIN\fP, the | |||||
| session is set to do non-blocking I/O but the call would block. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_forward_listen_ex(3) | |||||
| @@ -0,0 +1,27 @@ | |||||
| .TH libssh2_channel_forward_cancel 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_forward_cancel - cancel a forwarded TCP port | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_forward_cancel(LIBSSH2_LISTENER *listener); | |||||
| .SH DESCRIPTION | |||||
| \fIlistener\fP - Forwarding listener instance as returned by | |||||
| .BR libssh2_channel_forward_listen_ex(3) | |||||
| Instruct the remote host to stop listening for new connections on a previously requested host/port. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_ALLOC\fP - An internal memory allocation call failed. | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_forward_listen_ex(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_forward_listen 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_forward_listen - convenience macro for \fIlibssh2_channel_forward_listen_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_forward_listen(LIBSSH2_SESSION *session, int port); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_forward_listen_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_forward_listen_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_forward_listen_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_forward_listen_ex(3) | |||||
| @@ -0,0 +1,46 @@ | |||||
| .TH libssh2_channel_forward_listen_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_forward_listen_ex - listen to inbound connections | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| LIBSSH2_LISTENER * | |||||
| libssh2_channel_forward_listen_ex(LIBSSH2_SESSION *session, char *host, int port, int *bound_port, int queue_maxsize); | |||||
| LIBSSH2_LISTENER * | |||||
| libssh2_channel_forward_listen(LIBSSH2_SESSION *session, int port); | |||||
| .SH DESCRIPTION | |||||
| Instruct the remote SSH server to begin listening for inbound TCP/IP | |||||
| connections. New connections will be queued by the library until accepted by | |||||
| \fIlibssh2_channel_forward_accept(3)\fP. | |||||
| \fIsession\fP - instance as returned by libssh2_session_init(). | |||||
| \fIhost\fP - specific address to bind to on the remote host. Binding to | |||||
| 0.0.0.0 (default when NULL is passed) will bind to all available addresses. | |||||
| \fIport\fP - port to bind to on the remote host. When 0 is passed, the remote | |||||
| host will select the first available dynamic port. | |||||
| \fIbound_port\fP - Populated with the actual port bound on the remote | |||||
| host. Useful when requesting dynamic port numbers. | |||||
| \fIqueue_maxsize\fP - Maximum number of pending connections to queue before | |||||
| rejecting further attempts. | |||||
| \fIlibssh2_channel_forward_listen(3)\fP is a macro. | |||||
| .SH RETURN VALUE | |||||
| A newly allocated LIBSSH2_LISTENER instance or NULL on failure. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_ALLOC\fP - An internal memory allocation call failed. | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| \fILIBSSH2_ERROR_PROTO\fP - An invalid SSH protocol response was received on the socket. | |||||
| \fILIBSSH2_ERROR_REQUEST_DENIED\fP - The remote server refused the request. | |||||
| \fILIBSSH2_ERROR_EAGAIN\fP - Marked for non-blocking I/O but the call would block. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_forward_accept(3) | |||||
| @@ -0,0 +1,25 @@ | |||||
| .TH libssh2_channel_free 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_free - free all resources associated with a channel | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_free(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - Channel stream to free. | |||||
| Release all resources associated with a channel stream. If the channel has | |||||
| not yet been closed with | |||||
| .BR libssh2_channel_close(3) | |||||
| , it will be called automatically so that the remote end may know that it | |||||
| can safely free its own resources. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_close(3) | |||||
| @@ -0,0 +1,34 @@ | |||||
| .TH libssh2_channel_get_exit_signal 3 "4 Oct 2010" "libssh2 1.2.8" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_get_exit_signal - get the remote exit signal | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel, char **exitsignal, size_t *exitsignal_len, char **errmsg, size_t *errmsg_len, char **langtag, size_t *langtag_len); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - Closed channel stream to retrieve exit signal from. | |||||
| \fIexitsignal\fP - If not NULL, is populated by reference with the exit signal | |||||
| (without leading "SIG"). Note that the string is stored in a newly allocated | |||||
| buffer. If the remote program exited cleanly, the referenced string pointer | |||||
| will be set to NULL. | |||||
| \fIexitsignal_len\fP - If not NULL, is populated by reference with the length | |||||
| of exitsignal. | |||||
| \fIerrmsg\fP - If not NULL, is populated by reference with the error message | |||||
| (if provided by remote server, if not it will be set to NULL). Note that the | |||||
| string is stored in a newly allocated buffer. | |||||
| \fIerrmsg_len\fP - If not NULL, is populated by reference with the length of errmsg. | |||||
| \fIlangtag\fP - If not NULL, is populated by reference with the language tag | |||||
| (if provided by remote server, if not it will be set to NULL). Note that the | |||||
| string is stored in a newly allocated buffer. | |||||
| \fIlangtag_len\fP - If not NULL, is populated by reference with the length of langtag. | |||||
| .SH RETURN VALUE | |||||
| Numeric error code corresponding to the the Error Code constants. | |||||
| @@ -0,0 +1,18 @@ | |||||
| .TH libssh2_channel_get_exit_status 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_get_exit_status - get the remote exit code | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_get_exit_status(LIBSSH2_CHANNEL* channel) | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - Closed channel stream to retrieve exit status from. | |||||
| Returns the exit code raised by the process running on the remote host at | |||||
| the other end of the named channel. Note that the exit status may not be | |||||
| available if the remote end has not yet set its status to closed. | |||||
| .SH RETURN VALUE | |||||
| Returns 0 on failure, otherwise the \fIExit Status\fP reported by remote host | |||||
| @@ -0,0 +1,35 @@ | |||||
| .TH libssh2_channel_handle_extended_data 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_handle_extended_data - set extended data handling mode | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| void | |||||
| libssh2_channel_handle_extended_data(LIBSSH2_CHANNEL *channel, int ignore_mode); | |||||
| .SH DESCRIPTION | |||||
| This function is deprecated. Use the | |||||
| \fIlibssh2_channel_handle_extended_data2(3)\fP function instead! | |||||
| \fIchannel\fP - Active channel stream to change extended data handling on. | |||||
| \fIignore_mode\fP - One of the three LIBSSH2_CHANNEL_EXTENDED_DATA_* Constants. | |||||
| .br | |||||
| \fBLIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL\fP: Queue extended data for eventual | |||||
| reading | |||||
| .br | |||||
| \fBLIBSSH2_CHANNEL_EXTENDED_DATA_MERGE\fP: Treat extended data and ordinary | |||||
| data the same. Merge all substreams such that calls to | |||||
| \fIlibssh2_channel_read(3)\fP will pull from all substreams on a | |||||
| first-in/first-out basis. | |||||
| .br | |||||
| \fBLIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE\fP: Discard all extended data as it | |||||
| arrives. | |||||
| Change how a channel deals with extended data packets. By default all extended | |||||
| data is queued until read by \fIlibssh2_channel_read_ex(3)\fP | |||||
| .SH RETURN VALUE | |||||
| None. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_handle_extended_data2(3) | |||||
| .BR libssh2_channel_read_ex(3) | |||||
| @@ -0,0 +1,35 @@ | |||||
| .TH libssh2_channel_handle_extended_data2 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_handle_extended_data2 - set extended data handling mode | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_handle_extended_data2(LIBSSH2_CHANNEL *channel, int ignore_mode); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - Active channel stream to change extended data handling on. | |||||
| \fIignore_mode\fP - One of the three LIBSSH2_CHANNEL_EXTENDED_DATA_* Constants. | |||||
| .br | |||||
| \fBLIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL\fP: Queue extended data for eventual | |||||
| reading | |||||
| .br | |||||
| \fBLIBSSH2_CHANNEL_EXTENDED_DATA_MERGE\fP: Treat extended data and ordinary | |||||
| data the same. Merge all substreams such that calls to | |||||
| .BR libssh2_channel_read(3) | |||||
| will pull from all substreams on a first-in/first-out basis. | |||||
| .br | |||||
| \fBLIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE\fP: Discard all extended data as it | |||||
| arrives. | |||||
| Change how a channel deals with extended data packets. By default all | |||||
| extended data is queued until read by | |||||
| .BR libssh2_channel_read_ex(3) | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or LIBSSH2_ERROR_EAGAIN when it would otherwise block. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_handle_extended_data(3) | |||||
| .BR libssh2_channel_read_ex(3) | |||||
| @@ -0,0 +1,20 @@ | |||||
| .TH libssh2_channel_ignore_extended_data 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_ignore_extended_data - convenience macro for \fIlibssh2_channel_handle_extended_data(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| libssh2_channel_ignore_extended_data(arguments) | |||||
| .SH DESCRIPTION | |||||
| This function is deprecated. Use the | |||||
| \fIlibssh2_channel_handle_extended_data2(3)\fP function instead! | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_handle_extended_data(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_handle_extended_data(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_handle_extended_data(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_handle_extended_data(3) | |||||
| @@ -0,0 +1,54 @@ | |||||
| .TH libssh2_channel_open_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_open_ex - establish a generic session channel | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| LIBSSH2_CHANNEL * | |||||
| libssh2_channel_open_ex(LIBSSH2_SESSION *session, const char *channel_type, unsigned int channel_type_len, unsigned int window_size, unsigned int packet_size, const char *message, unsigned int message_len); | |||||
| LIBSSH2_CHANNEL * | |||||
| libssh2_channel_open_session(session); | |||||
| .SH DESCRIPTION | |||||
| \fIsession\fP - Session instance as returned by | |||||
| .BR libssh2_session_init_ex(3) | |||||
| \fIchannel_type\fP - Channel type to open. Typically one of session, | |||||
| direct-tcpip, or tcpip-forward. The SSH2 protocol allowed for additional | |||||
| types including local, custom channel types. | |||||
| \fIchannel_type_len\fP - Length of channel_type | |||||
| \fIwindow_size\fP - Maximum amount of unacknowledged data remote host is | |||||
| allowed to send before receiving an SSH_MSG_CHANNEL_WINDOW_ADJUST packet. | |||||
| \fIpacket_size\fP - Maximum number of bytes remote host is allowed to send | |||||
| in a single SSH_MSG_CHANNEL_DATA or SSG_MSG_CHANNEL_EXTENDED_DATA packet. | |||||
| \fImessage\fP - Additional data as required by the selected channel_type. | |||||
| \fImessage_len\fP - Length of message parameter. | |||||
| Allocate a new channel for exchanging data with the server. This method is | |||||
| typically called through its macroized form: | |||||
| .BR libssh2_channel_open_session(3) | |||||
| or via | |||||
| .BR libssh2_channel_direct_tcpip(3) | |||||
| or | |||||
| .BR libssh2_channel_forward_listen(3) | |||||
| .SH RETURN VALUE | |||||
| Pointer to a newly allocated LIBSSH2_CHANNEL instance, or NULL on errors. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_ALLOC\fP - An internal memory allocation call failed. | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| \fILIBSSH2_ERROR_CHANNEL_FAILURE\fP - | |||||
| \fILIBSSH2_ERROR_EAGAIN\fP - Marked for non-blocking I/O but the call would block. | |||||
| .SH SEE ALSO | |||||
| Add related functions | |||||
| @@ -0,0 +1,18 @@ | |||||
| .TH libssh2_channel_open_session 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_open_session - convenience macro for \fIlibssh2_channel_open_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| LIBSSH2_CHANNEL * | |||||
| libssh2_channel_open_session(LIBSSH2_SESSION *session); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_open_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_open_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_open_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| @@ -0,0 +1,38 @@ | |||||
| .TH libssh2_channel_process_startup 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_process_startup - request a shell on a channel | |||||
| .SH SYNOPSIS | |||||
| .nf | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_process_startup(LIBSSH2_CHANNEL *channel, | |||||
| const char *request, | |||||
| unsigned int request_len, | |||||
| const char *message, | |||||
| unsigned int message_len); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - Active session channel instance. | |||||
| \fIrequest\fP - Type of process to startup. The SSH2 protocol currently | |||||
| defines shell, exec, and subsystem as standard process services. | |||||
| \fIrequest_len\fP - Length of request parameter. | |||||
| \fImessage\fP - Request specific message data to include. | |||||
| \fImessage_len\fP - Length of message parameter. | |||||
| Initiate a request on a session type channel such as returned by | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_ALLOC\fP - An internal memory allocation call failed. | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| \fILIBSSH2_ERROR_CHANNEL_REQUEST_DENIED\fP - | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_read 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_read - convenience macro for \fIlibssh2_channel_read_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| ssize_t libssh2_channel_read(LIBSSH2_CHANNEL *channel, char *buf, size_t buflen); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_read_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_read_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_read_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_read_ex(3) | |||||
| @@ -0,0 +1,45 @@ | |||||
| .TH libssh2_channel_read_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_read_ex - read data from a channel stream | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| ssize_t | |||||
| libssh2_channel_read_ex(LIBSSH2_CHANNEL *channel, int stream_id, char *buf, size_t buflen); | |||||
| ssize_t | |||||
| libssh2_channel_read(LIBSSH2_CHANNEL *channel, char *buf, size_t buflen); | |||||
| ssize_t | |||||
| libssh2_channel_read_stderr(LIBSSH2_CHANNEL *channel, char *buf, size_t buflen); | |||||
| .SH DESCRIPTION | |||||
| Attempt to read data from an active channel stream. All channel streams have | |||||
| one standard I/O substream (stream_id == 0), and may have up to 2^32 extended | |||||
| data streams as identified by the selected \fIstream_id\fP. The SSH2 protocol | |||||
| currently defines a stream ID of 1 to be the stderr substream. | |||||
| \fIchannel\fP - active channel stream to read from. | |||||
| \fIstream_id\fP - substream ID number (e.g. 0 or SSH_EXTENDED_DATA_STDERR) | |||||
| \fIbuf\fP - pointer to storage buffer to read data into | |||||
| \fIbuflen\fP - size of the buf storage | |||||
| \fIlibssh2_channel_read(3)\fP and \fIlibssh2_channel_read_stderr(3)\fP are | |||||
| macros. | |||||
| .SH RETURN VALUE | |||||
| Actual number of bytes read or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| Note that a return value of zero (0) can in fact be a legitimate value and | |||||
| only signals that no payload data was read. It is not an error. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| \fILIBSSH2_ERROR_CHANNEL_CLOSED\fP - The channel has been closed. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_poll_channel_read(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_read_stderr 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_read_stderr - convenience macro for \fIlibssh2_channel_read_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| ssize_t libssh2_channel_read_stderr(LIBSSH2_CHANNEL *channel, char *buf, size_t buflen); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_read_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_read_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_read_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_read_ex(3) | |||||
| @@ -0,0 +1,29 @@ | |||||
| .TH libssh2_channel_receive_window_adjust 3 "15 Mar 2009" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_receive_window_adjust - adjust the channel window | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| unsigned long | |||||
| libssh2_channel_receive_window_adjust(LIBSSH2_CHANNEL * channel, | |||||
| unsigned long adjustment, | |||||
| unsigned char force); | |||||
| .SH DESCRIPTION | |||||
| This function is deprecated in 1.1. Use | |||||
| \fIlibssh2_channel_receive_window_adjust2(3)\fP! | |||||
| Adjust the receive window for a channel by adjustment bytes. If the amount to | |||||
| be adjusted is less than LIBSSH2_CHANNEL_MINADJUST and force is 0 the | |||||
| adjustment amount will be queued for a later packet. | |||||
| .SH RETURN VALUE | |||||
| Returns the new size of the receive window (as understood by remote end). Note | |||||
| that the window value sent over the wire is strictly 32bit, but this API is | |||||
| made to return a 'long' which may not be 32 bit on all platforms. | |||||
| .SH ERRORS | |||||
| In 1.0 and earlier, this function returns LIBSSH2_ERROR_EAGAIN for | |||||
| non-blocking channels where it would otherwise block. However, that is a | |||||
| negative number and this function only returns an unsigned value and this then | |||||
| leads to a very strange value being returned. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_window_read_ex(3) | |||||
| @@ -0,0 +1,27 @@ | |||||
| .TH libssh2_channel_receive_window_adjust2 3 "26 Mar 2009" "libssh2 1.1" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_receive_window_adjust2 - adjust the channel window | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_receive_window_adjust2(LIBSSH2_CHANNEL * channel, | |||||
| unsigned long adjustment, | |||||
| unsigned char force, | |||||
| unsigned int *window); | |||||
| .SH DESCRIPTION | |||||
| Adjust the receive window for a channel by adjustment bytes. If the amount to | |||||
| be adjusted is less than LIBSSH2_CHANNEL_MINADJUST and force is 0 the | |||||
| adjustment amount will be queued for a later packet. | |||||
| This function stores the new size of the receive window (as understood by | |||||
| remote end) in the variable 'window' points to. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success and a negative value on error. If used in non-blocking | |||||
| mode it will return LIBSSH2_ERROR_EAGAIN when it would otherwise block. | |||||
| .SH ERRORS | |||||
| .SH AVAILABILITY | |||||
| Added in libssh2 1.1 since the previous API has deficiencies. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_window_read_ex(3) | |||||
| @@ -0,0 +1,22 @@ | |||||
| .TH libssh2_channel_request_auth_agent 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_request_auth_agent - request agent forwarding for a session | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_request_auth_agent(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| Request that agent forwarding be enabled for this SSH session. This sends the | |||||
| request over this specific channel, which causes the agent listener to be | |||||
| started on the remote side upon success. This agent listener will then run | |||||
| for the duration of the SSH session. | |||||
| \fIchannel\fP - Previously opened channel instance such as returned by | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_request_pty 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_request_pty - convenience macro for \fIlibssh2_channel_request_pty_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_request_pty(LIBSSH2_SESSION *session, const char *term); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_request_pty_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_request_pty_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_request_pty_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_request_pty_ex(3) | |||||
| @@ -0,0 +1,47 @@ | |||||
| .TH libssh2_channel_request_pty_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_request_pty_ex - short function description | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_request_pty_ex(LIBSSH2_CHANNEL *channel, const char *term, unsigned int term_len, const char *modes, unsigned int modes_len, int width, int height, int width_px, int height_px); | |||||
| int | |||||
| libssh2_channel_request_pty(LIBSSH2_CHANNEL *channel, char *term); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - Previously opened channel instance such as returned by | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| \fIterm\fP - Terminal emulation (e.g. vt102, ansi, etc...) | |||||
| \fIterm_len\fP - Length of term parameter | |||||
| \fImodes\fP - Terminal mode modifier values | |||||
| \fImodes_len\fP - Length of modes parameter. | |||||
| \fIwidth\fP - Width of pty in characters | |||||
| \fIheight\fP - Height of pty in characters | |||||
| \fIwidth_px\fP - Width of pty in pixels | |||||
| \fIheight_px\fP - Height of pty in pixels | |||||
| Request a PTY on an established channel. Note that this does not make sense | |||||
| for all channel types and may be ignored by the server despite returning | |||||
| success. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_ALLOC\fP - An internal memory allocation call failed. | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| \fILIBSSH2_ERROR_CHANNEL_REQUEST_DENIED\fP - | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_request_pty_size 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_request_pty_size - convenience macro for \fIlibssh2_channel_request_pty_size_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_request_pty_size(LIBSSH2_CHANNEL *channel, int width, int height); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_request_pty_size_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_request_pty_size_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_request_pty_size_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_request_pty_size_ex(3) | |||||
| @@ -0,0 +1,12 @@ | |||||
| .TH libssh2_channel_request_pty_size_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_request_pty_size_ex - TODO | |||||
| .SH SYNOPSIS | |||||
| .SH DESCRIPTION | |||||
| .SH RETURN VALUE | |||||
| .SH ERRORS | |||||
| .SH SEE ALSO | |||||
| @@ -0,0 +1,24 @@ | |||||
| .TH libssh2_channel_send_eof 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_send_eof - send EOF to remote server | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_send_eof(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| Tell the remote host that no further data will be sent on the specified | |||||
| channel. Processes typically interpret this as a closed stdin descriptor. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_wait_eof(3) | |||||
| .BR libssh2_channel_eof(3) | |||||
| @@ -0,0 +1,23 @@ | |||||
| .TH libssh2_channel_set_blocking 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_set_blocking - set or clear blocking mode on channel | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| void | |||||
| libssh2_channel_set_blocking(LIBSSH2_CHANNEL *channel, int blocking); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - channel stream to set or clean blocking status on. | |||||
| \fIblocking\fP - Set to a non-zero value to make the channel block, or zero to | |||||
| make it non-blocking. | |||||
| Currently this is just a short cut call to | |||||
| .BR libssh2_session_set_blocking(3) | |||||
| and therefore will affect the session and all channels. | |||||
| .SH RETURN VALUE | |||||
| None | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_session_set_blocking(3) | |||||
| .BR libssh2_channel_read_ex(3) | |||||
| .BR libssh2_channel_write_ex(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_setenv 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_setenv - convenience macro for \fIlibssh2_channel_setenv_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_setenv(LIBSSH2_CHANNEL *channel, const char *varname, const char *value); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_setenv_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_setenv_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_setenv_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_setenv_ex(3) | |||||
| @@ -0,0 +1,41 @@ | |||||
| .TH libssh2_channel_setenv_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_setenv_ex - set an environment variable on the channel | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_setenv_ex(LIBSSH2_CHANNEL *channel, char *varname, unsigned int varname_len, const char *value, unsigned int value_len); | |||||
| int | |||||
| libssh2_channel_setenv(LIBSSH2_CHANNEL *channel, char *varname, const char *value); | |||||
| .SH DESCRIPTION | |||||
| \fIchannel\fP - Previously opened channel instance such as returned by | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| \fIvarname\fP - Name of environment variable to set on the remote | |||||
| channel instance. | |||||
| \fIvarname_len\fP - Length of passed varname parameter. | |||||
| \fIvalue\fP - Value to set varname to. | |||||
| \fIvalue_len\fP - Length of value parameter. | |||||
| Set an environment variable in the remote channel's process space. Note that | |||||
| this does not make sense for all channel types and may be ignored by the | |||||
| server despite returning success. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_ALLOC\fP - An internal memory allocation call failed. | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| \fILIBSSH2_ERROR_CHANNEL_REQUEST_DENIED\fP - | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_shell 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_shell - convenience macro for \fIlibssh2_channel_process_startup(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_shell(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_process_startup(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_process_startup(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_process_startup(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_process_startup(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_subsystem 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_subsystem - convenience macro for \fIlibssh2_channel_process_startup(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int libssh2_channel_subsystem(LIBSSH2_CHANNEL *channel, const char *subsystem); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_process_startup(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_process_startup(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_process_startup(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_process_startup(3) | |||||
| @@ -0,0 +1,22 @@ | |||||
| .TH libssh2_channel_wait_closed 3 "29 Nov 2007" "libssh2 0.19" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_wait_closed - wait for the remote to close the channel | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_wait_closed(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| Enter a temporary blocking state until the remote host closes the named | |||||
| channel. Typically sent after \fIlibssh2_channel_close(3)\fP in order to | |||||
| examine the exit status. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns LIBSSH2_ERROR_EAGAIN | |||||
| when it would otherwise block. While LIBSSH2_ERROR_EAGAIN is a negative | |||||
| number, it isn't really a failure per se. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_send_eof(3) | |||||
| .BR libssh2_channel_eof(3) | |||||
| .BR libssh2_channel_wait_eof(3) | |||||
| @@ -0,0 +1,19 @@ | |||||
| .TH libssh2_channel_wait_eof 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_wait_eof - wait for the remote to reply to an EOF request | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| int | |||||
| libssh2_channel_wait_eof(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| Wait for the remote end to send EOF. | |||||
| .SH RETURN VALUE | |||||
| Return 0 on success or negative on failure. It returns | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_send_eof(3) | |||||
| .BR libssh2_channel_eof(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_window_read 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_window_read - convenience macro for \fIlibssh2_channel_window_read_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| unsigned long libssh2_channel_window_read(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_window_read_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_window_read_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_window_read_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_window_read_ex(3) | |||||
| @@ -0,0 +1,24 @@ | |||||
| .TH libssh2_channel_window_read_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_window_read_ex - Check the status of the read window | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| unsigned long | |||||
| libssh2_channel_window_read_ex(LIBSSH2_CHANNEL *channel, | |||||
| unsigned long *read_avail, | |||||
| unsigned long *window_size_initial) | |||||
| .SH DESCRIPTION | |||||
| Check the status of the read window. Returns the number of bytes which the | |||||
| remote end may send without overflowing the window limit read_avail (if | |||||
| passed) will be populated with the number of bytes actually available to be | |||||
| read window_size_initial (if passed) will be populated with the | |||||
| window_size_initial as defined by the channel_open request | |||||
| .SH RETURN VALUE | |||||
| The number of bytes which the remote end may send without overflowing the | |||||
| window limit | |||||
| .SH ERRORS | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_receive_window_adjust(3), | |||||
| .BR libssh2_channel_window_write_ex(3) | |||||
| @@ -0,0 +1,17 @@ | |||||
| .TH libssh2_channel_window_write 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_window_write - convenience macro for \fIlibssh2_channel_window_write_ex(3)\fP calls | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| unsigned long libssh2_channel_window_write(LIBSSH2_CHANNEL *channel); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_window_write_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_window_write_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_window_write_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_window_write_ex(3) | |||||
| @@ -0,0 +1,21 @@ | |||||
| .TH libssh2_channel_window_write_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_window_write_ex - Check the status of the write window | |||||
| .SH SYNOPSIS | |||||
| #include <libssh2.h> | |||||
| unsigned long | |||||
| libssh2_channel_window_write_ex(LIBSSH2_CHANNEL *channel, | |||||
| unsigned long *window_size_initial) | |||||
| .SH DESCRIPTION | |||||
| Check the status of the write window Returns the number of bytes which may be | |||||
| safely written on the channel without blocking. 'window_size_initial' (if | |||||
| passed) will be populated with the size of the initial window as defined by | |||||
| the channel_open request | |||||
| .SH RETURN VALUE | |||||
| Number of bytes which may be safely written on the channel without blocking. | |||||
| .SH ERRORS | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_window_read_ex(3), | |||||
| .BR libssh2_channel_receive_window_adjust(3) | |||||
| @@ -0,0 +1,18 @@ | |||||
| .TH libssh2_channel_write 3 "20 Feb 2010" "libssh2 1.2.4" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_write - convenience macro for \fIlibssh2_channel_write_ex(3)\fP | |||||
| .SH SYNOPSIS | |||||
| .nf | |||||
| #include <libssh2.h> | |||||
| ssize_t libssh2_channel_write(LIBSSH2_CHANNEL *channel, const char *buf, size_t buflen); | |||||
| .SH DESCRIPTION | |||||
| This is a macro defined in a public libssh2 header file that is using the | |||||
| underlying function \fIlibssh2_channel_write_ex(3)\fP. | |||||
| .SH RETURN VALUE | |||||
| See \fIlibssh2_channel_write_ex(3)\fP | |||||
| .SH ERRORS | |||||
| See \fIlibssh2_channel_write_ex(3)\fP | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_write_ex(3) | |||||
| @@ -0,0 +1,47 @@ | |||||
| .TH libssh2_channel_write_ex 3 "1 Jun 2007" "libssh2 0.15" "libssh2 manual" | |||||
| .SH NAME | |||||
| libssh2_channel_write_ex - write data to a channel stream blocking | |||||
| .SH SYNOPSIS | |||||
| .nf | |||||
| #include <libssh2.h> | |||||
| ssize_t libssh2_channel_write_ex(LIBSSH2_CHANNEL *channel, | |||||
| int stream_id, char *buf, | |||||
| size_t buflen); | |||||
| .SH DESCRIPTION | |||||
| Write data to a channel stream. All channel streams have one standard I/O | |||||
| substream (stream_id == 0), and may have up to 2^32 extended data streams as | |||||
| identified by the selected \fIstream_id\fP. The SSH2 protocol currently | |||||
| defines a stream ID of 1 to be the stderr substream. | |||||
| \fIchannel\fP - active channel stream to write to. | |||||
| \fIstream_id\fP - substream ID number (e.g. 0 or SSH_EXTENDED_DATA_STDERR) | |||||
| \fIbuf\fP - pointer to buffer to write | |||||
| \fIbuflen\fP - size of the data to write | |||||
| \fIlibssh2_channel_write(3)\fP and \fIlibssh2_channel_write_stderr(3)\fP are | |||||
| convenience macros for this function. | |||||
| \fIlibssh2_channel_write_ex(3)\fP will use as much as possible of the buffer | |||||
| and put it into a single SSH protocol packet. This means that to get maximum | |||||
| performance when sending larger files, you should try to always pass in at | |||||
| least 32K of data to this function. | |||||
| .SH RETURN VALUE | |||||
| Actual number of bytes written or negative on failure. | |||||
| LIBSSH2_ERROR_EAGAIN when it would otherwise block. While | |||||
| LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se. | |||||
| .SH ERRORS | |||||
| \fILIBSSH2_ERROR_ALLOC\fP - An internal memory allocation call failed. | |||||
| \fILIBSSH2_ERROR_SOCKET_SEND\fP - Unable to send data on socket. | |||||
| \fILIBSSH2_ERROR_CHANNEL_CLOSED\fP - The channel has been closed. | |||||
| \fILIBSSH2_ERROR_CHANNEL_EOF_SENT\fP - The channel has been requested to be | |||||
| closed. | |||||
| .SH SEE ALSO | |||||
| .BR libssh2_channel_open_ex(3) | |||||
| .BR libssh2_channel_read_ex(3) | |||||