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

Jean-Noel Rouvignac
20.58.2013 be85abb8e2dc82f709e1b3f6c4ad9ddce04849dc
OPENDJ-808 Implement a simple commons REST based HTTP connection handler

Added the HTTPConnnectionHandler implemented using Grizzly.
Added support for all configuration similar to the LDAPConnectionHandler.
Missing support for ds-cfg-keep-stats and ds-cfg-num-request-handlers.


config.ldif, 02-config.ldif:
Added new entry for HTTP connection handler + defaults.

HTTPConnectionHandlerCfgDefn.properties, HTTPConnectionHandlerConfiguration.xml: ADDED

LDAPConnectionHandlerConfiguration.xml:
Moved properties common to HTTPConnectionHandlerConfiguration.xml to Package.xml .

protocol*.properties:
Merged protocol messages between LDAP, HTTP and JMX. Made them non LDAP specific.
Added 2 new protocol messages for HTTP.


CollectClientConnectionsFilter.java, HTTPClientConnection.java, HTTPConnectionHandler.java, package-info.java: ADDED

JmxClientConnection.java, JmxConnectionHandler.java, LDAPClientConnection.java:
Used common protocol messages.

LDAPConnectionHandler.java
Used common protocol messages.
Extracted method configureSSL()
Simplified the code in getEnabledSSLCipherSuites() and getEnabledSSLProtocols() and protected against a multi threaded change ofg the SSL engine by using a local copy.

6 files added
18 files modified
2550 ■■■■ changed files
opends/resource/config/config.ldif 21 ●●●●● patch | view | raw | blame | history
opends/resource/schema/02-config.ldif 23 ●●●●● patch | view | raw | blame | history
opends/src/admin/defn/org/opends/server/admin/std/HTTPConnectionHandlerConfiguration.xml 430 ●●●●● patch | view | raw | blame | history
opends/src/admin/defn/org/opends/server/admin/std/LDAPConnectionHandlerConfiguration.xml 96 ●●●●● patch | view | raw | blame | history
opends/src/admin/defn/org/opends/server/admin/std/Package.xml 93 ●●●●● patch | view | raw | blame | history
opends/src/admin/messages/HTTPConnectionHandlerCfgDefn.properties 56 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol.properties 22 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol_ca_ES.properties 4 ●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol_de.properties 17 ●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol_es.properties 17 ●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol_fr.properties 19 ●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol_ja.properties 16 ●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol_ko.properties 16 ●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol_pl.properties 2 ●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol_zh_CN.properties 16 ●●●● patch | view | raw | blame | history
opends/src/messages/messages/protocol_zh_TW.properties 16 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/http/CollectClientConnectionsFilter.java 167 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/http/HTTPClientConnection.java 344 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/http/HTTPConnectionHandler.java 918 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/http/package-info.java 37 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java 30 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java 35 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java 19 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java 136 ●●●● patch | view | raw | blame | history
opends/resource/config/config.ldif
@@ -477,6 +477,27 @@
ds-cfg-key-manager-provider: cn=JKS,cn=Key Manager Providers,cn=config
ds-cfg-trust-manager-provider: cn=JKS,cn=Trust Manager Providers,cn=config
dn: cn=HTTP Connection Handler,cn=Connection Handlers,cn=config
objectClass: top
objectClass: ds-cfg-connection-handler
objectClass: ds-cfg-http-connection-handler
cn: HTTP Connection Handler
ds-cfg-java-class: org.opends.server.protocols.http.HTTPConnectionHandler
ds-cfg-enabled: true
ds-cfg-listen-address: 0.0.0.0
ds-cfg-listen-port: 8080
ds-cfg-accept-backlog: 128
#ds-cfg-keep-stats: true
ds-cfg-use-tcp-keep-alive: true
ds-cfg-use-tcp-no-delay: true
ds-cfg-allow-tcp-reuse-address: true
ds-cfg-max-request-size: 5 megabytes
ds-cfg-buffer-size: 4096 bytes
ds-cfg-max-blocked-write-time-limit: 2 minutes
ds-cfg-use-ssl: false
ds-cfg-ssl-client-auth-policy: optional
ds-cfg-ssl-cert-nickname: server-cert
dn: cn=LDIF Connection Handler,cn=Connection Handlers,cn=config
objectClass: top
objectClass: ds-cfg-connection-handler
opends/resource/schema/02-config.ldif
@@ -3820,6 +3820,29 @@
        ds-cfg-max-blocked-write-time-limit $
        ds-cfg-buffer-size )
  X-ORIGIN 'OpenDS Directory Server' )
objectClasses: ( 1.3.6.1.4.1.36733.2.1.2.15
  NAME 'ds-cfg-http-connection-handler'
  SUP ds-cfg-connection-handler
  STRUCTURAL
  MUST ds-cfg-listen-port
  MAY ( ds-cfg-listen-address $
#        ds-cfg-keep-stats $
        ds-cfg-use-tcp-keep-alive $
        ds-cfg-use-tcp-no-delay $
        ds-cfg-allow-tcp-reuse-address $
        ds-cfg-max-request-size $
#        ds-cfg-num-request-handlers $ # TODO JNR TCPNIOTransport.setWorkerThreadPoolConfig()
        ds-cfg-use-ssl $
        ds-cfg-ssl-client-auth-policy $
        ds-cfg-ssl-cert-nickname $
        ds-cfg-accept-backlog $
        ds-cfg-key-manager-provider $
        ds-cfg-trust-manager-provider $
        ds-cfg-ssl-protocol $
        ds-cfg-ssl-cipher-suite $
        ds-cfg-max-blocked-write-time-limit $
        ds-cfg-buffer-size )
  X-ORIGIN 'OpenDJ Directory Server' )
objectClasses: ( 1.3.6.1.4.1.26027.1.2.14
  NAME 'ds-cfg-entry-cache'
  SUP top
opends/src/admin/defn/org/opends/server/admin/std/HTTPConnectionHandlerConfiguration.xml
New file
@@ -0,0 +1,430 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
  ! CDDL HEADER START
  !
  ! The contents of this file are subject to the terms of the
  ! Common Development and Distribution License, Version 1.0 only
  ! (the "License").  You may not use this file except in compliance
  ! with the License.
  !
  ! You can obtain a copy of the license at
  ! trunk/opends/resource/legal-notices/OpenDS.LICENSE
  ! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
  ! See the License for the specific language governing permissions
  ! and limitations under the License.
  !
  ! When distributing Covered Code, include this CDDL HEADER in each
  ! file and include the License file at
  ! trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
  ! add the following below this CDDL HEADER, with the fields enclosed
  ! by brackets "[]" replaced with your own identifying information:
  !      Portions Copyright [yyyy] [name of copyright owner]
  !
  ! CDDL HEADER END
  !
  !
  !      Portions copyright 2013 ForgeRock AS
  ! -->
<adm:managed-object name="http-connection-handler"
  plural-name="http-connection-handlers"
  package="org.opends.server.admin.std" extends="connection-handler"
  xmlns:adm="http://www.opends.org/admin"
  xmlns:ldap="http://www.opends.org/admin-ldap">
  <adm:synopsis>
    The
    <adm:user-friendly-name />
    is used to interact with clients using HTTP.
  </adm:synopsis>
  <adm:description>
    It provides full support for Rest2LDAP.
  </adm:description>
  <adm:constraint>
    <adm:synopsis>
      A Key Manager Provider must be specified when this
      <adm:user-friendly-name />
      is enabled and it is configured to use SSL.
    </adm:synopsis>
    <adm:condition>
      <adm:implies>
        <adm:contains property="enabled" value="true" />
        <adm:implies>
          <adm:contains property="use-ssl" value="true" />
          <adm:is-present property="key-manager-provider" />
        </adm:implies>
      </adm:implies>
    </adm:condition>
  </adm:constraint>
  <adm:constraint>
    <adm:synopsis>
      A Trust Manager Provider must be specified when this
      <adm:user-friendly-name />
      is enabled and it is configured to use SSL.
    </adm:synopsis>
    <adm:condition>
      <adm:implies>
        <adm:contains property="enabled" value="true" />
        <adm:implies>
          <adm:contains property="use-ssl" value="true" />
          <adm:is-present property="trust-manager-provider" />
        </adm:implies>
      </adm:implies>
    </adm:condition>
  </adm:constraint>
  <adm:profile name="ldap">
    <ldap:object-class>
      <ldap:name>ds-cfg-http-connection-handler</ldap:name>
      <ldap:superior>ds-cfg-connection-handler</ldap:superior>
    </ldap:object-class>
  </adm:profile>
  <adm:property-override name="java-class" advanced="true">
    <adm:default-behavior>
      <adm:defined>
        <adm:value>
          org.opends.server.protocols.http.HTTPConnectionHandler
        </adm:value>
      </adm:defined>
    </adm:default-behavior>
  </adm:property-override>
  <adm:property-reference name="listen-port" />
  <adm:property-reference name="use-ssl" />
  <adm:property-reference name="ssl-cert-nickname" />
  <adm:property-reference name="use-tcp-keep-alive" />
  <adm:property-reference name="use-tcp-no-delay" />
  <adm:property-reference name="allow-tcp-reuse-address" />
  <adm:property name="key-manager-provider">
    <adm:synopsis>
      Specifies the name of the key manager that should be used with
      this
      <adm:user-friendly-name />
      .
    </adm:synopsis>
    <adm:requires-admin-action>
      <adm:none>
        <adm:synopsis>
          Changes to this property take effect immediately, but
          only for subsequent attempts to access the key manager
          provider for associated client connections.
        </adm:synopsis>
      </adm:none>
    </adm:requires-admin-action>
    <adm:default-behavior>
      <adm:undefined />
    </adm:default-behavior>
    <adm:syntax>
      <adm:aggregation relation-name="key-manager-provider"
        parent-path="/">
        <adm:constraint>
          <adm:synopsis>
            The referenced key manager provider must be enabled when
            the
            <adm:user-friendly-name />
            is enabled and configured to use SSL.
          </adm:synopsis>
          <adm:target-needs-enabling-condition>
            <adm:and>
              <adm:contains property="enabled" value="true" />
              <adm:contains property="use-ssl" value="true" />
            </adm:and>
          </adm:target-needs-enabling-condition>
          <adm:target-is-enabled-condition>
            <adm:contains property="enabled" value="true" />
          </adm:target-is-enabled-condition>
        </adm:constraint>
      </adm:aggregation>
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-key-manager-provider</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="trust-manager-provider">
    <adm:synopsis>
      Specifies the name of the trust manager that should be used with
      the
      <adm:user-friendly-name />
      .
    </adm:synopsis>
    <adm:requires-admin-action>
      <adm:none>
        <adm:synopsis>
          Changes to this property take effect immediately, but
          only for subsequent attempts to access the trust manager
          provider for associated client connections.
        </adm:synopsis>
      </adm:none>
    </adm:requires-admin-action>
    <adm:default-behavior>
      <adm:undefined />
    </adm:default-behavior>
    <adm:syntax>
      <adm:aggregation relation-name="trust-manager-provider"
        parent-path="/">
        <adm:constraint>
          <adm:synopsis>
            The referenced trust manager provider must be enabled when
            the
            <adm:user-friendly-name />
            is enabled and configured to use SSL.
          </adm:synopsis>
          <adm:target-needs-enabling-condition>
            <adm:and>
              <adm:contains property="enabled" value="true" />
              <adm:contains property="use-ssl" value="true" />
            </adm:and>
          </adm:target-needs-enabling-condition>
          <adm:target-is-enabled-condition>
            <adm:contains property="enabled" value="true" />
          </adm:target-is-enabled-condition>
        </adm:constraint>
      </adm:aggregation>
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-trust-manager-provider</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="listen-address" multi-valued="true">
    <adm:synopsis>
      Specifies the address or set of addresses on which this
      <adm:user-friendly-name />
      should listen for connections from HTTP clients.
    </adm:synopsis>
    <adm:description>
      Multiple addresses may be provided as separate values for this
      attribute. If no values are provided, then the
      <adm:user-friendly-name />
      listens on all interfaces.
    </adm:description>
    <adm:requires-admin-action>
      <adm:component-restart />
    </adm:requires-admin-action>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>0.0.0.0</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:ip-address />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-listen-address</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="max-request-size" advanced="true">
    <adm:synopsis>
      Specifies the size in bytes of the largest HTTP request message that will
      be allowed by this HTTP Connection handler.
    </adm:synopsis>
    <adm:description>
      This can help prevent denial-of-service attacks by clients that indicate
      they send extremely large requests to the server causing it to
      attempt to allocate large amounts of memory.
    </adm:description>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>5 megabytes</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:size upper-limit="2147483647b"></adm:size>
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-max-request-size</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="buffer-size" advanced="true">
    <adm:synopsis>
      Specifies the size in bytes of the HTTP response message write buffer.
    </adm:synopsis>
    <adm:description>
      This property specifies write buffer size allocated by the server for
      each client connection and used to buffer HTTP response messages data
      when writing.
    </adm:description>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>4096 bytes</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:size lower-limit="1b" upper-limit="2147483647b"></adm:size>
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-buffer-size</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="ssl-client-auth-policy">
    <adm:synopsis>
      Specifies the policy that the
      <adm:user-friendly-name />
      should use regarding client SSL certificates.
    </adm:synopsis>
    <adm:description>
      This is only applicable if clients are allowed to use SSL.
    </adm:description>
    <adm:requires-admin-action>
      <adm:component-restart />
    </adm:requires-admin-action>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>optional</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:enumeration>
        <adm:value name="disabled">
          <adm:synopsis>
            Clients are not required to provide their own
            certificates when performing SSL negotiation.
          </adm:synopsis>
        </adm:value>
        <adm:value name="optional">
          <adm:synopsis>
            Clients are requested to provide their own certificates
            when performing SSL negotiation, but still accept the
            connection even if the client does not provide a
            certificate.
          </adm:synopsis>
        </adm:value>
        <adm:value name="required">
          <adm:synopsis>
            Clients are required to provide their own certificates
            when performing SSL negotiation and are refused access
            if the do not provide a certificate.
          </adm:synopsis>
        </adm:value>
      </adm:enumeration>
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-ssl-client-auth-policy</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="accept-backlog" advanced="true">
    <adm:synopsis>
      Specifies the maximum number of pending connection attempts that
      are allowed to queue up in the accept backlog before the
      server starts rejecting new connection attempts.
    </adm:synopsis>
    <adm:description>
      This is primarily an issue for cases in which a large number of
      connections are established to the server in a very short period
      of time (for example, a benchmark utility that creates a large number of
      client threads that each have their own connection to the server)
      and the connection handler is unable to keep up with the rate at
      which the new connections are established.
    </adm:description>
    <adm:requires-admin-action>
      <adm:component-restart />
    </adm:requires-admin-action>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>128</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:integer lower-limit="1">
        <adm:unit-synopsis>connections</adm:unit-synopsis>
      </adm:integer>
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-accept-backlog</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="ssl-protocol" multi-valued="true">
    <adm:synopsis>
      Specifies the names of the SSL protocols that are allowed for
      use in SSL communication.
    </adm:synopsis>
    <adm:requires-admin-action>
      <adm:none>
        <adm:synopsis>
          Changes to this property take effect immediately but only
          impact new SSL/TLS-based sessions created after the
          change.
        </adm:synopsis>
      </adm:none>
    </adm:requires-admin-action>
    <adm:default-behavior>
      <adm:alias>
        <adm:synopsis>
          Uses the default set of SSL protocols provided by the server's
          JVM.
        </adm:synopsis>
      </adm:alias>
    </adm:default-behavior>
    <adm:syntax>
      <adm:string />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-ssl-protocol</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="ssl-cipher-suite" multi-valued="true">
    <adm:synopsis>
      Specifies the names of the SSL cipher suites that are allowed
      for use in SSL communication.
    </adm:synopsis>
    <adm:requires-admin-action>
      <adm:none>
        <adm:synopsis>
          Changes to this property take effect immediately but will
          only impact new SSL/TLS-based sessions created after the
          change.
        </adm:synopsis>
      </adm:none>
    </adm:requires-admin-action>
    <adm:default-behavior>
      <adm:alias>
        <adm:synopsis>
          Uses the default set of SSL cipher suites provided by the
          server's JVM.
        </adm:synopsis>
      </adm:alias>
    </adm:default-behavior>
    <adm:syntax>
      <adm:string />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-ssl-cipher-suite</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="max-blocked-write-time-limit" advanced="true">
    <adm:synopsis>
      Specifies the maximum length of time that attempts to write data
      to HTTP clients should be allowed to block.
    </adm:synopsis>
    <adm:description>
      If an attempt to write data to a client takes longer than this
      length of time, then the client connection is terminated.
    </adm:description>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>2 minutes</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:duration base-unit="ms" lower-limit="0" />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-max-blocked-write-time-limit</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
</adm:managed-object>
opends/src/admin/defn/org/opends/server/admin/std/LDAPConnectionHandlerConfiguration.xml
@@ -24,7 +24,7 @@
  !
  !
  !      Copyright 2007-2009 Sun Microsystems, Inc.
  !      Portions copyright 2011 ForgeRock AS
  !      Portions copyright 2011-2013 ForgeRock AS
  ! -->
<adm:managed-object name="ldap-connection-handler"
  plural-name="ldap-connection-handlers"
@@ -117,6 +117,9 @@
  <adm:property-reference name="listen-port" />
  <adm:property-reference name="use-ssl" />
  <adm:property-reference name="ssl-cert-nickname" />
  <adm:property-reference name="use-tcp-keep-alive" />
  <adm:property-reference name="use-tcp-no-delay" />
  <adm:property-reference name="allow-tcp-reuse-address" />
  <adm:property name="key-manager-provider">
    <adm:synopsis>
      Specifies the name of the key manager that should be used with
@@ -297,97 +300,6 @@
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="use-tcp-keep-alive" advanced="true">
    <adm:synopsis>
      Indicates whether the
      <adm:user-friendly-name />
      should use TCP keep-alive.
    </adm:synopsis>
    <adm:description>
      If enabled, the SO_KEEPALIVE socket option is used to indicate that TCP
      keepalive messages should periodically be sent to the client to
      verify that the associated connection is still valid. This may
      also help prevent cases in which intermediate network hardware
      could silently drop an otherwise idle client connection, provided
      that the keepalive interval configured in the underlying operating
      system is smaller than the timeout enforced by the network
      hardware.
    </adm:description>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>true</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:boolean />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-use-tcp-keep-alive</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="use-tcp-no-delay" advanced="true">
    <adm:synopsis>
      Indicates whether the
      <adm:user-friendly-name />
      should use TCP no-delay.
    </adm:synopsis>
    <adm:description>
      If enabled, the TCP_NODELAY socket option is used to ensure
      that response messages to the client are sent immediately rather
      than potentially waiting to determine whether additional response
      messages can be sent in the same packet. In most cases, using the
      TCP_NODELAY socket option provides better performance and
      lower response times, but disabling it may help for some cases in
      which the server sends a large number of entries to a client
      in response to a search request.
    </adm:description>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>true</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:boolean />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-use-tcp-no-delay</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="allow-tcp-reuse-address" advanced="true">
    <adm:synopsis>
      Indicates whether the
      <adm:user-friendly-name />
      should reuse socket descriptors.
    </adm:synopsis>
    <adm:description>
      If enabled, the SO_REUSEADDR socket option is used on the
      server listen socket to potentially allow the reuse of socket
      descriptors for clients in a TIME_WAIT state. This may help the
      server avoid temporarily running out of socket descriptors in
      cases in which a very large number of short-lived connections have
      been established from the same client system.
    </adm:description>
    <adm:requires-admin-action>
      <adm:component-restart />
    </adm:requires-admin-action>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>true</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:boolean />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-allow-tcp-reuse-address</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="send-rejection-notice" advanced="true">
    <adm:synopsis>
      Indicates whether the
opends/src/admin/defn/org/opends/server/admin/std/Package.xml
@@ -24,7 +24,7 @@
  !
  !
  !      Copyright 2007-2009 Sun Microsystems, Inc.
  !      Portions Copyright 2011 ForgeRock AS
  !      Portions Copyright 2011-2013 ForgeRock AS
  ! -->
<adm:package name="org.opends.server.admin.std"
  xmlns:adm="http://www.opends.org/admin"
@@ -484,4 +484,95 @@
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="use-tcp-keep-alive" advanced="true">
    <adm:synopsis>
      Indicates whether the
      <adm:user-friendly-name />
      should use TCP keep-alive.
    </adm:synopsis>
    <adm:description>
      If enabled, the SO_KEEPALIVE socket option is used to indicate that TCP
      keepalive messages should periodically be sent to the client to
      verify that the associated connection is still valid. This may
      also help prevent cases in which intermediate network hardware
      could silently drop an otherwise idle client connection, provided
      that the keepalive interval configured in the underlying operating
      system is smaller than the timeout enforced by the network
      hardware.
    </adm:description>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>true</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:boolean />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-use-tcp-keep-alive</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="use-tcp-no-delay" advanced="true">
    <adm:synopsis>
      Indicates whether the
      <adm:user-friendly-name />
      should use TCP no-delay.
    </adm:synopsis>
    <adm:description>
      If enabled, the TCP_NODELAY socket option is used to ensure
      that response messages to the client are sent immediately rather
      than potentially waiting to determine whether additional response
      messages can be sent in the same packet. In most cases, using the
      TCP_NODELAY socket option provides better performance and
      lower response times, but disabling it may help for some cases in
      which the server sends a large number of entries to a client
      in response to a search request.
    </adm:description>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>true</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:boolean />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-use-tcp-no-delay</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="allow-tcp-reuse-address" advanced="true">
    <adm:synopsis>
      Indicates whether the
      <adm:user-friendly-name />
      should reuse socket descriptors.
    </adm:synopsis>
    <adm:description>
      If enabled, the SO_REUSEADDR socket option is used on the
      server listen socket to potentially allow the reuse of socket
      descriptors for clients in a TIME_WAIT state. This may help the
      server avoid temporarily running out of socket descriptors in
      cases in which a very large number of short-lived connections have
      been established from the same client system.
    </adm:description>
    <adm:requires-admin-action>
      <adm:component-restart />
    </adm:requires-admin-action>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>true</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:boolean />
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-allow-tcp-reuse-address</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
</adm:package>
opends/src/admin/messages/HTTPConnectionHandlerCfgDefn.properties
New file
@@ -0,0 +1,56 @@
user-friendly-name=HTTP Connection Handler
user-friendly-plural-name=HTTP Connection Handlers
synopsis=The HTTP Connection Handler is used to interact with clients using HTTP.
description=It provides full support for Rest2LDAP.
constraint.1.synopsis=A Key Manager Provider must be specified when this HTTP Connection Handler is enabled and it is configured to use SSL.
constraint.2.synopsis=A Trust Manager Provider must be specified when this HTTP Connection Handler is enabled and it is configured to use SSL.
property.accept-backlog.synopsis=Specifies the maximum number of pending connection attempts that are allowed to queue up in the accept backlog before the server starts rejecting new connection attempts.
property.accept-backlog.description=This is primarily an issue for cases in which a large number of connections are established to the server in a very short period of time (for example, a benchmark utility that creates a large number of client threads that each have their own connection to the server) and the connection handler is unable to keep up with the rate at which the new connections are established.
property.allowed-client.synopsis=Specifies a set of host names or address masks that determine the clients that are allowed to establish connections to this HTTP Connection Handler.
property.allowed-client.description=Valid values include a host name, a fully qualified domain name, a domain name, an IP address, or a subnetwork with subnetwork mask.
property.allowed-client.default-behavior.alias.synopsis=All clients with addresses that do not match an address on the deny list are allowed. If there is no deny list, then all clients are allowed.
property.allowed-client.requires-admin-action.synopsis=Changes to this property take effect immediately and do not interfere with connections that may have already been established.
property.allow-tcp-reuse-address.synopsis=Indicates whether the HTTP Connection Handler should reuse socket descriptors.
property.allow-tcp-reuse-address.description=If enabled, the SO_REUSEADDR socket option is used on the server listen socket to potentially allow the reuse of socket descriptors for clients in a TIME_WAIT state. This may help the server avoid temporarily running out of socket descriptors in cases in which a very large number of short-lived connections have been established from the same client system.
property.buffer-size.synopsis=Specifies the size in bytes of the HTTP response message write buffer.
property.buffer-size.description=This property specifies write buffer size allocated by the server for each client connection and used to buffer HTTP response messages data when writing.
property.denied-client.synopsis=Specifies a set of host names or address masks that determine the clients that are not allowed to establish connections to this HTTP Connection Handler.
property.denied-client.description=Valid values include a host name, a fully qualified domain name, a domain name, an IP address, or a subnetwork with subnetwork mask. If both allowed and denied client masks are defined and a client connection matches one or more masks in both lists, then the connection is denied. If only a denied list is specified, then any client not matching a mask in that list is allowed.
property.denied-client.default-behavior.alias.synopsis=If an allow list is specified, then only clients with addresses on the allow list are allowed. Otherwise, all clients are allowed.
property.denied-client.requires-admin-action.synopsis=Changes to this property take effect immediately and do not interfere with connections that may have already been established.
property.enabled.synopsis=Indicates whether the HTTP Connection Handler is enabled.
property.java-class.synopsis=Specifies the fully-qualified name of the Java class that provides the HTTP Connection Handler implementation.
property.key-manager-provider.synopsis=Specifies the name of the key manager that should be used with this HTTP Connection Handler .
property.key-manager-provider.requires-admin-action.synopsis=Changes to this property take effect immediately, but only for subsequent attempts to access the key manager provider for associated client connections.
property.key-manager-provider.syntax.aggregation.constraint-synopsis=The referenced key manager provider must be enabled when the HTTP Connection Handler is enabled and configured to use SSL.
property.listen-address.synopsis=Specifies the address or set of addresses on which this HTTP Connection Handler should listen for connections from HTTP clients.
property.listen-address.description=Multiple addresses may be provided as separate values for this attribute. If no values are provided, then the HTTP Connection Handler listens on all interfaces.
property.listen-port.synopsis=Specifies the port number on which the HTTP Connection Handler will listen for connections from clients.
property.listen-port.description=Only a single port number may be provided.
property.max-blocked-write-time-limit.synopsis=Specifies the maximum length of time that attempts to write data to HTTP clients should be allowed to block.
property.max-blocked-write-time-limit.description=If an attempt to write data to a client takes longer than this length of time, then the client connection is terminated.
property.max-request-size.synopsis=Specifies the size in bytes of the largest HTTP request message that will be allowed by this HTTP Connection handler.
property.max-request-size.description=This can help prevent denial-of-service attacks by clients that indicate they send extremely large requests to the server causing it to attempt to allocate large amounts of memory.
property.ssl-cert-nickname.synopsis=Specifies the nickname (also called the alias) of the certificate that the HTTP Connection Handler should use when performing SSL communication.
property.ssl-cert-nickname.description=This is only applicable when the HTTP Connection Handler is configured to use SSL.
property.ssl-cert-nickname.default-behavior.alias.synopsis=Let the server decide.
property.ssl-cipher-suite.synopsis=Specifies the names of the SSL cipher suites that are allowed for use in SSL communication.
property.ssl-cipher-suite.default-behavior.alias.synopsis=Uses the default set of SSL cipher suites provided by the server's JVM.
property.ssl-cipher-suite.requires-admin-action.synopsis=Changes to this property take effect immediately but will only impact new SSL/TLS-based sessions created after the change.
property.ssl-client-auth-policy.synopsis=Specifies the policy that the HTTP Connection Handler should use regarding client SSL certificates.
property.ssl-client-auth-policy.description=This is only applicable if clients are allowed to use SSL.
property.ssl-client-auth-policy.syntax.enumeration.value.disabled.synopsis=Clients are not required to provide their own certificates when performing SSL negotiation.
property.ssl-client-auth-policy.syntax.enumeration.value.optional.synopsis=Clients are requested to provide their own certificates when performing SSL negotiation, but still accept the connection even if the client does not provide a certificate.
property.ssl-client-auth-policy.syntax.enumeration.value.required.synopsis=Clients are required to provide their own certificates when performing SSL negotiation and are refused access if the do not provide a certificate.
property.ssl-protocol.synopsis=Specifies the names of the SSL protocols that are allowed for use in SSL communication.
property.ssl-protocol.default-behavior.alias.synopsis=Uses the default set of SSL protocols provided by the server's JVM.
property.ssl-protocol.requires-admin-action.synopsis=Changes to this property take effect immediately but only impact new SSL/TLS-based sessions created after the change.
property.trust-manager-provider.synopsis=Specifies the name of the trust manager that should be used with the HTTP Connection Handler .
property.trust-manager-provider.requires-admin-action.synopsis=Changes to this property take effect immediately, but only for subsequent attempts to access the trust manager provider for associated client connections.
property.trust-manager-provider.syntax.aggregation.constraint-synopsis=The referenced trust manager provider must be enabled when the HTTP Connection Handler is enabled and configured to use SSL.
property.use-ssl.synopsis=Indicates whether the HTTP Connection Handler should use SSL.
property.use-ssl.description=If enabled, the HTTP Connection Handler will use SSL to encrypt communication with the clients.
property.use-tcp-keep-alive.synopsis=Indicates whether the HTTP Connection Handler should use TCP keep-alive.
property.use-tcp-keep-alive.description=If enabled, the SO_KEEPALIVE socket option is used to indicate that TCP keepalive messages should periodically be sent to the client to verify that the associated connection is still valid. This may also help prevent cases in which intermediate network hardware could silently drop an otherwise idle client connection, provided that the keepalive interval configured in the underlying operating system is smaller than the timeout enforced by the network hardware.
property.use-tcp-no-delay.synopsis=Indicates whether the HTTP Connection Handler should use TCP no-delay.
property.use-tcp-no-delay.description=If enabled, the TCP_NODELAY socket option is used to ensure that response messages to the client are sent immediately rather than potentially waiting to determine whether additional response messages can be sent in the same packet. In most cases, using the TCP_NODELAY socket option provides better performance and lower response times, but disabling it may help for some cases in which the server sends a large number of entries to a client in response to a search request.
opends/src/messages/messages/protocol.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions copyright 2013 ForgeRock AS
@@ -497,13 +498,13 @@
 defined in configuration entry %s was unable to create any of the socket \
 channels on any of the configured addresses.  This connection handler will be \
 disabled
MILD_ERR_LDAP_CONNHANDLER_DENIED_CLIENT_180=The connection attempt from \
MILD_ERR_CONNHANDLER_DENIED_CLIENT_180=The connection attempt from \
 client %s to %s has been rejected because the client was included in one of \
 the denied address ranges
MILD_ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT_181=The connection attempt from \
MILD_ERR_CONNHANDLER_DISALLOWED_CLIENT_181=The connection attempt from \
 client %s to %s has been rejected because the client was not included in one \
 of the allowed address ranges
INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=An internal error \
INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=An internal error \
 prevented the Directory Server from properly registering the client \
 connection from %s to %s with an appropriate request handler:  %s
MILD_ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION_183=The LDAP connection \
@@ -606,7 +607,7 @@
 handler thread "%s" encountered an unexpected error that would have caused \
 the thread to die:  %s.  The error has been caught and the request handler \
 should continue operating as normal
MILD_ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER_214=The attempt to register this \
MILD_ERR_CONNHANDLER_REJECTED_BY_SERVER_214=The attempt to register this \
 connection with the Directory Server was rejected.  This might indicate that \
 the server already has the maximum allowed number of concurrent connections \
 established, or that it is in a restricted access mode
@@ -870,9 +871,9 @@
 not allow clients to close a StartTLS session on a client connection while \
 leaving the underlying TCP connection active.  The TCP connection will be \
 closed
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=Started listening for new \
NOTICE_CONNHANDLER_STARTED_LISTENING_276=Started listening for new \
 connections on %s
NOTICE_LDAP_CONNHANDLER_STOPPED_LISTENING_277=Stopped listening for new \
NOTICE_CONNHANDLER_STOPPED_LISTENING_277=Stopped listening for new \
 connections on %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_NULL_278=Cannot decode the provided ASN.1 \
 element as an LDAP paged results control value because the element is null
@@ -1311,10 +1312,8 @@
 matching rule ID.  At least one of them must be provided
MILD_ERR_LDAPV2_CONTROLS_NOT_ALLOWED_431=LDAPv2 clients are not allowed to \
 use request controls
SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_BIND_432=The LDAP connection handler \
SEVERE_ERR_CONNHANDLER_CANNOT_BIND_432=The %s connection handler \
 defined in configuration entry %s was unable to bind to %s:%d:  %s
SEVERE_ERR_JMX_CONNHANDLER_CANNOT_BIND_433=The JMX connection handler defined \
 in configuration entry %s was unable to bind to port %d:  %s
MILD_ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES_434=You do not have sufficient \
 privileges to perform add operations through JMX
MILD_ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES_435=You do not have sufficient \
@@ -1431,3 +1430,8 @@
MILD_ERR_LDAP_CLIENT_IO_ERROR_DURING_READ_1513=An IO error occurred while \
 reading a request from the client: %s
MILD_ERR_LDAP_CLIENT_IO_ERROR_BEFORE_READ_1514=Connection reset by client
INFO_HTTP_CONNHANDLER_STARTTLS_NOT_SUPPORTED_1515=The HTTP connection handler \
 does not support StartTLS operations
MILD_ERR_CONNHANDLER_CONFIG_CHANGES_REQUIRE_RESTART_1516=The server received \
 configuration changes that require a restart of the %s connection handler \
 to take effect
opends/src/messages/messages/protocol_ca_ES.properties
@@ -1,2 +1,2 @@
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=Iniciada l'escolta de noves connexions en %s
NOTICE_LDAP_CONNHANDLER_STOPPED_LISTENING_277=Aturada l'escolta de noves connexions en %s
NOTICE_CONNHANDLER_STARTED_LISTENING_276=Iniciada l'escolta de noves connexions en %s
NOTICE_CONNHANDLER_STOPPED_LISTENING_277=Aturada l'escolta de noves connexions en %s
opends/src/messages/messages/protocol_de.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions copyright 2013 ForgeRock AS
@@ -197,9 +198,9 @@
FATAL_ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED_177=Der in Konfigurationseintrag %s definierte LDAP-Verbindungshandler konnte keinen Selektor \u00f6ffnen, damit er die zugeh\u00f6rigen Annahme-Sockets multiplexen kann:  %s.  Dieser Verbindungshandler wird deaktiviert
SEVERE_ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED_178=Der in Konfigurationseintrag %s definierte LDAP-Verbindungshandler konnte keinen Serversocket-Channel erstellen, um Verbindungen in %s zu akzeptieren:%d:  %s.  Der Directory-Server h\u00f6rt keine neuen Verbindungen auf dieser Adresse ab
FATAL_ERR_LDAP_CONNHANDLER_NO_ACCEPTORS_179=Der in Konfigurationseintrag %s definierte LDAP-Verbindungshandler konnte keine Socket-Channels auf einer der konfigurierten Adressen erstellen.  Diese Verbindung wird deaktiviert
MILD_ERR_LDAP_CONNHANDLER_DENIED_CLIENT_180=Der Verbindungsversuch von Client %s zu %s wurde abgelehnt, da der Client in einem der Bereiche f\u00fcr verweigerte Adressen enthalten war
MILD_ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT_181=Der Verbindungsversuch von Client %s zu %s wurde abgelehnt, da der Client nicht in einem der Bereiche f\u00fcr zul\u00e4ssige Adressen enthalten war
INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=Aufgrund eines internen Fehlers konnte Directory-Server die Clientverbindung von %s zu %s nicht mit einer geeigneten Behandlungsroutine f\u00fcr Anforderungen registrieren:  %s
MILD_ERR_CONNHANDLER_DENIED_CLIENT_180=Der Verbindungsversuch von Client %s zu %s wurde abgelehnt, da der Client in einem der Bereiche f\u00fcr verweigerte Adressen enthalten war
MILD_ERR_CONNHANDLER_DISALLOWED_CLIENT_181=Der Verbindungsversuch von Client %s zu %s wurde abgelehnt, da der Client nicht in einem der Bereiche f\u00fcr zul\u00e4ssige Adressen enthalten war
INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=Aufgrund eines internen Fehlers konnte Directory-Server die Clientverbindung von %s zu %s nicht mit einer geeigneten Behandlungsroutine f\u00fcr Anforderungen registrieren:  %s
MILD_ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION_183=Die im Konfigurationseintrag %s definierte LDAP-Verbindungsbehandlungsroutine konnte eine neue Clientverbindung nicht annehmen:  %s
FATAL_ERR_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES_184=Der in Konfigurationseintrag %s definierte LDAP-Verbindungshandler hat beim Versuch, die Client-Verbindungen zu akzeptieren, aufeinander folgende Fehler verursacht:  %s.  Dieser Verbindungshandler wird deaktiviert
FATAL_ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR_185=Der in Konfigurationseintrag %s definierte LDAP-Verbindungshandler hat beim Versuch, neue Verbindungen abzuh\u00f6ren, einen unerwarteten Fehler verursacht:  %s.  Dieser Verbindungshandler wird deaktiviert
@@ -231,7 +232,7 @@
MILD_ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED_211=Der Client mit der Verbindungs-ID %d hat sich bei Directory-Server unter Verwendung von LDAPv2 authentifiziert, versuchte jedoch, eine Anforderung f\u00fcr einen erweiterten Vorgang (LDAP-Nachricht-ID %d) zu senden, die f\u00fcr LDAPv2-Clients nicht zul\u00e4ssig ist.  Die Verbindung wird beendet
MILD_ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION_212=Es wurde ein Versuch unternommen, den LDAP-Statistik-\u00dcberwachungsanbieter, wie in Konfigurationseintrag %s festgelegt, zu initialisieren.  Dieser \u00dcberwachungsanbieter sollte nur dynamisch innerhalb von Directory-Server und nicht aus der Konfiguration heraus erstellt werden
SEVERE_ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION_213=In LDAP-Anforderungshandlerthread "%s" ist ein unerwarteter Fehler aufgetreten, wodurch der Thread abgebrochen wurde:  %s.  Der Fehler wurde aufgefangen und der Anforderungshandler sollte den normalen Betrieb wieder aufnehmen
MILD_ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER_214=Der Versuch, diese Verbindung bei Directory-Server zu registrieren, wurde abgelehnt.  Dies k\u00f6nnte bedeuten, dass der Server bereits die maximal zul\u00e4ssige Anzahl gleichzeitiger Verbindungen eingerichtet hat oder sich in einem Modus mit eingeschr\u00e4nktem Zugriff befindet
MILD_ERR_CONNHANDLER_REJECTED_BY_SERVER_214=Der Versuch, diese Verbindung bei Directory-Server zu registrieren, wurde abgelehnt.  Dies k\u00f6nnte bedeuten, dass der Server bereits die maximal zul\u00e4ssige Anzahl gleichzeitiger Verbindungen eingerichtet hat oder sich in einem Modus mit eingeschr\u00e4nktem Zugriff befindet
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS_215=Adresse oder Adressensatz, auf denen die Verbindungsbehandlungsroutine Clientverbindungen annehmen kann.  Wird kein Wert angegeben, nimmt der Server Verbindungen auf allen aktiven Adressen an.  \u00c4nderungen an diesem Konfigurationsattribut werden erst wirksam, wenn die Verbindungsbehandlungsroutine deaktiviert und erneut aktiviert wird, oder wenn Directory-Server neu gestartet wird
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT_216=TCP-Port, auf dem diese Verbindungsbehandlungsroutine Clientverbindungen annehmen kann.  \u00c4nderungen an diesem Konfigurationsattribut werden erst wirksam, wenn die Verbindungsbehandlungsroutine deaktiviert und erneut aktiviert wird oder wenn Directory-Server neu gestartet wird
INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS_217=Gibt einen Satz Adressenmasken an, mit denen die Adressen von Clients bestimmt werden k\u00f6nnen, welche zur Einrichtung von Verbindungen zu dieser Verbindungsbehandlungsroutine berechtigt sind.  Werden keine Werte angegeben, werden alle Clients mit Adressen zugelassen, die mit keiner Adresse auf der Ausschlussliste \u00fcbereinstimmen.  \u00c4nderungen an diesem Konfigurationsattribut werden sofort wirksam, beeintr\u00e4chtigen aber keine Verbindungen, die bereits eingerichtet sind
@@ -293,8 +294,8 @@
MILD_ERR_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER_273=Bei dem Versuch der Erstellung eines TLS-Verbindungssicherheitsanbieters f\u00fcr diese Client-Verbindung zur Verwendung mit StartTLS ist ein Fehler aufgetreten:  %s
MILD_ERR_LDAP_TLS_NO_PROVIDER_274=StartTLS\u00b7ist\u00b7f\u00fcr\u00b7diese\u00b7Clientverbindung\u00b7nicht\u00b7verf\u00fcgbar,\u00b7da\u00b7die\u00b7Verbindung\u00b7keinen\u00b7Zugriff\u00b7auf\u00b7einen TLS-Verbindungssicherheitsanbieter hat
MILD_ERR_LDAP_TLS_CLOSURE_NOT_ALLOWED_275=Die LDAP-Verbindungsbehandlungsroutine berechtigt Clients nicht zum Schlie\u00dfen einer StartTLS-Sitzung f\u00fcr eine Clientverbindung, w\u00e4hrend die zugrunde liegende TCP-Verbindung aktiviert bleibt.  Die TCP-Verbindung wird geschlossen
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=Abh\u00f6ren auf neue Verbindungen auf %s wurde gestartet
NOTICE_LDAP_CONNHANDLER_STOPPED_LISTENING_277=Abh\u00f6ren auf neue Verbindungen auf %s wurde gestoppt
NOTICE_CONNHANDLER_STARTED_LISTENING_276=Abh\u00f6ren auf neue Verbindungen auf %s wurde gestartet
NOTICE_CONNHANDLER_STOPPED_LISTENING_277=Abh\u00f6ren auf neue Verbindungen auf %s wurde gestoppt
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_NULL_278=Das angegebene ASN.1-Element kann nicht als Steuerungswert f\u00fcr LDAP-Paged-Results entschl\u00fcsselt werden, da das Element ein Nullelement ist
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE_279=Das angegebene ASN.1-Element kann nicht als Steuerungswert f\u00fcr LDAP-Paged-Results entschl\u00fcsselt werden, da das Element nicht als Sequenz entschl\u00fcsselt werden konnte:  %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT_280=Das angegebene ASN.1-Element kann nicht als Steuerungswert f\u00fcr LDAP-Paged-Results entschl\u00fcsselt werden, da die Anforderungssequenz eine ung\u00fcltige Anzahl an Elementen enth\u00e4lt (2 erwartet, %d erhalten)
@@ -449,8 +450,7 @@
MILD_ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE_429=Der angegebene Suchfilter enth\u00e4lt einen ung\u00fcltigen Attributtyp '%s' mit dem ung\u00fcltigen Zeichen '%s' auf Position %d
MILD_ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR_430=Der angegebene Suchfilter "%s" konnte nicht entschl\u00fcsselt werden, da die erweiterbare \u00dcbereinstimmungskomponente, die an Position %d beginnt, entweder keine Attributbeschreibung oder keine \u00fcbereinstimmende Regel-ID enthielt.  Mindestens eines dieser beiden Elemente muss angegeben werden
MILD_ERR_LDAPV2_CONTROLS_NOT_ALLOWED_431=LDAPv2-Clients sind nicht zur Verwendung von Anforderungssteuerungen berechtigt
SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_BIND_432=Der in Konfigurationseintrag %s definierte LDAP-Verbindungshandler konnte keine Verkn\u00fcpfung zu %s herstellen:%d:  %s
SEVERE_ERR_JMX_CONNHANDLER_CANNOT_BIND_433=Der in Konfigurationseintrag %s definierte JMX-Verbindungshandler konnte keine Verkn\u00fcpfung zu Port %d herstellen:  %s
SEVERE_ERR_CONNHANDLER_CANNOT_BIND_432=Der in Konfigurationseintrag %s definierte %s-Verbindungshandler konnte keine Verkn\u00fcpfung zu %s herstellen:%d:  %s
MILD_ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES_434=Sie haben keine ausreichenden Berechtigungen, um Hinzuf\u00fcgungsvorg\u00e4nge \u00fcber JMX durchf\u00fchren zu k\u00f6nnen
MILD_ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES_435=Sie haben keine ausreichenden Berechtigungen, um L\u00f6schvorg\u00e4nge \u00fcber JMX durchf\u00fchren zu k\u00f6nnen
MILD_ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES_436=Sie haben keine ausreichenden Berechtigungen, um \u00c4nderungen \u00fcber JMX durchf\u00fchren zu k\u00f6nnen
@@ -498,4 +498,3 @@
MILD_ERR_ECLN_NO_CONTROL_VALUE_1509=Die angegebene Steuerung f\u00fcr die Eintrags\u00e4nderungsbenachrichtigung kann nicht entschl\u00fcsselt werden, da sie keinen Wert enth\u00e4lt
MILD_ERR_ECLN_CANNOT_DECODE_VALUE_1510=Die angegebene Steuerung f\u00fcr die Eintrags\u00e4nderungsbenachrichtigung kann nicht entschl\u00fcsselt werden, da beim Versuch, den Steuerungswert zu entschl\u00fcsseln, ein Fehler aufgetreten ist:  %s
SEVERE_ERR_UNEXPECTED_CONNECTION_CLOSURE_1511=Die Verbindung zum Directory-Server wurde beim Warten auf eine Antwort geschlossen
opends/src/messages/messages/protocol_es.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions copyright 2013 ForgeRock AS
@@ -197,9 +198,9 @@
FATAL_ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED_177=El controlador de conexi\u00f3n LDAP definido en la entrada de configuraci\u00f3n %s no pudo abrir un selector para poder multiplexar los sockets de aceptaci\u00f3n asociados:  %s.  Este controlador de conexi\u00f3n se inhabilitar\u00e1
SEVERE_ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED_178=El controlador de conexi\u00f3n LDAP definido en la entrada de configuraci\u00f3n %s no pudo crear un canal de socket de servidor para aceptar conexiones en %s:%d:  %s. El Servidor de directorios no escuchar\u00e1 nuevas conexiones en esa direcci\u00f3n
FATAL_ERR_LDAP_CONNHANDLER_NO_ACCEPTORS_179=El controlador de conexi\u00f3n LDAP definido en la entrada de configuraci\u00f3n %s no pudo crear ninguno de los canales de socket en ninguna de las direcciones configuradas.  El manejador de esta conexi\u00f3n se desactivar\u00e1
MILD_ERR_LDAP_CONNHANDLER_DENIED_CLIENT_180=El intento de conexi\u00f3n desde el cliente %s a %s se ha rechazado, el cliente se incluy\u00f3 en uno de los rangos de direcciones denegados
MILD_ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT_181=El intento de conexi\u00f3n desde el cliente %s a %s se ha rechazado, el cliente no se incluy\u00f3 en uno de los rangos de direcciones permitidos
INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=Un error interno impidi\u00f3 a Directory Server registrar correctamente la conexi\u00f3n de cliente de %s a %s con un controlador de solicitud adecuado:  %s
MILD_ERR_CONNHANDLER_DENIED_CLIENT_180=El intento de conexi\u00f3n desde el cliente %s a %s se ha rechazado, el cliente se incluy\u00f3 en uno de los rangos de direcciones denegados
MILD_ERR_CONNHANDLER_DISALLOWED_CLIENT_181=El intento de conexi\u00f3n desde el cliente %s a %s se ha rechazado, el cliente no se incluy\u00f3 en uno de los rangos de direcciones permitidos
INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=Un error interno impidi\u00f3 a Directory Server registrar correctamente la conexi\u00f3n de cliente de %s a %s con un controlador de solicitud adecuado:  %s
MILD_ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION_183=El controlador de conexi\u00f3n LDAP definido en la entrada de configuraci\u00f3n %s no pudo aceptar una nueva conexi\u00f3n de cliente:  %s
FATAL_ERR_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES_184=El controlador de conexi\u00f3n LDAP definido en la entrada de configuraci\u00f3n %s ha experimentado errores consecutivos al tratar de aceptar las conexiones de cliente:  %s.  Este controlador de conexi\u00f3n se inhabilitar\u00e1
FATAL_ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR_185=El controlador de conexi\u00f3n LDAP definido en la entrada de configuraci\u00f3n %s detect\u00f3 un error inesperado al tratar de escuchar nuevas conexiones:  %s.  Este controlador de conexi\u00f3n se inhabilitar\u00e1
@@ -231,7 +232,7 @@
MILD_ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED_211=El cliente con ID de conexi\u00f3n %d se autentic\u00f3 en Directory Server utilizando LDAPv2, pero intent\u00f3 enviar una solicitud de operaci\u00f3n ampliada (ID de mensaje LDAP %d), que no se permite para clientes LDAPv2.  Esta conexi\u00f3n finalizar\u00e1
MILD_ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION_212=Se intent\u00f3 inicializar el proveedor supervisor de estad\u00edsticas LDAP tal y como se define en la entrada de configuraci\u00f3n %s. Este proveedor de supervisi\u00f3n deber\u00e1 crearse solo de forma din\u00e1mica dentro del mismo Directory Server, y no dentro de la configuraci\u00f3n
SEVERE_ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION_213=El subproceso del controlador de solicitudes LDAP "%s" encontr\u00f3 un error inesperado que podr\u00eda haber finalizado el subproceso:  %s.  Se ha detectado el error, por lo que el controlador de solicitudes deber\u00eda seguir funcionando con normalidad
MILD_ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER_214=Se rechaz\u00f3 el intento de registrar esta conexi\u00f3n con Directory Server.  Esto podr\u00eda indicar que el servidor ya tiene establecido el n\u00famero m\u00e1ximo permitido de conexiones, o que se encuentra en modo de acceso restringido
MILD_ERR_CONNHANDLER_REJECTED_BY_SERVER_214=Se rechaz\u00f3 el intento de registrar esta conexi\u00f3n con Directory Server.  Esto podr\u00eda indicar que el servidor ya tiene establecido el n\u00famero m\u00e1ximo permitido de conexiones, o que se encuentra en modo de acceso restringido
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS_215=Direcci\u00f3n o conjunto de direcciones en las que este controlador de conexi\u00f3n puede aceptar conexiones de cliente.  Si no se especific\u00f3 ning\u00fan valor, el servidor aceptar\u00e1 conexiones en todas las direcciones activas.  Los cambios efectuados en este atributo de configuraci\u00f3n no tendr\u00e1n efecto hasta que el controlador de conexi\u00f3n se desactive y se vuelva a activar, o hasta que se reinicie Directory Server
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT_216=Puerto TCP en el que este controlador de conexi\u00f3n puede aceptar conexiones de cliente.  Los cambios efectuados en este atributo de configuraci\u00f3n no tendr\u00e1n efecto hasta que el controlador de conexi\u00f3n se desactive y se vuelva a activar, o hasta que se reinicie Directory Server
INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS_217=Especifica un conjunto de m\u00e1scaras de direcci\u00f3n que pueden utilizarse para determinar las direcciones de los clientes a los que se le permite establecer conexiones con este controlador de conexi\u00f3n.  Si no se especifica ning\u00fan valor, se permitir\u00e1n todos los clientes con direcciones que no coincidan con una de las direcciones de la lista de denegaci\u00f3n.  Los cambios realizados en este atributo de configuraci\u00f3n se aplicar\u00e1n inmediatamente, pero no interferir\u00e1n con conexiones que podr\u00edan estar ya establecidas
@@ -293,8 +294,8 @@
MILD_ERR_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER_273=Se produjo un error al intentar conectar un proveedor de seguridad de conexi\u00f3n TLS para que esta conexi\u00f3n de cliente la utilice con StartTLS:  %s
MILD_ERR_LDAP_TLS_NO_PROVIDER_274=StartTLS no est\u00e1 disponible en esta conexi\u00f3n de cliente, la conexi\u00f3n no tiene acceso a un proveedor de seguridad de conexi\u00f3n TLS
MILD_ERR_LDAP_TLS_CLOSURE_NOT_ALLOWED_275=El controlador de conexi\u00f3n LDAP no permite a los clientes cerrar una sesi\u00f3n StartTLS en una conexi\u00f3n de cliente al dejar activa la conexi\u00f3n TCP subyacente.  Se cerrar\u00e1 la conexi\u00f3n TCP
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=Se empez\u00f3 a recibir nuevas conexiones en %s
NOTICE_LDAP_CONNHANDLER_STOPPED_LISTENING_277=Se dej\u00f3 de recibir nuevas conexiones en %s
NOTICE_CONNHANDLER_STARTED_LISTENING_276=Se empez\u00f3 a recibir nuevas conexiones en %s
NOTICE_CONNHANDLER_STOPPED_LISTENING_277=Se dej\u00f3 de recibir nuevas conexiones en %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_NULL_278=No es posible descodificar el elemento ASN.1 proporcionado como un valor de control de resultados paginados LDAP, el elemento es nulo
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE_279=No es posible descodificar el elemento ASN.1 proporcionado como valor de control de resultados paginados LDAP, el elemento no pudo descodificarse como una secuencia:  %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT_280=No es posible descodificar el elemento ASN.1 proporcionado como valor de control de resultados paginados LDAP, la secuencia de petici\u00f3n tiene un n\u00famero de elementos no v\u00e1lido (se esperaba 2, se recibi\u00f3 %d)
@@ -449,8 +450,7 @@
MILD_ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE_429=El filtro de b\u00fasqueda proporcionado contiene un tipo de atributo no v\u00e1lido "%s" con un car\u00e1cter no v\u00e1lido "%s" en la posici\u00f3n %d
MILD_ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR_430=El filtro de b\u00fasqueda especificado "%s" no se pudo descodificar porque el componente de coincidencia extensible que comenzaba en la posici\u00f3n %d no inclu\u00eda ninguna descripci\u00f3n de atributo ni ID. de regla coincidente.  Debe especificarse, al menos, uno de estos elementos
MILD_ERR_LDAPV2_CONTROLS_NOT_ALLOWED_431=No se permite a los clientes LDAPv2 utilizar controles de solicitud
SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_BIND_432=El controlador de conexi\u00f3n LDAP definido en la entrada de configuraci\u00f3n %s no pudo enlazar con %s:%d:  %s
SEVERE_ERR_JMX_CONNHANDLER_CANNOT_BIND_433=El controlador de conexi\u00f3n JMX definido en la entrada de configuraci\u00f3n %s no pudo enlazar con el puerto %d:  %s
SEVERE_ERR_CONNHANDLER_CANNOT_BIND_432=El controlador de conexi\u00f3n %s definido en la entrada de configuraci\u00f3n %s no pudo enlazar con %s:%d:  %s
MILD_ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES_434=No cuenta con privilegios suficientes para efectuar operaciones de adici\u00f3n a trav\u00e9s de JMX
MILD_ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES_435=No cuenta con privilegios suficientes para efectuar operaciones de eliminaci\u00f3n a trav\u00e9s de JMX
MILD_ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES_436=No cuenta con privilegios suficientes para efectuar operaciones de modificaci\u00f3n a trav\u00e9s de JMX
@@ -498,4 +498,3 @@
MILD_ERR_ECLN_NO_CONTROL_VALUE_1509=No es posible descodificar el control de notificaci\u00f3n de registro de cambios de entrada proporcionado, no tiene un valor
MILD_ERR_ECLN_CANNOT_DECODE_VALUE_1510=No es posible descodificar el control de notificaci\u00f3n de registro de cambios de entrada proporcionado, se produjo un error al intentar descodificar el valor de control:  %s
SEVERE_ERR_UNEXPECTED_CONNECTION_CLOSURE_1511=Se ha cerrado la conexi\u00f3n al Servidor de directorios mientras se esperaba una respuesta
opends/src/messages/messages/protocol_fr.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions copyright 2013 ForgeRock AS
@@ -197,9 +198,9 @@
FATAL_ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED_177=Le gestionnaire de connexion LDAP d\u00e9fini dans l\u2019entr\u00e9e de configuration %s n\u2019a pas pu ouvrir un s\u00e9lecteur pour lui permettre de multiplexer les sockets d\u2019acceptation associ\u00e9s\u00a0: %s. Ce gestionnaire de connexion va \u00eatre d\u00e9sactiv\u00e9
SEVERE_ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED_178=Le gestionnaire de connexion LDAP d\u00e9fini dans l\u2019entr\u00e9e de configuration %s n\u2019a pas pu cr\u00e9er de canal de socket serveur pour accepter les connexions sur %s:%d\u00a0: %s. Directory Server ne va pas \u00e9couter les nouvelles connexions \u00e0 cette adresse
FATAL_ERR_LDAP_CONNHANDLER_NO_ACCEPTORS_179=Le gestionnaire de connexion LDAP d\u00e9fini dans l\u2019entr\u00e9e de configuration %s n\u2019a pu cr\u00e9er aucun des canaux de socket, sur aucune des adresses configur\u00e9es.  Ce gestionnaire de connexion va \u00eatre d\u00e9sactiv\u00e9
MILD_ERR_LDAP_CONNHANDLER_DENIED_CLIENT_180=La tentative de connexion du client %s \u00e0 %s a \u00e9t\u00e9 refus\u00e9e, car le client \u00e9tait inclus dans l'une des plages d'adresses refus\u00e9es
MILD_ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT_181=La tentative de connexion du client %s \u00e0 %s a \u00e9t\u00e9 refus\u00e9e, car le client n'\u00e9tait pas inclus dans l'une des plages d'adresses autoris\u00e9es
INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182= Une erreur interne a emp\u00each\u00e9 Directory Server d'enregistrer correctement la connexion cliente de %s \u00e0 %s avec un gestionnaire de demandes appropri\u00e9\u00a0: %s
MILD_ERR_CONNHANDLER_DENIED_CLIENT_180=La tentative de connexion du client %s \u00e0 %s a \u00e9t\u00e9 refus\u00e9e, car le client \u00e9tait inclus dans l'une des plages d'adresses refus\u00e9es
MILD_ERR_CONNHANDLER_DISALLOWED_CLIENT_181=La tentative de connexion du client %s \u00e0 %s a \u00e9t\u00e9 refus\u00e9e, car le client n'\u00e9tait pas inclus dans l'une des plages d'adresses autoris\u00e9es
INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182= Une erreur interne a emp\u00each\u00e9 Directory Server d'enregistrer correctement la connexion cliente de %s \u00e0 %s avec un gestionnaire de demandes appropri\u00e9\u00a0: %s
MILD_ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION_183=Le gestionnaire de connexion LDAP d\u00e9fini dans l'entr\u00e9e de configuration %s n'a pas pu accepter une nouvelle connexion cliente\u00a0: %s
FATAL_ERR_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES_184=Le gestionnaire de connexion LDAP d\u00e9fini dans l\u2019entr\u00e9e de configuration %s a rencontr\u00e9 des \u00e9checs successifs lors de la tentative d\u2019acceptation des connexions client\u00a0: %s. Ce gestionnaire de connexion va \u00eatre d\u00e9sactiv\u00e9
FATAL_ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR_185=Le gestionnaire de connexion LDAP d\u00e9fini dans l\u2019entr\u00e9e de configuration %s a d\u00e9tect\u00e9 une erreur inattendue lors de la tentative d\u2019\u00e9coute des nouvelles connexions\u00a0: %s. Ce gestionnaire de connexion va \u00eatre d\u00e9sactiv\u00e9
@@ -231,7 +232,7 @@
MILD_ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED_211=Le client avec l'ID de connexion %d a \u00e9t\u00e9 authentifi\u00e9 sur Directory Server \u00e0 l'aide de LDAPv2, mais il a tent\u00e9 d'envoyer une demande d'op\u00e9ration \u00e9tendue (ID message LDAP %d), ce qui n'est pas autoris\u00e9 pour les clients LDAPv2.  La connexion va \u00eatre arr\u00eat\u00e9e
MILD_ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION_212=Une tentative d'initialisation du fournisseur du moniteur de statistiques LDAP a eu lieu, comme d\u00e9fini dans l'entr\u00e9e de configuration %s. Ce fournisseur de moniteur doit \u00eatre cr\u00e9\u00e9 uniquement dynamiquement dans Directory Server m\u00eame, et pas \u00e0 partir de la configuration
SEVERE_ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION_213=Le thread de gestionnaire de requ\u00eate LDAP "%s" a rencontr\u00e9 une erreur inattendue, qui aurait provoqu\u00e9 la destruction de ce thread\u00a0: %s. L\u2019erreur a \u00e9t\u00e9 d\u00e9tect\u00e9e et le gestionnaire de requ\u00eate devrait continuer \u00e0 fonctionner normalement
MILD_ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER_214=Tentative d'enregistrement de cette connexion avec Directory Server rejet\u00e9e.  Cela peut indiquer que le serveur dispose d\u00e9j\u00e0 du nombre maximal autoris\u00e9 de connexions concurrentes \u00e9tabli, ou qu'il est en mode d'acc\u00e8s restreint
MILD_ERR_CONNHANDLER_REJECTED_BY_SERVER_214=Tentative d'enregistrement de cette connexion avec Directory Server rejet\u00e9e.  Cela peut indiquer que le serveur dispose d\u00e9j\u00e0 du nombre maximal autoris\u00e9 de connexions concurrentes \u00e9tabli, ou qu'il est en mode d'acc\u00e8s restreint
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS_215=Adresse ou jeu d'adresses sur lequel ce gestionnaire de connexion peut accepter des connexions clientes.  Si aucune valeur n'est sp\u00e9cifi\u00e9e, alors le serveur accepte les connexions sur toutes les adresses actives.  Les modifications apport\u00e9es \u00e0 cet attribut de configuration ne seront effectives qu'apr\u00e8s la d\u00e9sactivation et la r\u00e9activation du gestionnaire de connexion, ou qu'apr\u00e8s le red\u00e9marrage de Directory Server
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT_216=Port TCP sur lequel ce gestionnaire de connexion peut accepter des connexions clientes.  Les modifications apport\u00e9es \u00e0 cet attribut de configuration ne seront effectives qu'apr\u00e8s la d\u00e9sactivation et la r\u00e9activation du gestionnaire de connexion, ou qu'apr\u00e8s le red\u00e9marrage de Directory Server
INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS_217=Sp\u00e9cifie un jeu de masques d'adresse qui peut servir \u00e0 d\u00e9terminer les adresses des clients autoris\u00e9s \u00e0 \u00e9tablir des connexions \u00e0 ce gestionnaire de connexion.  Si aucune valeur n'est sp\u00e9cifi\u00e9e, alors tous les clients disposant d'adresses qui ne correspondent pas \u00e0 une adresse sur la liste de refus seront autoris\u00e9es.  Les modifications apport\u00e9es \u00e0 cet attribut de configuration seront imm\u00e9diatement prises en compte, mais n'interf\u00e9reront pas avec des connexions \u00e9ventuellement d\u00e9j\u00e0 \u00e9tablies.
@@ -293,8 +294,8 @@
MILD_ERR_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER_273=Une erreur s'est produite lors de la tentative de cr\u00e9ation d'un fournisseur de s\u00e9curit\u00e9 de connexion TLS pour cette connexion cliente, en vue d'une utilisation avec StartTLS :  %s
MILD_ERR_LDAP_TLS_NO_PROVIDER_274=StartTLS n'est pas disponible sur cette connexion cliente, car cette connexion ne dispose pas d'un acc\u00e8s \u00e0 un fournisseur de s\u00e9curit\u00e9 de connexion TLS
MILD_ERR_LDAP_TLS_CLOSURE_NOT_ALLOWED_275=Le gestionnaire de connexion LDAP n'autorise pas les clients \u00e0 fermer une session StartTLS sur une connexion cliente tout en conservant la connexion TCP sous-jacente active.  La connexion TCP va \u00eatre ferm\u00e9e
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=\u00c9coute d\u00e9marr\u00e9e pour les nouvelles connexions sur %s
NOTICE_LDAP_CONNHANDLER_STOPPED_LISTENING_277=\u00c9coute arr\u00eat\u00e9e pour les nouvelles connexions sur %s
NOTICE_CONNHANDLER_STARTED_LISTENING_276=\u00c9coute d\u00e9marr\u00e9e pour les nouvelles connexions sur %s
NOTICE_CONNHANDLER_STOPPED_LISTENING_277=\u00c9coute arr\u00eat\u00e9e pour les nouvelles connexions sur %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_NULL_278=Impossible de d\u00e9coder l'\u00e9l\u00e9ment ASN.1 fourni en tant que valeur de contr\u00f4le de r\u00e9sultats charg\u00e9s LDAP car l'\u00e9l\u00e9ment est nul
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE_279=Impossible de d\u00e9coder l'\u00e9l\u00e9ment ASN.1 fourni en tant que valeur de contr\u00f4le de r\u00e9sultats charg\u00e9s LDAP, car cet \u00e9l\u00e9ment n'a pas pu \u00eatre d\u00e9cod\u00e9 en tant que s\u00e9quence :  %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT_280=Impossible de d\u00e9coder l'\u00e9l\u00e9ment ASN.1 fourni en tant que valeur de contr\u00f4le de r\u00e9sultats charg\u00e9s LDAP, car la s\u00e9quence de demandes poss\u00e8de un nombre incorrect d'\u00e9l\u00e9ments (2 attendus, %d obtenus)
@@ -449,8 +450,7 @@
MILD_ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE_429=Le filtre de recherche fourni contient un type d'attribut incorrect '%s' avec un caract\u00e8re incorrect '%s' \u00e0 la position %d
MILD_ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR_430=Impossible de d\u00e9coder le filtre de recherche fourni "%s" car le composant de correspondance extensible commen\u00e7ant \u00e0 l'emplacement %d n'inclut ni description d'attribut ni ID de r\u00e8gle de correspondance.  L'un d'eux au moins doit \u00eatre fourni
MILD_ERR_LDAPV2_CONTROLS_NOT_ALLOWED_431=Les clients LDAPv2 ne sont pas autoris\u00e9s \u00e0 utiliser des contr\u00f4les de demande
SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_BIND_432=Le gestionnaire de connexion LDAP d\u00e9fini dans l\u2019entr\u00e9e de configuration %s n\u2019a pas pu cr\u00e9er de liaison avec %s:%d\u00a0: %s
SEVERE_ERR_JMX_CONNHANDLER_CANNOT_BIND_433=Le gestionnaire de connexion JMX d\u00e9fini dans l\u2019entr\u00e9e de configuration %s n\u2019a pas pu cr\u00e9er de liaison avec le port %d\u00a0: %s
SEVERE_ERR_CONNHANDLER_CANNOT_BIND_432=Le gestionnaire de connexion %s d\u00e9fini dans l\u2019entr\u00e9e de configuration %s n\u2019a pas pu cr\u00e9er de liaison avec %s:%d\u00a0: %s
MILD_ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES_434=Vous ne disposez pas des privil\u00e8ges suffisants pour effectuer des op\u00e9rations d'ajout via JMX
MILD_ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES_435=Vous ne disposez pas des privil\u00e8ges suffisants pour effectuer des op\u00e9rations de suppression via JMX
MILD_ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES_436=Vous ne disposez pas des privil\u00e8ges suffisants pour effectuer des op\u00e9rations de modification via JMX
@@ -498,4 +498,5 @@
MILD_ERR_ECLN_NO_CONTROL_VALUE_1509=Impossible de d\u00e9coder le contr\u00f4le de notification de journal de modifications d'entr\u00e9e fourni, car il ne poss\u00e8de pas de valeur
MILD_ERR_ECLN_CANNOT_DECODE_VALUE_1510=Impossible de d\u00e9coder le contr\u00f4le de notification de journal de modifications d'entr\u00e9e fourni, car une erreur s'est produite lors de la tentative de d\u00e9codage de sa valeur : %s
SEVERE_ERR_UNEXPECTED_CONNECTION_CLOSURE_1511=La connexion \u00e0 Directory Server a \u00e9t\u00e9 ferm\u00e9e lors de l\u2019attente de la r\u00e9ponse
INFO_HTTP_CONNHANDLER_STARTTLS_NOT_SUPPORTED_1515=Le gestionnaire de connexion HTTP ne permet pas d'utiliser l'op\u00e9ration \u00e9tendue StartTLS.
MILD_ERR_CONNHANDLER_CONFIG_CHANGES_REQUIRE_RESTART_1516=Le serveur a re\u00e7u des changements de configuration qui n\u00e9cessitent de r\u00e9demarrer le gestionnaire de connexion %s pour les appliquer
opends/src/messages/messages/protocol_ja.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions copyright 2013 ForgeRock AS
@@ -197,9 +198,9 @@
FATAL_ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED_177=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u5b9a\u7fa9\u3055\u308c\u305f LDAP \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u306f\u3001\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u53d7\u4fe1\u30bd\u30b1\u30c3\u30c8\u3092\u591a\u91cd\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306e\u30bb\u30ec\u30af\u30bf\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:  %s\u3002\u3053\u306e\u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3059
SEVERE_ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED_178=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u5b9a\u7fa9\u3055\u308c\u305f LDAP \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u306f\u3001%s:%d \u306e\u63a5\u7d9a\u3092\u53d7\u3051\u5165\u308c\u308b\u305f\u3081\u306e\u30b5\u30fc\u30d0\u30fc\u30bd\u30b1\u30c3\u30c8\u30c1\u30e3\u30cd\u30eb\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:  %s\u3002\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u306f\u3053\u306e\u30a2\u30c9\u30ec\u30b9\u3067\u65b0\u3057\u3044\u63a5\u7d9a\u3092\u5f85\u6a5f\u3057\u307e\u305b\u3093
FATAL_ERR_LDAP_CONNHANDLER_NO_ACCEPTORS_179=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u5b9a\u7fa9\u3055\u308c\u305f LDAP \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u306f\u3001\u3044\u305a\u308c\u306e\u69cb\u6210\u6e08\u307f\u306e\u30a2\u30c9\u30ec\u30b9\u3067\u3082\u30bd\u30b1\u30c3\u30c8\u30c1\u30e3\u30cd\u30eb\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306e\u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3059
MILD_ERR_LDAP_CONNHANDLER_DENIED_CLIENT_180=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 %s \u304b\u3089 %s \u3078\u306e\u63a5\u7d9a\u8a66\u884c\u306f\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u62d2\u5426\u3055\u308c\u308b\u30a2\u30c9\u30ec\u30b9\u7bc4\u56f2\u306e 1 \u3064\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3057\u305f
MILD_ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT_181=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 %s \u304b\u3089 %s \u3078\u306e\u63a5\u7d9a\u8a66\u884c\u306f\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u8a31\u53ef\u3055\u308c\u308b\u30a2\u30c9\u30ec\u30b9\u7bc4\u56f2\u306e 1 \u3064\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f
INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=\u5185\u90e8\u30a8\u30e9\u30fc\u306e\u305f\u3081\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u306f\u3001%s \u304b\u3089 %s \u3078\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u63a5\u7d9a\u3092\u9069\u5207\u306a\u8981\u6c42\u30cf\u30f3\u30c9\u30e9\u306b\u6b63\u3057\u304f\u767b\u9332\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:  %s
MILD_ERR_CONNHANDLER_DENIED_CLIENT_180=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 %s \u304b\u3089 %s \u3078\u306e\u63a5\u7d9a\u8a66\u884c\u306f\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u62d2\u5426\u3055\u308c\u308b\u30a2\u30c9\u30ec\u30b9\u7bc4\u56f2\u306e 1 \u3064\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3057\u305f
MILD_ERR_CONNHANDLER_DISALLOWED_CLIENT_181=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 %s \u304b\u3089 %s \u3078\u306e\u63a5\u7d9a\u8a66\u884c\u306f\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u8a31\u53ef\u3055\u308c\u308b\u30a2\u30c9\u30ec\u30b9\u7bc4\u56f2\u306e 1 \u3064\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f
INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=\u5185\u90e8\u30a8\u30e9\u30fc\u306e\u305f\u3081\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u306f\u3001%s \u304b\u3089 %s \u3078\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u63a5\u7d9a\u3092\u9069\u5207\u306a\u8981\u6c42\u30cf\u30f3\u30c9\u30e9\u306b\u6b63\u3057\u304f\u767b\u9332\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:  %s
MILD_ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION_183=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u5b9a\u7fa9\u3055\u308c\u305f LDAP \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u306f\u3001\u65b0\u3057\u3044\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u63a5\u7d9a\u3092\u53d7\u3051\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:  %s
FATAL_ERR_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES_184=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u63a5\u7d9a\u306e\u53d7\u3051\u5165\u308c\u4e2d\u306b\u3001\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u5b9a\u7fa9\u3055\u308c\u305f LDAP \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u3067\u969c\u5bb3\u304c\u9023\u7d9a\u3057\u3066\u767a\u751f\u3057\u307e\u3057\u305f:  %s\u3002\u3053\u306e\u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3059
FATAL_ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR_185=\u65b0\u3057\u3044\u63a5\u7d9a\u306e\u5f85\u6a5f\u4e2d\u306b\u3001\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u5b9a\u7fa9\u3055\u308c\u305f LDAP \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u3067\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u30ad\u30e3\u30c3\u30c1\u3055\u308c\u307e\u3057\u305f:  %s\u3002\u3053\u306e\u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3059
@@ -231,7 +232,7 @@
MILD_ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED_211=\u63a5\u7d9a ID %d \u3092\u6301\u3064\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c LDAPv2 \u3092\u4f7f\u7528\u3057\u3066\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u8a8d\u8a3c\u3092\u5b9f\u884c\u3057\u307e\u3057\u305f\u304c\u3001\u62e1\u5f35\u64cd\u4f5c\u8981\u6c42\u3092\u9001\u4fe1\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f (LDAP \u30e1\u30c3\u30bb\u30fc\u30b8 ID %d)\u3002\u3053\u308c\u306f LDAPv2 \u3067\u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093\u3002  \u63a5\u7d9a\u306f\u7d42\u4e86\u3057\u307e\u3059
MILD_ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION_212=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u306e\u5b9a\u7fa9\u306b\u5f93\u3063\u3066\u3001LDAP \u7d71\u8a08\u30e2\u30cb\u30bf\u30fc\u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u521d\u671f\u5316\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u3002\u3053\u306e\u30e2\u30cb\u30bf\u30fc\u30d7\u30ed\u30d0\u30a4\u30c0\u306f\u3001\u69cb\u6210\u5185\u304b\u3089\u3067\u306f\u306a\u304f\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u81ea\u4f53\u306e\u4e2d\u3067\u306e\u307f\u52d5\u7684\u306b\u4f5c\u6210\u3059\u3079\u304d\u3067\u3059
SEVERE_ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION_213=LDAP \u8981\u6c42\u30cf\u30f3\u30c9\u30e9\u30b9\u30ec\u30c3\u30c9 "%s" \u3067\u3001\u30b9\u30ec\u30c3\u30c9\u7d42\u4e86\u306e\u539f\u56e0\u3068\u306a\u308b\u3001\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059:  %s\u3002\u3053\u306e\u30a8\u30e9\u30fc\u306f\u3059\u3067\u306b\u30ad\u30e3\u30c3\u30c1\u3055\u308c\u3066\u304a\u308a\u3001\u8981\u6c42\u30cf\u30f3\u30c9\u30e9\u306f\u901a\u5e38\u306e\u51e6\u7406\u3092\u7d9a\u884c\u3057\u307e\u3059
MILD_ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER_214=\u3053\u306e\u63a5\u7d9a\u3092\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u306b\u767b\u9332\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u304c\u3001\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002  \u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u6700\u5927\u6570\u306e\u540c\u6642\u63a5\u7d9a\u304c\u30b5\u30fc\u30d0\u30fc\u3067\u3059\u3067\u306b\u78ba\u7acb\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u307e\u305f\u306f\u30b5\u30fc\u30d0\u30fc\u304c\u5236\u9650\u4ed8\u304d\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9\u306b\u306a\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059
MILD_ERR_CONNHANDLER_REJECTED_BY_SERVER_214=\u3053\u306e\u63a5\u7d9a\u3092\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u306b\u767b\u9332\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u304c\u3001\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002  \u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u6700\u5927\u6570\u306e\u540c\u6642\u63a5\u7d9a\u304c\u30b5\u30fc\u30d0\u30fc\u3067\u3059\u3067\u306b\u78ba\u7acb\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u307e\u305f\u306f\u30b5\u30fc\u30d0\u30fc\u304c\u5236\u9650\u4ed8\u304d\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9\u306b\u306a\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS_215=\u3053\u306e\u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u304c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u63a5\u7d9a\u3092\u53d7\u3051\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u30a2\u30c9\u30ec\u30b9\u307e\u305f\u306f\u30a2\u30c9\u30ec\u30b9\u30bb\u30c3\u30c8\u3002  \u5024\u3092\u6307\u5b9a\u3057\u306a\u3044\u5834\u5408\u3001\u30b5\u30fc\u30d0\u30fc\u306f\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30a2\u30c9\u30ec\u30b9\u3059\u3079\u3066\u306e\u63a5\u7d9a\u3092\u53d7\u3051\u5165\u308c\u307e\u3059\u3002  \u3053\u306e\u8a2d\u5b9a\u5c5e\u6027\u3078\u306e\u5909\u66f4\u306f\u3001\u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u3092\u7121\u52b9\u306b\u3057\u3066\u518d\u5ea6\u6709\u52b9\u306b\u3059\u308b\u304b\u3001\u307e\u305f\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u3092\u518d\u8d77\u52d5\u3059\u308b\u307e\u3067\u6709\u52b9\u306b\u306a\u308a\u307e\u305b\u3093
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT_216=\u3053\u306e\u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u304c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u63a5\u7d9a\u3092\u53d7\u3051\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u308b TCP \u30dd\u30fc\u30c8\u3002  \u3053\u306e\u8a2d\u5b9a\u5c5e\u6027\u3078\u306e\u5909\u66f4\u306f\u3001\u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u3092\u7121\u52b9\u306b\u3057\u3066\u518d\u5ea6\u6709\u52b9\u306b\u3059\u308b\u304b\u3001\u307e\u305f\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u3092\u518d\u8d77\u52d5\u3059\u308b\u307e\u3067\u6709\u52b9\u306b\u306a\u308a\u307e\u305b\u3093
INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS_217=\u3053\u306e\u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u3078\u306e\u63a5\u7d9a\u3092\u78ba\u7acb\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30a2\u30c9\u30ec\u30b9\u3092\u5224\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u308b\u30a2\u30c9\u30ec\u30b9\u30de\u30b9\u30af\u30bb\u30c3\u30c8\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002  \u5024\u3092\u6307\u5b9a\u3057\u306a\u3044\u5834\u5408\u306f\u3001\u62d2\u5426\u30ea\u30b9\u30c8\u306e\u30a2\u30c9\u30ec\u30b9\u3068\u4e00\u81f4\u3057\u306a\u3044\u30a2\u30c9\u30ec\u30b9\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u8a31\u53ef\u3055\u308c\u307e\u3059\u3002  \u3053\u306e\u8a2d\u5b9a\u5c5e\u6027\u3078\u306e\u5909\u66f4\u306f\u305f\u3060\u3061\u306b\u6709\u52b9\u306b\u306a\u308a\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u78ba\u7acb\u6e08\u307f\u306e\u63a5\u7d9a\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u306e\u63a5\u7d9a\u306b\u306f\u5f71\u97ff\u3057\u307e\u305b\u3093
@@ -293,8 +294,8 @@
MILD_ERR_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER_273=StartTLS \u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u3053\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u63a5\u7d9a\u306e TLS \u63a5\u7d9a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30fc\u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:  %s
MILD_ERR_LDAP_TLS_NO_PROVIDER_274=\u3053\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u63a5\u7d9a\u3067 StartTLS \u3092\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\u63a5\u7d9a\u306b TLS \u63a5\u7d9a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30fc\u30d7\u30ed\u30d0\u30a4\u30c0\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u304c\u3042\u308a\u307e\u305b\u3093
MILD_ERR_LDAP_TLS_CLOSURE_NOT_ALLOWED_275=LDAP \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u3067\u306f\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u914d\u4e0b\u306e TCP \u63a5\u7d9a\u3092\u30a2\u30af\u30c6\u30a3\u30d6\u306b\u3057\u305f\u307e\u307e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u63a5\u7d9a\u306e StartTLS \u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u9589\u3058\u308b\u3053\u3068\u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093\u3002  TCP \u63a5\u7d9a\u306f\u9589\u3058\u3089\u308c\u307e\u3059
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=%s \u3067\u65b0\u3057\u3044\u63a5\u7d9a\u306e\u5f85\u6a5f\u3092\u958b\u59cb\u3057\u307e\u3057\u305f
NOTICE_LDAP_CONNHANDLER_STOPPED_LISTENING_277=%s \u3067\u65b0\u3057\u3044\u63a5\u7d9a\u306e\u5f85\u6a5f\u3092\u505c\u6b62\u3057\u307e\u3057\u305f
NOTICE_CONNHANDLER_STARTED_LISTENING_276=%s \u3067\u65b0\u3057\u3044\u63a5\u7d9a\u306e\u5f85\u6a5f\u3092\u958b\u59cb\u3057\u307e\u3057\u305f
NOTICE_CONNHANDLER_STOPPED_LISTENING_277=%s \u3067\u65b0\u3057\u3044\u63a5\u7d9a\u306e\u5f85\u6a5f\u3092\u505c\u6b62\u3057\u307e\u3057\u305f
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_NULL_278=\u6307\u5b9a\u3055\u308c\u305f ASN.1 \u8981\u7d20\u3092 LDAP \u7d50\u679c\u30da\u30fc\u30b8\u30f3\u30b0\u5236\u5fa1\u5024\u3068\u3057\u3066\u5fa9\u53f7\u5316\u3067\u304d\u307e\u305b\u3093\u3002\u8981\u7d20\u304c NULL \u3067\u3059
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE_279=\u6307\u5b9a\u3055\u308c\u305f ASN.1 \u8981\u7d20\u3092 LDAP \u7d50\u679c\u30da\u30fc\u30b8\u30f3\u30b0\u5236\u5fa1\u5024\u3068\u3057\u3066\u5fa9\u53f7\u5316\u3067\u304d\u307e\u305b\u3093\u3002\u8981\u7d20\u3092\u30b7\u30fc\u30b1\u30f3\u30b9\u3068\u3057\u3066\u5fa9\u53f7\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:  %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT_280=\u6307\u5b9a\u3055\u308c\u305f ASN.1 \u8981\u7d20\u3092 LDAP \u7d50\u679c\u30da\u30fc\u30b8\u30f3\u30b0\u5236\u5fa1\u5024\u3068\u3057\u3066\u5fa9\u53f7\u5316\u3067\u304d\u307e\u305b\u3093\u3002\u8981\u6c42\u30b7\u30fc\u30b1\u30f3\u30b9\u306b\u7121\u52b9\u306a\u6570\u306e\u8981\u7d20\u304c\u3042\u308a\u307e\u3059 (2 \u304c\u671f\u5f85\u3055\u308c\u305f\u3068\u3053\u308d\u3001%d \u3092\u53d6\u5f97)
@@ -449,8 +450,7 @@
MILD_ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE_429=\u6307\u5b9a\u3055\u308c\u305f\u691c\u7d22\u30d5\u30a3\u30eb\u30bf\u306e\u4f4d\u7f6e %3$d \u306b\u7121\u52b9\u306a\u6587\u5b57 '%2$s' \u304c\u3042\u308b\u7121\u52b9\u306a\u5c5e\u6027\u578b '%1$s' \u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059
MILD_ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR_430=\u6307\u5b9a\u3055\u308c\u305f\u691c\u7d22\u30d5\u30a3\u30eb\u30bf "%s" \u3092\u5fa9\u53f7\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f4d\u7f6e %d \u3067\u59cb\u307e\u308b\u62e1\u5f35\u4e00\u81f4\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u5c5e\u6027\u306e\u8aac\u660e\u307e\u305f\u306f\u30de\u30c3\u30c1\u30f3\u30b0\u30eb\u30fc\u30eb ID \u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002  \u3053\u308c\u3089\u306e\u5c11\u306a\u304f\u3068\u3082 1 \u3064\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059
MILD_ERR_LDAPV2_CONTROLS_NOT_ALLOWED_431=LDAPv2 \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067\u8981\u6c42\u5236\u5fa1\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093
SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_BIND_432=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u5b9a\u7fa9\u3055\u308c\u305f LDAP \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u304c %s:%d \u306b\u30d0\u30a4\u30f3\u30c9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:  %s
SEVERE_ERR_JMX_CONNHANDLER_CANNOT_BIND_433=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u5b9a\u7fa9\u3055\u308c\u305f JMX \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u304c\u30dd\u30fc\u30c8 %d \u306b\u30d0\u30a4\u30f3\u30c9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:  %s
SEVERE_ERR_CONNHANDLER_CANNOT_BIND_432=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u3067\u5b9a\u7fa9\u3055\u308c\u305f %s \u63a5\u7d9a\u30cf\u30f3\u30c9\u30e9\u304c %s:%d \u306b\u30d0\u30a4\u30f3\u30c9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:  %s
MILD_ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES_434=JMX \u3092\u4ecb\u3057\u3066\u8ffd\u52a0\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u5341\u5206\u306a\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093
MILD_ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES_435=JMX \u3092\u4ecb\u3057\u3066\u524a\u9664\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u5341\u5206\u306a\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093
MILD_ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES_436=JMX \u3092\u4ecb\u3057\u3066\u5909\u66f4\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u5341\u5206\u306a\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093
opends/src/messages/messages/protocol_ko.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions copyright 2013 ForgeRock AS
@@ -197,9 +198,9 @@
FATAL_ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED_177=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c LDAP \uc5f0\uacb0 \ucc98\ub9ac\uae30\uc5d0\uc11c \uc120\ud0dd\uae30\ub97c \uc5f4\uc5b4 \uc5f0\uacb0\ub41c \ud5c8\uc6a9 \uc18c\ucf13\uc744 \uba40\ud2f0\ud50c\ub809\uc2f1\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: %s. \uc774 \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 \ube44\ud65c\uc131\ud654\ub429\ub2c8\ub2e4.
SEVERE_ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED_178=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c LDAP \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 %s:%d\uc5d0\uc11c \uc11c\ubc84 \uc18c\ucf13 \ucc44\ub110\uc744 \ub9cc\ub4e4\uc5b4 \uc5f0\uacb0\uc744 \ud5c8\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: %s. \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uac00 \ud574\ub2f9 \uc8fc\uc18c\uc5d0\uc11c \uc0c8 \uc5f0\uacb0\uc744 \uc218\uc2e0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
FATAL_ERR_LDAP_CONNHANDLER_NO_ACCEPTORS_179=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c LDAP \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 \uad6c\uc131\ub41c \uc8fc\uc18c\uc5d0\uc11c \uc18c\ucf13 \ucc44\ub110\uc744 \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \uc774 \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 \ube44\ud65c\uc131\ud654\ub429\ub2c8\ub2e4.
MILD_ERR_LDAP_CONNHANDLER_DENIED_CLIENT_180=\ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uac70\ubd80\ub41c \uc8fc\uc18c \ubc94\uc704 \uc911 \ud558\ub098\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uae30 \ub54c\ubb38\uc5d0 \ud074\ub77c\uc774\uc5b8\ud2b8 %s\uc5d0\uc11c %s(\uc73c)\ub85c\uc758 \uc5f0\uacb0 \uc2dc\ub3c4\uac00 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
MILD_ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT_181=\ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ud5c8\uc6a9\ub41c \uc8fc\uc18c \ubc94\uc704 \uc911 \ud558\ub098\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ud074\ub77c\uc774\uc5b8\ud2b8 %s\uc5d0\uc11c %s(\uc73c)\ub85c\uc758 \uc5f0\uacb0 \uc2dc\ub3c4\uac00 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=\ub0b4\ubd80 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc5ec \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uac00 %s\uc5d0\uc11c %s(\uc73c)\ub85c\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\uacb0\uc744 \uc801\uc808\ud55c \uc694\uccad \ucc98\ub9ac\uae30\uc5d0 \uc62c\ubc14\ub85c \ub4f1\ub85d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4: %s
MILD_ERR_CONNHANDLER_DENIED_CLIENT_180=\ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uac70\ubd80\ub41c \uc8fc\uc18c \ubc94\uc704 \uc911 \ud558\ub098\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uae30 \ub54c\ubb38\uc5d0 \ud074\ub77c\uc774\uc5b8\ud2b8 %s\uc5d0\uc11c %s(\uc73c)\ub85c\uc758 \uc5f0\uacb0 \uc2dc\ub3c4\uac00 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
MILD_ERR_CONNHANDLER_DISALLOWED_CLIENT_181=\ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ud5c8\uc6a9\ub41c \uc8fc\uc18c \ubc94\uc704 \uc911 \ud558\ub098\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ud074\ub77c\uc774\uc5b8\ud2b8 %s\uc5d0\uc11c %s(\uc73c)\ub85c\uc758 \uc5f0\uacb0 \uc2dc\ub3c4\uac00 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=\ub0b4\ubd80 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc5ec \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uac00 %s\uc5d0\uc11c %s(\uc73c)\ub85c\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\uacb0\uc744 \uc801\uc808\ud55c \uc694\uccad \ucc98\ub9ac\uae30\uc5d0 \uc62c\ubc14\ub85c \ub4f1\ub85d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4: %s
MILD_ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION_183=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c LDAP \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 \uc0c8 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\uacb0\uc744 \ud5c8\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: %s
FATAL_ERR_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES_184=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c LDAP \uc5f0\uacb0 \ucc98\ub9ac\uae30\uc5d0\uc11c \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\uacb0\uc744 \ud5c8\uc6a9\ud558\ub294 \ub3d9\uc548 \uc5f0\uc18d\ud574\uc11c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s. \uc774 \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 \ube44\ud65c\uc131\ud654\ub429\ub2c8\ub2e4.
FATAL_ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR_185=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c LDAP \uc5f0\uacb0 \ucc98\ub9ac\uae30\uc5d0\uc11c \uc0c8 \uc5f0\uacb0\uc744 \uc218\uc2e0\ud558\ub294 \ub3d9\uc548 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s. \uc774 \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 \ube44\ud65c\uc131\ud654\ub429\ub2c8\ub2e4.
@@ -231,7 +232,7 @@
MILD_ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED_211=\uc5f0\uacb0 \uc544\uc774\ub514 %d\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 LDAPv2\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uc5d0 \uc778\uc99d\ub418\uc5c8\uc9c0\ub9cc LDAPv2 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 \ud655\uc7a5 \uc791\uc5c5 \uc694\uccad(LDAP \uba54\uc2dc\uc9c0 \uc544\uc774\ub514 %d)\uc744 \ubcf4\ub0b4\ub824\uace0 \ud588\uc2b5\ub2c8\ub2e4.  \uc5f0\uacb0\uc774 \uc885\ub8cc\ub429\ub2c8\ub2e4.
MILD_ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION_212=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c LDAP \ud1b5\uacc4 \ubaa8\ub2c8\ud130 \uacf5\uae09\uc790\ub97c \ucd08\uae30\ud654\ud558\ub824\uace0 \ud588\uc2b5\ub2c8\ub2e4. \uc774 \ubaa8\ub2c8\ud130 \uacf5\uae09\uc790\ub294 \uad6c\uc131 \ub0b4\uc5d0\uc11c\uac00 \uc544\ub2c8\ub77c \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84 \uc790\uccb4 \ub0b4\uc5d0\uc11c \ub3d9\uc801\uc73c\ub85c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4.
SEVERE_ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION_213=LDAP \uc694\uccad \ucc98\ub9ac\uae30 \uc2a4\ub808\ub4dc \"%s\"\uc5d0\uc11c \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc5ec \uc2a4\ub808\ub4dc\uac00 \uc885\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4: %s. \uc624\ub958\uac00 \ucc98\ub9ac\ub418\uc5c8\uc73c\ubbc0\ub85c \uc694\uccad \ucc98\ub9ac\uae30\ub294 \uacc4\uc18d \uc815\uc0c1\uc801\uc73c\ub85c \uc791\ub3d9\ud574\uc57c \ud569\ub2c8\ub2e4.
MILD_ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER_214=\uc774 \uc5f0\uacb0\uc744 \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uc5d0 \ub4f1\ub85d\ud558\ub824\ub294 \uc2dc\ub3c4\uac00 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uc11c\ubc84\uc5d0 \ud5c8\uc6a9\ub418\ub294 \ucd5c\ub300 \ub3d9\uc2dc \uc5f0\uacb0 \uc218\uac00 \uc774\ubbf8 \uc124\uc815\ub418\uc5b4 \uc788\uac70\ub098 \uc11c\ubc84\uac00 \uc81c\ud55c\ub41c \uc561\uc138\uc2a4 \ubaa8\ub4dc\uc5d0 \uc788\uae30 \ub54c\ubb38\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.
MILD_ERR_CONNHANDLER_REJECTED_BY_SERVER_214=\uc774 \uc5f0\uacb0\uc744 \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uc5d0 \ub4f1\ub85d\ud558\ub824\ub294 \uc2dc\ub3c4\uac00 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uc11c\ubc84\uc5d0 \ud5c8\uc6a9\ub418\ub294 \ucd5c\ub300 \ub3d9\uc2dc \uc5f0\uacb0 \uc218\uac00 \uc774\ubbf8 \uc124\uc815\ub418\uc5b4 \uc788\uac70\ub098 \uc11c\ubc84\uac00 \uc81c\ud55c\ub41c \uc561\uc138\uc2a4 \ubaa8\ub4dc\uc5d0 \uc788\uae30 \ub54c\ubb38\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS_215=\uc774 \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\uacb0\uc744 \ud5c8\uc6a9\ud560 \uc218 \uc788\ub294 \uc8fc\uc18c \ub610\ub294 \uc8fc\uc18c \uc9d1\ud569\uc785\ub2c8\ub2e4.  \uac12\uc744 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 \uc11c\ubc84\uac00 \ubaa8\ub4e0 \ud65c\uc131 \uc8fc\uc18c\uc5d0\uc11c \uc5f0\uacb0\uc744 \ud5c8\uc6a9\ud569\ub2c8\ub2e4.  \uc774 \uad6c\uc131 \uc18d\uc131\uc5d0 \ub300\ud55c \ubcc0\uacbd \uc0ac\ud56d\uc744 \uc801\uc6a9\ud558\ub824\uba74 \uc5f0\uacb0 \ucc98\ub9ac\uae30\ub97c \ube44\ud65c\uc131\ud654\ud588\ub2e4\uac00 \ub2e4\uc2dc \ud65c\uc131\ud654\ud558\uac70\ub098 \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud574\uc57c \ud569\ub2c8\ub2e4.
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT_216=\uc774 \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\uacb0\uc744 \ud5c8\uc6a9\ud560 \uc218 \uc788\ub294 TCP \ud3ec\ud2b8\uc785\ub2c8\ub2e4.  \uc774 \uad6c\uc131 \uc18d\uc131\uc5d0 \ub300\ud55c \ubcc0\uacbd \uc0ac\ud56d\uc744 \uc801\uc6a9\ud558\ub824\uba74 \uc5f0\uacb0 \ucc98\ub9ac\uae30\ub97c \ube44\ud65c\uc131\ud654\ud588\ub2e4\uac00 \ub2e4\uc2dc \ud65c\uc131\ud654\ud558\uac70\ub098 \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud574\uc57c \ud569\ub2c8\ub2e4.
INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS_217=\uc774 \uc5f0\uacb0 \ucc98\ub9ac\uae30\uc5d0 \ub300\ud55c \uc5f0\uacb0\uc744 \uc124\uc815\ud560 \uc218 \uc788\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc8fc\uc18c\ub97c \ud655\uc778\ud558\ub294 \ub370 \uc0ac\uc6a9\ud558\ub294 \uc8fc\uc18c \ub9c8\uc2a4\ud06c \uc9d1\ud569\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.  \uac12\uc744 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 \uc8fc\uc18c\uac00 \uac70\ubd80 \ubaa9\ub85d\uc758 \uc8fc\uc18c\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\ub294 \ubaa8\ub4e0 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ud5c8\uc6a9\ub429\ub2c8\ub2e4.  \uc774 \uad6c\uc131 \uc18d\uc131\uc5d0 \ub300\ud55c \ubcc0\uacbd \uc0ac\ud56d\uc740 \uc989\uc2dc \uc801\uc6a9\ub418\uc9c0\ub9cc \uc774\ubbf8 \uc124\uc815\ub418\uc5b4 \uc788\ub294 \uc5f0\uacb0\uc744 \ubc29\ud574\ud558\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4.
@@ -293,8 +294,8 @@
MILD_ERR_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER_273=\uc774 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\uacb0\uc5d0\uc11c StartTLS\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 TLS \uc5f0\uacb0 \ubcf4\uc548 \uacf5\uae09\uc790\ub97c \ub9cc\ub4dc\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s
MILD_ERR_LDAP_TLS_NO_PROVIDER_274=\uc5f0\uacb0\uc5d0\uc11c TLS \uc5f0\uacb0 \ubcf4\uc548 \uacf5\uae09\uc790\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \uc774 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\uacb0\uc5d0\uc11c StartTLS\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
MILD_ERR_LDAP_TLS_CLOSURE_NOT_ALLOWED_275=LDAP \uc5f0\uacb0 \ucc98\ub9ac\uae30\uc5d0\uc11c\ub294 \uae30\ubcf8 TCP \uc5f0\uacb0\uc774 \ud65c\uc131\ud654\ub41c \uc0c1\ud0dc\uc5d0\uc11c \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc5f0\uacb0\uc758 StartTLS \uc138\uc158\uc744 \ub2eb\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  TCP \uc5f0\uacb0\uc774 \ub2eb\ud799\ub2c8\ub2e4.
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=%s\uc5d0\uc11c \uc0c8 \uc5f0\uacb0 \uc218\uc2e0\uc744 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4.
NOTICE_LDAP_CONNHANDLER_STOPPED_LISTENING_277=%s\uc5d0\uc11c \uc0c8 \uc5f0\uacb0 \uc218\uc2e0\uc744 \uc911\uc9c0\ud588\uc2b5\ub2c8\ub2e4.
NOTICE_CONNHANDLER_STARTED_LISTENING_276=%s\uc5d0\uc11c \uc0c8 \uc5f0\uacb0 \uc218\uc2e0\uc744 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4.
NOTICE_CONNHANDLER_STOPPED_LISTENING_277=%s\uc5d0\uc11c \uc0c8 \uc5f0\uacb0 \uc218\uc2e0\uc744 \uc911\uc9c0\ud588\uc2b5\ub2c8\ub2e4.
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_NULL_278=\uc694\uc18c\uac00 null\uc774\uae30 \ub54c\ubb38\uc5d0 \uc81c\uacf5\ub41c ASN.1 \uc694\uc18c\ub97c LDAP \ud398\uc774\uc9c0 \uacb0\uacfc \uc81c\uc5b4 \uac12\uc73c\ub85c \ud574\ub3c5\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE_279=\uc694\uc18c\ub97c \uc2dc\ud000\uc2a4\ub85c \ud574\ub3c5\ud558\uc9c0 \ubabb\ud588\uae30 \ub54c\ubb38\uc5d0 \uc81c\uacf5\ub41c ASN.1 \uc694\uc18c\ub97c LDAP \ud398\uc774\uc9c0 \uacb0\uacfc \uc81c\uc5b4 \uac12\uc73c\ub85c \ud574\ub3c5\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT_280=\uc694\uccad \uc2dc\ud000\uc2a4\uc5d0 \uc798\ubabb\ub41c \uc694\uc18c \uc218\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uae30 \ub54c\ubb38\uc5d0(2\uc5ec\uc57c \ud558\ub294\ub370 %d\uc784) \uc81c\uacf5\ub41c ASN.1 \uc694\uc18c\ub97c LDAP \ud398\uc774\uc9c0 \uacb0\uacfc \uc81c\uc5b4 \uac12\uc73c\ub85c \ud574\ub3c5\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
@@ -449,8 +450,7 @@
MILD_ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE_429=\uc81c\uacf5\ub41c \uac80\uc0c9 \ud544\ud130\uc5d0 \uc704\uce58 %3$d\uc5d0 \uc798\ubabb\ub41c \ubb38\uc790 '%2$s'\uc774(\uac00) \uc788\ub294 \uc798\ubabb\ub41c \uc18d\uc131 \uc720\ud615 '%1$s'\uc774(\uac00) \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
MILD_ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR_430=\uc704\uce58 %2$d\uc5d0\uc11c \uc2dc\uc791\ud558\ub294 \ud655\uc7a5 \uac00\ub2a5\ud55c \uc77c\uce58 \uad6c\uc131\uc694\uc18c\uc5d0 \uc18d\uc131 \uc124\uba85 \ub610\ub294 \uc77c\uce58 \uaddc\uce59 \uc544\uc774\ub514\uac00 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \uc81c\uacf5\ub41c \uac80\uc0c9 \ud544\ud130 \"%1$s\"\uc744(\ub97c) \ud574\ub3c5\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.  \uc774 \uc911 \ud558\ub098 \uc774\uc0c1\uc744 \uc81c\uacf5\ud574\uc57c \ud569\ub2c8\ub2e4.
MILD_ERR_LDAPV2_CONTROLS_NOT_ALLOWED_431=LDAPv2 \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \uc694\uccad \uc81c\uc5b4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_BIND_432=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c LDAP \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 %s:%d\uc5d0 \ubc14\uc778\ub4dc\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4: %s
SEVERE_ERR_JMX_CONNHANDLER_CANNOT_BIND_433=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c JMX \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 \ud3ec\ud2b8 %d\uc5d0 \ubc14\uc778\ub4dc\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4: %s
SEVERE_ERR_CONNHANDLER_CANNOT_BIND_432=\uad6c\uc131 \ud56d\ubaa9 %s\uc5d0 \uc815\uc758\ub41c %s \uc5f0\uacb0 \ucc98\ub9ac\uae30\uac00 %s:%d\uc5d0 \ubc14\uc778\ub4dc\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4: %s
MILD_ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES_434=JMX\ub97c \ud1b5\ud574 \ucd94\uac00 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub294 \ucda9\ubd84\ud55c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
MILD_ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES_435=JMX\ub97c \ud1b5\ud574 \uc0ad\uc81c \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub294 \ucda9\ubd84\ud55c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
MILD_ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES_436=JMX\ub97c \ud1b5\ud574 \uc218\uc815 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub294 \ucda9\ubd84\ud55c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
opends/src/messages/messages/protocol_pl.properties
@@ -1,3 +1,3 @@
INFO_LDIF_CONNHANDLER_RESULT_CODE_450=Kod Rezultatu: %d (%s)
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=Rozpocz\u0119to nas\u0142uchiwanie nowych po\u0142\u0105cze\u0144 na %s
NOTICE_CONNHANDLER_STARTED_LISTENING_276=Rozpocz\u0119to nas\u0142uchiwanie nowych po\u0142\u0105cze\u0144 na %s
INFO_LDIF_CONNHANDLER_MATCHED_DN_452=Pasuj\u0105ce DN:  %s
opends/src/messages/messages/protocol_zh_CN.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions copyright 2013 ForgeRock AS
@@ -197,9 +198,9 @@
FATAL_ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED_177=\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684 LDAP \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u65e0\u6cd5\u6253\u5f00\u5141\u8bb8\u5176\u591a\u8def\u590d\u7528\u76f8\u5173\u7684\u63a5\u53d7\u5957\u63a5\u5b57\u7684\u9009\u5b9a\u5668: %s\u3002\u5c06\u7981\u7528\u8be5\u8fde\u63a5\u5904\u7406\u7a0b\u5e8f
SEVERE_ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED_178=\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684 LDAP \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u65e0\u6cd5\u521b\u5efa\u670d\u52a1\u5668\u5957\u63a5\u5b57\u901a\u9053\u4ee5\u63a5\u53d7 %s:%d \u4e0a\u7684\u8fde\u63a5: %s\u3002\u76ee\u5f55\u670d\u52a1\u5668\u5c06\u65e0\u6cd5\u4fa6\u542c\u8be5\u5730\u5740\u4e0a\u7684\u65b0\u8fde\u63a5
FATAL_ERR_LDAP_CONNHANDLER_NO_ACCEPTORS_179=\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684 LDAP \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u65e0\u6cd5\u5728\u4efb\u4f55\u5df2\u914d\u7f6e\u7684\u5730\u5740\u4e0a\u521b\u5efa\u4efb\u4f55\u5957\u63a5\u5b57\u901a\u9053\u3002\u5c06\u7981\u7528\u8be5\u8fde\u63a5\u5904\u7406\u7a0b\u5e8f
MILD_ERR_LDAP_CONNHANDLER_DENIED_CLIENT_180=\u5df2\u62d2\u7edd\u4ece\u5ba2\u6237\u7aef %s \u5230 %s \u7684\u8fde\u63a5\u5c1d\u8bd5\uff0c\u56e0\u4e3a\u8be5\u5ba2\u6237\u7aef\u5305\u542b\u5728\u67d0\u4e2a\u62d2\u7edd\u7684\u5730\u5740\u8303\u56f4\u5185
MILD_ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT_181=\u5df2\u62d2\u7edd\u4ece\u5ba2\u6237\u7aef %s \u5230 %s \u7684\u8fde\u63a5\u5c1d\u8bd5\uff0c\u56e0\u4e3a\u8be5\u5ba2\u6237\u7aef\u4e0d\u5305\u542b\u5728\u67d0\u4e2a\u5141\u8bb8\u7684\u5730\u5740\u8303\u56f4\u5185
INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=\u51fa\u73b0\u5185\u90e8\u9519\u8bef\uff0c\u5bfc\u81f4\u76ee\u5f55\u670d\u52a1\u5668\u65e0\u6cd5\u5728\u76f8\u5e94\u7684\u8bf7\u6c42\u5904\u7406\u7a0b\u5e8f\u4e2d\u6b63\u786e\u6ce8\u518c\u4ece %s \u5230 %s \u7684\u5ba2\u6237\u7aef\u8fde\u63a5: %s
MILD_ERR_CONNHANDLER_DENIED_CLIENT_180=\u5df2\u62d2\u7edd\u4ece\u5ba2\u6237\u7aef %s \u5230 %s \u7684\u8fde\u63a5\u5c1d\u8bd5\uff0c\u56e0\u4e3a\u8be5\u5ba2\u6237\u7aef\u5305\u542b\u5728\u67d0\u4e2a\u62d2\u7edd\u7684\u5730\u5740\u8303\u56f4\u5185
MILD_ERR_CONNHANDLER_DISALLOWED_CLIENT_181=\u5df2\u62d2\u7edd\u4ece\u5ba2\u6237\u7aef %s \u5230 %s \u7684\u8fde\u63a5\u5c1d\u8bd5\uff0c\u56e0\u4e3a\u8be5\u5ba2\u6237\u7aef\u4e0d\u5305\u542b\u5728\u67d0\u4e2a\u5141\u8bb8\u7684\u5730\u5740\u8303\u56f4\u5185
INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=\u51fa\u73b0\u5185\u90e8\u9519\u8bef\uff0c\u5bfc\u81f4\u76ee\u5f55\u670d\u52a1\u5668\u65e0\u6cd5\u5728\u76f8\u5e94\u7684\u8bf7\u6c42\u5904\u7406\u7a0b\u5e8f\u4e2d\u6b63\u786e\u6ce8\u518c\u4ece %s \u5230 %s \u7684\u5ba2\u6237\u7aef\u8fde\u63a5: %s
MILD_ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION_183=\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684 LDAP \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u65e0\u6cd5\u63a5\u53d7\u65b0\u7684\u5ba2\u6237\u7aef\u8fde\u63a5: %s
FATAL_ERR_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES_184=\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684 LDAP \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u5728\u5c1d\u8bd5\u63a5\u53d7\u5ba2\u6237\u7aef\u8fde\u63a5\u65f6\u8fde\u7eed\u5931\u8d25: %s\u3002\u5c06\u7981\u7528\u8be5\u8fde\u63a5\u5904\u7406\u7a0b\u5e8f
FATAL_ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR_185=\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684 LDAP \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u5728\u5c1d\u8bd5\u4fa6\u542c\u65b0\u8fde\u63a5\u65f6\u51fa\u73b0\u610f\u5916\u9519\u8bef: %s\u3002\u5c06\u7981\u7528\u8be5\u8fde\u63a5\u5904\u7406\u7a0b\u5e8f
@@ -231,7 +232,7 @@
MILD_ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED_211=\u8fde\u63a5 ID \u4e3a %d \u7684\u5ba2\u6237\u7aef\u4f7f\u7528 LDAPv2 \u8fdb\u884c\u4e86\u76ee\u5f55\u670d\u52a1\u5668\u9a8c\u8bc1\uff0c\u4f46\u5176\u5c1d\u8bd5\u53d1\u9001 LDAPv2 \u5ba2\u6237\u7aef\u4e0d\u5141\u8bb8\u4f7f\u7528\u7684\u6269\u5c55\u64cd\u4f5c\u8bf7\u6c42\uff08LDAP \u6d88\u606f ID %d\uff09\u3002\u5c06\u7ec8\u6b62\u8be5\u8fde\u63a5
MILD_ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION_212=\u5df2\u5c1d\u8bd5\u6309\u7167\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684\u65b9\u5f0f\u521d\u59cb\u5316 LDAP \u7edf\u8ba1\u4fe1\u606f\u76d1\u89c6\u5668\u63d0\u4f9b\u7a0b\u5e8f\u3002\u53ea\u5e94\u5728\u76ee\u5f55\u670d\u52a1\u5668\u672c\u8eab\u4e2d\u52a8\u6001\u521b\u5efa\u6b64\u76d1\u89c6\u5668\u63d0\u4f9b\u7a0b\u5e8f\uff0c\u800c\u4e0d\u662f\u4ece\u914d\u7f6e\u4e2d\u8fdb\u884c\u521b\u5efa
SEVERE_ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION_213=LDAP \u8bf7\u6c42\u5904\u7406\u7a0b\u5e8f\u7ebf\u7a0b "%s" \u51fa\u73b0\u610f\u5916\u9519\u8bef\uff0c\u8be5\u9519\u8bef\u4f1a\u5bfc\u81f4\u7ebf\u7a0b\u7ec8\u6b62: %s\u3002\u5df2\u6355\u83b7\u8be5\u9519\u8bef\uff0c\u8bf7\u6c42\u5904\u7406\u7a0b\u5e8f\u5e94\u7ee7\u7eed\u6b63\u5e38\u5de5\u4f5c
MILD_ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER_214=\u5c1d\u8bd5\u5728\u76ee\u5f55\u670d\u52a1\u5668\u4e2d\u6ce8\u518c\u6b64\u8fde\u63a5\u7684\u64cd\u4f5c\u88ab\u62d2\u7edd\u3002\u8fd9\u53ef\u80fd\u8868\u793a\u8be5\u670d\u52a1\u5668\u5df2\u8bbe\u5b9a\u4e86\u5141\u8bb8\u7684\u6700\u5927\u5e76\u53d1\u8fde\u63a5\u6570\uff0c\u6216\u8005\u8be5\u670d\u52a1\u5668\u5904\u4e8e\u53d7\u9650\u8bbf\u95ee\u6a21\u5f0f
MILD_ERR_CONNHANDLER_REJECTED_BY_SERVER_214=\u5c1d\u8bd5\u5728\u76ee\u5f55\u670d\u52a1\u5668\u4e2d\u6ce8\u518c\u6b64\u8fde\u63a5\u7684\u64cd\u4f5c\u88ab\u62d2\u7edd\u3002\u8fd9\u53ef\u80fd\u8868\u793a\u8be5\u670d\u52a1\u5668\u5df2\u8bbe\u5b9a\u4e86\u5141\u8bb8\u7684\u6700\u5927\u5e76\u53d1\u8fde\u63a5\u6570\uff0c\u6216\u8005\u8be5\u670d\u52a1\u5668\u5904\u4e8e\u53d7\u9650\u8bbf\u95ee\u6a21\u5f0f
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS_215=\u6b64\u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u53ef\u7528\u4e8e\u63a5\u53d7\u5ba2\u6237\u7aef\u8fde\u63a5\u7684\u4e00\u4e2a\u6216\u4e00\u7ec4\u5730\u5740\u3002\u5982\u679c\u672a\u6307\u5b9a\u4efb\u4f55\u503c\uff0c\u5219\u670d\u52a1\u5668\u5c06\u63a5\u53d7\u6240\u6709\u6d3b\u52a8\u5730\u5740\u4e0a\u7684\u8fde\u63a5\u3002\u5728\u7981\u7528\u5e76\u91cd\u65b0\u542f\u7528\u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u6216\u91cd\u65b0\u542f\u52a8\u76ee\u5f55\u670d\u52a1\u5668\u540e\uff0c\u5bf9\u6b64\u914d\u7f6e\u5c5e\u6027\u6240\u505a\u7684\u66f4\u6539\u624d\u4f1a\u751f\u6548
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT_216=\u6b64\u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u53ef\u7528\u4e8e\u63a5\u53d7\u5ba2\u6237\u7aef\u8fde\u63a5\u7684 TCP \u7aef\u53e3\u3002\u5728\u7981\u7528\u5e76\u91cd\u65b0\u542f\u7528\u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u6216\u91cd\u65b0\u542f\u52a8\u76ee\u5f55\u670d\u52a1\u5668\u540e\uff0c\u5bf9\u6b64\u914d\u7f6e\u5c5e\u6027\u6240\u505a\u7684\u66f4\u6539\u624d\u4f1a\u751f\u6548
INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS_217=\u6307\u5b9a\u4e00\u7ec4\u5730\u5740\u63a9\u7801\uff0c\u53ef\u7528\u4e8e\u786e\u5b9a\u5141\u8bb8\u4e0e\u6b64\u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u5efa\u7acb\u8fde\u63a5\u7684\u5ba2\u6237\u7aef\u5730\u5740\u3002\u5982\u679c\u672a\u6307\u5b9a\u4efb\u4f55\u503c\uff0c\u5219\u5c06\u5141\u8bb8\u4f7f\u7528\u5176\u5730\u5740\u4e0e\u62d2\u7edd\u5217\u8868\u4e2d\u7684\u5730\u5740\u4e0d\u5339\u914d\u7684\u6240\u6709\u5ba2\u6237\u7aef\u3002\u5bf9\u6b64\u914d\u7f6e\u5c5e\u6027\u6240\u505a\u7684\u66f4\u6539\u5c06\u7acb\u5373\u751f\u6548\uff0c\u4f46\u4e0d\u4f1a\u5f71\u54cd\u53ef\u80fd\u5df2\u5efa\u7acb\u7684\u8fde\u63a5
@@ -293,8 +294,8 @@
MILD_ERR_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER_273=\u5728\u5c1d\u8bd5\u4e3a\u6b64\u5ba2\u6237\u7aef\u8fde\u63a5\u521b\u5efa TLS \u8fde\u63a5\u5b89\u5168\u63d0\u4f9b\u7a0b\u5e8f\u4ee5\u7528\u4e8e StartTLS \u65f6\u51fa\u73b0\u9519\u8bef: %s
MILD_ERR_LDAP_TLS_NO_PROVIDER_274=StartTLS \u5728\u6b64\u5ba2\u6237\u7aef\u8fde\u63a5\u4e0a\u4e0d\u53ef\u7528\uff0c\u56e0\u4e3a\u8be5\u8fde\u63a5\u6ca1\u6709 TLS \u8fde\u63a5\u5b89\u5168\u63d0\u4f9b\u7a0b\u5e8f\u7684\u8bbf\u95ee\u6743\u9650
MILD_ERR_LDAP_TLS_CLOSURE_NOT_ALLOWED_275=\u5728\u5c06\u57fa\u7840 TCP \u8fde\u63a5\u4fdd\u6301\u6d3b\u52a8\u72b6\u6001\u65f6\uff0cLDAP \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u4e0d\u5141\u8bb8\u5ba2\u6237\u7aef\u5173\u95ed\u5ba2\u6237\u7aef\u8fde\u63a5\u4e0a\u7684 StartTLS \u4f1a\u8bdd\u3002\u5c06\u5173\u95ed TCP \u8fde\u63a5
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=\u5df2\u5f00\u59cb\u4fa6\u542c %s \u4e0a\u7684\u65b0\u8fde\u63a5
NOTICE_LDAP_CONNHANDLER_STOPPED_LISTENING_277=\u5df2\u505c\u6b62\u4fa6\u542c %s \u4e0a\u7684\u65b0\u8fde\u63a5
NOTICE_CONNHANDLER_STARTED_LISTENING_276=\u5df2\u5f00\u59cb\u4fa6\u542c %s \u4e0a\u7684\u65b0\u8fde\u63a5
NOTICE_CONNHANDLER_STOPPED_LISTENING_277=\u5df2\u505c\u6b62\u4fa6\u542c %s \u4e0a\u7684\u65b0\u8fde\u63a5
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_NULL_278=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684 ASN.1 \u5143\u7d20\u89e3\u7801\u4e3a LDAP \u5206\u9875\u7ed3\u679c\u63a7\u5236\u503c\uff0c\u56e0\u4e3a\u8be5\u5143\u7d20\u4e3a Null
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE_279=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684 ASN.1 \u5143\u7d20\u89e3\u7801\u4e3a LDAP \u5206\u9875\u7ed3\u679c\u63a7\u5236\u503c\uff0c\u56e0\u4e3a\u8be5\u5143\u7d20\u4e0d\u80fd\u89e3\u7801\u4e3a\u5e8f\u5217: %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT_280=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684 ASN.1 \u5143\u7d20\u89e3\u7801\u4e3a LDAP \u5206\u9875\u7ed3\u679c\u63a7\u5236\u503c\uff0c\u56e0\u4e3a\u8bf7\u6c42\u5e8f\u5217\u5177\u6709\u65e0\u6548\u7684\u5143\u7d20\u6570\uff08\u5e94\u8be5\u4e3a 2 \u4e2a\uff0c\u5b9e\u9645\u4e3a %d \u4e2a\uff09
@@ -449,8 +450,7 @@
MILD_ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE_429=\u63d0\u4f9b\u7684\u641c\u7d22\u8fc7\u6ee4\u5668\u5305\u542b\u65e0\u6548\u7684\u5c5e\u6027\u7c7b\u578b '%1$s'\uff0c\u8be5\u7c7b\u578b\u5728\u4f4d\u7f6e %3$d \u5904\u5177\u6709\u65e0\u6548\u5b57\u7b26 '%2$s'
MILD_ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR_430=\u65e0\u6cd5\u5bf9\u63d0\u4f9b\u7684\u641c\u7d22\u8fc7\u6ee4\u5668 "%s" \u8fdb\u884c\u89e3\u7801\uff0c\u56e0\u4e3a\u4ece\u4f4d\u7f6e %d \u5904\u5f00\u59cb\u7684\u53ef\u6269\u5c55\u5339\u914d\u7ec4\u4ef6\u4e0d\u5305\u542b\u5c5e\u6027\u63cf\u8ff0\u6216\u5339\u914d\u89c4\u5219 ID\u3002\u5fc5\u987b\u81f3\u5c11\u63d0\u4f9b\u5176\u4e2d\u4e00\u9879
MILD_ERR_LDAPV2_CONTROLS_NOT_ALLOWED_431=LDAPv2 \u5ba2\u6237\u7aef\u4e0d\u5141\u8bb8\u4f7f\u7528\u8bf7\u6c42\u63a7\u5236
SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_BIND_432=\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684 LDAP \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u65e0\u6cd5\u7ed1\u5b9a\u5230 %s:%d: %s
SEVERE_ERR_JMX_CONNHANDLER_CANNOT_BIND_433=\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684 JMX \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u65e0\u6cd5\u7ed1\u5b9a\u5230\u7aef\u53e3 %d: %s
SEVERE_ERR_CONNHANDLER_CANNOT_BIND_432=\u914d\u7f6e\u6761\u76ee %s \u4e2d\u5b9a\u4e49\u7684 %s \u8fde\u63a5\u5904\u7406\u7a0b\u5e8f\u65e0\u6cd5\u7ed1\u5b9a\u5230 %s:%d: %s
MILD_ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES_434=\u60a8\u6ca1\u6709\u8db3\u591f\u7684\u6743\u9650\u6765\u901a\u8fc7 JMX \u6267\u884c\u6dfb\u52a0\u64cd\u4f5c
MILD_ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES_435=\u60a8\u6ca1\u6709\u8db3\u591f\u7684\u6743\u9650\u6765\u901a\u8fc7 JMX \u6267\u884c\u5220\u9664\u64cd\u4f5c
MILD_ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES_436=\u60a8\u6ca1\u6709\u8db3\u591f\u7684\u6743\u9650\u6765\u901a\u8fc7 JMX \u6267\u884c\u4fee\u6539\u64cd\u4f5c
opends/src/messages/messages/protocol_zh_TW.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions copyright 2013 ForgeRock AS
@@ -197,9 +198,9 @@
FATAL_ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED_177=\u914d\u7f6e\u9805\u76ee %s \u4e2d\u6240\u5b9a\u7fa9\u7684 LDAP \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u7121\u6cd5\u958b\u555f\u9078\u64c7\u5668\uff0c\u4f7f\u5176\u8b93\u95dc\u806f\u7684\u63a5\u53d7\u901a\u8a0a\u7aef\u591a\u5de5\u5316: %s\u3002\u6b64\u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u5c07\u6703\u505c\u7528
SEVERE_ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED_178=\u914d\u7f6e\u9805\u76ee %s \u4e2d\u6240\u5b9a\u7fa9\u7684 LDAP \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u7121\u6cd5\u5efa\u7acb\u4f3a\u670d\u5668\u901a\u8a0a\u7aef\u901a\u9053\uff0c\u4ee5\u63a5\u53d7 %s:%d \u4e0a\u7684\u9023\u7dda: %s\u3002\u76ee\u9304\u4f3a\u670d\u5668\u5c07\u4e0d\u6703\u5075\u807d\u8a72\u4f4d\u5740\u4e0a\u7684\u65b0\u9023\u7dda
FATAL_ERR_LDAP_CONNHANDLER_NO_ACCEPTORS_179=\u914d\u7f6e\u9805\u76ee %s \u4e2d\u6240\u5b9a\u7fa9\u7684 LDAP \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u7121\u6cd5\u5728\u4efb\u4f55\u5df2\u914d\u7f6e\u7684\u4f4d\u5740\u4e0a\uff0c\u5efa\u7acb\u4efb\u4f55\u901a\u8a0a\u7aef\u901a\u9053\u3002\u6b64\u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u5c07\u6703\u505c\u7528
MILD_ERR_LDAP_CONNHANDLER_DENIED_CLIENT_180=\u5f9e\u7528\u6236\u7aef %s \u81f3 %s \u7684\u9023\u7dda\u5617\u8a66\u5df2\u88ab\u62d2\u7d55\uff0c\u56e0\u70ba\u8a72\u7528\u6236\u7aef\u5df2\u88ab\u7d0d\u5165\u62d2\u7d55\u7684\u4f4d\u5740\u7bc4\u570d\u4e4b\u4e00
MILD_ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT_181=\u5f9e\u7528\u6236\u7aef %s \u81f3 %s \u7684\u9023\u7dda\u5617\u8a66\u5df2\u88ab\u62d2\u7d55\uff0c\u56e0\u70ba\u8a72\u7528\u6236\u7aef\u4e26\u672a\u7d0d\u5165\u5141\u8a31\u7684\u4f4d\u5740\u7bc4\u570d\u4e4b\u4e00
INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=\u767c\u751f\u5167\u90e8\u932f\u8aa4\uff0c\u4f7f\u76ee\u9304\u4f3a\u670d\u5668\u7121\u6cd5\u4ee5\u9069\u7576\u7684\u8acb\u6c42\u8655\u7406\u7a0b\u5f0f\u6b63\u78ba\u8a3b\u518a %s \u81f3 %s \u7684\u7528\u6236\u7aef\u9023\u7dda: %s
MILD_ERR_CONNHANDLER_DENIED_CLIENT_180=\u5f9e\u7528\u6236\u7aef %s \u81f3 %s \u7684\u9023\u7dda\u5617\u8a66\u5df2\u88ab\u62d2\u7d55\uff0c\u56e0\u70ba\u8a72\u7528\u6236\u7aef\u5df2\u88ab\u7d0d\u5165\u62d2\u7d55\u7684\u4f4d\u5740\u7bc4\u570d\u4e4b\u4e00
MILD_ERR_CONNHANDLER_DISALLOWED_CLIENT_181=\u5f9e\u7528\u6236\u7aef %s \u81f3 %s \u7684\u9023\u7dda\u5617\u8a66\u5df2\u88ab\u62d2\u7d55\uff0c\u56e0\u70ba\u8a72\u7528\u6236\u7aef\u4e26\u672a\u7d0d\u5165\u5141\u8a31\u7684\u4f4d\u5740\u7bc4\u570d\u4e4b\u4e00
INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=\u767c\u751f\u5167\u90e8\u932f\u8aa4\uff0c\u4f7f\u76ee\u9304\u4f3a\u670d\u5668\u7121\u6cd5\u4ee5\u9069\u7576\u7684\u8acb\u6c42\u8655\u7406\u7a0b\u5f0f\u6b63\u78ba\u8a3b\u518a %s \u81f3 %s \u7684\u7528\u6236\u7aef\u9023\u7dda: %s
MILD_ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION_183=\u914d\u7f6e\u9805\u76ee %s \u4e2d\u6240\u5b9a\u7fa9\u7684 LDAP \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u7121\u6cd5\u63a5\u53d7\u65b0\u7684\u7528\u6236\u7aef\u9023\u7dda: %s
FATAL_ERR_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES_184=\u914d\u7f6e\u9805\u76ee %s \u4e2d\u6240\u5b9a\u7fa9\u7684 LDAP \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u5728\u5617\u8a66\u63a5\u53d7\u7528\u6236\u7aef\u9023\u7dda\u6642\u9023\u7e8c\u5931\u6557\u6578\u6b21: %s\u3002\u6b64\u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u5c07\u6703\u505c\u7528
FATAL_ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR_185=\u914d\u7f6e\u9805\u76ee %s \u4e2d\u6240\u5b9a\u7fa9\u7684 LDAP \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u5728\u5617\u8a66\u5075\u807d\u65b0\u9023\u7dda\u6642\uff0c\u767c\u751f\u672a\u9810\u671f\u7684\u932f\u8aa4: %s\u3002\u6b64\u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u5c07\u6703\u505c\u7528
@@ -231,7 +232,7 @@
MILD_ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED_211=\u9023\u7dda ID \u70ba %d \u7684\u7528\u6236\u7aef\u5df2\u4f7f\u7528 LDAPv2 \u5c0d\u76ee\u9304\u4f3a\u670d\u5668\u9032\u884c\u8a8d\u8b49\uff0c\u4f46\u5617\u8a66\u50b3\u9001 LDAPv2 \u7528\u6236\u7aef\u6240\u4e0d\u5141\u8a31\u7684\u5ef6\u4f38\u4f5c\u696d\u8acb\u6c42 (LDAP \u8a0a\u606f ID %d)\u3002\u9023\u7dda\u5c07\u6703\u7d42\u6b62
MILD_ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION_212=\u5617\u8a66\u4f9d\u914d\u7f6e\u9805\u76ee %s \u4e2d\u7684\u5b9a\u7fa9\u521d\u59cb\u5316 LDAP \u7d71\u8a08\u986f\u793a\u5668\u63d0\u4f9b\u8005\u3002\u6b64\u986f\u793a\u5668\u63d0\u4f9b\u8005\u53ea\u80fd\u5728\u76ee\u9304\u4f3a\u670d\u5668\u672c\u8eab\u4e4b\u4e2d\u52d5\u614b\u5efa\u7acb\uff0c\u800c\u4e0d\u61c9\u5f9e\u914d\u7f6e\u5167\u5efa\u7acb
SEVERE_ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION_213=LDAP \u8acb\u6c42\u8655\u7406\u7a0b\u5f0f\u57f7\u884c\u7dd2\u300c%s\u300d\u767c\u751f\u6703\u5c0e\u81f4\u57f7\u884c\u7dd2\u5931\u6548\u7684\u672a\u9810\u671f\u932f\u8aa4: %s\u3002\u5df2\u767c\u751f\u932f\u8aa4\uff0c\u4f46\u8acb\u6c42\u8655\u7406\u7a0b\u5f0f\u61c9\u6703\u7e7c\u7e8c\u6b63\u5e38\u904b\u4f5c
MILD_ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER_214=\u5617\u8a66\u5c0d\u76ee\u9304\u4f3a\u670d\u5668\u8a3b\u518a\u6b64\u9023\u7dda\u7684\u4f5c\u696d\u5df2\u906d\u62d2\u7d55\u3002\u9019\u53ef\u80fd\u8868\u793a\u4f3a\u670d\u5668\u5df2\u5efa\u7acb\u7684\u540c\u6b65\u904b\u4f5c\u9023\u7dda\u6578\u5df2\u9054\u5141\u8a31\u4e0a\u9650\uff0c\u6216\u4f3a\u670d\u5668\u8655\u65bc\u53d7\u9650\u5236\u7684\u5b58\u53d6\u6a21\u5f0f\u4e2d
MILD_ERR_CONNHANDLER_REJECTED_BY_SERVER_214=\u5617\u8a66\u5c0d\u76ee\u9304\u4f3a\u670d\u5668\u8a3b\u518a\u6b64\u9023\u7dda\u7684\u4f5c\u696d\u5df2\u906d\u62d2\u7d55\u3002\u9019\u53ef\u80fd\u8868\u793a\u4f3a\u670d\u5668\u5df2\u5efa\u7acb\u7684\u540c\u6b65\u904b\u4f5c\u9023\u7dda\u6578\u5df2\u9054\u5141\u8a31\u4e0a\u9650\uff0c\u6216\u4f3a\u670d\u5668\u8655\u65bc\u53d7\u9650\u5236\u7684\u5b58\u53d6\u6a21\u5f0f\u4e2d
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS_215=\u6b64\u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u53ef\u5f9e\u4e2d\u63a5\u53d7\u7528\u6236\u7aef\u9023\u7dda\u7684\u4f4d\u5740\u6216\u4f4d\u5740\u7d44\u3002\u82e5\u672a\u6307\u5b9a\u4efb\u4f55\u503c\uff0c\u4f3a\u670d\u5668\u5c07\u6703\u63a5\u53d7\u6240\u6709\u4f7f\u7528\u4e2d\u4f4d\u5740\u4e0a\u7684\u9023\u7dda\u3002\u6b64\u914d\u7f6e\u5c6c\u6027\u7684\u8b8a\u66f4\u5fc5\u9808\u5728\u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u505c\u7528\u4e26\u91cd\u65b0\u555f\u7528\u5f8c\uff0c\u6216\u5728\u76ee\u9304\u4f3a\u670d\u5668\u91cd\u65b0\u555f\u52d5\u5f8c\uff0c\u624d\u6703\u751f\u6548
INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT_216=\u6b64\u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u53ef\u5f9e\u4e2d\u63a5\u53d7\u7528\u6236\u7aef\u9023\u7dda\u7684 TCP \u9023\u63a5\u57e0\u3002\u6b64\u914d\u7f6e\u5c6c\u6027\u7684\u8b8a\u66f4\u5fc5\u9808\u5728\u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u505c\u7528\u4e26\u91cd\u65b0\u555f\u7528\u5f8c\uff0c\u6216\u5728\u76ee\u9304\u4f3a\u670d\u5668\u91cd\u65b0\u555f\u52d5\u5f8c\uff0c\u624d\u6703\u751f\u6548
INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS_217=\u6307\u5b9a\u4e00\u7d44\u4f4d\u5740\u906e\u7f69\uff0c\u7528\u4ee5\u5224\u5b9a\u53ef\u5c0d\u6b64\u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u5efa\u7acb\u9023\u7dda\u7684\u7528\u6236\u7aef\u4f4d\u5740\u3002\u82e5\u672a\u6307\u5b9a\u4efb\u4f55\u503c\uff0c\u5c07\u6703\u5141\u8a31\u4f4d\u5740\u672a\u5217\u65bc\u62d2\u7d55\u6e05\u55ae\u4e2d\u7684\u6240\u6709\u7528\u6236\u7aef\u3002\u6b64\u914d\u7f6e\u5c6c\u6027\u7684\u8b8a\u66f4\u5c07\u7acb\u5373\u751f\u6548\uff0c\u4f46\u5c07\u4e0d\u6703\u5f71\u97ff\u5230\u5df2\u5efa\u7acb\u7684\u9023\u7dda
@@ -293,8 +294,8 @@
MILD_ERR_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER_273=\u5617\u8a66\u70ba\u6b64\u7528\u6236\u7aef\u9023\u7dda\u5efa\u7acb\u7528\u65bc StartTLS \u7684 TLS \u9023\u7dda\u5b89\u5168\u6027\u63d0\u4f9b\u8005\u6642\u767c\u751f\u932f\u8aa4: %s
MILD_ERR_LDAP_TLS_NO_PROVIDER_274=StartTLS \u4e0d\u9069\u7528\u65bc\u6b64\u7528\u6236\u7aef\u9023\u7dda\uff0c\u56e0\u70ba\u6b64\u9023\u7dda\u6c92\u6709 TLS \u9023\u7dda\u5b89\u5168\u6027\u63d0\u4f9b\u8005\u7684\u5b58\u53d6\u6b0a
MILD_ERR_LDAP_TLS_CLOSURE_NOT_ALLOWED_275=LDAP \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u4e0d\u5141\u8a31\u7528\u6236\u7aef\u95dc\u9589\u7528\u6236\u7aef\u9023\u7dda\u4e0a\u7684 StartTLS \u968e\u6bb5\u4f5c\u696d\uff0c\u4f46\u5c07\u57fa\u790e TCP \u9023\u7dda\u4fdd\u7559\u70ba\u4f7f\u7528\u4e2d\u3002TCP \u9023\u7dda\u5c07\u6703\u7d50\u675f
NOTICE_LDAP_CONNHANDLER_STARTED_LISTENING_276=\u5df2\u958b\u59cb\u5728 %s \u4e0a\u5075\u807d\u65b0\u9023\u7dda
NOTICE_LDAP_CONNHANDLER_STOPPED_LISTENING_277=\u5df2\u505c\u6b62\u5728 %s \u4e0a\u5075\u807d\u65b0\u9023\u7dda
NOTICE_CONNHANDLER_STARTED_LISTENING_276=\u5df2\u958b\u59cb\u5728 %s \u4e0a\u5075\u807d\u65b0\u9023\u7dda
NOTICE_CONNHANDLER_STOPPED_LISTENING_277=\u5df2\u505c\u6b62\u5728 %s \u4e0a\u5075\u807d\u65b0\u9023\u7dda
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_NULL_278=\u7121\u6cd5\u5c07\u63d0\u4f9b\u7684 ASN.1 \u5143\u7d20\u89e3\u78bc\u70ba LDAP \u5206\u9801\u7d50\u679c\u63a7\u5236\u503c\uff0c\u56e0\u70ba\u8a72\u5143\u7d20\u70ba\u7a7a
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE_279=\u7121\u6cd5\u5c07\u63d0\u4f9b\u7684 ASN.1 \u5143\u7d20\u89e3\u78bc\u70ba LDAP \u5206\u9801\u7d50\u679c\u63a7\u5236\u503c\uff0c\u56e0\u70ba\u8a72\u5143\u7d20\u7121\u6cd5\u89e3\u78bc\u70ba\u5e8f\u5217: %s
MILD_ERR_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT_280=\u7121\u6cd5\u5c07\u63d0\u4f9b\u7684 ASN.1 \u5143\u7d20\u89e3\u78bc\u70ba LDAP \u5206\u9801\u7d50\u679c\u63a7\u5236\u503c\uff0c\u56e0\u70ba\u8acb\u6c42\u5e8f\u5217\u542b\u6709\u7121\u6548\u7684\u5143\u7d20\u6578\u76ee (\u61c9\u70ba 2\uff0c\u5be6\u969b\u70ba %d)
@@ -449,8 +450,7 @@
MILD_ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE_429=\u63d0\u4f9b\u7684\u641c\u5c0b\u7be9\u9078\u5668\u5728\u4f4d\u7f6e %3$d \u4e0a\u5305\u542b\u5177\u6709\u7121\u6548\u5b57\u5143\u300c%2$s\u300d\u7684\u7121\u6548\u5c6c\u6027\u985e\u578b\u300c%1$s\u300d
MILD_ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR_430=\u7121\u6cd5\u89e3\u78bc\u63d0\u4f9b\u7684\u641c\u5c0b\u7be9\u9078\u5668\u300c%s\u300d\uff0c\u56e0\u70ba\u5f9e\u4f4d\u7f6e %d \u958b\u59cb\u7684\u5ef6\u4f38\u76f8\u7b26\u5143\u4ef6\u4e0d\u5305\u542b\u5c6c\u6027\u8aaa\u660e\u6216\u76f8\u7b26\u7684\u898f\u5247 ID\u3002\u81f3\u5c11\u5fc5\u9808\u63d0\u4f9b\u5176\u4e2d\u4e00\u500b
MILD_ERR_LDAPV2_CONTROLS_NOT_ALLOWED_431=LDAPv2 \u7528\u6236\u7aef\u7121\u6cd5\u4f7f\u7528\u8acb\u6c42\u63a7\u5236
SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_BIND_432=\u914d\u7f6e\u9805\u76ee %s \u4e2d\u6240\u5b9a\u7fa9\u7684 LDAP \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u7121\u6cd5\u9023\u7d50\u81f3 %s:%d: %s
SEVERE_ERR_JMX_CONNHANDLER_CANNOT_BIND_433=\u914d\u7f6e\u9805\u76ee %s \u4e2d\u6240\u5b9a\u7fa9\u7684 JMX \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u7121\u6cd5\u9023\u7d50\u81f3\u9023\u63a5\u57e0 %d: %s
SEVERE_ERR_CONNHANDLER_CANNOT_BIND_432=\u914d\u7f6e\u9805\u76ee %s \u4e2d\u6240\u5b9a\u7fa9\u7684 %s \u9023\u7dda\u8655\u7406\u7a0b\u5f0f\u7121\u6cd5\u9023\u7d50\u81f3 %s:%d: %s
MILD_ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES_434=\u60a8\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u900f\u904e JMX \u57f7\u884c\u589e\u52a0\u4f5c\u696d
MILD_ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES_435=\u60a8\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u900f\u904e JMX \u57f7\u884c\u522a\u9664\u4f5c\u696d
MILD_ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES_436=\u60a8\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u900f\u904e JMX \u57f7\u884c\u4fee\u6539\u4f5c\u696d
opends/src/server/org/opends/server/protocols/http/CollectClientConnectionsFilter.java
New file
@@ -0,0 +1,167 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2013 ForgeRock AS
 */
package org.opends.server.protocols.http;
import static org.opends.messages.ProtocolMessages.*;
import static org.opends.server.loggers.ErrorLogger.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.util.StaticUtils.*;
import java.net.InetAddress;
import java.util.Collection;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.opends.messages.Message;
import org.opends.server.admin.std.server.ConnectionHandlerCfg;
import org.opends.server.api.ClientConnection;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.AddressMask;
import org.opends.server.types.DebugLogLevel;
import org.opends.server.types.DisconnectReason;
/**
 * Servlet {@link Filter} that collects information about client connections.
 */
final class CollectClientConnectionsFilter implements Filter
{
  /** The tracer object for the debug logger. */
  private static final DebugTracer TRACER = getTracer();
  /** The connection handler that created this servlet filter. */
  private HTTPConnectionHandler connectionHandler;
  private final Map<ClientConnection, Void> clientConnections;
  /**
   * Constructs a new instance of this class.
   *
   * @param connectionHandler
   *          the connection handler that accepted this connection
   * @param clientConnections
   *          Map where to add new connections
   */
  public CollectClientConnectionsFilter(
      HTTPConnectionHandler connectionHandler,
      Map<ClientConnection, Void> clientConnections)
  {
    this.connectionHandler = connectionHandler;
    this.clientConnections = clientConnections;
  }
  /** {@inheritDoc} */
  @Override
  public void init(FilterConfig filterConfig) throws ServletException
  {
    // nothing to do
  }
  /** {@inheritDoc} */
  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain)
  {
    final ClientConnection clientConnection =
        new HTTPClientConnection(this.connectionHandler, request);
    this.clientConnections.put(clientConnection, null);
    try
    {
      String ipAddress = request.getRemoteAddr();
      InetAddress clientAddr = InetAddress.getByName(ipAddress);
      // Check to see if the core server rejected the
      // connection (e.g., already too many connections
      // established).
      if (clientConnection.getConnectionID() < 0)
      {
        // The connection will have already been closed.
        return;
      }
      // Check to see if the client is on the denied list.
      // If so, then reject it immediately.
      ConnectionHandlerCfg config = this.connectionHandler.getCurrentConfig();
      Collection<AddressMask> allowedClients = config.getAllowedClient();
      Collection<AddressMask> deniedClients = config.getDeniedClient();
      if (!deniedClients.isEmpty()
          && AddressMask.maskListContains(clientAddr, deniedClients))
      {
        clientConnection.disconnect(DisconnectReason.CONNECTION_REJECTED,
            false, ERR_CONNHANDLER_DENIED_CLIENT.get(clientConnection
                .getClientHostPort(), clientConnection.getServerHostPort()));
        return;
      }
      // Check to see if there is an allowed list and if
      // there is whether the client is on that list. If
      // not, then reject the connection.
      if (!allowedClients.isEmpty()
          && !AddressMask.maskListContains(clientAddr, allowedClients))
      {
        clientConnection.disconnect(DisconnectReason.CONNECTION_REJECTED,
            false, ERR_CONNHANDLER_DISALLOWED_CLIENT.get(clientConnection
                .getClientHostPort(), clientConnection.getServerHostPort()));
        return;
      }
      // send the request further down the filter chain or pass to servlet
      chain.doFilter(request, response);
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      Message message =
          INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT.get(clientConnection
              .getClientHostPort(), clientConnection.getServerHostPort(),
              getExceptionMessage(e));
      logError(message);
      clientConnection
          .disconnect(DisconnectReason.SERVER_ERROR, false, message);
    }
    finally
    {
      this.clientConnections.remove(clientConnection);
    }
  }
  /** {@inheritDoc} */
  @Override
  public void destroy()
  {
    // nothing to do
  }
}
opends/src/server/org/opends/server/protocols/http/HTTPClientConnection.java
New file
@@ -0,0 +1,344 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2013 ForgeRock AS
 */
package org.opends.server.protocols.http;
import static org.opends.messages.ProtocolMessages.*;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Collection;
import javax.servlet.ServletRequest;
import org.opends.messages.Message;
import org.opends.messages.MessageBuilder;
import org.opends.server.api.ClientConnection;
import org.opends.server.api.ConnectionHandler;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SearchOperation;
import org.opends.server.extensions.TLSCapableConnection;
import org.opends.server.types.CancelRequest;
import org.opends.server.types.CancelResult;
import org.opends.server.types.DN;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.DisconnectReason;
import org.opends.server.types.IntermediateResponse;
import org.opends.server.types.Operation;
import org.opends.server.types.SearchResultEntry;
import org.opends.server.types.SearchResultReference;
/**
 * This class defines an HTTP client connection, which is a type of client
 * connection that will be accepted by an instance of the HTTP connection
 * handler.
 */
final class HTTPClientConnection extends ClientConnection implements
    TLSCapableConnection
{
  /** The reference to the connection handler that accepted this connection. */
  private final HTTPConnectionHandler connectionHandler;
  /** The servlet request representing this client connection. */
  private final ServletRequest request;
  /** The connection ID assigned to this connection. */
  private final long connectionID;
  /**
   * Constructs an instance of this class.
   *
   * @param connectionHandler
   *          the connection handler that accepted this connection
   * @param request
   *          represents this client connection.
   */
  public HTTPClientConnection(HTTPConnectionHandler connectionHandler,
      ServletRequest request)
  {
    this.connectionHandler = connectionHandler;
    this.request = request;
    this.connectionID = DirectoryServer.newConnectionAccepted(this);
    if (this.connectionID < 0)
    {
      disconnect(DisconnectReason.ADMIN_LIMIT_EXCEEDED, true,
          ERR_CONNHANDLER_REJECTED_BY_SERVER.get());
    }
  }
  /** {@inheritDoc} */
  @Override
  public long getConnectionID()
  {
    return connectionID;
  }
  /** {@inheritDoc} */
  @Override
  public ConnectionHandler<?> getConnectionHandler()
  {
    return connectionHandler;
  }
  /** {@inheritDoc} */
  @Override
  public String getProtocol()
  {
    return request.getProtocol();
  }
  /** {@inheritDoc} */
  @Override
  public String getClientAddress()
  {
    return request.getRemoteAddr();
  }
  /** {@inheritDoc} */
  @Override
  public int getClientPort()
  {
    return request.getRemotePort();
  }
  /** {@inheritDoc} */
  @Override
  public String getServerAddress()
  {
    return request.getLocalAddr();
  }
  /** {@inheritDoc} */
  @Override
  public int getServerPort()
  {
    return request.getLocalPort();
  }
  /** {@inheritDoc} */
  @Override
  public InetAddress getRemoteAddress()
  {
    try
    {
      return InetAddress.getByName(request.getRemoteAddr());
    }
    catch (UnknownHostException e)
    {
      throw new RuntimeException("Should never happen", e);
    }
  }
  /** {@inheritDoc} */
  @Override
  public InetAddress getLocalAddress()
  {
    try
    {
      return InetAddress.getByName(request.getLocalAddr());
    }
    catch (UnknownHostException e)
    {
      throw new RuntimeException("Should never happen", e);
    }
  }
  /** {@inheritDoc} */
  @Override
  public boolean isSecure()
  {
    return request.isSecure();
  }
  /** {@inheritDoc} */
  @Override
  public void sendResponse(Operation operation)
  {
    // TODO Auto-generated method stub
  }
  /** {@inheritDoc} */
  @Override
  public void sendSearchEntry(SearchOperation searchOperation,
      SearchResultEntry searchEntry) throws DirectoryException
  {
    // TODO Auto-generated method stub
  }
  /** {@inheritDoc} */
  @Override
  public boolean sendSearchReference(SearchOperation searchOperation,
      SearchResultReference searchReference) throws DirectoryException
  {
    // TODO Auto-generated method stub
    return false;
  }
  /** {@inheritDoc} */
  @Override
  protected boolean sendIntermediateResponseMessage(
      IntermediateResponse intermediateResponse)
  {
    // TODO Auto-generated method stub
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public void disconnect(DisconnectReason disconnectReason,
      boolean sendNotification, Message message)
  {
    // TODO Auto-generated method stub
  }
  /** {@inheritDoc} */
  @Override
  public Collection<Operation> getOperationsInProgress()
  {
    // TODO Auto-generated method stub
    return null;
  }
  /** {@inheritDoc} */
  @Override
  public Operation getOperationInProgress(int messageID)
  {
    // TODO Auto-generated method stub
    return null;
  }
  /** {@inheritDoc} */
  @Override
  public boolean removeOperationInProgress(int messageID)
  {
    // TODO Auto-generated method stub
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public CancelResult cancelOperation(int messageID,
      CancelRequest cancelRequest)
  {
    // TODO Auto-generated method stub
    return null;
  }
  /** {@inheritDoc} */
  @Override
  public void cancelAllOperations(CancelRequest cancelRequest)
  {
    // TODO Auto-generated method stub
  }
  /** {@inheritDoc} */
  @Override
  public void cancelAllOperationsExcept(CancelRequest cancelRequest,
      int messageID)
  {
    // TODO Auto-generated method stub
  }
  /** {@inheritDoc} */
  @Override
  public long getNumberOfOperations()
  {
    // TODO Auto-generated method stub
    return 0;
  }
  /** {@inheritDoc} */
  @Override
  public String getMonitorSummary()
  {
    StringBuilder buffer = new StringBuilder();
    buffer.append("connID=\"");
    buffer.append(getConnectionID());
    buffer.append("\" connectTime=\"");
    buffer.append(getConnectTimeString());
    buffer.append("\" source=\"");
    buffer.append(getClientAddress());
    buffer.append(":");
    buffer.append(getClientPort());
    buffer.append("\" destination=\"");
    buffer.append(getServerAddress());
    buffer.append(":");
    buffer.append(connectionHandler.getListenPort());
    buffer.append("\" authDN=\"");
    DN authDN = getAuthenticationInfo().getAuthenticationDN();
    if (authDN != null)
    {
      authDN.toString(buffer);
    }
    return buffer.toString();
  }
  /** {@inheritDoc} */
  @Override
  public void toString(StringBuilder buffer)
  {
    buffer.append("HTTP client connection from ");
    buffer.append(getClientAddress()).append(":").append(getClientPort());
    buffer.append(" to ");
    buffer.append(getServerAddress()).append(":").append(getServerPort());
  }
  /** {@inheritDoc} */
  @Override
  public boolean prepareTLS(MessageBuilder unavailableReason)
  {
    // TODO JNR add message to mention that this client connection cannot start
    // TLS
    unavailableReason.append(INFO_HTTP_CONNHANDLER_STARTTLS_NOT_SUPPORTED);
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public int getSSF()
  {
    Object attribute = request.getAttribute("javax.servlet.request.key_size");
    if (attribute instanceof Number)
    {
      return ((Number) attribute).intValue();
    }
    else if (attribute instanceof String)
    {
      try
      {
        return Integer.parseInt((String) attribute);
      }
      catch (IllegalArgumentException e)
      {
        // TODO tracer debug
      }
    }
    return 0;
  }
}
opends/src/server/org/opends/server/protocols/http/HTTPConnectionHandler.java
New file
@@ -0,0 +1,918 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2013 ForgeRock AS
 */
package org.opends.server.protocols.http;
import static org.opends.messages.ProtocolMessages.*;
import static org.opends.server.loggers.ErrorLogger.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.util.StaticUtils.*;
import java.io.IOException;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.grizzly.http.server.NetworkListener;
import org.glassfish.grizzly.http.server.ServerConfiguration;
import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
import org.glassfish.grizzly.servlet.FilterRegistration;
import org.glassfish.grizzly.servlet.ServletRegistration;
import org.glassfish.grizzly.servlet.WebappContext;
import org.glassfish.grizzly.ssl.SSLEngineConfigurator;
import org.opends.messages.Message;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.server.ConnectionHandlerCfg;
import org.opends.server.admin.std.server.HTTPConnectionHandlerCfg;
import org.opends.server.api.AlertGenerator;
import org.opends.server.api.ClientConnection;
import org.opends.server.api.ConnectionHandler;
import org.opends.server.api.KeyManagerProvider;
import org.opends.server.api.ServerShutdownListener;
import org.opends.server.api.TrustManagerProvider;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.extensions.NullKeyManagerProvider;
import org.opends.server.extensions.NullTrustManagerProvider;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DN;
import org.opends.server.types.DebugLogLevel;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.HostPort;
import org.opends.server.types.InitializationException;
import org.opends.server.types.ResultCode;
import org.opends.server.util.SelectableCertificateKeyManager;
/**
 * This class defines a connection handler that will be used for communicating
 * with clients over HTTP. The connection handler is responsible for
 * starting/stopping the embedded web server.
 */
public class HTTPConnectionHandler extends
    ConnectionHandler<HTTPConnectionHandlerCfg> implements
    ConfigurationChangeListener<HTTPConnectionHandlerCfg>,
    ServerShutdownListener, AlertGenerator
{
  /**
   * Fake Servlet.
   * <p>
   * TODO JNR remove when using REST2LDAP servlet
   */
  private static final class FakeServlet extends HttpServlet
  {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
      // TODO Auto-generated method stub
      super.doGet(req, resp);
    }
  }
  /** The tracer object for the debug logger. */
  private static final DebugTracer TRACER = getTracer();
  /** Default friendly name for this connection handler. */
  private static final String DEFAULT_FRIENDLY_NAME = "HTTP Connection Handler";
  /** SSL instance name used in context creation. */
  private static final String SSL_CONTEXT_INSTANCE_NAME = "TLS";
  /** The initialization configuration. */
  private HTTPConnectionHandlerCfg initConfig;
  /** The current configuration. */
  private HTTPConnectionHandlerCfg currentConfig;
  /**
   * Indicates whether the Directory Server is in the process of shutting down.
   */
  private volatile boolean shutdownRequested;
  /** The set of listeners for this connection handler. */
  private List<HostPort> listeners = new LinkedList<HostPort>();
  /** The HTTP server embedded in OpenDJ. */
  private HttpServer httpServer;
  /**
   * Holds the current client connections. Using {@link ConcurrentHashMap} to
   * ensure no concurrent reads/writes can happen and adds/removes are fast.
   * Using Void for the value since it has no use.
   */
  private Map<ClientConnection, Void> clientConnections =
      new ConcurrentHashMap<ClientConnection, Void>();
  /** The unique name assigned to this connection handler. */
  private String handlerName;
  /** The protocol used by this connection handler. */
  private String protocol;
  /**
   * The condition variable that will be used by the start method to wait for
   * the socket port to be opened and ready to process requests before
   * returning.
   */
  private final Object waitListen = new Object();
  /**
   * The friendly name of this connection handler.
   */
  private String friendlyName;
  /**
   * SSL context.
   *
   * @see HTTPConnectionHandler#sslEngine
   */
  private SSLContext sslContext;
  /** The SSL engine is used for obtaining default SSL parameters. */
  private SSLEngine sslEngine;
  /**
   * Default constructor. It is invoked by reflection to create this
   * {@link ConnectionHandler}.
   */
  public HTTPConnectionHandler()
  {
    super(DEFAULT_FRIENDLY_NAME);
  }
  /** {@inheritDoc} */
  @Override
  public ConfigChangeResult applyConfigurationChange(
      HTTPConnectionHandlerCfg config)
  {
    // Create variables to include in the response.
    boolean adminActionRequired = false;
    List<Message> messages = new ArrayList<Message>();
    if (anyChangeRequiresRestart(config))
    {
      adminActionRequired = true;
      messages.add(ERR_CONNHANDLER_CONFIG_CHANGES_REQUIRE_RESTART.get("HTTP"));
    }
    // Reconfigure SSL if needed.
    try
    {
      configureSSL(config);
    }
    catch (DirectoryException e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      messages.add(e.getMessageObject());
      return new ConfigChangeResult(e.getResultCode(), adminActionRequired,
          messages);
    }
    this.initConfig = config;
    this.currentConfig = config;
    return new ConfigChangeResult(ResultCode.SUCCESS, adminActionRequired,
        messages);
  }
  private boolean anyChangeRequiresRestart(HTTPConnectionHandlerCfg newCfg)
  {
    return !equals(newCfg.getListenPort(), initConfig.getListenPort())
        || !equals(newCfg.getListenAddress(), initConfig.getListenAddress())
        || !equals(newCfg.getMaxRequestSize(), currentConfig
            .getMaxRequestSize())
        || !equals(newCfg.isAllowTCPReuseAddress(), currentConfig
            .isAllowTCPReuseAddress())
        || !equals(newCfg.isUseTCPKeepAlive(), currentConfig
            .isUseTCPKeepAlive())
        || !equals(newCfg.isUseTCPNoDelay(), currentConfig.isUseTCPNoDelay())
        || !equals(newCfg.getMaxBlockedWriteTimeLimit(), currentConfig
            .getMaxBlockedWriteTimeLimit())
        || !equals(newCfg.getBufferSize(), currentConfig.getBufferSize())
        || !equals(newCfg.getAcceptBacklog(), currentConfig.getAcceptBacklog())
        || !equals(newCfg.isUseSSL(), currentConfig.isUseSSL())
        || !equals(newCfg.getKeyManagerProviderDN(), currentConfig
            .getKeyManagerProviderDN())
        || !equals(newCfg.getSSLCertNickname(), currentConfig
            .getSSLCertNickname())
        || !equals(newCfg.getTrustManagerProviderDN(), currentConfig
            .getTrustManagerProviderDN())
        || !equals(newCfg.getSSLProtocol(), currentConfig.getSSLProtocol())
        || !equals(newCfg.getSSLCipherSuite(), currentConfig
            .getSSLCipherSuite())
        || !equals(newCfg.getSSLClientAuthPolicy(), currentConfig
            .getSSLClientAuthPolicy());
  }
  private boolean equals(Object o1, Object o2)
  {
    if (o1 == null)
    {
      return o2 == null;
    }
    return o1.equals(o2);
  }
  private boolean equals(long l1, long l2)
  {
    return l1 == l2;
  }
  private boolean equals(boolean b1, boolean b2)
  {
    return b1 == b2;
  }
  private void configureSSL(HTTPConnectionHandlerCfg config)
      throws DirectoryException
  {
    protocol = config.isUseSSL() ? "HTTPS" : "HTTP";
    if (config.isUseSSL())
    {
      sslContext = createSSLContext(config);
      sslEngine = createSSLEngine(config, sslContext);
    }
    else
    {
      sslContext = null;
      sslEngine = null;
    }
  }
  /** {@inheritDoc} */
  @Override
  public void finalizeConnectionHandler(Message finalizeReason)
  {
    shutdownRequested = true;
    // Unregister this as a change listener.
    currentConfig.removeHTTPChangeListener(this);
    // TODO JNR
    // if (connMonitor != null)
    // {
    // String lowerName = toLowerCase(connMonitor.getMonitorInstanceName());
    // DirectoryServer.deregisterMonitorProvider(lowerName);
    // }
    //
    // if (statTracker != null)
    // {
    // String lowerName = toLowerCase(statTracker.getMonitorInstanceName());
    // DirectoryServer.deregisterMonitorProvider(lowerName);
    // }
  }
  /** {@inheritDoc} */
  @Override
  public LinkedHashMap<String, String> getAlerts()
  {
    // TODO Auto-generated method stub
    return null;
  }
  /** {@inheritDoc} */
  @Override
  public String getClassName()
  {
    return HTTPConnectionHandler.class.getName();
  }
  /** {@inheritDoc} */
  @Override
  public Collection<ClientConnection> getClientConnections()
  {
    return clientConnections.keySet();
  }
  /** {@inheritDoc} */
  @Override
  public DN getComponentEntryDN()
  {
    return currentConfig.dn();
  }
  /** {@inheritDoc} */
  @Override
  public String getConnectionHandlerName()
  {
    return handlerName;
  }
  /**
   * Returns the current config of this connection handler.
   *
   * @return the current config of this connection handler
   */
  HTTPConnectionHandlerCfg getCurrentConfig()
  {
    return this.currentConfig;
  }
  /** {@inheritDoc} */
  @Override
  public Collection<String> getEnabledSSLCipherSuites()
  {
    final SSLEngine engine = sslEngine;
    if (engine != null)
    {
      return Arrays.asList(engine.getEnabledCipherSuites());
    }
    return super.getEnabledSSLCipherSuites();
  }
  /** {@inheritDoc} */
  @Override
  public Collection<String> getEnabledSSLProtocols()
  {
    final SSLEngine engine = sslEngine;
    if (engine != null)
    {
      return Arrays.asList(engine.getEnabledProtocols());
    }
    return super.getEnabledSSLProtocols();
  }
  /** {@inheritDoc} */
  @Override
  public Collection<HostPort> getListeners()
  {
    return listeners;
  }
  /**
   * Returns the listen port for this connection handler.
   *
   * @return the listen port for this connection handler.
   */
  int getListenPort()
  {
    return this.initConfig.getListenPort();
  }
  /** {@inheritDoc} */
  @Override
  public String getProtocol()
  {
    return protocol;
  }
  /**
   * Returns the SSL engine configured for this connection handler if SSL is
   * enabled, null otherwise.
   *
   * @return the SSL engine if SSL is enabled, null otherwise
   */
  SSLEngine getSSLEngine()
  {
    return sslEngine;
  }
  /** {@inheritDoc} */
  @Override
  public String getShutdownListenerName()
  {
    return handlerName;
  }
  /** {@inheritDoc} */
  @Override
  public void initializeConnectionHandler(HTTPConnectionHandlerCfg config)
      throws ConfigException, InitializationException
  {
    if (friendlyName == null)
    {
      friendlyName = config.dn().getRDN().getAttributeValue(0).toString();
    }
    int listenPort = config.getListenPort();
    for (InetAddress a : config.getListenAddress())
    {
      listeners.add(new HostPort(a.getHostAddress(), listenPort));
    }
    handlerName = getHandlerName(config);
    // Configure SSL if needed.
    try
    {
      configureSSL(config);
    }
    catch (DirectoryException e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      throw new InitializationException(e.getMessageObject());
    }
    // TODO JNR
    // handle ds-cfg-keep-stats
    // handle ds-cfg-num-request-handlers??
    // // Create and register monitors.
    // statTracker = new LDAPStatistics(handlerName + " Statistics");
    // DirectoryServer.registerMonitorProvider(statTracker);
    //
    // connMonitor = new ClientConnectionMonitorProvider(this);
    // DirectoryServer.registerMonitorProvider(connMonitor);
    // Register this as a change listener.
    config.addHTTPChangeListener(this);
    this.initConfig = config;
    this.currentConfig = config;
  }
  private String getHandlerName(HTTPConnectionHandlerCfg config)
  {
    StringBuilder nameBuffer = new StringBuilder();
    nameBuffer.append(friendlyName);
    for (InetAddress a : config.getListenAddress())
    {
      nameBuffer.append(" ");
      nameBuffer.append(a.getHostAddress());
    }
    nameBuffer.append(" port ");
    nameBuffer.append(config.getListenPort());
    return nameBuffer.toString();
  }
  /** {@inheritDoc} */
  @Override
  public boolean isConfigurationAcceptable(ConnectionHandlerCfg configuration,
      List<Message> unacceptableReasons)
  {
    HTTPConnectionHandlerCfg config = (HTTPConnectionHandlerCfg) configuration;
    if ((currentConfig == null)
        || (!currentConfig.isEnabled() && config.isEnabled()))
    {
      // Attempt to bind to the listen port on all configured addresses to
      // verify whether the connection handler will be able to start.
      Message errorMessage =
          checkAnyListenAddressInUse(config.getListenAddress(), config
              .getListenPort(), config.isAllowTCPReuseAddress(), config.dn());
      if (errorMessage != null)
      {
        unacceptableReasons.add(errorMessage);
        return false;
      }
    }
    if (config.isEnabled())
    {
      // Check that the SSL configuration is valid.
      if (config.isUseSSL())
      {
        try
        {
          SSLContext sslContext = createSSLContext(config);
          createSSLEngine(config, sslContext);
        }
        catch (DirectoryException e)
        {
          if (debugEnabled())
          {
            TRACER.debugCaught(DebugLogLevel.ERROR, e);
          }
          unacceptableReasons.add(e.getMessageObject());
          return false;
        }
      }
    }
    return true;
  }
  /**
   * Checks whether any listen address is in use for the given port. The check
   * is performed by binding to each address and port.
   *
   * @param listenAddresses
   *          the listen {@link InetAddress} to test
   * @param listenPort
   *          the listen port to test
   * @param allowReuseAddress
   *          whether addresses can be reused
   * @param configEntryDN
   *          the configuration entry DN
   * @return an error message if at least one of the address is already in use,
   *         null otherwise.
   */
  private Message checkAnyListenAddressInUse(
      Collection<InetAddress> listenAddresses, int listenPort,
      boolean allowReuseAddress, DN configEntryDN)
  {
    for (InetAddress a : listenAddresses)
    {
      try
      {
        if (isAddressInUse(a, listenPort, allowReuseAddress))
        {
          throw new IOException(ERR_CONNHANDLER_ADDRESS_INUSE.get().toString());
        }
      }
      catch (IOException e)
      {
        if (debugEnabled())
        {
          TRACER.debugCaught(DebugLogLevel.ERROR, e);
        }
        return ERR_CONNHANDLER_CANNOT_BIND.get("HTTP", String
            .valueOf(configEntryDN), a.getHostAddress(), listenPort,
            getExceptionMessage(e));
      }
    }
    return null;
  }
  /** {@inheritDoc} */
  @Override
  public boolean isConfigurationChangeAcceptable(
      HTTPConnectionHandlerCfg configuration, List<Message> unacceptableReasons)
  {
    return isConfigurationAcceptable(configuration, unacceptableReasons);
  }
  /** {@inheritDoc} */
  @Override
  public void processServerShutdown(Message reason)
  {
    shutdownRequested = true;
  }
  private boolean isListening()
  {
    return httpServer != null;
  }
  /** {@inheritDoc} */
  @Override
  public void start()
  {
    // The Directory Server start process should only return
    // when the connection handlers port are fully opened
    // and working. The start method therefore needs to wait for
    // the created thread to
    synchronized (waitListen)
    {
      super.start();
      try
      {
        waitListen.wait();
      }
      catch (InterruptedException e)
      {
        // If something interrupted the start its probably better
        // to return ASAP.
      }
    }
  }
  /** {@inheritDoc} */
  @Override
  public void run()
  {
    setName(handlerName);
    while (!shutdownRequested)
    {
      // If this connection handler is not enabled, then just sleep
      // for a bit and check again.
      if (!currentConfig.isEnabled())
      {
        if (isListening())
        {
          stopHttpServer();
        }
        sleep(1000);
        continue;
      }
      if (isListening())
      {
        // If already listening, then sleep for a bit and check again.
        sleep(1000);
        continue;
      }
      // If we have gotten here, then we are about to start listening
      // for the first time since startup or since we were previously
      // disabled. Start the embedded HTTP server
      startHttpServer();
    }
    // Initiate shutdown
    stopHttpServer();
  }
  private void startHttpServer()
  {
    // TODO JNR stop Grizzly own logging.
    // [testng] Mar 14, 2013 11:22:13 AM org.glassfish.grizzly.http.server.
    // NetworkListener stop
    // [testng] INFO: Stopped listener bound to [0.0.0.0:8080]
    // [testng] Mar 14, 2013 11:22:19 AM org.glassfish.grizzly.servlet.
    // WebappContext deploy
    // [testng] INFO: Starting application [example] ...
    // [testng] Mar 14, 2013 11:22:19 AM org.glassfish.grizzly.servlet.
    // WebappContext initServlets
    // [testng] INFO: [example] Servlet
    // [org.opends.server.protocols.http.HTTPConnec
    // tionHandler$FakeServlet] registered for url pattern(s) [[/managed/*]].
    // [testng] Mar 14, 2013 11:22:19 AM
    // org.glassfish.grizzly.servlet.WebappContext
    // initFilters
    // [testng] INFO: [example] Filter [org.opends.server.protocols.http.
    // AllowAdressesFilter] registered for
    // url pattern(s) [[/managed/*]] and servlet name(s) [[]]
    // [testng] Mar 14, 2013 11:22:19 AM
    // org.glassfish.grizzly.servlet.WebappContext
    // deploy
    // [testng] INFO: Application [example] is ready to service requests. Root:
    // [/example].
    // [testng] Mar 14, 2013 11:22:19 AM org.glassfish.grizzly.http.server.
    // NetworkListener start
    // [testng] INFO: Started listener bound to [0.0.0.0:8080]
    // [testng] Mar 14, 2013 11:22:19 AM org.glassfish.grizzly.http.server.
    // HttpServer start
    // [testng] INFO: [HttpServer-1] Started.
    this.httpServer =
        HttpServer.createSimpleServer("./", initConfig.getListenPort());
    int requestSize = (int) currentConfig.getMaxRequestSize();
    final ServerConfiguration serverConfig =
        this.httpServer.getServerConfiguration();
    serverConfig.setMaxBufferedPostSize(requestSize);
    serverConfig.setMaxFormPostSize(requestSize);
    try
    {
      for (NetworkListener listener : this.httpServer.getListeners())
      {
        TCPNIOTransport transport = listener.getTransport();
        transport.setReuseAddress(currentConfig.isAllowTCPReuseAddress());
        transport.setKeepAlive(currentConfig.isUseTCPKeepAlive());
        transport.setTcpNoDelay(currentConfig.isUseTCPNoDelay());
        transport.setWriteTimeout(currentConfig.getMaxBlockedWriteTimeLimit(),
            TimeUnit.MILLISECONDS);
        int bufferSize = (int) currentConfig.getBufferSize();
        transport.setReadBufferSize(bufferSize);
        transport.setWriteBufferSize(bufferSize);
        // TODO JNR
        // transport.setIOStrategy(SameThreadIOStrategy.getInstance());
        // transport.setWorkerThreadPool(threadPool);
        // transport.setWorkerThreadPoolConfig(workerPoolConfig);
        transport.setServerConnectionBackLog(currentConfig.getAcceptBacklog());
        if (sslContext != null)
        {
          listener.setSecure(true);
          listener.setSSLEngineConfig(new SSLEngineConfigurator(sslContext));
        }
      }
      // TODO JNR what to use here?
      final String displayName = "example";
      final String contextPath = "/example";
      final String servletName = "managed";
      final String urlPattern = "/managed/*";
      // TODO JNR what to use here?
      final WebappContext ctx = new WebappContext(displayName, contextPath);
      Filter filter =
          new CollectClientConnectionsFilter(this, clientConnections);
      FilterRegistration filterReg =
          ctx.addFilter("collectClientConnections", filter);
      // TODO JNR this is not working
      // filterReg.addMappingForServletNames(EnumSet.allOf(
      // DispatcherType.class), servletName);
      filterReg.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),
          urlPattern);
      final ServletRegistration reg =
          ctx.addServlet(servletName, new FakeServlet());
      reg.addMapping(urlPattern);
      ctx.deploy(this.httpServer);
      TRACER.debugInfo("Starting HTTP server...");
      this.httpServer.start();
      TRACER.debugInfo("HTTP server started");
      logError(NOTE_CONNHANDLER_STARTED_LISTENING.get(handlerName));
      // At this point, the connection Handler either started
      // correctly or failed to start but the start process
      // should be notified and resume its work in any cases.
      synchronized (waitListen)
      {
        waitListen.notify();
      }
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
    }
  }
  private void stopHttpServer()
  {
    TRACER.debugInfo("Stopping HTTP server...");
    this.httpServer.stop();
    this.httpServer = null;
    TRACER.debugInfo("HTTP server stopped");
    logError(NOTE_CONNHANDLER_STOPPED_LISTENING.get(handlerName));
  }
  private void sleep(int millis)
  {
    try
    {
      Thread.sleep(millis);
    }
    catch (InterruptedException wokenUp)
    {
    }
  }
  /** {@inheritDoc} */
  @Override
  public void toString(StringBuilder buffer)
  {
    buffer.append(handlerName);
  }
  private SSLEngine createSSLEngine(HTTPConnectionHandlerCfg config,
      SSLContext sslContext) throws DirectoryException
  {
    if (sslContext == null)
    {
      return null;
    }
    try
    {
      SSLEngine sslEngine = sslContext.createSSLEngine();
      sslEngine.setUseClientMode(false);
      final Set<String> protocols = config.getSSLProtocol();
      if (!protocols.isEmpty())
      {
        String[] array = protocols.toArray(new String[protocols.size()]);
        sslEngine.setEnabledProtocols(array);
      }
      final Set<String> ciphers = config.getSSLCipherSuite();
      if (!ciphers.isEmpty())
      {
        String[] array = ciphers.toArray(new String[ciphers.size()]);
        sslEngine.setEnabledCipherSuites(array);
      }
      switch (config.getSSLClientAuthPolicy())
      {
      case DISABLED:
        sslEngine.setNeedClientAuth(false);
        sslEngine.setWantClientAuth(false);
        break;
      case REQUIRED:
        sslEngine.setWantClientAuth(true);
        sslEngine.setNeedClientAuth(true);
        break;
      case OPTIONAL:
      default:
        sslEngine.setNeedClientAuth(false);
        sslEngine.setWantClientAuth(true);
        break;
      }
      return sslEngine;
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      ResultCode resCode = DirectoryServer.getServerErrorResultCode();
      Message message =
          ERR_CONNHANDLER_SSL_CANNOT_INITIALIZE.get(getExceptionMessage(e));
      throw new DirectoryException(resCode, message, e);
    }
  }
  private SSLContext createSSLContext(HTTPConnectionHandlerCfg config)
      throws DirectoryException
  {
    if (!config.isUseSSL())
    {
      return null;
    }
    try
    {
      DN keyMgrDN = config.getKeyManagerProviderDN();
      KeyManagerProvider<?> keyManagerProvider =
          DirectoryServer.getKeyManagerProvider(keyMgrDN);
      if (keyManagerProvider == null)
      {
        keyManagerProvider = new NullKeyManagerProvider();
      }
      String alias = config.getSSLCertNickname();
      KeyManager[] keyManagers;
      if (alias == null)
      {
        keyManagers = keyManagerProvider.getKeyManagers();
      }
      else
      {
        keyManagers =
            SelectableCertificateKeyManager.wrap(keyManagerProvider
                .getKeyManagers(), alias);
      }
      DN trustMgrDN = config.getTrustManagerProviderDN();
      TrustManagerProvider<?> trustManagerProvider =
          DirectoryServer.getTrustManagerProvider(trustMgrDN);
      if (trustManagerProvider == null)
      {
        trustManagerProvider = new NullTrustManagerProvider();
      }
      SSLContext sslContext = SSLContext.getInstance(SSL_CONTEXT_INSTANCE_NAME);
      sslContext.init(keyManagers, trustManagerProvider.getTrustManagers(),
          null);
      return sslContext;
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      ResultCode resCode = DirectoryServer.getServerErrorResultCode();
      Message message =
          ERR_CONNHANDLER_SSL_CANNOT_INITIALIZE.get(getExceptionMessage(e));
      throw new DirectoryException(resCode, message, e);
    }
  }
}
opends/src/server/org/opends/server/protocols/http/package-info.java
New file
@@ -0,0 +1,37 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2013 ForgeRock AS
 */
/**
 * Contains the implementation for the Directory Server connection handler that
 * is responsible for interacting with clients using HTTP.
 */
@org.opends.server.types.PublicAPI(
     stability=org.opends.server.types.StabilityLevel.PRIVATE)
package org.opends.server.protocols.http;
opends/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java
@@ -23,31 +23,32 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 *      Portions Copyright 2011-2013 ForgeRock AS
 */
package org.opends.server.protocols.jmx;
import java.net.*;
import java.net.InetAddress;
import java.util.*;
import java.util.concurrent.atomic.*;
import javax.management.Notification;
import javax.management.NotificationListener;
import javax.management.remote.JMXConnectionNotification;
import org.opends.messages.Message;
import org.opends.messages.MessageBuilder;
import org.opends.server.api.*;
import org.opends.server.core.*;
import org.opends.server.core.networkgroups.NetworkGroup;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.protocols.ldap.*;
import org.opends.server.protocols.internal.InternalSearchOperation ;
import org.opends.server.protocols.internal.InternalSearchListener;
import org.opends.messages.Message;
import org.opends.server.types.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
import org.opends.server.loggers.debug.DebugTracer;
import static org.opends.messages.ProtocolMessages.*;
import org.opends.messages.MessageBuilder;
import org.opends.server.core.networkgroups.NetworkGroup;
/**
 * This class defines the set of methods and structures that must be implemented
@@ -117,12 +118,8 @@
    connectionID = DirectoryServer.newConnectionAccepted(this);
    if (connectionID < 0)
    {
      //
      // TODO Change Message to be JMX specific
      disconnect(
          DisconnectReason.ADMIN_LIMIT_EXCEEDED,
          true,
          ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER.get());
      disconnect(DisconnectReason.ADMIN_LIMIT_EXCEEDED, true,
          ERR_CONNHANDLER_REJECTED_BY_SERVER.get());
    }
    operationList = new LinkedList<Operation>();
@@ -154,11 +151,8 @@
    //
    // The only handled notifications are CLOSED and FAILED
    if (! (
        (jcn.getType().equals(JMXConnectionNotification.CLOSED))
        ||
        (jcn.getType().equals(JMXConnectionNotification.FAILED))
        ))
    if ((!jcn.getType().equals(JMXConnectionNotification.CLOSED))
        && (!jcn.getType().equals(JMXConnectionNotification.FAILED)))
    {
      return;
    }
opends/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java
@@ -23,18 +23,15 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions copyright 2013 ForgeRock AS
 */
package org.opends.server.protocols.jmx;
import java.io.IOException;
import org.opends.messages.Message;
import static org.opends.server.loggers.ErrorLogger.logError;
import static org.opends.messages.ProtocolMessages.*;
import static org.opends.server.loggers.ErrorLogger.logError;
import static org.opends.server.util.StaticUtils.*;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collection;
@@ -42,6 +39,7 @@
import java.util.LinkedList;
import java.util.List;
import org.opends.messages.Message;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.server.ConnectionHandlerCfg;
import org.opends.server.admin.std.server.JMXConnectionHandlerCfg;
@@ -53,8 +51,6 @@
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DN;
import org.opends.server.types.HostPort;
import org.opends.server.types.InitializationException;
import org.opends.server.types.ResultCode;
@@ -74,6 +70,8 @@
    ServerShutdownListener, AlertGenerator,
    ConfigurationChangeListener<JMXConnectionHandlerCfg> {
  private static final String WILDCARD_ADDRESS = "0.0.0.0";
  /**
   * Key that may be placed into a JMX connection environment map to
   * provide a custom <code>javax.net.ssl.TrustManager</code> array
@@ -119,6 +117,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public ConfigChangeResult applyConfigurationChange(
      JMXConnectionHandlerCfg config) {
    // Create variables to include in the response.
@@ -214,6 +213,7 @@
   * @return Information about the set of alerts that this generator
   *         may produce.
   */
  @Override
  public LinkedHashMap<String, String> getAlerts() {
    LinkedHashMap<String, String> alerts = new LinkedHashMap<String, String>();
@@ -229,6 +229,7 @@
   * @return The fully-qualified name of the Java class for this alert
   *         generator implementation.
   */
  @Override
  public String getClassName() {
    return CLASS_NAME;
  }
@@ -305,6 +306,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public String getShutdownListenerName() {
    return connectionHandlerName;
  }
@@ -347,9 +349,9 @@
    }
    catch (Exception e)
    {
      Message message = ERR_JMX_CONNHANDLER_CANNOT_BIND.
          get(String.valueOf(config.dn()), config.getListenPort(),
              getExceptionMessage(e));
      Message message =
          ERR_CONNHANDLER_CANNOT_BIND.get("JMX", String.valueOf(config.dn()),
              WILDCARD_ADDRESS, config.getListenPort(), getExceptionMessage(e));
      logError(message);
      throw new InitializationException(message);
    }
@@ -361,7 +363,7 @@
    }
    listeners.clear();
    listeners.add(new HostPort("0.0.0.0", config.getListenPort()));
    listeners.add(new HostPort(WILDCARD_ADDRESS, config.getListenPort()));
    connectionHandlerName = "JMX Connection Handler " + config.getListenPort();
    // Create a system property to store the JMX port the server is
@@ -430,9 +432,10 @@
            ERR_CONNHANDLER_ADDRESS_INUSE.get().toString());
        }
      } catch (Exception e) {
        Message message = ERR_JMX_CONNHANDLER_CANNOT_BIND.get(
          String.valueOf(config.dn()), config.getListenPort(),
          getExceptionMessage(e));
        Message message =
            ERR_CONNHANDLER_CANNOT_BIND.get("JMX", String.valueOf(config.dn()),
                WILDCARD_ADDRESS, config.getListenPort(),
                getExceptionMessage(e));
        unacceptableReasons.add(message);
        return false;
      }
@@ -446,6 +449,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public boolean isConfigurationChangeAcceptable(
      JMXConnectionHandlerCfg config,
      List<Message> unacceptableReasons) {
@@ -471,6 +475,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public void processServerShutdown(Message reason) {
    // We should also close the RMI registry.
    rmiConnector.finalizeConnectionHandler(true);
opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
@@ -29,14 +29,14 @@
import static org.opends.messages.CoreMessages.ERR_ENQUEUE_BIND_IN_PROGRESS;
import static org.opends.messages.CoreMessages.*;
import static org.opends.messages.ProtocolMessages.*;
import static org.opends.server.core.DirectoryServer.getMaxInternalBufferSize;
import static org.opends.server.loggers.AccessLogger.logDisconnect;
import static org.opends.server.loggers.ErrorLogger.logError;
import static org.opends.server.core.DirectoryServer.*;
import static org.opends.server.loggers.AccessLogger.*;
import static org.opends.server.loggers.ErrorLogger.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.protocols.ldap.LDAPConstants.*;
import static org.opends.server.util.ServerConstants.OID_START_TLS_REQUEST;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
import java.io.IOException;
@@ -109,6 +109,7 @@
    /**
     * {@inheritDoc}
     */
    @Override
    public void run()
    {
      try
@@ -159,6 +160,7 @@
    // Synchronize concurrent writes to the same connection.
    private final Lock writeLock = new ReentrantLock();
    @Override
    public int read(ByteBuffer byteBuffer) throws IOException
    {
      int bytesRead = clientChannel.read(byteBuffer);
@@ -169,11 +171,13 @@
      return bytesRead;
    }
    @Override
    public boolean isOpen()
    {
      return clientChannel.isOpen();
    }
    @Override
    public void close() throws IOException
    {
      clientChannel.close();
@@ -181,6 +185,7 @@
    @Override
    public int write(ByteBuffer byteBuffer) throws IOException
    {
      writeLock.lock();
@@ -333,6 +338,7 @@
    /**
     * {@inheritDoc}
     */
    @Override
    protected ASN1WriterHolder initialValue()
    {
      return new ASN1WriterHolder();
@@ -503,7 +509,7 @@
    if (connectionID < 0)
    {
      disconnect(DisconnectReason.ADMIN_LIMIT_EXCEEDED, true,
          ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER.get());
          ERR_CONNHANDLER_REJECTED_BY_SERVER.get());
    }
  }
@@ -2498,6 +2504,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public boolean prepareTLS(MessageBuilder unavailableReason)
  {
    if (isSecure() && "TLS".equals(activeProvider.getName()))
opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
@@ -123,16 +123,12 @@
  private static final DebugTracer TRACER = getTracer();
  /**
   * The fully-qualified name of this class.
   */
  private static final String CLASS_NAME =
      "org.opends.server.protocols.ldap.LDAPConnectionHandler";
  /**
   * Default friendly name for the LDAP connection handler.
   */
  private static final String DEFAULT_FRIENDLY_NAME =
      "LDAP Connection Handler";
  private static final String DEFAULT_FRIENDLY_NAME = "LDAP Connection Handler";
  /** SSL instance name used in context creation. */
  private static final String SSL_CONTEXT_INSTANCE_NAME = "TLS";
  /** The current configuration state. */
  private LDAPConnectionHandlerCfg currentConfig;
@@ -185,7 +181,7 @@
  private int requestHandlerIndex;
  /** The set of listeners for this connection handler. */
  private LinkedList<HostPort> listeners;
  private List<HostPort> listeners;
  /**
   * The set of request handlers that are associated with this connection
@@ -227,14 +223,14 @@
  /** The friendly name of this connection handler. */
  private String friendlyName;
  /** SSL instance name used in context creation. */
  private static final String SSL_CONTEXT_INSTANCE_NAME = "TLS";
  /**
   * SSL context and engine - the engine is used for obtaining default SSL
   * parameters.
   * SSL context.
   *
   * @see LDAPConnectionHandler#sslEngine
   */
  private SSLContext sslContext;
  /** The SSL engine is used for obtaining default SSL parameters. */
  private SSLEngine sslEngine;
  /**
@@ -352,24 +348,19 @@
    deniedClients = config.getDeniedClient();
    // Reconfigure SSL if needed.
    protocol = config.isUseSSL() ? "LDAPS" : "LDAP";
    if (config.isUseSSL() || config.isAllowStartTLS())
    try
    {
      try
      configureSSL(config);
    }
    catch (DirectoryException e)
    {
      if (debugEnabled())
      {
        sslContext = createSSLContext(config);
        sslEngine = createSSLEngine(config, sslContext);
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      catch (DirectoryException e)
      {
        if (debugEnabled())
        {
          TRACER.debugCaught(DebugLogLevel.ERROR, e);
        }
        messages.add(e.getMessageObject());
        return new ConfigChangeResult(e.getResultCode(), adminActionRequired,
            messages);
      }
      messages.add(e.getMessageObject());
      return new ConfigChangeResult(e.getResultCode(), adminActionRequired,
          messages);
    }
    if (config.isAllowLDAPV2())
@@ -384,6 +375,21 @@
    return new ConfigChangeResult(resultCode, adminActionRequired, messages);
  }
  private void configureSSL(LDAPConnectionHandlerCfg config)
      throws DirectoryException
  {
    protocol = config.isUseSSL() ? "LDAPS" : "LDAP";
    if (config.isUseSSL() || config.isAllowStartTLS())
    {
      sslContext = createSSLContext(config);
      sslEngine = createSSLEngine(config, sslContext);
    }
    else
    {
      sslContext = null;
      sslEngine = null;
    }
  }
  /**
@@ -477,7 +483,7 @@
  @Override
  public String getClassName()
  {
    return CLASS_NAME;
    return LDAPConnectionHandler.class.getName();
  }
@@ -534,13 +540,10 @@
  @Override
  public Collection<String> getEnabledSSLCipherSuites()
  {
    if (currentConfig.isUseSSL() || currentConfig.isAllowStartTLS())
    final SSLEngine engine = sslEngine;
    if (engine != null)
    {
      final SSLEngine engine = sslEngine;
      if (engine != null)
      {
        return Arrays.asList(engine.getEnabledCipherSuites());
      }
      return Arrays.asList(engine.getEnabledCipherSuites());
    }
    return super.getEnabledSSLCipherSuites();
  }
@@ -553,13 +556,10 @@
  @Override
  public Collection<String> getEnabledSSLProtocols()
  {
    if (currentConfig.isUseSSL() || currentConfig.isAllowStartTLS())
    final SSLEngine engine = sslEngine;
    if (engine != null)
    {
      final SSLEngine engine = sslEngine;
      if (engine != null)
      {
        return Arrays.asList(engine.getEnabledProtocols());
      }
      return Arrays.asList(engine.getEnabledProtocols());
    }
    return super.getEnabledSSLProtocols();
  }
@@ -716,22 +716,17 @@
    deniedClients = config.getDeniedClient();
    // Configure SSL if needed.
    protocol = config.isUseSSL() ? "LDAPS" : "LDAP";
    if (config.isUseSSL() || config.isAllowStartTLS())
    try
    {
      try
      configureSSL(config);
    }
    catch (DirectoryException e)
    {
      if (debugEnabled())
      {
        sslContext = createSSLContext(config);
        sslEngine = createSSLEngine(config, sslContext);
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      catch (DirectoryException e)
      {
        if (debugEnabled())
        {
          TRACER.debugCaught(DebugLogLevel.ERROR, e);
        }
        throw new InitializationException(e.getMessageObject());
      }
      throw new InitializationException(e.getMessageObject());
    }
    // Save properties that cannot be dynamically modified.
@@ -899,7 +894,7 @@
        {
          TRACER.debugCaught(DebugLogLevel.ERROR, e);
        }
        return ERR_LDAP_CONNHANDLER_CANNOT_BIND.get(String
        return ERR_CONNHANDLER_CANNOT_BIND.get("LDAP", String
            .valueOf(configEntryDN), a.getHostAddress(), listenPort,
            getExceptionMessage(e));
      }
@@ -1010,7 +1005,7 @@
          cleanUpSelector();
          listening = false;
          logError(NOTE_LDAP_CONNHANDLER_STOPPED_LISTENING.get(handlerName));
          logError(NOTE_CONNHANDLER_STOPPED_LISTENING.get(handlerName));
        }
        try
@@ -1202,7 +1197,7 @@
        channel.register(selector, SelectionKey.OP_ACCEPT);
        numRegistered++;
        logError(NOTE_LDAP_CONNHANDLER_STARTED_LISTENING.get(handlerName));
        logError(NOTE_CONNHANDLER_STARTED_LISTENING.get(handlerName));
      }
      catch (Exception e)
      {
@@ -1254,12 +1249,10 @@
    if ((!deniedClients.isEmpty())
        && AddressMask.maskListContains(clientAddr, deniedClients))
    {
      clientConnection.disconnect(
          DisconnectReason.CONNECTION_REJECTED,
          currentConfig.isSendRejectionNotice(),
          ERR_LDAP_CONNHANDLER_DENIED_CLIENT.get(
              clientConnection.getClientHostPort(),
              clientConnection.getServerHostPort()));
      clientConnection.disconnect(DisconnectReason.CONNECTION_REJECTED,
          currentConfig.isSendRejectionNotice(), ERR_CONNHANDLER_DENIED_CLIENT
              .get(clientConnection.getClientHostPort(), clientConnection
                  .getServerHostPort()));
      return;
    }
    // Check to see if there is an allowed list and if
@@ -1268,12 +1261,10 @@
    if ((!allowedClients.isEmpty())
        && (!AddressMask.maskListContains(clientAddr, allowedClients)))
    {
      clientConnection.disconnect(
          DisconnectReason.CONNECTION_REJECTED,
      clientConnection.disconnect(DisconnectReason.CONNECTION_REJECTED,
          currentConfig.isSendRejectionNotice(),
          ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT.get(
              clientConnection.getClientHostPort(),
              clientConnection.getServerHostPort()));
          ERR_CONNHANDLER_DISALLOWED_CLIENT.get(clientConnection
              .getClientHostPort(), clientConnection.getServerHostPort()));
      return;
    }
@@ -1310,9 +1301,10 @@
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      Message message = INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT.get(
          clientConnection.getClientHostPort(),
          clientConnection.getServerHostPort(), getExceptionMessage(e));
      Message message =
          INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT.get(clientConnection
              .getClientHostPort(), clientConnection.getServerHostPort(),
              getExceptionMessage(e));
      logError(message);
      clientConnection.disconnect(DisconnectReason.SERVER_ERROR,