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