SFTP authorization fail during publishing via sftp.
---------------------------------------------------
Key: IVY-660
URL: https://issues.apache.org/jira/browse/IVY-660
Project: Ivy
Issue Type: Bug
Components: Core
Affects Versions: 2.0.0-beta-1
Environment: Developer: Windows XP, jdk1.6.0_02, ant-1.7.0, jsch-0.1.36
SFTP Server: FreeBSD-6.2-RELEASE.
Reporter: Alexey Kiselev
Priority: Minor
Fix For: 2.0.0-beta-1
PROBLEM:
We defined two resolvers in a settings file:
<resolvers>
<sftp name="remote1">
<ivy pattern="sftp://user:[EMAIL
PROTECTED]:12345/repository/[module]/[module]-[revision].xml"/>
<artifact pattern="sftp://user:[EMAIL
PROTECTED]:12345/repository/[module]/[artifact]-[revision].[ext]"/>
</sftp>
<sftp name="remote2" host="host" port="12345" user="user"
userPassword="password">
<ivy
pattern="repository/[module]/[module]-[revision].xml"/>
<artifact
pattern="repository/[module]/[artifact]-[revision].[ext]"/>
</sftp>
</resolvers>
Then we tried to publish our artifacts
<ivy:publish resolver="remote1" pubrevision="1.2.3.4" overwrite="true"
artifactspattern="${basedir}/files/[artifact].[ext]" />
or
<ivy:publish resolver="remote2" pubrevision="1.2.3.4" overwrite="true"
artifactspattern="${basedir}/files/[artifact].[ext]" />
As a result we had received java.io.IOException with message "Auth fail".
SOLUTION:
Our solution is to implement interface com.jcraft.jsch.UIKeyboardInteractive in
class CfUserInfo in file SshCache.java. Patch had been attached below.
Index: SshCache.java
===================================================================
--- SshCache.java (revision 601711)
+++ SshCache.java (working copy)
@@ -36,6 +36,7 @@
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;
+import com.jcraft.jsch.UIKeyboardInteractive;
/**
* a class to cache SSH Connections and Channel for the SSH Repository each
session is defined by
@@ -341,7 +342,7 @@
/**
* feeds in password silently into JSch
*/
- private static class CfUserInfo implements UserInfo {
+ private static class CfUserInfo implements UserInfo, UIKeyboardInteractive
{
private String userPassword;
@@ -404,5 +405,28 @@
}
return pemPassword;
}
+ /**
+ * Implementation of
UIKeyboardInteractive#promptKeyboardInteractive.
+ * @param destination not used.
+ * @param name not used.
+ * @param instruction not used.
+ * @param prompt the method checks if this is one in length.
+ * @param echo the method checks if the first element is
false.
+ * @return the password in an size one array if there is a
password
+ * and if the prompt and echo checks pass.
+ */
+ public String[] promptKeyboardInteractive(String destination,
+
String name,
+
String instruction,
+
String[] prompt,
+
boolean[] echo) {
+ if (prompt.length != 1 || echo[0] || this.userPassword
== null) {
+ return null;
+ }
+ String[] response = new String[1];
+ response[0] = this.userPassword;
+
+ return response;
+ }
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.