Unverified Commit 55975171 by Edward Thomson Committed by GitHub

Merge pull request #5373 from pks-t/pks/fetchhead-strip-creds

fetchhead: strip credentials from remote URL
parents a1bff63b 93a9044f
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "futils.h" #include "futils.h"
#include "filebuf.h" #include "filebuf.h"
#include "refs.h" #include "refs.h"
#include "net.h"
#include "repository.h" #include "repository.h"
int git_fetchhead_ref_cmp(const void *a, const void *b) int git_fetchhead_ref_cmp(const void *a, const void *b)
...@@ -36,6 +37,33 @@ int git_fetchhead_ref_cmp(const void *a, const void *b) ...@@ -36,6 +37,33 @@ int git_fetchhead_ref_cmp(const void *a, const void *b)
return 0; return 0;
} }
static char *sanitized_remote_url(const char *remote_url)
{
git_net_url url = GIT_NET_URL_INIT;
char *sanitized = NULL;
int error;
if (git_net_url_parse(&url, remote_url) == 0) {
git_buf buf = GIT_BUF_INIT;
git__free(url.username);
git__free(url.password);
url.username = url.password = NULL;
if ((error = git_net_url_fmt(&buf, &url)) < 0)
goto fallback;
sanitized = git_buf_detach(&buf);
}
fallback:
if (!sanitized)
sanitized = git__strdup(remote_url);
git_net_url_dispose(&url);
return sanitized;
}
int git_fetchhead_ref_create( int git_fetchhead_ref_create(
git_fetchhead_ref **out, git_fetchhead_ref **out,
git_oid *oid, git_oid *oid,
...@@ -57,11 +85,15 @@ int git_fetchhead_ref_create( ...@@ -57,11 +85,15 @@ int git_fetchhead_ref_create(
git_oid_cpy(&fetchhead_ref->oid, oid); git_oid_cpy(&fetchhead_ref->oid, oid);
fetchhead_ref->is_merge = is_merge; fetchhead_ref->is_merge = is_merge;
if (ref_name) if (ref_name) {
fetchhead_ref->ref_name = git__strdup(ref_name); fetchhead_ref->ref_name = git__strdup(ref_name);
GIT_ERROR_CHECK_ALLOC(fetchhead_ref->ref_name);
}
if (remote_url) if (remote_url) {
fetchhead_ref->remote_url = git__strdup(remote_url); fetchhead_ref->remote_url = sanitized_remote_url(remote_url);
GIT_ERROR_CHECK_ALLOC(fetchhead_ref->remote_url);
}
*out = fetchhead_ref; *out = fetchhead_ref;
......
...@@ -493,3 +493,21 @@ void test_fetchhead_nonetwork__create_with_multiple_refspecs(void) ...@@ -493,3 +493,21 @@ void test_fetchhead_nonetwork__create_with_multiple_refspecs(void)
git_remote_free(remote); git_remote_free(remote);
git_buf_dispose(&path); git_buf_dispose(&path);
} }
void test_fetchhead_nonetwork__credentials_are_stripped(void)
{
git_fetchhead_ref *ref;
git_oid oid;
cl_git_pass(git_oid_fromstr(&oid, "49322bb17d3acc9146f98c97d078513228bbf3c0"));
cl_git_pass(git_fetchhead_ref_create(&ref, &oid, 0,
"refs/tags/commit_tree", "http://foo:bar@github.com/libgit2/TestGitRepository"));
cl_assert_equal_s(ref->remote_url, "http://github.com/libgit2/TestGitRepository");
git_fetchhead_ref_free(ref);
cl_git_pass(git_oid_fromstr(&oid, "49322bb17d3acc9146f98c97d078513228bbf3c0"));
cl_git_pass(git_fetchhead_ref_create(&ref, &oid, 0,
"refs/tags/commit_tree", "https://foo:bar@github.com/libgit2/TestGitRepository"));
cl_assert_equal_s(ref->remote_url, "https://github.com/libgit2/TestGitRepository");
git_fetchhead_ref_free(ref);
}
...@@ -154,3 +154,20 @@ void test_online_fetchhead__colon_only_dst_refspec_creates_no_branch(void) ...@@ -154,3 +154,20 @@ void test_online_fetchhead__colon_only_dst_refspec_creates_no_branch(void)
cl_assert_equal_i(refs, count_references()); cl_assert_equal_i(refs, count_references());
} }
void test_online_fetchhead__creds_get_stripped(void)
{
git_buf buf = GIT_BUF_INIT;
git_remote *remote;
cl_git_pass(git_repository_init(&g_repo, "./foo", 0));
cl_git_pass(git_remote_create_anonymous(&remote, g_repo, "https://foo:bar@github.com/libgit2/TestGitRepository"));
cl_git_pass(git_remote_fetch(remote, NULL, NULL, NULL));
cl_git_pass(git_futils_readbuffer(&buf, "./foo/.git/FETCH_HEAD"));
cl_assert_equal_s(buf.ptr,
"49322bb17d3acc9146f98c97d078513228bbf3c0\t\thttps://github.com/libgit2/TestGitRepository\n");
git_remote_free(remote);
git_buf_dispose(&buf);
}
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