From 5e47e1691305d9df3f5c4aef50d7551e6d09ce3f Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Mon, 26 Aug 2024 16:12:27 +0300 Subject: [PATCH] Fix unknown security name --- .../snmp/service/SnmpAuthService.java | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/service/SnmpAuthService.java b/common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/service/SnmpAuthService.java index bcc3240570..13f50621ad 100644 --- a/common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/service/SnmpAuthService.java +++ b/common/transport/snmp/src/main/java/org/thingsboard/server/transport/snmp/service/SnmpAuthService.java @@ -24,6 +24,7 @@ import org.snmp4j.security.SecurityLevel; import org.snmp4j.security.SecurityModel; import org.snmp4j.security.SecurityProtocols; import org.snmp4j.security.USM; +import org.snmp4j.security.UsmUser; import org.snmp4j.smi.Address; import org.snmp4j.smi.GenericAddress; import org.snmp4j.smi.OID; @@ -72,28 +73,23 @@ public class SnmpAuthService { OctetString engineId = OctetString.fromString(deviceTransportConfig.getEngineId(), 16); OID authenticationProtocol = new OID(deviceTransportConfig.getAuthenticationProtocol().getOid()); - byte[] authenticationPassphrase = SecurityProtocols.getInstance().passwordToKey(authenticationProtocol, - new OctetString(deviceTransportConfig.getAuthenticationPassphrase()), engineId.getValue()); - if (authenticationPassphrase == null) { - throw new UnsupportedOperationException("Authentication protocol " + deviceTransportConfig.getAuthenticationProtocol() + " is not supported"); - } + OctetString authenticationPassphrase = Optional.ofNullable(SecurityProtocols.getInstance().passwordToKey(authenticationProtocol, + new OctetString(deviceTransportConfig.getAuthenticationPassphrase()), engineId.getValue())) + .map(OctetString::new) + .orElseThrow(() -> new UnsupportedOperationException("Authentication protocol " + deviceTransportConfig.getAuthenticationProtocol() + " is not supported")); OID privacyProtocol = new OID(deviceTransportConfig.getPrivacyProtocol().getOid()); - byte[] privacyPassphrase = SecurityProtocols.getInstance().passwordToKey(privacyProtocol, - authenticationProtocol, new OctetString(deviceTransportConfig.getPrivacyPassphrase()), engineId.getValue()); - if (privacyPassphrase == null) { - throw new UnsupportedOperationException("Privacy protocol " + deviceTransportConfig.getPrivacyProtocol() + " is not supported"); - } + OctetString privacyPassphrase = Optional.ofNullable(SecurityProtocols.getInstance().passwordToKey(privacyProtocol, + authenticationProtocol, new OctetString(deviceTransportConfig.getPrivacyPassphrase()), engineId.getValue())) + .map(OctetString::new) + .orElseThrow(() -> new UnsupportedOperationException("Privacy protocol " + deviceTransportConfig.getPrivacyProtocol() + " is not supported")); USM usm = snmpTransportService.getSnmp().getUSM(); if (usm.hasUser(engineId, securityName)) { usm.removeAllUsers(username, engineId); } - usm.addLocalizedUser( - engineId.getValue(), username, - authenticationProtocol, authenticationPassphrase, - privacyProtocol, privacyPassphrase - ); + UsmUser usmUser = new UsmUser(username, authenticationProtocol, authenticationPassphrase, privacyProtocol, privacyPassphrase, engineId); + usm.addUser(username, engineId, usmUser); UserTarget userTarget = new UserTarget(); userTarget.setSecurityName(securityName);