Julian Chandra Sutadi created ZOOKEEPER-5108:
------------------------------------------------

             Summary: Client SASL settings set to "true" with trailing 
whitespace are read as false
                 Key: ZOOKEEPER-5108
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-5108
             Project: ZooKeeper
          Issue Type: Bug
            Reporter: Julian Chandra Sutadi


ZOOKEEPER-3613 made ZKConfig.getBoolean() trim values before parsing, after a 
client setting "zookeeper.client.secure=true " (trailing space, set as a JVM 
system property via WebSphere Liberty's bootstrap.properties) silently left TLS 
disabled.

Two other client settings are read from the same ZKClientConfig but parsed 
without getBoolean(), so they still have the behaviour that 3613 fixed:
{code:java}
// ZKClientConfig.isSaslClientEnabled()
return Boolean.valueOf(getProperty(ENABLE_CLIENT_SASL_KEY, 
ENABLE_CLIENT_SASL_DEFAULT));

// SaslServerPrincipal.getServerPrincipal()
String canonicalizeText = clientConfig.getProperty(
    ZKClientConfig.ZK_SASL_CLIENT_CANONICALIZE_HOSTNAME,
    ZKClientConfig.ZK_SASL_CLIENT_CANONICALIZE_HOSTNAME_DEFAULT);
canonicalize = Boolean.parseBoolean(canonicalizeText);{code}
Both settings default to "true". When one is set explicitly to "true " with a 
trailing space, it evaluates to false, which is the opposite of both the 
configured value and the default configuration value.

This only happens for values set as JVM system properties (the path in the 
original ZOOKEEPER-3613 report, e.g. -Dzookeeper.sasl.client="true ") or 
through ZKClientConfig.setProperty(). Values loaded from a client configuration 
file are already trimmed in ZKConfig.parseProperties.

*Proposed fix*
Read both through ZKConfig.getBoolean(key, default) so they share the 3613 
behaviour:
{code:java}
// ZKClientConfig
public boolean isSaslClientEnabled() {
    return getBoolean(ENABLE_CLIENT_SASL_KEY, 
Boolean.parseBoolean(ENABLE_CLIENT_SASL_DEFAULT));
}

// SaslServerPrincipal
boolean canonicalize = clientConfig.getBoolean(
    ZKClientConfig.ZK_SASL_CLIENT_CANONICALIZE_HOSTNAME,
    
Boolean.parseBoolean(ZKClientConfig.ZK_SASL_CLIENT_CANONICALIZE_HOSTNAME_DEFAULT));{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to