Hello, everybody,
I have a problem with passwords for the server. I found the reason why this
happens but I am unable to find the correct setting.
Here is the description:
We want to publish some artifacts to a repository, so we set up a
settings.xml file which looks like this
<servers>
<server>
<id>some-repo</id>
<username>testuser</username>
<password>{U8jAeLVPH88HRYGnDpbAmAXPtUPSqbrtxxuZoR513V4=}</password>
</server>
</servers>
<profile>
<id>some-repo</id>
<repositories>
<repository>
<id>some repo</id>
<name>Some repository</name>
<url>https://our.url.com/artifactory/list/some-repo/</url>
</repository>
</repositories>
</profile>
When I run a mvn deploy:deploy-file command this works fine, except when the
user testuser has a password that contains non-ASCII characters. In that case
the non-ASCII characters in the password are replaced by the maven client with
question marks when maven authenticates to the repo server.
I searched the internet up and down and since I could not find a fix I traced
this down to the following code in Maven:
The class
org.apache.maven.wagon.providers.http.httpclient.impl.auth.RFC2617Scheme has
two methods which look like this:
public Charset getCredentialsCharset() {
return credentialsCharset != null ? credentialsCharset : Consts.ASCII;
}
String getCredentialsCharset(final HttpRequest request) {
String charset = (String)
request.getParams().getParameter(AuthPNames.CREDENTIAL_CHARSET);
if (charset == null) {
charset = getCredentialsCharset().name();
}
return charset;
}
The call
request.getParams().getParameter(AuthPNames.CREDENTIAL_CHARSET)returns null so
the default character set is used which is US-ASCII. So the password is
converted to US-ASCII and all non-ASCII characters are replaced by a "?".
However, the character encoding should be UTF-8. The repo server expects
UTF-8. This is standard with http servers. I tried to figure out if this maven
client phenomenon is a bug or a feature but I could not resolve this.
The parameter AuthPNames.CREDENTIAL_CHARSET has the value
"http.auth.credential-charset". So I tried to set this parameter like this:
<servers>
<server>
<id>some-repo</id>
<configuration>
<httpConfiguration>
<all>
<params>
<param>
<name>http.auth.credential-charset</name>
<value>UTF-8</value>
</param>
</params>
</all>
</httpConfiguration>
<username>testuser</username>
<password>{U8jAeLVPH88HRYGnDpbAmAXPtUPSqbrtxxuZoR513V4=}</password>
</server>
</servers>
But that did not help.
So I have two questions:
1. How can I specify the character set/encoding for the *credentials* in the
settings.xml file?
2. Is this behaviour (converting the password to US-ASCII before sending it)
a bug?
Any help would be greatly appreciated.
Kind regards,
Frank
________________________________
Pflichtangaben anzeigen<http://www.deutschebahn.com/pflichtangaben/20210430>
N?here Informationen zur Datenverarbeitung im DB-Konzern finden Sie hier:
http://www.deutschebahn.com/de/konzern/datenschutz