Skip to content

PGM: Clone of protected HTTPS repo prompts for username three times #274

Description

@kwin

Version

7.8.0-SNAPSHOT

Operating System

MacOS

Bug description

When cloning via jgit clone a non public HTTPs Git repository like https://github.com/Netcentric/calendar-sync.git it prompts for the username three times.

Actual behavior

jgit.sh clone https://github.com/Netcentric/calendar-sync.git asks for the username three times:

Cloning into 'calendar-sync'...
Username for null: 
Username for PROXY github.com:443: 
Username: 

The first prompt is triggered via

ConsoleAuthenticator.promptPasswordAuthentication() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java:43)
CachedAuthenticator.getPasswordAuthentication() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/util/CachedAuthenticator.java:43)
Authenticator.requestPasswordAuthentication(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType) (/java.base/java.net/Authenticator.java:356)
SystemDefaultCredentialsProvider.getSystemCreds(String,AuthScope,Authenticator$RequestorType) (/httpclient-4.5.14.jar/org.apache.http.impl.client/SystemDefaultCredentialsProvider.java:93)
SystemDefaultCredentialsProvider.getCredentials(AuthScope) (/httpclient-4.5.14.jar/org.apache.http.impl.client/SystemDefaultCredentialsProvider.java:115)
AuthenticationStrategyImpl.select(Map,HttpHost,HttpResponse,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.client/AuthenticationStrategyImpl.java:197)
TargetAuthenticationStrategy.select(Map,HttpHost,HttpResponse,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.client/TargetAuthenticationStrategy.java:44)
HttpAuthenticator.handleAuthChallenge(HttpHost,HttpResponse,AuthenticationStrategy,AuthState,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.auth/HttpAuthenticator.java:151)
MainClientExec.needAuthentication(AuthState,AuthState,HttpRoute,HttpResponse,HttpClientContext) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/MainClientExec.java:588)
MainClientExec.execute(HttpRoute,HttpRequestWrapper,HttpClientContext,HttpExecutionAware) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/MainClientExec.java:293)
ProtocolExec.execute(HttpRoute,HttpRequestWrapper,HttpClientContext,HttpExecutionAware) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/ProtocolExec.java:186)
RetryExec.execute(HttpRoute,HttpRequestWrapper,HttpClientContext,HttpExecutionAware) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/RetryExec.java:89)
RedirectExec.execute(HttpRoute,HttpRequestWrapper,HttpClientContext,HttpExecutionAware) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/RedirectExec.java:110)
InternalHttpClient.doExecute(HttpHost,HttpRequest,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.client/InternalHttpClient.java:185)
CloseableHttpClient.execute(HttpUriRequest,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.client/CloseableHttpClient.java:83)
CloseableHttpClient.execute(HttpUriRequest) (/httpclient-4.5.14.jar/org.apache.http.impl.client/CloseableHttpClient.java:108)
CloseableHttpClient.execute(HttpUriRequest) (/httpclient-4.5.14.jar/org.apache.http.impl.client/CloseableHttpClient.java:56)
HttpClientConnection.execute() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/HttpClientConnection.java:281)
HttpClientConnection.getResponseCode() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/HttpClientConnection.java:260)
HttpSupport.response(HttpConnection) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/util/HttpSupport.java:232)
TransportHttp.connect(String,TransferConfig$ProtocolVersion) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java:664)
TransportHttp.openFetch(Collection,String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java:466)
FetchProcess.executeImp(ProgressMonitor,FetchResult,String) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java:165)
FetchProcess.execute(ProgressMonitor,FetchResult,String) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java:105)
Transport.fetch(ProgressMonitor,Collection,String) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java:1459)
FetchCommand.call() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java:238)
CloneCommand.fetch(Repository,URIish) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java:322)
CloneCommand.call() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java:191)
Clone.run() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java:133)
TextBuiltin.execute(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java:239)
Main.execute(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java:247)
Main.run(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java:135)
Main.main(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java:106)
0x000000c001024000.invokeStatic(Object,Object) (Unknown Source:0)
0x000000c001024c00.invoke(Object,Object,Object) (Unknown Source:0)
Invokers$Holder.invokeExact_MT(Object,Object,Object,Object) (Unknown Source:0)
DirectMethodHandleAccessor.invokeImpl(Object,Object[]) (Unknown Source:154)
DirectMethodHandleAccessor.invoke(Object,Object[]) (Unknown Source:103)
Method.invoke(Object,Object[]) (/java.base/java.lang.reflect/Method.java:580)
Launcher.launch(ClassLoader,String,String[]) (Unknown Source:106)
Launcher.launch(String[]) (Unknown Source:64)
JarLauncher.main(String[]) (Unknown Source:40)

The second one via

ConsoleAuthenticator.promptPasswordAuthentication() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java:43)
CachedAuthenticator.getPasswordAuthentication() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/util/CachedAuthenticator.java:43)
Authenticator.requestPasswordAuthentication(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType) (/java.base/java.net/Authenticator.java:356)
SystemDefaultCredentialsProvider.getSystemCreds(String,AuthScope,Authenticator$RequestorType) (/httpclient-4.5.14.jar/org.apache.http.impl.client/SystemDefaultCredentialsProvider.java:93)
SystemDefaultCredentialsProvider.getCredentials(AuthScope) (/httpclient-4.5.14.jar/org.apache.http.impl.client/SystemDefaultCredentialsProvider.java:117)
AuthenticationStrategyImpl.select(Map,HttpHost,HttpResponse,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.client/AuthenticationStrategyImpl.java:197)
TargetAuthenticationStrategy.select(Map,HttpHost,HttpResponse,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.client/TargetAuthenticationStrategy.java:44)
HttpAuthenticator.handleAuthChallenge(HttpHost,HttpResponse,AuthenticationStrategy,AuthState,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.auth/HttpAuthenticator.java:151)
MainClientExec.needAuthentication(AuthState,AuthState,HttpRoute,HttpResponse,HttpClientContext) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/MainClientExec.java:588)
MainClientExec.execute(HttpRoute,HttpRequestWrapper,HttpClientContext,HttpExecutionAware) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/MainClientExec.java:293)
ProtocolExec.execute(HttpRoute,HttpRequestWrapper,HttpClientContext,HttpExecutionAware) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/ProtocolExec.java:186)
RetryExec.execute(HttpRoute,HttpRequestWrapper,HttpClientContext,HttpExecutionAware) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/RetryExec.java:89)
RedirectExec.execute(HttpRoute,HttpRequestWrapper,HttpClientContext,HttpExecutionAware) (/httpclient-4.5.14.jar/org.apache.http.impl.execchain/RedirectExec.java:110)
InternalHttpClient.doExecute(HttpHost,HttpRequest,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.client/InternalHttpClient.java:185)
CloseableHttpClient.execute(HttpUriRequest,HttpContext) (/httpclient-4.5.14.jar/org.apache.http.impl.client/CloseableHttpClient.java:83)
CloseableHttpClient.execute(HttpUriRequest) (/httpclient-4.5.14.jar/org.apache.http.impl.client/CloseableHttpClient.java:108)
CloseableHttpClient.execute(HttpUriRequest) (/httpclient-4.5.14.jar/org.apache.http.impl.client/CloseableHttpClient.java:56)
HttpClientConnection.execute() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/HttpClientConnection.java:281)
HttpClientConnection.getResponseCode() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/HttpClientConnection.java:260)
HttpSupport.response(HttpConnection) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/util/HttpSupport.java:232)
TransportHttp.connect(String,TransferConfig$ProtocolVersion) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java:664)
TransportHttp.openFetch(Collection,String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java:466)
FetchProcess.executeImp(ProgressMonitor,FetchResult,String) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java:165)
FetchProcess.execute(ProgressMonitor,FetchResult,String) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java:105)
Transport.fetch(ProgressMonitor,Collection,String) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java:1459)
FetchCommand.call() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java:238)
CloneCommand.fetch(Repository,URIish) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java:322)
CloneCommand.call() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java:191)
Clone.run() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java:133)
TextBuiltin.execute(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java:239)
Main.execute(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java:247)
Main.run(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java:135)
Main.main(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java:106)
0x000000c001024000.invokeStatic(Object,Object) (Unknown Source:0)
0x000000c001024c00.invoke(Object,Object,Object) (Unknown Source:0)
Invokers$Holder.invokeExact_MT(Object,Object,Object,Object) (Unknown Source:0)
DirectMethodHandleAccessor.invokeImpl(Object,Object[]) (Unknown Source:154)
DirectMethodHandleAccessor.invoke(Object,Object[]) (Unknown Source:103)
Method.invoke(Object,Object[]) (/java.base/java.lang.reflect/Method.java:580)
Launcher.launch(ClassLoader,String,String[]) (Unknown Source:106)
Launcher.launch(String[]) (Unknown Source:64)
JarLauncher.main(String[]) (Unknown Source:40)

and the third one via

ChainingCredentialsProvider.get(URIish,CredentialItem[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/ChainingCredentialsProvider.java:71)
HttpAuthMethod.authorize(URIish,CredentialsProvider) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/HttpAuthMethod.java:205)
TransportHttp.connect(String,TransferConfig$ProtocolVersion) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java:693)
TransportHttp.openFetch(Collection,String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java:466)
FetchProcess.executeImp(ProgressMonitor,FetchResult,String) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java:165)
FetchProcess.execute(ProgressMonitor,FetchResult,String) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java:105)
Transport.fetch(ProgressMonitor,Collection,String) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java:1459)
FetchCommand.call() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java:238)
CloneCommand.fetch(Repository,URIish) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java:322)
CloneCommand.call() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java:191)
Clone.run() (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java:133)
TextBuiltin.execute(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java:239)
Main.execute(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java:247)
Main.run(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java:135)
Main.main(String[]) (/Users/715508/git/eclipse/jgit/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java:106)
0x000000c001024000.invokeStatic(Object,Object) (Unknown Source:0)
0x000000c001024c00.invoke(Object,Object,Object) (Unknown Source:0)
Invokers$Holder.invokeExact_MT(Object,Object,Object,Object) (Unknown Source:0)
DirectMethodHandleAccessor.invokeImpl(Object,Object[]) (Unknown Source:154)
DirectMethodHandleAccessor.invoke(Object,Object[]) (Unknown Source:103)

Expected behavior

The username prompt should appear only once triggered via https://github.com/eclipse-jgit/jgit/blob/master/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleCredentialsProvider.java. But instead the custom Authenticator https://github.com/eclipse-jgit/jgit/blob/master/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java is triggered twice before (once for the regular server and once for a proxy)

Relevant log output

Other information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions