mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-19 14:16:15 +00:00
Rename the ssh credentials
The names from libssh2 are somewhat obtuse for us. We can simplify the usual key/passphrase credential's name, as well as make clearer what the custom signature function is.
This commit is contained in:
parent
1c74686e05
commit
70a8c78f36
@ -33,11 +33,11 @@ typedef enum {
|
||||
/* git_cred_userpass_plaintext */
|
||||
GIT_CREDTYPE_USERPASS_PLAINTEXT = (1u << 0),
|
||||
|
||||
/* git_cred_ssh_keyfile_passphrase */
|
||||
GIT_CREDTYPE_SSH_KEYFILE_PASSPHRASE = (1u << 1),
|
||||
/* git_cred_ssh_key */
|
||||
GIT_CREDTYPE_SSH_KEY = (1u << 1),
|
||||
|
||||
/* git_cred_ssh_publickey */
|
||||
GIT_CREDTYPE_SSH_PUBLICKEY = (1u << 2),
|
||||
/* git_cred_ssh_custom */
|
||||
GIT_CREDTYPE_SSH_CUSTOM = (1u << 2),
|
||||
} git_credtype_t;
|
||||
|
||||
/* The base structure for all credential types */
|
||||
@ -61,24 +61,28 @@ typedef LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC((*git_cred_sign_callback));
|
||||
typedef int (*git_cred_sign_callback)(void *, ...);
|
||||
#endif
|
||||
|
||||
/* An ssh key file and passphrase */
|
||||
typedef struct git_cred_ssh_keyfile_passphrase {
|
||||
/**
|
||||
* A ssh key from disk
|
||||
*/
|
||||
typedef struct git_cred_ssh_key {
|
||||
git_cred parent;
|
||||
char *username;
|
||||
char *publickey;
|
||||
char *privatekey;
|
||||
char *passphrase;
|
||||
} git_cred_ssh_keyfile_passphrase;
|
||||
} git_cred_ssh_key;
|
||||
|
||||
/* An ssh public key and authentication callback */
|
||||
typedef struct git_cred_ssh_publickey {
|
||||
/**
|
||||
* A key with a custom signature function
|
||||
*/
|
||||
typedef struct git_cred_ssh_custom {
|
||||
git_cred parent;
|
||||
char *username;
|
||||
char *publickey;
|
||||
size_t publickey_len;
|
||||
void *sign_callback;
|
||||
void *sign_data;
|
||||
} git_cred_ssh_publickey;
|
||||
} git_cred_ssh_custom;
|
||||
|
||||
/**
|
||||
* Check whether a credential object contains username information.
|
||||
@ -89,7 +93,7 @@ typedef struct git_cred_ssh_publickey {
|
||||
GIT_EXTERN(int) git_cred_has_username(git_cred *cred);
|
||||
|
||||
/**
|
||||
* Creates a new plain-text username and password credential object.
|
||||
* Create a new plain-text username and password credential object.
|
||||
* The supplied credential parameter will be internally duplicated.
|
||||
*
|
||||
* @param out The newly created credential object.
|
||||
@ -103,7 +107,7 @@ GIT_EXTERN(int) git_cred_userpass_plaintext_new(
|
||||
const char *password);
|
||||
|
||||
/**
|
||||
* Creates a new ssh key file and passphrase credential object.
|
||||
* Create a new passphrase-protected ssh key credential object.
|
||||
* The supplied credential parameter will be internally duplicated.
|
||||
*
|
||||
* @param out The newly created credential object.
|
||||
@ -113,15 +117,21 @@ GIT_EXTERN(int) git_cred_userpass_plaintext_new(
|
||||
* @param passphrase The passphrase of the credential.
|
||||
* @return 0 for success or an error code for failure
|
||||
*/
|
||||
GIT_EXTERN(int) git_cred_ssh_keyfile_passphrase_new(
|
||||
GIT_EXTERN(int) git_cred_ssh_key_new(
|
||||
git_cred **out,
|
||||
const char *username,
|
||||
const char *publickey,
|
||||
const char *privatekey,
|
||||
const char *passphrase);
|
||||
const char *passphrase);
|
||||
|
||||
/**
|
||||
* Creates a new ssh public key credential object.
|
||||
* Create an ssh key credential with a custom signing function.
|
||||
*
|
||||
* This lets you use your own function to sign the challenge.
|
||||
*
|
||||
* This function and its credential type is provided for completeness
|
||||
* and wraps `libssh2_userauth_publickey()`, which is undocumented.
|
||||
*
|
||||
* The supplied credential parameter will be internally duplicated.
|
||||
*
|
||||
* @param out The newly created credential object.
|
||||
@ -132,7 +142,7 @@ GIT_EXTERN(int) git_cred_ssh_keyfile_passphrase_new(
|
||||
* @param sign_data The data to pass to the sign function.
|
||||
* @return 0 for success or an error code for failure
|
||||
*/
|
||||
GIT_EXTERN(int) git_cred_ssh_publickey_new(
|
||||
GIT_EXTERN(int) git_cred_ssh_custom_new(
|
||||
git_cred **out,
|
||||
const char *username,
|
||||
const char *publickey,
|
||||
|
@ -19,13 +19,13 @@ int git_cred_has_username(git_cred *cred)
|
||||
ret = !!c->username;
|
||||
break;
|
||||
}
|
||||
case GIT_CREDTYPE_SSH_KEYFILE_PASSPHRASE: {
|
||||
git_cred_ssh_keyfile_passphrase *c = (git_cred_ssh_keyfile_passphrase *)cred;
|
||||
case GIT_CREDTYPE_SSH_KEY: {
|
||||
git_cred_ssh_key *c = (git_cred_ssh_key *)cred;
|
||||
ret = !!c->username;
|
||||
break;
|
||||
}
|
||||
case GIT_CREDTYPE_SSH_PUBLICKEY: {
|
||||
git_cred_ssh_publickey *c = (git_cred_ssh_publickey *)cred;
|
||||
case GIT_CREDTYPE_SSH_CUSTOM: {
|
||||
git_cred_ssh_custom *c = (git_cred_ssh_custom *)cred;
|
||||
ret = !!c->username;
|
||||
break;
|
||||
}
|
||||
@ -84,10 +84,10 @@ int git_cred_userpass_plaintext_new(
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ssh_keyfile_passphrase_free(struct git_cred *cred)
|
||||
static void ssh_key_free(struct git_cred *cred)
|
||||
{
|
||||
git_cred_ssh_keyfile_passphrase *c =
|
||||
(git_cred_ssh_keyfile_passphrase *)cred;
|
||||
git_cred_ssh_key *c =
|
||||
(git_cred_ssh_key *)cred;
|
||||
|
||||
git__free(c->username);
|
||||
git__free(c->publickey);
|
||||
@ -104,9 +104,9 @@ static void ssh_keyfile_passphrase_free(struct git_cred *cred)
|
||||
git__free(c);
|
||||
}
|
||||
|
||||
static void ssh_publickey_free(struct git_cred *cred)
|
||||
static void ssh_custom_free(struct git_cred *cred)
|
||||
{
|
||||
git_cred_ssh_publickey *c = (git_cred_ssh_publickey *)cred;
|
||||
git_cred_ssh_custom *c = (git_cred_ssh_custom *)cred;
|
||||
|
||||
git__free(c->username);
|
||||
git__free(c->publickey);
|
||||
@ -115,22 +115,22 @@ static void ssh_publickey_free(struct git_cred *cred)
|
||||
git__free(c);
|
||||
}
|
||||
|
||||
int git_cred_ssh_keyfile_passphrase_new(
|
||||
int git_cred_ssh_key_new(
|
||||
git_cred **cred,
|
||||
const char *username,
|
||||
const char *publickey,
|
||||
const char *privatekey,
|
||||
const char *passphrase)
|
||||
{
|
||||
git_cred_ssh_keyfile_passphrase *c;
|
||||
git_cred_ssh_key *c;
|
||||
|
||||
assert(cred && privatekey);
|
||||
|
||||
c = git__calloc(1, sizeof(git_cred_ssh_keyfile_passphrase));
|
||||
c = git__calloc(1, sizeof(git_cred_ssh_key));
|
||||
GITERR_CHECK_ALLOC(c);
|
||||
|
||||
c->parent.credtype = GIT_CREDTYPE_SSH_KEYFILE_PASSPHRASE;
|
||||
c->parent.free = ssh_keyfile_passphrase_free;
|
||||
c->parent.credtype = GIT_CREDTYPE_SSH_KEY;
|
||||
c->parent.free = ssh_key_free;
|
||||
|
||||
if (username) {
|
||||
c->username = git__strdup(username);
|
||||
@ -154,7 +154,7 @@ int git_cred_ssh_keyfile_passphrase_new(
|
||||
return 0;
|
||||
}
|
||||
|
||||
int git_cred_ssh_publickey_new(
|
||||
int git_cred_ssh_custom_new(
|
||||
git_cred **cred,
|
||||
const char *username,
|
||||
const char *publickey,
|
||||
@ -162,15 +162,15 @@ int git_cred_ssh_publickey_new(
|
||||
git_cred_sign_callback sign_callback,
|
||||
void *sign_data)
|
||||
{
|
||||
git_cred_ssh_publickey *c;
|
||||
git_cred_ssh_custom *c;
|
||||
|
||||
assert(cred);
|
||||
|
||||
c = git__calloc(1, sizeof(git_cred_ssh_publickey));
|
||||
c = git__calloc(1, sizeof(git_cred_ssh_custom));
|
||||
GITERR_CHECK_ALLOC(c);
|
||||
|
||||
c->parent.credtype = GIT_CREDTYPE_SSH_PUBLICKEY;
|
||||
c->parent.free = ssh_publickey_free;
|
||||
c->parent.credtype = GIT_CREDTYPE_SSH_CUSTOM;
|
||||
c->parent.free = ssh_custom_free;
|
||||
|
||||
if (username) {
|
||||
c->username = git__strdup(username);
|
||||
|
@ -249,15 +249,15 @@ static int _git_ssh_authenticate_session(
|
||||
rc = libssh2_userauth_password(session, user, c->password);
|
||||
break;
|
||||
}
|
||||
case GIT_CREDTYPE_SSH_KEYFILE_PASSPHRASE: {
|
||||
git_cred_ssh_keyfile_passphrase *c = (git_cred_ssh_keyfile_passphrase *)cred;
|
||||
case GIT_CREDTYPE_SSH_KEY: {
|
||||
git_cred_ssh_key *c = (git_cred_ssh_key *)cred;
|
||||
user = c->username ? c->username : user;
|
||||
rc = libssh2_userauth_publickey_fromfile(
|
||||
session, c->username, c->publickey, c->privatekey, c->passphrase);
|
||||
break;
|
||||
}
|
||||
case GIT_CREDTYPE_SSH_PUBLICKEY: {
|
||||
git_cred_ssh_publickey *c = (git_cred_ssh_publickey *)cred;
|
||||
case GIT_CREDTYPE_SSH_CUSTOM: {
|
||||
git_cred_ssh_custom *c = (git_cred_ssh_custom *)cred;
|
||||
|
||||
user = c->username ? c->username : user;
|
||||
rc = libssh2_userauth_publickey(
|
||||
@ -349,8 +349,8 @@ static int _git_ssh_setup_conn(
|
||||
if (t->owner->cred_acquire_cb(
|
||||
&t->cred, t->owner->url, user,
|
||||
GIT_CREDTYPE_USERPASS_PLAINTEXT |
|
||||
GIT_CREDTYPE_SSH_KEYFILE_PASSPHRASE |
|
||||
GIT_CREDTYPE_SSH_PUBLICKEY,
|
||||
GIT_CREDTYPE_SSH_KEY |
|
||||
GIT_CREDTYPE_SSH_CUSTOM,
|
||||
t->owner->cred_acquire_payload) < 0)
|
||||
goto on_error;
|
||||
|
||||
|
@ -47,12 +47,12 @@ static int cred_acquire_cb(
|
||||
GIT_UNUSED(user_from_url);
|
||||
GIT_UNUSED(payload);
|
||||
|
||||
if (GIT_CREDTYPE_SSH_KEYFILE_PASSPHRASE & allowed_types) {
|
||||
if (GIT_CREDTYPE_SSH_KEY & allowed_types) {
|
||||
if (!_remote_user || !_remote_ssh_pubkey || !_remote_ssh_key || !_remote_ssh_passphrase) {
|
||||
printf("GITTEST_REMOTE_USER, GITTEST_REMOTE_SSH_PUBKEY, GITTEST_REMOTE_SSH_KEY and GITTEST_REMOTE_SSH_PASSPHRASE must be set\n");
|
||||
return -1;
|
||||
}
|
||||
return git_cred_ssh_keyfile_passphrase_new(cred, _remote_user, _remote_ssh_pubkey, _remote_ssh_key, _remote_ssh_passphrase);
|
||||
return git_cred_ssh_key_new(cred, _remote_user, _remote_ssh_pubkey, _remote_ssh_key, _remote_ssh_passphrase);
|
||||
}
|
||||
|
||||
if (GIT_CREDTYPE_USERPASS_PLAINTEXT & allowed_types) {
|
||||
|
Loading…
Reference in New Issue
Block a user