summaryrefslogtreecommitdiff
path: root/libs/libssh2/src/publickey.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/libssh2/src/publickey.c')
-rw-r--r--libs/libssh2/src/publickey.c142
1 files changed, 74 insertions, 68 deletions
diff --git a/libs/libssh2/src/publickey.c b/libs/libssh2/src/publickey.c
index f26c6327dc..db45be99be 100644
--- a/libs/libssh2/src/publickey.c
+++ b/libs/libssh2/src/publickey.c
@@ -1,5 +1,5 @@
-/* Copyright (c) 2004-2007, Sara Golemon <sarag@libssh2.org>
- * Copyright (c) 2010-2014 by Daniel Stenberg
+/* Copyright (C) Sara Golemon <sarag@libssh2.org>
+ * Copyright (C) Daniel Stenberg
* All rights reserved.
*
* Redistribution and use in source and binary forms,
@@ -34,6 +34,8 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
*/
#include "libssh2_priv.h"
@@ -105,7 +107,7 @@ static const LIBSSH2_PUBLICKEY_CODE_LIST publickey_status_codes[] = {
*/
static void
publickey_status_error(const LIBSSH2_PUBLICKEY *pkey,
- LIBSSH2_SESSION *session, int status)
+ LIBSSH2_SESSION *session, unsigned long status)
{
const char *msg;
@@ -114,7 +116,7 @@ publickey_status_error(const LIBSSH2_PUBLICKEY *pkey,
status = 7;
}
- if(status < 0 || status > LIBSSH2_PUBLICKEY_STATUS_CODE_MAX) {
+ if(status > LIBSSH2_PUBLICKEY_STATUS_CODE_MAX) {
msg = "unknown";
}
else {
@@ -136,14 +138,14 @@ publickey_packet_receive(LIBSSH2_PUBLICKEY * pkey,
LIBSSH2_CHANNEL *channel = pkey->channel;
LIBSSH2_SESSION *session = channel->session;
unsigned char buffer[4];
- int rc;
+ ssize_t rc;
*data = NULL; /* default to nothing returned */
*data_len = 0;
if(pkey->receive_state == libssh2_NB_state_idle) {
rc = _libssh2_channel_read(channel, 0, (char *) buffer, 4);
if(rc == LIBSSH2_ERROR_EAGAIN) {
- return rc;
+ return (int)rc;
}
else if(rc != 4) {
return _libssh2_error(session, LIBSSH2_ERROR_PUBLICKEY_PROTOCOL,
@@ -166,9 +168,9 @@ publickey_packet_receive(LIBSSH2_PUBLICKEY * pkey,
rc = _libssh2_channel_read(channel, 0, (char *) pkey->receive_packet,
pkey->receive_packet_len);
if(rc == LIBSSH2_ERROR_EAGAIN) {
- return rc;
+ return (int)rc;
}
- else if(rc != (int)pkey->receive_packet_len) {
+ else if(rc != (ssize_t)pkey->receive_packet_len) {
LIBSSH2_FREE(session, pkey->receive_packet);
pkey->receive_packet = NULL;
pkey->receive_state = libssh2_NB_state_idle;
@@ -234,7 +236,7 @@ publickey_response_success(LIBSSH2_PUBLICKEY * pkey)
size_t data_len;
int response;
- while(1) {
+ for(;;) {
int rc = publickey_packet_receive(pkey, &data, &data_len);
if(rc == LIBSSH2_ERROR_EAGAIN) {
return rc;
@@ -272,7 +274,7 @@ publickey_response_success(LIBSSH2_PUBLICKEY * pkey)
return 0;
publickey_status_error(pkey, session, status);
- return -1;
+ goto err_exit;
}
default:
LIBSSH2_FREE(session, data);
@@ -287,7 +289,7 @@ publickey_response_success(LIBSSH2_PUBLICKEY * pkey)
data = NULL;
}
}
- /* never reached, but include `return` to silence compiler warnings */
+err_exit:
return -1;
}
@@ -310,8 +312,8 @@ static LIBSSH2_PUBLICKEY *publickey_init(LIBSSH2_SESSION *session)
session->pkeyInit_pkey = NULL;
session->pkeyInit_channel = NULL;
- _libssh2_debug(session, LIBSSH2_TRACE_PUBLICKEY,
- "Initializing publickey subsystem");
+ _libssh2_debug((session, LIBSSH2_TRACE_PUBLICKEY,
+ "Initializing publickey subsystem"));
session->pkeyInit_state = libssh2_NB_state_allocated;
}
@@ -387,28 +389,29 @@ static LIBSSH2_PUBLICKEY *publickey_init(LIBSSH2_SESSION *session)
session->pkeyInit_buffer_sent = 0;
- _libssh2_debug(session, LIBSSH2_TRACE_PUBLICKEY,
+ _libssh2_debug((session, LIBSSH2_TRACE_PUBLICKEY,
"Sending publickey advertising version %d support",
- (int) LIBSSH2_PUBLICKEY_VERSION);
+ (int) LIBSSH2_PUBLICKEY_VERSION));
session->pkeyInit_state = libssh2_NB_state_sent2;
}
if(session->pkeyInit_state == libssh2_NB_state_sent2) {
- rc = _libssh2_channel_write(session->pkeyInit_channel, 0,
- session->pkeyInit_buffer,
- 19 - session->pkeyInit_buffer_sent);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
+ ssize_t nwritten;
+ nwritten = _libssh2_channel_write(session->pkeyInit_channel, 0,
+ session->pkeyInit_buffer,
+ 19 - session->pkeyInit_buffer_sent);
+ if(nwritten == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, LIBSSH2_ERROR_EAGAIN,
"Would block sending publickey version packet");
return NULL;
}
- else if(rc < 0) {
- _libssh2_error(session, rc,
+ else if(nwritten < 0) {
+ _libssh2_error(session, (int)nwritten,
"Unable to send publickey version packet");
goto err_exit;
}
- session->pkeyInit_buffer_sent += rc;
+ session->pkeyInit_buffer_sent += nwritten;
if(session->pkeyInit_buffer_sent < 19) {
_libssh2_error(session, LIBSSH2_ERROR_EAGAIN,
"Need to be called again to complete this");
@@ -419,7 +422,7 @@ static LIBSSH2_PUBLICKEY *publickey_init(LIBSSH2_SESSION *session)
}
if(session->pkeyInit_state == libssh2_NB_state_sent3) {
- while(1) {
+ for(;;) {
unsigned char *s;
rc = publickey_packet_receive(session->pkeyInit_pkey,
&session->pkeyInit_data,
@@ -511,16 +514,16 @@ static LIBSSH2_PUBLICKEY *publickey_init(LIBSSH2_SESSION *session)
session->pkeyInit_pkey->version = _libssh2_ntohu32(s);
if(session->pkeyInit_pkey->version >
LIBSSH2_PUBLICKEY_VERSION) {
- _libssh2_debug(session, LIBSSH2_TRACE_PUBLICKEY,
+ _libssh2_debug((session, LIBSSH2_TRACE_PUBLICKEY,
"Truncate remote publickey version "
"from %lu",
- session->pkeyInit_pkey->version);
+ session->pkeyInit_pkey->version));
session->pkeyInit_pkey->version =
LIBSSH2_PUBLICKEY_VERSION;
}
- _libssh2_debug(session, LIBSSH2_TRACE_PUBLICKEY,
+ _libssh2_debug((session, LIBSSH2_TRACE_PUBLICKEY,
"Enabling publickey subsystem version %lu",
- session->pkeyInit_pkey->version);
+ session->pkeyInit_pkey->version));
LIBSSH2_FREE(session, session->pkeyInit_data);
session->pkeyInit_data = NULL;
session->pkeyInit_state = libssh2_NB_state_idle;
@@ -538,7 +541,7 @@ static LIBSSH2_PUBLICKEY *publickey_init(LIBSSH2_SESSION *session)
}
/* Never reached except by direct goto */
- err_exit:
+err_exit:
session->pkeyInit_state = libssh2_NB_state_sent4;
if(session->pkeyInit_channel) {
rc = _libssh2_channel_close(session->pkeyInit_channel);
@@ -607,8 +610,8 @@ libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey, const unsigned char *name,
if(pkey->add_state == libssh2_NB_state_idle) {
pkey->add_packet = NULL;
- _libssh2_debug(session, LIBSSH2_TRACE_PUBLICKEY, "Adding %s publickey",
- name);
+ _libssh2_debug((session, LIBSSH2_TRACE_PUBLICKEY,
+ "Adding %s publickey", name));
if(pkey->version == 1) {
for(i = 0; i < num_attrs; i++) {
@@ -639,25 +642,25 @@ libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey, const unsigned char *name,
}
pkey->add_s = pkey->add_packet;
- _libssh2_htonu32(pkey->add_s, packet_len - 4);
+ _libssh2_htonu32(pkey->add_s, (uint32_t)(packet_len - 4));
pkey->add_s += 4;
_libssh2_htonu32(pkey->add_s, sizeof("add") - 1);
pkey->add_s += 4;
memcpy(pkey->add_s, "add", sizeof("add") - 1);
pkey->add_s += sizeof("add") - 1;
if(pkey->version == 1) {
- _libssh2_htonu32(pkey->add_s, comment_len);
+ _libssh2_htonu32(pkey->add_s, (uint32_t)comment_len);
pkey->add_s += 4;
if(comment) {
memcpy(pkey->add_s, comment, comment_len);
pkey->add_s += comment_len;
}
- _libssh2_htonu32(pkey->add_s, name_len);
+ _libssh2_htonu32(pkey->add_s, (uint32_t)name_len);
pkey->add_s += 4;
memcpy(pkey->add_s, name, name_len);
pkey->add_s += name_len;
- _libssh2_htonu32(pkey->add_s, blob_len);
+ _libssh2_htonu32(pkey->add_s, (uint32_t)blob_len);
pkey->add_s += 4;
memcpy(pkey->add_s, blob, blob_len);
pkey->add_s += blob_len;
@@ -665,23 +668,23 @@ libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey, const unsigned char *name,
else {
/* Version == 2 */
- _libssh2_htonu32(pkey->add_s, name_len);
+ _libssh2_htonu32(pkey->add_s, (uint32_t)name_len);
pkey->add_s += 4;
memcpy(pkey->add_s, name, name_len);
pkey->add_s += name_len;
- _libssh2_htonu32(pkey->add_s, blob_len);
+ _libssh2_htonu32(pkey->add_s, (uint32_t)blob_len);
pkey->add_s += 4;
memcpy(pkey->add_s, blob, blob_len);
pkey->add_s += blob_len;
*(pkey->add_s++) = overwrite ? 0x01 : 0;
- _libssh2_htonu32(pkey->add_s, num_attrs);
+ _libssh2_htonu32(pkey->add_s, (uint32_t)num_attrs);
pkey->add_s += 4;
for(i = 0; i < num_attrs; i++) {
- _libssh2_htonu32(pkey->add_s, attrs[i].name_len);
+ _libssh2_htonu32(pkey->add_s, (uint32_t)attrs[i].name_len);
pkey->add_s += 4;
memcpy(pkey->add_s, attrs[i].name, attrs[i].name_len);
pkey->add_s += attrs[i].name_len;
- _libssh2_htonu32(pkey->add_s, attrs[i].value_len);
+ _libssh2_htonu32(pkey->add_s, (uint32_t)attrs[i].value_len);
pkey->add_s += 4;
memcpy(pkey->add_s, attrs[i].value, attrs[i].value_len);
pkey->add_s += attrs[i].value_len;
@@ -689,21 +692,22 @@ libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey, const unsigned char *name,
}
}
- _libssh2_debug(session, LIBSSH2_TRACE_PUBLICKEY,
+ _libssh2_debug((session, LIBSSH2_TRACE_PUBLICKEY,
"Sending publickey \"add\" packet: "
"type=%s blob_len=%ld num_attrs=%ld",
- name, blob_len, num_attrs);
+ name, blob_len, num_attrs));
pkey->add_state = libssh2_NB_state_created;
}
if(pkey->add_state == libssh2_NB_state_created) {
- rc = _libssh2_channel_write(channel, 0, pkey->add_packet,
- (pkey->add_s - pkey->add_packet));
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- return rc;
+ ssize_t nwritten;
+ nwritten = _libssh2_channel_write(channel, 0, pkey->add_packet,
+ (pkey->add_s - pkey->add_packet));
+ if(nwritten == LIBSSH2_ERROR_EAGAIN) {
+ return (int)nwritten;
}
- else if((pkey->add_s - pkey->add_packet) != rc) {
+ else if((pkey->add_s - pkey->add_packet) != nwritten) {
LIBSSH2_FREE(session, pkey->add_packet);
pkey->add_packet = NULL;
return _libssh2_error(session, LIBSSH2_ERROR_SOCKET_SEND,
@@ -758,36 +762,37 @@ libssh2_publickey_remove_ex(LIBSSH2_PUBLICKEY * pkey,
}
pkey->remove_s = pkey->remove_packet;
- _libssh2_htonu32(pkey->remove_s, packet_len - 4);
+ _libssh2_htonu32(pkey->remove_s, (uint32_t)(packet_len - 4));
pkey->remove_s += 4;
_libssh2_htonu32(pkey->remove_s, sizeof("remove") - 1);
pkey->remove_s += 4;
memcpy(pkey->remove_s, "remove", sizeof("remove") - 1);
pkey->remove_s += sizeof("remove") - 1;
- _libssh2_htonu32(pkey->remove_s, name_len);
+ _libssh2_htonu32(pkey->remove_s, (uint32_t)name_len);
pkey->remove_s += 4;
memcpy(pkey->remove_s, name, name_len);
pkey->remove_s += name_len;
- _libssh2_htonu32(pkey->remove_s, blob_len);
+ _libssh2_htonu32(pkey->remove_s, (uint32_t)blob_len);
pkey->remove_s += 4;
memcpy(pkey->remove_s, blob, blob_len);
pkey->remove_s += blob_len;
- _libssh2_debug(session, LIBSSH2_TRACE_PUBLICKEY,
+ _libssh2_debug((session, LIBSSH2_TRACE_PUBLICKEY,
"Sending publickey \"remove\" packet: "
"type=%s blob_len=%ld",
- name, blob_len);
+ name, blob_len));
pkey->remove_state = libssh2_NB_state_created;
}
if(pkey->remove_state == libssh2_NB_state_created) {
- rc = _libssh2_channel_write(channel, 0, pkey->remove_packet,
- (pkey->remove_s - pkey->remove_packet));
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- return rc;
+ ssize_t nwritten;
+ nwritten = _libssh2_channel_write(channel, 0, pkey->remove_packet,
+ (pkey->remove_s - pkey->remove_packet));
+ if(nwritten == LIBSSH2_ERROR_EAGAIN) {
+ return (int)nwritten;
}
- else if((pkey->remove_s - pkey->remove_packet) != rc) {
+ else if((pkey->remove_s - pkey->remove_packet) != nwritten) {
LIBSSH2_FREE(session, pkey->remove_packet);
pkey->remove_packet = NULL;
pkey->remove_state = libssh2_NB_state_idle;
@@ -835,28 +840,29 @@ libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY * pkey, unsigned long *num_keys,
pkey->listFetch_data = NULL;
pkey->listFetch_s = pkey->listFetch_buffer;
- _libssh2_htonu32(pkey->listFetch_s, buffer_len - 4);
+ _libssh2_htonu32(pkey->listFetch_s, (uint32_t)(buffer_len - 4));
pkey->listFetch_s += 4;
_libssh2_htonu32(pkey->listFetch_s, sizeof("list") - 1);
pkey->listFetch_s += 4;
memcpy(pkey->listFetch_s, "list", sizeof("list") - 1);
pkey->listFetch_s += sizeof("list") - 1;
- _libssh2_debug(session, LIBSSH2_TRACE_PUBLICKEY,
- "Sending publickey \"list\" packet");
+ _libssh2_debug((session, LIBSSH2_TRACE_PUBLICKEY,
+ "Sending publickey \"list\" packet"));
pkey->listFetch_state = libssh2_NB_state_created;
}
if(pkey->listFetch_state == libssh2_NB_state_created) {
- rc = _libssh2_channel_write(channel, 0,
- pkey->listFetch_buffer,
- (pkey->listFetch_s -
- pkey->listFetch_buffer));
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- return rc;
+ ssize_t nwritten;
+ nwritten = _libssh2_channel_write(channel, 0,
+ pkey->listFetch_buffer,
+ (pkey->listFetch_s -
+ pkey->listFetch_buffer));
+ if(nwritten == LIBSSH2_ERROR_EAGAIN) {
+ return (int)nwritten;
}
- else if((pkey->listFetch_s - pkey->listFetch_buffer) != rc) {
+ else if((pkey->listFetch_s - pkey->listFetch_buffer) != nwritten) {
pkey->listFetch_state = libssh2_NB_state_idle;
return _libssh2_error(session, LIBSSH2_ERROR_SOCKET_SEND,
"Unable to send publickey list packet");
@@ -865,7 +871,7 @@ libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY * pkey, unsigned long *num_keys,
pkey->listFetch_state = libssh2_NB_state_sent;
}
- while(1) {
+ for(;;) {
rc = publickey_packet_receive(pkey, &pkey->listFetch_data,
&pkey->listFetch_data_len);
if(rc == LIBSSH2_ERROR_EAGAIN) {
@@ -1197,7 +1203,7 @@ libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY * pkey, unsigned long *num_keys,
}
/* Only reached via explicit goto */
- err_exit:
+err_exit:
if(pkey->listFetch_data) {
LIBSSH2_FREE(session, pkey->listFetch_data);
pkey->listFetch_data = NULL;