audit: set audit_info for native-protocol BATCH messages

Commit 16b56c2451 ("Audit: avoid dynamic_cast on a hot path") moved
audit info into batch_statement via set_audit_info(), but only wired it
for the CQL-text BATCH path (raw::batch_statement::prepare()).
Native-protocol BATCH messages (opcode 0x0D), handled by
process_batch_internal in transport/server.cc, construct a
batch_statement without setting audit_info. This causes audit to
silently skip the entire batch.

Set audit_info on the batch_statement so these batches are audited.

Fixes SCYLLADB-1652
This commit is contained in:
Andrzej Jackowski
2026-04-21 21:44:00 +02:00
parent 5f93d57d6e
commit f5bb9b6282
2 changed files with 5 additions and 0 deletions

View File

@@ -89,6 +89,10 @@ public:
const std::vector<single_statement>& statements() const { return _statements; }
audit::audit_info_ptr audit_info() const {
return audit::audit::create_audit_info(audit::statement_category::DML, sstring(), sstring(), true);
}
virtual bool depends_on(std::string_view ks_name, std::optional<std::string_view> cf_name) const override;
virtual uint32_t get_bound_terms() const override;

View File

@@ -1798,6 +1798,7 @@ process_batch_internal(service::client_state& client_state, sharded<cql3::query_
}
auto batch = ::make_shared<cql3::statements::batch_statement>(cql3::statements::batch_statement::type(type.assume_value()), std::move(modifications), cql3::attributes::none(), qp.local().get_cql_stats());
batch->set_audit_info(batch->audit_info());
return qp.local().execute_batch_without_checking_exception_message(batch, query_state, options, std::move(pending_authorization_entries))
.then([stream, batch, q_state = std::move(q_state), trace_state = query_state.get_trace_state(), version] (auto msg) {
if (msg->as_bounce()) {