Fix up URIish instances with @ in user name (#913)
This commit is contained in:
parent
5b7d8b4d62
commit
c702d4aa9e
2 changed files with 15 additions and 1 deletions
|
@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file.
|
|||
|
||||
- Folder names that were very long did not look right
|
||||
- Error message for wrong SSH/HTTPS password now looks cleaner
|
||||
- Fix authentication failure with usernames that contain the `@` character
|
||||
|
||||
### Added
|
||||
|
||||
|
|
|
@ -126,11 +126,24 @@ private fun makeTofuHostKeyVerifier(hostKeyFile: File): HostKeyVerifier {
|
|||
}
|
||||
}
|
||||
|
||||
private class SshjSession(private val uri: URIish, private val username: String, private val authData: SshAuthData, private val hostKeyFile: File) : RemoteSession {
|
||||
private class SshjSession(uri: URIish, private val username: String, private val authData: SshAuthData, private val hostKeyFile: File) : RemoteSession {
|
||||
|
||||
private lateinit var ssh: SSHClient
|
||||
private var currentCommand: Session? = null
|
||||
|
||||
private val uri = if (uri.host.contains('@')) {
|
||||
// URIish's String constructor cannot handle '@' in the user part of the URI and the URL
|
||||
// constructor can't be used since Java's URL does not recognize the ssh scheme. We thus
|
||||
// need to patch everything up ourselves.
|
||||
d { "Before fixup: user=${uri.user}, host=${uri.host}" }
|
||||
val userPlusHost = "${uri.user}@${uri.host}"
|
||||
val realUser = userPlusHost.substringBeforeLast('@')
|
||||
val realHost = userPlusHost.substringAfterLast('@')
|
||||
uri.setUser(realUser).setHost(realHost).also { d { "After fixup: user=${it.user}, host=${it.host}" } }
|
||||
} else {
|
||||
uri
|
||||
}
|
||||
|
||||
fun connect(): SshjSession {
|
||||
ssh = SSHClient(SshjConfig())
|
||||
ssh.addHostKeyVerifier(makeTofuHostKeyVerifier(hostKeyFile))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue