Commit 54da6958 by Carlos Martín Nieto

cred: introduce username-only cred

This exists as ssh needs to know about the username to use before it can
query for the supported authentication methods.
parent d7f962f4
......@@ -44,6 +44,14 @@ typedef enum {
/* git_cred_ssh_interactive */
GIT_CREDTYPE_SSH_INTERACTIVE = (1u << 4),
/**
* Username-only information
*
* If the SSH transport does not know which username to use,
* it will ask via this credential type.
*/
GIT_CREDTYPE_USERNAME = (1u << 5),
} git_credtype_t;
/* The base structure for all credential types */
......@@ -105,6 +113,12 @@ typedef struct git_cred_ssh_custom {
/** A key for NTLM/Kerberos "default" credentials */
typedef struct git_cred git_cred_default;
/** Username-only credential information */
typedef struct git_cred_username {
git_cred parent;
char username[1];
} git_cred_username;
/**
* Check whether a credential object contains username information.
*
......
......@@ -129,6 +129,11 @@ static void default_free(struct git_cred *cred)
git__free(c);
}
static void username_free(struct git_cred *cred)
{
git__free(cred);
}
int git_cred_ssh_key_new(
git_cred **cred,
const char *username,
......@@ -263,3 +268,21 @@ int git_cred_default_new(git_cred **cred)
*cred = c;
return 0;
}
int git_cred_username_new(git_cred **cred, const char *username)
{
git_cred_username *c;
size_t len;
assert(cred);
len = strlen(username);
c = git__malloc(sizeof(git_cred_username) + len + 1);
GITERR_CHECK_ALLOC(c);
c->parent.credtype = GIT_CREDTYPE_USERNAME;
c->parent.free = username_free;
memcpy(c->username, username, len + 1);
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment