Lots of SSH credential stuff can be left on Much of the SSH credential creation API can be left enabled even on platforms with no SSH support. We really just have to give an error when you attempt to open the SSH connection.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
diff --git a/src/transports/cred.c b/src/transports/cred.c
index cb909fa..6e51c2b 100644
--- a/src/transports/cred.c
+++ b/src/transports/cred.c
@@ -59,20 +59,17 @@ int git_cred_userpass_plaintext_new(
return 0;
}
-#ifdef GIT_SSH
static void ssh_keyfile_passphrase_free(struct git_cred *cred)
{
- git_cred_ssh_keyfile_passphrase *c = (git_cred_ssh_keyfile_passphrase *)cred;
- size_t pass_len = strlen(c->passphrase);
-
- if (c->publickey) {
- git__free(c->publickey);
- }
+ git_cred_ssh_keyfile_passphrase *c =
+ (git_cred_ssh_keyfile_passphrase *)cred;
+ git__free(c->publickey);
git__free(c->privatekey);
if (c->passphrase) {
/* Zero the memory which previously held the passphrase */
+ size_t pass_len = strlen(c->passphrase);
git__memzero(c->passphrase, pass_len);
git__free(c->passphrase);
}
@@ -95,7 +92,6 @@ static void ssh_publickey_free(struct git_cred *cred)
git__free(c);
}
-#endif
int git_cred_ssh_keyfile_passphrase_new(
git_cred **cred,
@@ -103,7 +99,6 @@ int git_cred_ssh_keyfile_passphrase_new(
const char *privatekey,
const char *passphrase)
{
-#ifdef GIT_SSH
git_cred_ssh_keyfile_passphrase *c;
assert(cred && privatekey);
@@ -129,17 +124,6 @@ int git_cred_ssh_keyfile_passphrase_new(
*cred = &c->parent;
return 0;
-#else
- GIT_UNUSED(publickey);
- GIT_UNUSED(privatekey);
- GIT_UNUSED(passphrase);
-
- assert(cred);
- *cred = NULL;
-
- giterr_set(GITERR_INVALID, "Cannot create SSH credential. Library was built without SSH support");
- return -1;
-#endif
}
int git_cred_ssh_publickey_new(
@@ -149,22 +133,22 @@ int git_cred_ssh_publickey_new(
git_cred_sign_callback sign_callback,
void *sign_data)
{
-#ifdef GIT_SSH
git_cred_ssh_publickey *c;
- if (!cred)
- return -1;
+ assert(cred);
- c = git__malloc(sizeof(git_cred_ssh_publickey));
+ c = git__calloc(1, sizeof(git_cred_ssh_publickey));
GITERR_CHECK_ALLOC(c);
c->parent.credtype = GIT_CREDTYPE_SSH_PUBLICKEY;
c->parent.free = ssh_publickey_free;
- c->publickey = git__malloc(publickey_len);
- GITERR_CHECK_ALLOC(c->publickey);
+ if (publickey_len > 0) {
+ c->publickey = git__malloc(publickey_len);
+ GITERR_CHECK_ALLOC(c->publickey);
- memcpy(c->publickey, publickey, publickey_len);
+ memcpy(c->publickey, publickey, publickey_len);
+ }
c->publickey_len = publickey_len;
c->sign_callback = sign_callback;
@@ -172,16 +156,4 @@ int git_cred_ssh_publickey_new(
*cred = &c->parent;
return 0;
-#else
- GIT_UNUSED(publickey);
- GIT_UNUSED(publickey_len);
- GIT_UNUSED(sign_callback);
- GIT_UNUSED(sign_data);
-
- assert(cred);
- *cred = NULL;
-
- giterr_set(GITERR_INVALID, "Cannot create SSH credential. Library was built without SSH support");
- return -1;
-#endif
}