ONOS-6020 RolledBack and deprecated a method in NetconfDeviceInfo to not break backwards compatibility
Change-Id: Ie029f6b1d3688d428130b76ed2e06c760d9a390a
(cherry picked from commit e7006dca2a0c3fab7998a54a59628c20e6104c95)
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
index 2468562..eb63974 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
@@ -22,6 +22,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Objects;
@@ -39,6 +40,8 @@
private IpAddress ipAddress;
private int port;
private char[] key;
+ //File keyFile @deprecated 1.9.0
+ private File keyFile;
private DeviceId deviceId;
@@ -68,7 +71,12 @@
* @param password the password for the device
* @param ipAddress the ip address
* @param port the tcp port
- * @param keyString the string containing the key.
+ * @param keyString the string containing a DSA or RSA private key
+ * of the user in OpenSSH key format
+ * <br>
+ * (Pre 1.9.0 behaviour: {@code keyString} can be file path
+ * to a file containing DSA or RSA private key of the user
+ * in OpenSSH key format)
*/
public NetconfDeviceInfo(String name, String password, IpAddress ipAddress,
int port, String keyString) {
@@ -80,6 +88,7 @@
this.ipAddress = ipAddress;
this.port = port;
this.key = keyString.toCharArray();
+ this.keyFile = new File(keyString);
}
/**
@@ -121,18 +130,34 @@
/**
* Exposes the key of the controller.
*
- * @return int port address
+ * @return {@code char[]} containing a DSA or RSA private key of the user
+ * in OpenSSH key format
+ * or null if device is not configured to use public key authentication
*/
public char[] getKey() {
return key;
}
/**
+ * Exposes the keyFile of the controller.
+ *
+ * @return File object pointing to a file containing a DSA or RSA
+ * private key of the user in OpenSSH key format,
+ * or null if device is not configured to use public key authentication
+ * @deprecated 1.9.0
+ */
+ @Deprecated
+ public File getKeyFile() {
+ return keyFile;
+ }
+
+ /**
* Return the info about the device in a string.
* String format: "netconf:name@ip:port"
*
* @return String device info
*/
+ @Override
public String toString() {
return "netconf:" + name + "@" + ipAddress + ":" + port;
}
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
index 451a2a1..26ded2f 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
@@ -118,7 +118,13 @@
}
boolean isAuthenticated;
try {
- if (deviceInfo.getKey() != null) {
+ if (deviceInfo.getKeyFile() != null && deviceInfo.getKeyFile().canRead()) {
+ log.debug("Authenticating with key file to device {} with username {}",
+ deviceInfo.getDeviceId(), deviceInfo.name());
+ isAuthenticated = netconfConnection.authenticateWithPublicKey(
+ deviceInfo.name(), deviceInfo.getKeyFile(),
+ deviceInfo.password().equals("") ? null : deviceInfo.password());
+ } else if (deviceInfo.getKey() != null) {
log.debug("Authenticating with key to device {} with username {}",
deviceInfo.getDeviceId(), deviceInfo.name());
isAuthenticated = netconfConnection.authenticateWithPublicKey(