"struct libssh2_knownhost" is now part of the internal struct for each known
host so we now only return pointers to structs instead of having the app allocate a full struct I moved the private struct definition into knownhosts.c instead of exposing it wider in libssh2_priv.h I thus modified the proto for two functions that previously used 'struct libssh2_knownhost *' to receive data.
This commit is contained in:
parent
1d31dadc1e
commit
8cd76af353
@ -10,7 +10,7 @@ libssh2_knownhost_check - check a host+key against the list of known hosts
|
||||
int libssh2_knownhost_check(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
char *host, char *key, size_t keylen,
|
||||
int typemask,
|
||||
struct libssh2_knownhost *knownhost);
|
||||
struct libssh2_knownhost **knownhost);
|
||||
.SH DESCRIPTION
|
||||
Checks a host and its associated key against the collection of known hosts,
|
||||
and returns info back about the (partially) matched entry.
|
||||
@ -34,8 +34,8 @@ The key is encoded using one of the following encodings:
|
||||
LIBSSH2_KNOWNHOST_KEYENC_RAW or LIBSSH2_KNOWNHOST_KEYENC_BASE64.
|
||||
|
||||
\fIknownhost\fP if set to non-NULL, it must be a pointer to a 'struct
|
||||
libssh2_knownhost' which gets filled in with info about a match or a partial
|
||||
match.
|
||||
libssh2_knownhost' pointer that gets filled in to point to info about a known
|
||||
host that matches or partially matches.
|
||||
.SH RETURN VALUE
|
||||
\fIlibssh2_knownhost_check(3)\fP returns info about how well the provided
|
||||
host + key pair matched one of the entries in the list of known hosts.
|
||||
|
@ -8,14 +8,14 @@ libssh2_knownhost_get - get a known host off the collection of known hosts
|
||||
#include <libssh2.h>
|
||||
|
||||
int libssh2_knownhost_get(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
struct libssh2_knownhost *store,
|
||||
struct libssh2_knownhost **store,
|
||||
struct libssh2_knownhost *prev):
|
||||
.SH DESCRIPTION
|
||||
\fIlibssh2_knownhost_get(3)\fP allows an application to iterate over all known
|
||||
hosts in the collection.
|
||||
|
||||
\fIstore\fP should point to a memory area allocated to fit a struct stored by
|
||||
this function.
|
||||
\fIstore\fP should point to a pointer that gets filled in to point to the
|
||||
known host data.
|
||||
|
||||
\fIprev\fP is a pointer to a previous 'struct libssh2_knownhost' as returned
|
||||
by a previous invoke of this function, or NULL to get the first entry in the
|
||||
|
@ -758,7 +758,7 @@ LIBSSH2_API int
|
||||
libssh2_knownhost_check(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
char *host, char *key, size_t keylen,
|
||||
int typemask,
|
||||
struct libssh2_knownhost *knownhost);
|
||||
struct libssh2_knownhost **knownhost);
|
||||
|
||||
/*
|
||||
* libssh2_knownhost_del
|
||||
@ -855,7 +855,7 @@ libssh2_knownhost_writefile(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
*/
|
||||
LIBSSH2_API int
|
||||
libssh2_knownhost_get(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
struct libssh2_knownhost *store,
|
||||
struct libssh2_knownhost **store,
|
||||
struct libssh2_knownhost *prev);
|
||||
|
||||
/* NOTE NOTE NOTE
|
||||
|
@ -40,6 +40,26 @@
|
||||
#include "libssh2_priv.h"
|
||||
#include "misc.h"
|
||||
|
||||
struct known_host {
|
||||
struct list_node node;
|
||||
char *name; /* points to the name or the hash (allocated) */
|
||||
size_t name_len; /* needed for hashed data */
|
||||
int typemask; /* plain, sha1, custom, ... */
|
||||
char *salt; /* points to binary salt (allocated) */
|
||||
size_t salt_len; /* size of salt */
|
||||
char *key; /* the (allocated) associated key. This is kept base64
|
||||
encoded in memory. */
|
||||
|
||||
/* this is the struct we expose externally */
|
||||
struct libssh2_knownhost external;
|
||||
};
|
||||
|
||||
struct _LIBSSH2_KNOWNHOSTS
|
||||
{
|
||||
LIBSSH2_SESSION *session; /* the session this "belongs to" */
|
||||
struct list_head head;
|
||||
};
|
||||
|
||||
static void free_host(LIBSSH2_SESSION *session, struct known_host *entry)
|
||||
{
|
||||
if(entry) {
|
||||
@ -183,17 +203,18 @@ libssh2_knownhost_add(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
* Copies data from the internal to the external representation struct.
|
||||
*
|
||||
*/
|
||||
static void knownhost_to_external(struct known_host *node,
|
||||
struct libssh2_knownhost *ext)
|
||||
static struct libssh2_knownhost *knownhost_to_external(struct known_host *node)
|
||||
{
|
||||
if(ext) {
|
||||
ext->magic = KNOWNHOST_MAGIC;
|
||||
ext->node = node;
|
||||
ext->name = ((node->typemask & LIBSSH2_KNOWNHOST_TYPE_MASK) ==
|
||||
LIBSSH2_KNOWNHOST_TYPE_PLAIN)? node->name:NULL;
|
||||
ext->key = node->key;
|
||||
ext->typemask = node->typemask;
|
||||
}
|
||||
struct libssh2_knownhost *ext = &node->external;
|
||||
|
||||
ext->magic = KNOWNHOST_MAGIC;
|
||||
ext->node = node;
|
||||
ext->name = ((node->typemask & LIBSSH2_KNOWNHOST_TYPE_MASK) ==
|
||||
LIBSSH2_KNOWNHOST_TYPE_PLAIN)? node->name:NULL;
|
||||
ext->key = node->key;
|
||||
ext->typemask = node->typemask;
|
||||
|
||||
return ext;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -218,7 +239,7 @@ LIBSSH2_API int
|
||||
libssh2_knownhost_check(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
char *host, char *key, size_t keylen,
|
||||
int typemask,
|
||||
struct libssh2_knownhost *knownhost)
|
||||
struct libssh2_knownhost **ext)
|
||||
{
|
||||
struct known_host *node = _libssh2_list_first(&hosts->head);
|
||||
struct known_host *badkey = NULL;
|
||||
@ -283,7 +304,7 @@ libssh2_knownhost_check(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
/* host name match, now compare the keys */
|
||||
if(!strcmp(key, node->key)) {
|
||||
/* they match! */
|
||||
knownhost_to_external(node, knownhost);
|
||||
*ext = knownhost_to_external(node);
|
||||
badkey = NULL;
|
||||
rc = LIBSSH2_KNOWNHOST_CHECK_MATCH;
|
||||
break;
|
||||
@ -300,7 +321,7 @@ libssh2_knownhost_check(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
|
||||
if(badkey) {
|
||||
/* key mismatch */
|
||||
knownhost_to_external(badkey, knownhost);
|
||||
*ext = knownhost_to_external(badkey);
|
||||
rc = LIBSSH2_KNOWNHOST_CHECK_MISMATCH;
|
||||
}
|
||||
|
||||
@ -787,7 +808,7 @@ libssh2_knownhost_writefile(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
*/
|
||||
LIBSSH2_API int
|
||||
libssh2_knownhost_get(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
struct libssh2_knownhost *store,
|
||||
struct libssh2_knownhost **ext,
|
||||
struct libssh2_knownhost *oprev)
|
||||
{
|
||||
struct known_host *node;
|
||||
@ -806,7 +827,7 @@ libssh2_knownhost_get(LIBSSH2_KNOWNHOSTS *hosts,
|
||||
/* no (more) node */
|
||||
return 1;
|
||||
|
||||
knownhost_to_external(node, store);
|
||||
*ext = knownhost_to_external(node);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -940,24 +940,6 @@ struct list_node {
|
||||
|
||||
/* --------- */
|
||||
|
||||
struct known_host {
|
||||
struct list_node node;
|
||||
char *name; /* points to the name or the hash (allocated) */
|
||||
size_t name_len; /* needed for hashed data */
|
||||
int typemask; /* plain, sha1, custom, ... */
|
||||
char *salt; /* points to binary salt (allocated) */
|
||||
size_t salt_len; /* size of salt */
|
||||
char *key; /* the (allocated) associated key. This is kept base64
|
||||
encoded in memory. */
|
||||
};
|
||||
|
||||
struct _LIBSSH2_KNOWNHOSTS
|
||||
{
|
||||
LIBSSH2_SESSION *session; /* the session this "belongs to" */
|
||||
struct list_head head;
|
||||
};
|
||||
|
||||
|
||||
/* libssh2 extensible ssh api, ultimately I'd like to allow loading additional
|
||||
methods via .so/.dll */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user