| @@ -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) | |||