mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
virnetlibsshsession: Reflect API change in libssh
As of libssh commit of libssh-0.11.0~70 [1] the ssh_channel_get_exit_status() function is deprecated and a new one is introduced instead: ssh_channel_get_exit_state(). It's not a drop-in replacement, but it's simple enough. Adapt our libssh handling code to this change. 1: https://git.libssh.org/projects/libssh.git/commit/?id=04d86aeeae73c78af8b3dcdabb2e588cd31a8923 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
c195be19ab
commit
1b797e6421
@ -1096,6 +1096,9 @@ if conf.has('WITH_REMOTE')
|
|||||||
libssh_dep = dependency('libssh', version: '>=' + libssh_version, required: get_option('libssh'))
|
libssh_dep = dependency('libssh', version: '>=' + libssh_version, required: get_option('libssh'))
|
||||||
if libssh_dep.found()
|
if libssh_dep.found()
|
||||||
conf.set('WITH_LIBSSH', 1)
|
conf.set('WITH_LIBSSH', 1)
|
||||||
|
if cc.has_function('ssh_channel_get_exit_state', dependencies: libssh_dep)
|
||||||
|
conf.set('WITH_SSH_CHANNEL_GET_EXIT_STATE', 1)
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
libssh_dep = dependency('', required: false)
|
libssh_dep = dependency('', required: false)
|
||||||
|
@ -170,6 +170,25 @@ virNetLibsshSessionOnceInit(void)
|
|||||||
}
|
}
|
||||||
VIR_ONCE_GLOBAL_INIT(virNetLibsshSession);
|
VIR_ONCE_GLOBAL_INIT(virNetLibsshSession);
|
||||||
|
|
||||||
|
|
||||||
|
static int virNetLibsshChannelGetExitStatus(ssh_channel channel,
|
||||||
|
uint32_t *exit_status)
|
||||||
|
{
|
||||||
|
#ifdef WITH_SSH_CHANNEL_GET_EXIT_STATE
|
||||||
|
return ssh_channel_get_exit_state(channel, exit_status, NULL, NULL);
|
||||||
|
#else
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = *exit_status = ssh_channel_get_exit_status(channel);
|
||||||
|
|
||||||
|
if (rc != SSH_OK)
|
||||||
|
return SSH_ERROR;
|
||||||
|
|
||||||
|
return *exit_status;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static virNetLibsshAuthMethod *
|
static virNetLibsshAuthMethod *
|
||||||
virNetLibsshSessionAuthMethodNew(virNetLibsshSession *sess)
|
virNetLibsshSessionAuthMethodNew(virNetLibsshSession *sess)
|
||||||
{
|
{
|
||||||
@ -1179,12 +1198,16 @@ virNetLibsshChannelRead(virNetLibsshSession *sess,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ssh_channel_is_eof(sess->channel)) {
|
if (ssh_channel_is_eof(sess->channel)) {
|
||||||
|
uint32_t exit_status;
|
||||||
|
int rc;
|
||||||
eof:
|
eof:
|
||||||
if (ssh_channel_get_exit_status(sess->channel)) {
|
|
||||||
|
rc = virNetLibsshChannelGetExitStatus(sess->channel, &exit_status);
|
||||||
|
if (rc != SSH_OK || exit_status != 0) {
|
||||||
virReportError(VIR_ERR_LIBSSH,
|
virReportError(VIR_ERR_LIBSSH,
|
||||||
_("Remote command terminated with non-zero code: %1$d"),
|
_("Remote command terminated with non-zero code: %1$d"),
|
||||||
ssh_channel_get_exit_status(sess->channel));
|
exit_status);
|
||||||
sess->channelCommandReturnValue = ssh_channel_get_exit_status(sess->channel);
|
sess->channelCommandReturnValue = exit_status;
|
||||||
sess->state = VIR_NET_LIBSSH_STATE_ERROR_REMOTE;
|
sess->state = VIR_NET_LIBSSH_STATE_ERROR_REMOTE;
|
||||||
virObjectUnlock(sess);
|
virObjectUnlock(sess);
|
||||||
return -1;
|
return -1;
|
||||||
@ -1227,12 +1250,16 @@ virNetLibsshChannelWrite(virNetLibsshSession *sess,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ssh_channel_is_eof(sess->channel)) {
|
if (ssh_channel_is_eof(sess->channel)) {
|
||||||
if (ssh_channel_get_exit_status(sess->channel)) {
|
uint32_t exit_status;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = virNetLibsshChannelGetExitStatus(sess->channel, &exit_status);
|
||||||
|
if (rc != SSH_OK || exit_status != 0) {
|
||||||
virReportError(VIR_ERR_LIBSSH,
|
virReportError(VIR_ERR_LIBSSH,
|
||||||
_("Remote program terminated with non-zero code: %1$d"),
|
_("Remote program terminated with non-zero code: %1$d"),
|
||||||
ssh_channel_get_exit_status(sess->channel));
|
exit_status);
|
||||||
sess->state = VIR_NET_LIBSSH_STATE_ERROR_REMOTE;
|
sess->state = VIR_NET_LIBSSH_STATE_ERROR_REMOTE;
|
||||||
sess->channelCommandReturnValue = ssh_channel_get_exit_status(sess->channel);
|
sess->channelCommandReturnValue = exit_status;
|
||||||
|
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
Loading…
Reference in New Issue
Block a user