You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Sharang Gupta (Jira)" <ji...@apache.org> on 2026/10/22 20:31:00 UTC
[jira] [Created] (ZOOKEEPER-5113) Audit log keys, mntr peer_state and admin zabstate are lower-cased with the JVM default locale
Sharang Gupta created ZOOKEEPER-5113:
----------------------------------------
Summary: Audit log keys, mntr peer_state and admin zabstate are lower-cased with the JVM default locale
Key: ZOOKEEPER-5113
URL: https://issues.apache.org/jira/browse/ZOOKEEPER-5113
Project: ZooKeeper
Issue Type: Bug
Components: server
Affects Versions: 3.9.6
Reporter: Sharang Gupta
Several machine-read strings in zookeeper-server are produced with {{String.toLowerCase()}} without a {{Locale}}, so they follow the JVM default locale. Under a Turkish default locale ({{tr-TR}}; {{-Duser.language=tr -Duser.country=TR}} reproduces it anywhere) an uppercase {{I}} becomes a dotless {{ı}} (U+0131):
# {{audit/AuditEvent.java}} (lines 47, 52, 87): the {{logEntries}} keys come from {{FieldName.name().toLowerCase()}} and the result from {{Result.name().toLowerCase()}}, so the documented tab-separated audit log (zookeeperAuditLogs.md) becomes
{code}
sessıon=0x100001 user=alice ıp=10.0.0.7 operatıon=create znode=/app/config znode_type=persistent acl=... result=success
{code}
(keys {{sessıon}}, {{ıp}}, {{operatıon}}; {{Result.INVOKED}} -> {{result=ınvoked}}). Reproduced against zookeeper 3.9.6 through the public {{ZKAuditProvider.log(...)}} with the default {{Slf4jAuditLogger}} and {{zookeeper.audit.enable=true}}. Log parsers / SIEM rules keyed on {{session=}}, {{ip=}}, {{operation=}} silently stop matching.
# {{audit/AuditHelper.java}} (line 185): the {{znode_type}} value {{CreateMode...toString().toLowerCase()}} ({{PERSISTENT_SEQUENTIAL}}, {{CONTAINER}}, {{PERSISTENT_WITH_TTL}} -> {{contaıner}}, ...).
# {{server/admin/Commands.java}}: the {{zabstate}} value {{ZabState.name().toLowerCase()}} ({{ELECTION}} / {{DISCOVERY}} / {{SYNCHRONIZATION}} -> {{electıon}}, {{dıscovery}}, {{synchronızatıon}}) in the admin {{/commands/zabstate}} JSON.
# {{server/quorum/QuorumPeer.java}}: {{getDetailedPeerState()}} lower-cases {{ServerState}} / {{ZabState}} / {{SyncMode}}, exposed as {{zk_peer_state}} by the 4lw {{mntr}} command and the admin {{/commands/monitor}} endpoint ({{followıng}}, {{observıng}}, ...); and {{QuorumServer.getType}} switches on {{s.trim().toLowerCase()}} for the {{peerType}} config value.
The code base already pins the locale for machine-read output ({{ZKHostnameVerifier}} uses {{toLowerCase(Locale.ROOT)}}, {{PrepRequestProcessor}} uses {{String.format(Locale.ENGLISH, "%010d", ...)}} for sequential znode names). Fix: {{toLowerCase(Locale.ROOT)}} at those sites, plus a unit test in {{AuditEventTest}} that builds an {{AuditEvent}} under a {{tr-TR}} default locale and asserts the emitted keys. PR to follow.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)