summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <carlosmn@github.com>2016-03-03 20:11:18 +0100
committerCarlos Martín Nieto <carlosmn@github.com>2016-03-03 20:11:18 +0100
commit66a530eb4e4cb7a1ce7a1b8b83fea00659eeea5e (patch)
treef4aa513ac45ecb115dfe09aa3724222f359669d2
parent778fb695ed2a2a0162d83b3fc76bb36fbe2e1799 (diff)
parentba9bb664f3ed3f230c474ddd8937bd072cc9947f (diff)
downloadlibgit2-66a530eb4e4cb7a1ce7a1b8b83fea00659eeea5e.tar.gz
Merge pull request #3648 from libgit2/cmn/auth-retry
test: make sure we retry the auth callback on all platforms
-rw-r--r--CMakeLists.txt4
-rw-r--r--appveyor.yml6
-rwxr-xr-xscript/cibuild.sh6
-rw-r--r--src/transports/winhttp.c5
4 files changed, 17 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 931b06459..f4e56e6cf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -682,6 +682,10 @@ IF (BUILD_CLAR)
ELSE ()
ADD_TEST(libgit2_clar libgit2_clar -v)
ENDIF ()
+
+ # Add a test target which runs the cred callback tests, to be
+ # called after setting the url and user
+ ADD_TEST(libgit2_clar-cred_callback libgit2_clar -v -sonline::clone::cred_callback)
ENDIF ()
IF (TAGS)
diff --git a/appveyor.yml b/appveyor.yml
index 166fa56b1..3ed3c49a1 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -36,4 +36,8 @@ build_script:
- cmd: |
if "%GENERATOR%"=="MSYS Makefiles" (C:\MinGW\msys\1.0\bin\sh --login /c/projects/libgit2/script/appveyor-mingw.sh)
test_script:
-- ps: ctest -V .
+- ps: |
+ ctest -V -R libgit2_clar
+ $env:GITTEST_REMOTE_URL="https://github.com/libgit2/non-existent"
+ $env:GITTEST_REMOTE_USER="libgit2test"
+ ctest -V -R libgit2_clar-cred_callback
diff --git a/script/cibuild.sh b/script/cibuild.sh
index de5df9ea8..00cde0ada 100755
--- a/script/cibuild.sh
+++ b/script/cibuild.sh
@@ -25,7 +25,7 @@ git daemon --listen=localhost --export-all --enable=receive-pack --base-path="$H
export GITTEST_REMOTE_URL="git://localhost/test.git"
# Run the test suite
-ctest -V . || exit $?
+ctest -V -R libgit2_clar || exit $?
# Now that we've tested the raw git protocol, let's set up ssh to we
# can do the push tests over it
@@ -56,3 +56,7 @@ if [ -e ./libgit2_clar ]; then
./libgit2_clar -sonline::clone::cred_callback || exit $?
fi
fi
+
+export GITTEST_REMOTE_URL="https://github.com/libgit2/non-existent"
+export GITTEST_REMOTE_USER="libgit2test"
+ctest -V -R libgit2_clar-cred_callback
diff --git a/src/transports/winhttp.c b/src/transports/winhttp.c
index ded041686..32b838084 100644
--- a/src/transports/winhttp.c
+++ b/src/transports/winhttp.c
@@ -926,10 +926,11 @@ replay:
if (parse_unauthorized_response(s->request, &allowed_types, &t->auth_mechanism) < 0)
return -1;
- if (allowed_types &&
- (!t->cred || 0 == (t->cred->credtype & allowed_types))) {
+ if (allowed_types) {
int cred_error = 1;
+ git_cred_free(t->cred);
+ t->cred = NULL;
/* Start with the user-supplied credential callback, if present */
if (t->owner->cred_acquire_cb) {
cred_error = t->owner->cred_acquire_cb(&t->cred, t->owner->url,