Commit 5565f3cda864892277cc6b7d1f4967497514db65

Vicent Martí 2013-10-28T07:04:58

Merge pull request #1904 from libgit2/cmn/ssh-naming Rename the ssh credentials

diff --git a/include/git2/transport.h b/include/git2/transport.h
index b9fda80..147b3fd 100644
--- a/include/git2/transport.h
+++ b/include/git2/transport.h
@@ -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,
diff --git a/src/transports/cred.c b/src/transports/cred.c
index 79b17e8..cc7fdab 100644
--- a/src/transports/cred.c
+++ b/src/transports/cred.c
@@ -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);
diff --git a/src/transports/ssh.c b/src/transports/ssh.c
index 647211f..6ce673d 100644
--- a/src/transports/ssh.c
+++ b/src/transports/ssh.c
@@ -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;
 
diff --git a/tests-clar/online/push.c b/tests-clar/online/push.c
index d3d2374..fa210d7 100644
--- a/tests-clar/online/push.c
+++ b/tests-clar/online/push.c
@@ -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) {