static int ssh_memory_cred_cb(git_cred **cred, const char *url, const char *user_from_url, unsigned int allowed_types, void *payload) { GIT_UNUSED(url); GIT_UNUSED(user_from_url); GIT_UNUSED(payload); if (allowed_types & GIT_CREDTYPE_USERNAME) return git_cred_username_new(cred, _remote_user); if (allowed_types & GIT_CREDTYPE_SSH_KEY) { char *pubkey = read_key_file(_remote_ssh_pubkey); char *privkey = read_key_file(_remote_ssh_privkey); int ret = git_cred_ssh_key_memory_new(cred, _remote_user, pubkey, privkey, _remote_ssh_passphrase); if (privkey) free(privkey); if (pubkey) free(pubkey); return ret; } giterr_set(GITERR_NET, "unexpected cred type"); return -1; }
GitCredentialResponse GitCredentialResponse::createForUsername(const QString &username) { git_cred *cred; if (git_cred_username_new(&cred, username.toLocal8Bit().constData()) < 0) { return createError(); } else { return GitCredentialResponse(cred); } }
static int cred_acquire_cb( git_cred **cred, const char *url, const char *user_from_url, unsigned int allowed_types, void *payload) { GIT_UNUSED(url); GIT_UNUSED(user_from_url); GIT_UNUSED(payload); if (GIT_CREDTYPE_USERNAME & allowed_types) { if (!_remote_user) { printf("GITTEST_REMOTE_USER must be set\n"); return -1; } return git_cred_username_new(cred, _remote_user); } if (GIT_CREDTYPE_DEFAULT & allowed_types) { if (!_remote_default) { printf("GITTEST_REMOTE_DEFAULT must be set to use NTLM/Negotiate credentials\n"); return -1; } return git_cred_default_new(cred); } 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_key_new(cred, _remote_user, _remote_ssh_pubkey, _remote_ssh_key, _remote_ssh_passphrase); } if (GIT_CREDTYPE_USERPASS_PLAINTEXT & allowed_types) { if (!_remote_user || !_remote_pass) { printf("GITTEST_REMOTE_USER and GITTEST_REMOTE_PASS must be set\n"); return -1; } return git_cred_userpass_plaintext_new(cred, _remote_user, _remote_pass); } return -1; }
static int cred_cb(git_cred **cred, const char *url, const char *user_from_url, unsigned int allowed_types, void *payload) { GIT_UNUSED(url); GIT_UNUSED(user_from_url); GIT_UNUSED(payload); if (allowed_types & GIT_CREDTYPE_USERNAME) return git_cred_username_new(cred, _remote_user); if (allowed_types & GIT_CREDTYPE_SSH_KEY) return git_cred_ssh_key_new(cred, _remote_user, _remote_ssh_pubkey, _remote_ssh_privkey, _remote_ssh_passphrase); giterr_set(GITERR_NET, "unexpected cred type"); return -1; }
static int cred_count_calls_cb(git_cred **cred, const char *url, const char *user, unsigned int allowed_types, void *data) { size_t *counter = (size_t *) data; GIT_UNUSED(url); GIT_UNUSED(user); GIT_UNUSED(allowed_types); if (allowed_types == GIT_CREDTYPE_USERNAME) return git_cred_username_new(cred, "foo"); (*counter)++; if (*counter == 3) return GIT_EUSER; return git_cred_userpass_plaintext_new(cred, "foo", "bar"); }
static int cred_cb(git_cred **cred, const char *url, const char *user_from_url, unsigned int allowed_types, void *payload) { const char *remote_user = cl_getenv("GITTEST_REMOTE_USER"); const char *pubkey = cl_getenv("GITTEST_REMOTE_SSH_PUBKEY"); const char *privkey = cl_getenv("GITTEST_REMOTE_SSH_KEY"); const char *passphrase = cl_getenv("GITTEST_REMOTE_SSH_PASSPHRASE"); GIT_UNUSED(url); GIT_UNUSED(user_from_url); GIT_UNUSED(payload); if (allowed_types & GIT_CREDTYPE_USERNAME) return git_cred_username_new(cred, remote_user); if (allowed_types & GIT_CREDTYPE_SSH_KEY) return git_cred_ssh_key_new(cred, remote_user, pubkey, privkey, passphrase); giterr_set(GITERR_NET, "unexpected cred type"); return -1; }
int credential_ssh_cb(git_cred **out, const char *url, const char *username_from_url, unsigned int allowed_types, void *payload) { UNUSED(url); UNUSED(payload); UNUSED(username_from_url); const char *username = prefs.cloud_storage_email_encoded; const char *passphrase = prefs.cloud_storage_password ? prefs.cloud_storage_password : ""; // TODO: We need a way to differentiate between password and private key authentication if (allowed_types & GIT_CREDTYPE_SSH_KEY) { char *priv_key = format_string("%s/%s", system_default_directory(), "ssrf_remote.key"); if (!access(priv_key, F_OK)) { if (exceeded_auth_attempts()) return GIT_EUSER; int ret = git_cred_ssh_key_new(out, username, NULL, priv_key, passphrase); free(priv_key); return ret; } free(priv_key); } if (allowed_types & GIT_CREDTYPE_USERPASS_PLAINTEXT) { if (exceeded_auth_attempts()) return GIT_EUSER; return git_cred_userpass_plaintext_new(out, username, passphrase); } if (allowed_types & GIT_CREDTYPE_USERNAME) return git_cred_username_new(out, username); report_error("No supported ssh authentication."); return GIT_EUSER; }