# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: C:\Documents and Settings\ymnk\nb_all\javacvs\cvsmodule # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: src/org/netbeans/modules/versioning/system/cvss/SSHConnection.java *** C:\Documents and Settings\ymnk\nb_all\javacvs\cvsmodule\src\org\netbeans\modules\versioning\system\cvss\SSHConnection.java Base (1.7) --- C:\Documents and Settings\ymnk\nb_all\javacvs\cvsmodule\src\org\netbeans\modules\versioning\system\cvss\SSHConnection.java Locally Modified (Based On 1.7) *************** *** 25,30 **** --- 25,31 ---- import java.util.*; import java.net.Socket; import java.net.UnknownHostException; + import javax.swing.*; import com.jcraft.jsch.*; import org.openide.util.NbBundle; *************** *** 44,50 **** private final String username; private final String password; ! private Session session; private ChannelExec channel; /** --- 45,52 ---- private final String username; private final String password; ! private JSch jsch; ! private static Hashtable session_pool=new Hashtable(); private ChannelExec channel; /** *************** *** 65,86 **** } public void open() throws AuthenticationException, CommandAbortedException { - Properties props = new Properties(); - props.put("StrictHostKeyChecking", "no"); // NOI18N - - JSch jsch = new JSch(); try { - session = jsch.getSession(username, host, port); - session.setSocketFactory(new SocketFactoryBridge()); - session.setConfig(props); - session.setUserInfo(new SSHUserInfo()); - session.connect(); - } catch (JSchException e) { - throw new AuthenticationException(e, NbBundle.getMessage(SSHConnection.class, "BK3001")); - } - - try { channel = (ChannelExec) session.openChannel("exec"); // NOI18N channel.setCommand(CVS_SERVER_COMMAND); setInputStream(new LoggedDataInputStream(new SshChannelInputStream(channel))); --- 67,78 ---- } public void open() throws AuthenticationException, CommandAbortedException { + Session session=getSession(); try { channel = (ChannelExec) session.openChannel("exec"); // NOI18N channel.setCommand(CVS_SERVER_COMMAND); *************** *** 122,128 **** } private void reset() { - session = null; channel = null; setInputStream(null); setOutputStream(null); --- 111,116 ---- *************** *** 130,136 **** public void close() throws IOException { if (channel != null) channel.disconnect(); - if (session != null) session.disconnect(); reset(); } --- 118,123 ---- *************** *** 155,161 **** */ private class SSHUserInfo implements UserInfo, UIKeyboardInteractive { public String getPassphrase() { ! return null; } public String getPassword() { --- 142,148 ---- */ private class SSHUserInfo implements UserInfo, UIKeyboardInteractive { public String getPassphrase() { ! return password; } public String getPassword() { *************** *** 171,183 **** } public boolean promptYesNo(String message) { ! return false; } public void showMessage(String message) { } --- 158,175 ---- } public boolean promptYesNo(String message) { ! Object[] options={ "yes", "no" }; ! int foo=JOptionPane.showOptionDialog(null, ! message, ! "Warning", ! JOptionPane.DEFAULT_OPTION, ! JOptionPane.WARNING_MESSAGE, ! null, options, options[0]); ! return foo==0; } public void showMessage(String message) { + JOptionPane.showMessageDialog(null, message); } public String[] promptKeyboardInteractive(String destination, *************** *** 182,197 **** String instruction, String[] prompt, boolean[] echo){ String[] response=new String[prompt.length]; - if(prompt.length==1){ response[0]=password; - } return response; } } /** --- 177,191 ---- String instruction, String[] prompt, boolean[] echo){ + + if(password!=null && password.length()>0 && prompt.length==1){ String[] response=new String[prompt.length]; response[0]=password; return response; } + return null; // cancel } + } /** * Bridges com.jcraft.jsch.SocketFactory and javax.net.SocketFactory. *************** *** 228,234 **** --- 225,282 ---- if (exitStatus == 0 || channel.isEOF()) throw new EOFException(NbBundle.getMessage(SSHConnection.class, "BK3007")); } } + + private Session getSession() throws AuthenticationException{ + String key=username+":"+host+":"+port; + Session session=null; + synchronized(session_pool){ + session=(Session) session_pool.get(key); + if(session!=null && !session.isConnected()){ + session_pool.remove(key); + session=null; } + if(session==null){ + if(jsch==null){ + jsch = new JSch(); + String ssh_home=System.getProperty("user.home")+java.io.File.separator + ".ssh"; + String[] pkey={"id_rsa", "id_dsa"}; + for(int i=0;i0){ + session.setPassword(password); + } + session.setUserInfo(new SSHUserInfo()); + session.connect(); + } catch (JSchException e) { + throw new AuthenticationException(e, NbBundle.getMessage(SSHConnection.class, "BK3001")); + } + } + session_pool.put(key, session); + } + return session; + } + }