You need to sign in or sign up before continuing.
提交 6917467c 编写于 作者: P Pino Toscano 提交者: Peter Krempa

libssh_transport: add new libssh-based transport

Implement a new libssh transport, which uses libssh to communicate with
remote hosts, and add all the build system stuff (search of libssh,
private symbols, etc) to built it.

This new transport supports all the common ssh authentication methods,
making use of libvirt's auth callbacks for interaction with the user.
上级 24ee5dc9
......@@ -36,6 +36,7 @@
# undef WITH_DTRACE_PROBES
# undef WITH_GNUTLS
# undef WITH_GNUTLS_GCRYPT
# undef WITH_LIBSSH
# undef WITH_MACVTAP
# undef WITH_NUMACTL
# undef WITH_SASL
......@@ -60,6 +61,7 @@
# undef WITH_DTRACE_PROBES
# undef WITH_GNUTLS
# undef WITH_GNUTLS_GCRYPT
# undef WITH_LIBSSH
# undef WITH_MACVTAP
# undef WITH_NUMACTL
# undef WITH_SASL
......
......@@ -217,6 +217,7 @@ if test "$with_remote" = "no" ; then
with_gnutls=no
with_ssh2=no
with_sasl=no
with_libssh=no
fi
# Stateful drivers are useful only when building the daemon.
if test "$with_libvirtd" = "no" ; then
......@@ -246,6 +247,7 @@ LIBVIRT_CHECK_DBUS
LIBVIRT_CHECK_FUSE
LIBVIRT_CHECK_GLUSTER
LIBVIRT_CHECK_HAL
LIBVIRT_CHECK_LIBSSH
LIBVIRT_CHECK_NETCF
LIBVIRT_CHECK_NUMACTL
LIBVIRT_CHECK_OPENWSMAN
......@@ -2665,6 +2667,7 @@ LIBVIRT_RESULT_DBUS
LIBVIRT_RESULT_FUSE
LIBVIRT_RESULT_GLUSTER
LIBVIRT_RESULT_HAL
LIBVIRT_RESULT_LIBSSH
LIBVIRT_RESULT_NETCF
LIBVIRT_RESULT_NUMACTL
LIBVIRT_RESULT_OPENWSMAN
......
dnl The libssh.so library
dnl
dnl Copyright (C) 2016 Red Hat, Inc.
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public
dnl License as published by the Free Software Foundation; either
dnl version 2.1 of the License, or (at your option) any later version.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Lesser General Public License for more details.
dnl
dnl You should have received a copy of the GNU Lesser General Public
dnl License along with this library. If not, see
dnl <http://www.gnu.org/licenses/>.
dnl
AC_DEFUN([LIBVIRT_CHECK_LIBSSH],[
LIBVIRT_CHECK_PKG([LIBSSH], [libssh], [0.7])
])
AC_DEFUN([LIBVIRT_RESULT_LIBSSH],[
LIBVIRT_RESULT_LIB([LIBSSH])
])
......@@ -145,6 +145,7 @@ src/rpc/virnetclient.c
src/rpc/virnetclientprogram.c
src/rpc/virnetclientstream.c
src/rpc/virnetdaemon.c
src/rpc/virnetlibsshsession.c
src/rpc/virnetmessage.c
src/rpc/virnetsaslcontext.c
src/rpc/virnetserver.c
......
......@@ -2127,6 +2127,12 @@ else ! WITH_ATOMIC_OPS_PTHREAD
SYM_FILES += $(srcdir)/libvirt_atomic.syms
endif ! WITH_ATOMIC_OPS_PTHREAD
if WITH_LIBSSH
USED_SYM_FILES += $(srcdir)/libvirt_libssh.syms
else ! WITH_LIBSSH
SYM_FILES += $(srcdir)/libvirt_libssh.syms
endif ! WITH_LIBSSH
EXTRA_DIST += \
libvirt_public.syms \
libvirt_lxc.syms \
......@@ -2204,7 +2210,8 @@ libvirt_admin_la_CFLAGS += \
$(YAJL_CFLAGS) \
$(SSH2_CFLAGS) \
$(SASL_CFLAGS) \
$(GNUTLS_CFLAGS)
$(GNUTLS_CFLAGS) \
$(LIBSSH_CFLAGS)
libvirt_admin_la_LIBADD += \
$(CAPNG_LIBS) \
......@@ -2213,7 +2220,8 @@ libvirt_admin_la_LIBADD += \
$(LIBXML_LIBS) \
$(SSH2_LIBS) \
$(SASL_LIBS) \
$(GNUTLS_LIBS)
$(GNUTLS_LIBS) \
$(LIBSSH_LIBS)
ADMIN_SYM_FILES = $(srcdir)/libvirt_admin_private.syms
......@@ -2790,16 +2798,25 @@ else ! WITH_SASL
EXTRA_DIST += \
rpc/virnetsaslcontext.h rpc/virnetsaslcontext.c
endif ! WITH_SASL
if WITH_LIBSSH
libvirt_net_rpc_la_SOURCES += \
rpc/virnetlibsshsession.h rpc/virnetlibsshsession.c
else ! WITH_LIBSSH
EXTRA_DIST += \
rpc/virnetlibsshsession.h rpc/virnetlibsshsession.c
endif ! WITH_LIBSSH
libvirt_net_rpc_la_CFLAGS = \
$(GNUTLS_CFLAGS) \
$(SASL_CFLAGS) \
$(SSH2_CFLAGS) \
$(LIBSSH_CFLAGS) \
$(XDR_CFLAGS) \
$(AM_CFLAGS)
libvirt_net_rpc_la_LDFLAGS = \
$(GNUTLS_LIBS) \
$(SASL_LIBS) \
$(SSH2_LIBS)\
$(LIBSSH_LIBS) \
$(SECDRIVER_LIBS) \
$(AM_LDFLAGS) \
$(NULL)
......
#
# libssh session - specific symbols
#
# rpc/virnetlibsshsession.h
virNetLibsshChannelRead;
virNetLibsshChannelWrite;
virNetLibsshSessionAuthAddAgentAuth;
virNetLibsshSessionAuthAddKeyboardAuth;
virNetLibsshSessionAuthAddPasswordAuth;
virNetLibsshSessionAuthAddPrivKeyAuth;
virNetLibsshSessionAuthSetCallback;
virNetLibsshSessionConnect;
virNetLibsshSessionHasCachedData;
virNetLibsshSessionSetChannelCommand;
virNetLibsshSessionSetHostKeyVerification;
# Let emacs know we want case-insensitive sorting
# Local Variables:
# sort-fold-case: t
# End:
此差异已折叠。
/*
* virnetlibsshsession.h: ssh transport provider based on libssh
*
* Copyright (C) 2012-2016 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*
* Author: Peter Krempa <pkrempa@redhat.com>
* Author: Pino Toscano <ptoscano@redhat.com>
*/
#ifndef __VIR_NET_LIBSSH_SESSION_H__
# define __VIR_NET_LIBSSH_SESSION_H__
# include "internal.h"
# include "viruri.h"
typedef struct _virNetLibsshSession virNetLibsshSession;
typedef virNetLibsshSession *virNetLibsshSessionPtr;
virNetLibsshSessionPtr virNetLibsshSessionNew(const char *username);
void virNetLibsshSessionFree(virNetLibsshSessionPtr sess);
typedef enum {
VIR_NET_LIBSSH_HOSTKEY_VERIFY_NORMAL,
VIR_NET_LIBSSH_HOSTKEY_VERIFY_AUTO_ADD,
VIR_NET_LIBSSH_HOSTKEY_VERIFY_IGNORE
} virNetLibsshHostkeyVerify;
int virNetLibsshSessionSetChannelCommand(virNetLibsshSessionPtr sess,
const char *command);
int virNetLibsshSessionAuthSetCallback(virNetLibsshSessionPtr sess,
virConnectAuthPtr auth);
int virNetLibsshSessionAuthAddPasswordAuth(virNetLibsshSessionPtr sess,
virURIPtr uri);
int virNetLibsshSessionAuthAddAgentAuth(virNetLibsshSessionPtr sess);
int virNetLibsshSessionAuthAddPrivKeyAuth(virNetLibsshSessionPtr sess,
const char *keyfile,
const char *password);
int virNetLibsshSessionAuthAddKeyboardAuth(virNetLibsshSessionPtr sess,
int tries);
int virNetLibsshSessionSetHostKeyVerification(virNetLibsshSessionPtr sess,
const char *hostname,
int port,
const char *hostsfile,
virNetLibsshHostkeyVerify opt);
int virNetLibsshSessionConnect(virNetLibsshSessionPtr sess,
int sock);
ssize_t virNetLibsshChannelRead(virNetLibsshSessionPtr sess,
char *buf,
size_t len);
ssize_t virNetLibsshChannelWrite(virNetLibsshSessionPtr sess,
const char *buf,
size_t len);
bool virNetLibsshSessionHasCachedData(virNetLibsshSessionPtr sess);
#endif /* ___VIR_NET_LIBSSH_SESSION_H_ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册