Commit aa1b62ba by Carlos Martín Nieto Committed by Vicent Marti

ssh: create the right callback signature based on build options

When linking against libssh2, create the transport.h such that it
contains its definition for custom crypto and keyboard-interactive
callbacks.

If we don't link against libssh2, create an equivalent signature which
has void pointers instead of pointers to libssh2 structures.

This would be one way to fix #2438.
parent 1d430056
......@@ -408,6 +408,17 @@ IF (SONAME)
ENDIF()
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/libgit2.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libgit2.pc @ONLY)
IF (LIBSSH2_FOUND)
SET(INCLUDE_LIBSSH2 "#include <libssh2.h>")
SET(GIT_SSH_PK_FUNC "typedef LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC((*git_cred_sign_callback));")
SET(GIT_SSH_KI_FUNC "typedef LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC((*git_cred_ssh_interactive_callback));")
ELSE ()
SET(GIT_SSH_PK_FUNC "typedef int (*git_cred_sign_callback)(void *, unsigned char **, size_t *, const unsigned char *, size_t, void **);")
SET(GIT_SSH_KI_FUNC "typedef int (*git_cred_ssh_interactive_callback)(const char *, int, const char *, int, int, const void *, void *, void **);")
ENDIF ()
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/git2/transport.h.in ${CMAKE_CURRENT_SOURCE_DIR}/include/git2/transport.h @ONLY)
IF (MSVC_IDE)
# Precompiled headers
SET_TARGET_PROPERTIES(git2 PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
......
......@@ -11,9 +11,7 @@
#include "net.h"
#include "types.h"
#ifdef GIT_SSH
#include <libssh2.h>
#endif
@INCLUDE_LIBSSH2@
/**
* @file git2/transport.h
......@@ -61,13 +59,14 @@ typedef struct {
char *password;
} git_cred_userpass_plaintext;
#ifdef GIT_SSH
typedef LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC((*git_cred_sign_callback));
typedef LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC((*git_cred_ssh_interactive_callback));
#else
typedef int (*git_cred_sign_callback)(void *, ...);
typedef int (*git_cred_ssh_interactive_callback)(void *, ...);
#endif
/*
* This defines the callbacks for custom public key signatures and
* keyboard-interactive authentication. It is replaced at build-time
* with either the libssh2 signature or a dummy signature that's close
* enough but with void pointers instead of libssh2 structures.
*/
@GIT_SSH_PK_FUNC@
@GIT_SSH_KI_FUNC@
/**
* A ssh key from disk
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment