mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

fguigues
19.09.2008 926b88995bbcf3f03a0fcdd455eafffff1a5673a
Fixes :

3242: SNMP: no error displayed when the security-agent-file property contains a wrong value
3241: SNMP: traps are not sent to the correct trap community


4 files modified
125 ■■■■■ changed files
opends/src/admin/defn/org/opends/server/admin/std/SNMPConnectionHandlerConfiguration.xml 30 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol.properties 5 ●●●● patch | view | raw | blame | history
opends/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java 74 ●●●●● patch | view | raw | blame | history
opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java 16 ●●●● patch | view | raw | blame | history
opends/src/admin/defn/org/opends/server/admin/std/SNMPConnectionHandlerConfiguration.xml
@@ -67,6 +67,9 @@
        <adm:synopsis>
            Specifies the port to use to send SNMP Traps.
        </adm:synopsis>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:syntax>
            <adm:integer />
        </adm:syntax>
@@ -84,6 +87,9 @@
            access the MIB 2605 monitoring information or the USM MIB. The
            mapping between "community" and "context name" is set.
        </adm:synopsis>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:default-behavior>
            <adm:defined>
                <adm:value>OpenDS</adm:value>
@@ -105,6 +111,9 @@
            This property is required for SNMP v1 and v2 security configuration.
            An asterik (*) opens access to all managers. 
        </adm:synopsis>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:default-behavior>
            <adm:defined>
                <adm:value>*</adm:value>
@@ -126,6 +135,9 @@
            is required for SNMP v3 security configuration.
            An asterik (*) opens access to all users. 
        </adm:synopsis>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:default-behavior>
            <adm:defined>
                <adm:value>*</adm:value>
@@ -148,6 +160,9 @@
            privacy, AuthPriv : Authentication with privacy activated. 
            This property id required for SNMP V3 security configuration.
        </adm:synopsis>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:default-behavior>
            <adm:defined>
                <adm:value>authnopriv</adm:value>
@@ -185,6 +200,9 @@
            sent to define managers (trap-destinations). 
            This property is used in the context of SNMP v1, v2 and v3.
        </adm:synopsis>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:default-behavior>
            <adm:defined>
                <adm:value>OpenDS</adm:value>
@@ -209,6 +227,9 @@
            If this list is empty, V1 traps are sent to "localhost". 
            Each host in the list must be identifed by its name or complete IP Addess.
        </adm:description>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:default-behavior>
            <adm:alias>
                <adm:synopsis>
@@ -231,6 +252,9 @@
            Specifies the USM security configuration to receive authenticated
            only SNMP requests.
        </adm:synopsis>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:default-behavior>
            <adm:defined>
                <adm:value>
@@ -254,6 +278,9 @@
            Directory Server MBeanServer or not allowing to access SNMP Objects
            with RMI connector if enabled.
        </adm:synopsis>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:default-behavior>
            <adm:defined>
                <adm:value>false</adm:value>
@@ -273,6 +300,9 @@
        <adm:synopsis>
            Indicates the OpenDMK runtime jar file location
        </adm:synopsis>
        <adm:requires-admin-action>
          <adm:component-restart />
        </adm:requires-admin-action>
        <adm:default-behavior>
            <adm:undefined />
        </adm:default-behavior>
opends/src/messages/messages/protocol.properties
@@ -1444,7 +1444,7 @@
 using configuration ds-cfg-listen-port in configuration entry %s.  This is a \
 required attribute
SEVERE_ERR_SNMP_CONNHANDLER_CANNOT_DETERMINE_LISTEN_PORT_1460=An unexpected \
 error occurred while processing the ds-cfg-snmp-port attribute in \
 error occurred while processing the ds-cfg-listen-port attribute in \
 configuration entry %s, which is used to specify the port on which to listen \
 for client connections:  %s
SEVERE_ERR_SNMP_CONNHANDLER_CANNOT_BE_STARTED_1461=An unexpected \
@@ -1459,4 +1459,7 @@
 Please go under http://opendmk.dev.java.net and set the \
 ds-cfg-opendmk-jarfile configuration parameter to set the full path \
 of the required jdmkrt.jar file. The SNMP connection Handler didn't started
SEVERE_ERR_SNMP_CONNHANDLER_BAD_CONFIGURATION_1465=An unexpected \
 error occurred while trying to initialize the SNMP Connection Hanlder. \
 Please check the configuration attributes
opends/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java
@@ -51,6 +51,7 @@
import org.opends.server.util.StaticUtils;
import org.opends.server.util.Validator;
import static org.opends.messages.ProtocolMessages.*;
/**
 * The SNMPClassLoaderProvider.
@@ -61,76 +62,64 @@
     * The debug log tracer for this class.
     */
    private static final DebugTracer TRACER = DebugLogger.getTracer();
    /**
     * The current configuration state.
     */
    private SNMPConnectionHandlerCfg currentConfig;
    /**
     * MBeanServer of OpenDS.
     */
    private MBeanServer server;
    /**
     * MIB to manage.
     */
    private DIRECTORY_SERVER_MIBImpl dsMib;
    /**
     * ObjectName of the MIB2605.
     */
    private ObjectName mibObjName;
    /**
     * ObjectName of the SnmpAdaptor.
     */
    private ObjectName snmpObjName;
    /**
     * SNMP Port Number for SNMP requests.
     */
    private int snmpPort = 161;
    /**
     * Default SNMP trap port Number for SNMP Traps.
     */
    private int snmpTrapPort = 162;
    /**
     * Registration of the SNMP MBeans.
     */
    private boolean registeredSNMPMBeans = false;
    /**
     * The unique name for this connection handler.
     */
    private String connectionHandlerName;
    /**
     * ObjectName of the UsmMIB.
     */
    private ObjectName UsmObjName;
    private SnmpV3AdaptorServer snmpAdaptor;
    private String contextName;
    /**
     * Default constructor.
     */
    public SNMPClassLoaderProvider() {
      // No implementation required
    // No implementation required
    }
    /**
     * Initialization.
     * @param configuration The configuration
     * @throws java.lang.Exception if the SNMP connecvtion handler
     * could not be initialized
     */
    public void initializeConnectionHandler(
            SNMPConnectionHandlerCfg configuration) {
            SNMPConnectionHandlerCfg configuration) throws Exception {
        // Keep the connection handler configuration
@@ -212,8 +201,8 @@
        return this.UsmObjName;
    }
     // private methods
    private void initializeConnectionHandler() {
    // private methods
    private void initializeConnectionHandler() throws Exception {
        // Compute the connectionHandler name
@@ -237,6 +226,11 @@
            // Create the SNMP Adaptor with the appropriated parameters
            this.snmpAdaptor = this.getSnmpAdaptor(this.currentConfig);
            if (this.snmpAdaptor == null) {
                throw new Exception(
                      ERR_SNMP_CONNHANDLER_BAD_CONFIGURATION.get().toString());
            }
            // Create the Usm MIB to allow user management
            if (this.registeredSNMPMBeans) {
@@ -245,9 +239,10 @@
                        "type=USM_MIB");
                try {
                     this.snmpAdaptor.registerUsmMib(server, this.UsmObjName);
                }
                catch (Exception ex) {
                    this.snmpAdaptor.registerUsmMib(server, this.UsmObjName);
                } catch (Exception ex) {
                    throw new Exception(
                       ERR_SNMP_CONNHANDLER_BAD_CONFIGURATION.get().toString());
                }
            }
@@ -255,7 +250,12 @@
            // Send a coldStart SNMP Trap.
            this.snmpAdaptor.setTrapPort(snmpTrapPort);
            this.snmpAdaptor.snmpV1Trap(0, 0, null);
            this.snmpAdaptor.snmpV1Trap(
                    null,
                    this.currentConfig.getTrapsCommunity(),
                    0,
                    0,
                    null);
            // Create an instance of the customized MIB
            this.mibObjName = new ObjectName(
@@ -275,10 +275,11 @@
            if (debugEnabled()) {
                TRACER.debugCaught(DebugLogLevel.ERROR, ex);
            }
            throw new Exception(
                    ERR_SNMP_CONNHANDLER_BAD_CONFIGURATION.get().toString());
        }
    }
    /**
     * Finalize.
     */
@@ -287,7 +288,12 @@
        try {
            // Send a trap when stop
            this.snmpAdaptor.snmpV1Trap(0, 0, null);
            this.snmpAdaptor.snmpV1Trap(
                    null,
                    this.currentConfig.getTrapsCommunity(),
                    0,
                    0,
                    null);
            String[] names = this.snmpAdaptor.getMibs();
@@ -297,13 +303,13 @@
            this.server.unregisterMBean(this.snmpObjName);
            if (this.server.isRegistered(this.mibObjName)) {
               this.server.unregisterMBean(this.mibObjName);
                this.server.unregisterMBean(this.mibObjName);
            }
            this.server.unregisterMBean(new ObjectName(
                        SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
                        "type=group,name=DsMib"));
                    SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
                    "type=group,name=DsMib"));
            // Unregister the created SNMP MBeans
            if (this.registeredSNMPMBeans) {
@@ -328,9 +334,8 @@
        }
    }
    private SnmpV3AdaptorServer getSnmpAdaptor(
        SNMPConnectionHandlerCfg configuration) {
            SNMPConnectionHandlerCfg configuration) {
        Validator.ensureNotNull(configuration);
        SnmpV3AdaptorServer adaptor = null;
@@ -339,7 +344,10 @@
            // Set the USM security file
            String usmConfigPath = configuration.getSecurityAgentFile();
            File file = StaticUtils.getFileForPath(usmConfigPath);
            System.setProperty("jdmk.security.file",file.getAbsolutePath());
            if ((!file.isFile()) || (!file.exists())) {
                return null;
            }
            System.setProperty("jdmk.security.file", file.getAbsolutePath());
            // Create the Security Parameters for the engine
            SnmpEngineParameters engineParameters = new SnmpEngineParameters();
@@ -347,12 +355,12 @@
            engineParameters.activateEncryption();
            // Create the UACL controller
            UserAcl uacls = (UserAcl)new SNMPUserAcl(configuration);
            UserAcl uacls = (UserAcl) new SNMPUserAcl(configuration);
            engineParameters.setUserAcl(uacls);
            // V1/V2 Security parameters
            InetAddressAcl acls =
              (InetAddressAcl)new SNMPInetAddressAcl(configuration);
                    (InetAddressAcl) new SNMPInetAddressAcl(configuration);
            adaptor = new SnmpV3AdaptorServer(engineParameters, null, acls,
                    configuration.getListenPort(), InetAddress.getLocalHost());
@@ -363,7 +371,7 @@
            return adaptor;
        } catch (Exception ex) {
            TRACER.debugError("Could not instanciate the SNMP Adaptor");
            return adaptor;
            return null;
        }
    }
}
opends/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java
@@ -46,7 +46,9 @@
import org.opends.server.admin.std.server.SNMPConnectionHandlerCfg;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.InitializationException;
import static org.opends.messages.ProtocolMessages.*;
import static org.opends.server.loggers.ErrorLogger.*;
@@ -92,9 +94,9 @@
    /**
     * {@inheritDoc}
     */
    @Override()
    public void initializeConnectionHandler(
            SNMPConnectionHandlerCfg configuration) {
            SNMPConnectionHandlerCfg configuration)
            throws ConfigException, InitializationException {
        if (configuration == null) {
            Message message = ERR_SNMP_CONNHANDLER_NO_CONFIGURATION.get();
@@ -145,8 +147,14 @@
        this.provider = new SNMPClassLoaderProvider();
        // Call the delegate class
        this.provider.initializeConnectionHandler(this.currentConfig);
        try {
          this.provider.initializeConnectionHandler(this.currentConfig);
        }
        catch (Exception ex) {
            Message message = ERR_SNMP_CONNHANDLER_BAD_CONFIGURATION.get();
            logError(message);
            return;
        }
    }
    /**