X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-ssh%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fssh%2Fthreads%2FSocketThread.java;h=6df19155110e098ea093b370f2473e8ed9135704;hb=817e66a52d537af6127472fa6ca7b460ce30f938;hp=95fdd48bfe31d6e83b1082eefedbfe7da06842a5;hpb=549b3260a884bf1801d6ea1a0f4ffb7bb5ed2bf5;p=controller.git diff --git a/opendaylight/netconf/netconf-ssh/src/main/java/org/opendaylight/controller/netconf/ssh/threads/SocketThread.java b/opendaylight/netconf/netconf-ssh/src/main/java/org/opendaylight/controller/netconf/ssh/threads/SocketThread.java index 95fdd48bfe..6df1915511 100644 --- a/opendaylight/netconf/netconf-ssh/src/main/java/org/opendaylight/controller/netconf/ssh/threads/SocketThread.java +++ b/opendaylight/netconf/netconf-ssh/src/main/java/org/opendaylight/controller/netconf/ssh/threads/SocketThread.java @@ -13,7 +13,7 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import javax.annotation.concurrent.ThreadSafe; -import org.opendaylight.controller.netconf.ssh.authentication.RSAKey; +import org.opendaylight.controller.netconf.ssh.authentication.AuthProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,26 +28,40 @@ public class SocketThread implements Runnable, ServerAuthenticationCallback, Ser private static final Logger logger = LoggerFactory.getLogger(SocketThread.class); private ServerConnection conn = null; private long sessionId; + private String currentUser; + private final String remoteAddressWithPort; + private final AuthProvider authProvider; - public static void start(Socket socket, InetSocketAddress clientAddress, long sessionId) throws IOException{ - Thread netconf_ssh_socket_thread = new Thread(new SocketThread(socket,clientAddress,sessionId)); + public static void start(Socket socket, + InetSocketAddress clientAddress, + long sessionId, + AuthProvider authProvider) throws IOException{ + Thread netconf_ssh_socket_thread = new Thread(new SocketThread(socket,clientAddress,sessionId,authProvider)); netconf_ssh_socket_thread.setDaemon(true); netconf_ssh_socket_thread.start(); } - private SocketThread(Socket socket, InetSocketAddress clientAddress, long sessionId) throws IOException { + private SocketThread(Socket socket, + InetSocketAddress clientAddress, + long sessionId, + AuthProvider authProvider) throws IOException { this.socket = socket; this.clientAddress = clientAddress; this.sessionId = sessionId; + this.remoteAddressWithPort = socket.getRemoteSocketAddress().toString().replaceFirst("/",""); + this.authProvider = authProvider; } @Override public void run() { conn = new ServerConnection(socket); - RSAKey keyStore = new RSAKey(); - conn.setRsaHostKey(keyStore.getPrivateKey()); + try { + conn.setPEMHostKey(authProvider.getPEMAsCharArray(),"netconf"); + } catch (Exception e) { + logger.debug("Server authentication setup failed."); + } conn.setAuthenticationCallback(this); conn.setServerConnectionCallback(this); try { @@ -81,18 +95,20 @@ public class SocketThread implements Runnable, ServerAuthenticationCallback, Ser netconf_ssh_input.start(); logger.trace("starting netconf_ssh_output thread"); - netconf_ssh_output = new IOThread(ss.getStdout(),echoSocket.getOutputStream(),"output_thread_"+sessionId,ss,conn); + final String customHeader = "["+currentUser+";"+remoteAddressWithPort+";ssh;;;;;;]\n"; + netconf_ssh_output = new IOThread(ss.getStdout(),echoSocket.getOutputStream(),"output_thread_"+sessionId,ss,conn,customHeader); netconf_ssh_output.setDaemon(false); netconf_ssh_output.start(); } catch (Throwable t){ - logger.error(t.getMessage(),t); + logger.error("SSH bridge couldn't create echo socket",t.getMessage(),t); try { if (netconf_ssh_input!=null){ netconf_ssh_input.join(); } } catch (InterruptedException e) { + Thread.currentThread().interrupt(); logger.error("netconf_ssh_input join error ",e); } @@ -101,6 +117,7 @@ public class SocketThread implements Runnable, ServerAuthenticationCallback, Ser netconf_ssh_output.join(); } } catch (InterruptedException e) { + Thread.currentThread().interrupt(); logger.error("netconf_ssh_output join error ",e); } @@ -146,7 +163,8 @@ public class SocketThread implements Runnable, ServerAuthenticationCallback, Ser public String initAuthentication(ServerConnection sc) { - return ""; + logger.trace("Established connection with host {}",remoteAddressWithPort); + return "Established connection with host "+remoteAddressWithPort+"\r\n"; } public String[] getRemainingAuthMethods(ServerConnection sc) @@ -161,9 +179,16 @@ public class SocketThread implements Runnable, ServerAuthenticationCallback, Ser public AuthenticationResult authenticateWithPassword(ServerConnection sc, String username, String password) { - if (USER.equals(username) && PASSWORD.equals(password)) - return AuthenticationResult.SUCCESS; + try { + if (authProvider.authenticated(username,password)){ + currentUser = username; + logger.trace("user {}@{} authenticated",currentUser,remoteAddressWithPort); + return AuthenticationResult.SUCCESS; + } + } catch (Exception e){ + logger.info("Authentication failed due to :" + e.getLocalizedMessage()); + } return AuthenticationResult.FAILURE; }