Deprecate file_analysis::File::GetVal(), replace with ToVal()

This commit is contained in:
Jon Siwek 2020-05-22 12:27:37 -07:00
parent 27c3c207e4
commit faa4738807
14 changed files with 45 additions and 59 deletions

View file

@ -349,7 +349,7 @@ void Reporter::Weird(file_analysis::File* f, const char* name, const char* addl)
return; return;
} }
WeirdHelper(file_weird, {f->GetVal()->Ref(), new StringVal(addl)}, WeirdHelper(file_weird, {f->ToVal()->Ref(), new StringVal(addl)},
"%s", name); "%s", name);
} }

View file

@ -91,7 +91,7 @@ File::File(const std::string& file_id, const std::string& source_name, Connectio
DBG_LOG(DBG_FILE_ANALYSIS, "[%s] Creating new File object", file_id.c_str()); DBG_LOG(DBG_FILE_ANALYSIS, "[%s] Creating new File object", file_id.c_str());
val = new RecordVal(zeek::id::fa_file); val = make_intrusive<RecordVal>(zeek::id::fa_file);
val->Assign(id_idx, make_intrusive<StringVal>(file_id.c_str())); val->Assign(id_idx, make_intrusive<StringVal>(file_id.c_str()));
SetSource(source_name); SetSource(source_name);
@ -107,7 +107,6 @@ File::File(const std::string& file_id, const std::string& source_name, Connectio
File::~File() File::~File()
{ {
DBG_LOG(DBG_FILE_ANALYSIS, "[%s] Destroying File object", id.c_str()); DBG_LOG(DBG_FILE_ANALYSIS, "[%s] Destroying File object", id.c_str());
Unref(val);
delete file_reassembler; delete file_reassembler;
for ( auto a : done_analyzers ) for ( auto a : done_analyzers )
@ -152,7 +151,7 @@ void File::RaiseFileOverNewConnection(Connection* conn, bool is_orig)
if ( conn && FileEventAvailable(file_over_new_connection) ) if ( conn && FileEventAvailable(file_over_new_connection) )
{ {
FileEvent(file_over_new_connection, { FileEvent(file_over_new_connection, {
IntrusivePtr{NewRef{}, val}, val,
conn->ConnVal(), conn->ConnVal(),
val_mgr->Bool(is_orig), val_mgr->Bool(is_orig),
}); });
@ -301,7 +300,7 @@ bool File::SetMime(const std::string& mime_type)
meta->Assign(meta_mime_type_idx, make_intrusive<StringVal>(mime_type)); meta->Assign(meta_mime_type_idx, make_intrusive<StringVal>(mime_type));
meta->Assign(meta_inferred_idx, val_mgr->False()); meta->Assign(meta_inferred_idx, val_mgr->False());
FileEvent(file_sniff, {IntrusivePtr{NewRef{}, val}, std::move(meta)}); FileEvent(file_sniff, {val, std::move(meta)});
return true; return true;
} }
@ -340,7 +339,7 @@ void File::InferMetadata()
file_analysis::GenMIMEMatchesVal(matches)); file_analysis::GenMIMEMatchesVal(matches));
} }
FileEvent(file_sniff, {IntrusivePtr{NewRef{}, val}, std::move(meta)}); FileEvent(file_sniff, {val, std::move(meta)});
} }
bool File::BufferBOF(const u_char* data, uint64_t len) bool File::BufferBOF(const u_char* data, uint64_t len)
@ -452,7 +451,7 @@ void File::DeliverChunk(const u_char* data, uint64_t len, uint64_t offset)
if ( FileEventAvailable(file_reassembly_overflow) ) if ( FileEventAvailable(file_reassembly_overflow) )
{ {
FileEvent(file_reassembly_overflow, { FileEvent(file_reassembly_overflow, {
IntrusivePtr{NewRef{}, val}, val,
val_mgr->Count(current_offset), val_mgr->Count(current_offset),
val_mgr->Count(gap_bytes) val_mgr->Count(gap_bytes)
}); });
@ -595,13 +594,7 @@ void File::Gap(uint64_t offset, uint64_t len)
} }
if ( FileEventAvailable(file_gap) ) if ( FileEventAvailable(file_gap) )
{ FileEvent(file_gap, {val, val_mgr->Count(offset), val_mgr->Count(len)});
FileEvent(file_gap, {
IntrusivePtr{NewRef{}, val},
val_mgr->Count(offset),
val_mgr->Count(len)
});
}
analyzers.DrainModifications(); analyzers.DrainModifications();
@ -619,7 +612,7 @@ void File::FileEvent(EventHandlerPtr h)
if ( ! FileEventAvailable(h) ) if ( ! FileEventAvailable(h) )
return; return;
FileEvent(h, zeek::Args{{NewRef{}, val}}); FileEvent(h, zeek::Args{val});
} }
void File::FileEvent(EventHandlerPtr h, val_list* vl) void File::FileEvent(EventHandlerPtr h, val_list* vl)

View file

@ -38,7 +38,12 @@ public:
/** /**
* @return the wrapped \c fa_file record value, #val. * @return the wrapped \c fa_file record value, #val.
*/ */
RecordVal* GetVal() const { return val; } const IntrusivePtr<RecordVal>& ToVal() const
{ return val; }
[[deprecated("Remove in v4.1. Use ToVal().")]]
RecordVal* GetVal() const
{ return val.get(); }
/** /**
* @return the value of the "source" field from #val record or an empty * @return the value of the "source" field from #val record or an empty
@ -333,7 +338,7 @@ protected:
protected: protected:
std::string id; /**< A pretty hash that likely identifies file */ std::string id; /**< A pretty hash that likely identifies file */
RecordVal* val; /**< \c fa_file from script layer. */ IntrusivePtr<RecordVal> val; /**< \c fa_file from script layer. */
FileReassembler* file_reassembler; /**< A reassembler for the file if it's needed. */ FileReassembler* file_reassembler; /**< A reassembler for the file if it's needed. */
uint64_t stream_offset; /**< The offset of the file which has been forwarded. */ uint64_t stream_offset; /**< The offset of the file which has been forwarded. */
uint64_t reassembly_max_buffer; /**< Maximum allowed buffer for reassembly. */ uint64_t reassembly_max_buffer; /**< Maximum allowed buffer for reassembly. */

View file

@ -43,7 +43,7 @@ bool DataEvent::DeliverChunk(const u_char* data, uint64_t len, uint64_t offset)
if ( ! chunk_event ) return true; if ( ! chunk_event ) return true;
mgr.Enqueue(chunk_event, mgr.Enqueue(chunk_event,
IntrusivePtr{NewRef{}, GetFile()->GetVal()}, GetFile()->ToVal(),
make_intrusive<StringVal>(new BroString(data, len, false)), make_intrusive<StringVal>(new BroString(data, len, false)),
val_mgr->Count(offset) val_mgr->Count(offset)
); );
@ -56,7 +56,7 @@ bool DataEvent::DeliverStream(const u_char* data, uint64_t len)
if ( ! stream_event ) return true; if ( ! stream_event ) return true;
mgr.Enqueue(stream_event, mgr.Enqueue(stream_event,
IntrusivePtr{NewRef{}, GetFile()->GetVal()}, GetFile()->ToVal(),
make_intrusive<StringVal>(new BroString(data, len, false)) make_intrusive<StringVal>(new BroString(data, len, false))
); );

View file

@ -69,7 +69,7 @@ void Entropy::Finalize()
ent_result->Assign(4, make_intrusive<Val>(scc, TYPE_DOUBLE)); ent_result->Assign(4, make_intrusive<Val>(scc, TYPE_DOUBLE));
mgr.Enqueue(file_entropy, mgr.Enqueue(file_entropy,
IntrusivePtr{NewRef{}, GetFile()->GetVal()}, GetFile()->ToVal(),
std::move(ent_result) std::move(ent_result)
); );
} }

View file

@ -92,7 +92,7 @@ bool Extract::DeliverStream(const u_char* data, uint64_t len)
{ {
File* f = GetFile(); File* f = GetFile();
f->FileEvent(file_extraction_limit, { f->FileEvent(file_extraction_limit, {
IntrusivePtr{NewRef{}, f->GetVal()}, f->ToVal(),
IntrusivePtr{NewRef{}, Args()}, IntrusivePtr{NewRef{}, Args()},
val_mgr->Count(limit), val_mgr->Count(limit),
val_mgr->Count(len) val_mgr->Count(len)

View file

@ -52,7 +52,7 @@ void Hash::Finalize()
return; return;
mgr.Enqueue(file_hash, mgr.Enqueue(file_hash,
IntrusivePtr{NewRef{}, GetFile()->GetVal()}, GetFile()->ToVal(),
make_intrusive<StringVal>(kind), make_intrusive<StringVal>(kind),
hash->Get() hash->Get()
); );

View file

@ -66,7 +66,7 @@ refine flow File += {
dh->Assign(16, val_mgr->Count(${h.AddressOfNewExeHeader})); dh->Assign(16, val_mgr->Count(${h.AddressOfNewExeHeader}));
mgr.Enqueue(pe_dos_header, mgr.Enqueue(pe_dos_header,
IntrusivePtr{NewRef{}, connection()->bro_analyzer()->GetFile()->GetVal()}, connection()->bro_analyzer()->GetFile()->ToVal(),
std::move(dh)); std::move(dh));
} }
return true; return true;
@ -76,7 +76,7 @@ refine flow File += {
%{ %{
if ( pe_dos_code ) if ( pe_dos_code )
mgr.Enqueue(pe_dos_code, mgr.Enqueue(pe_dos_code,
IntrusivePtr{NewRef{}, connection()->bro_analyzer()->GetFile()->GetVal()}, connection()->bro_analyzer()->GetFile()->ToVal(),
make_intrusive<StringVal>(code.length(), (const char*) code.data()) make_intrusive<StringVal>(code.length(), (const char*) code.data())
); );
return true; return true;
@ -105,7 +105,7 @@ refine flow File += {
fh->Assign(5, characteristics_to_bro(${h.Characteristics}, 16)); fh->Assign(5, characteristics_to_bro(${h.Characteristics}, 16));
mgr.Enqueue(pe_file_header, mgr.Enqueue(pe_file_header,
IntrusivePtr{NewRef{}, connection()->bro_analyzer()->GetFile()->GetVal()}, connection()->bro_analyzer()->GetFile()->ToVal(),
std::move(fh)); std::move(fh));
} }
@ -156,7 +156,7 @@ refine flow File += {
oh->Assign(23, process_rvas(${h.rvas})); oh->Assign(23, process_rvas(${h.rvas}));
mgr.Enqueue(pe_optional_header, mgr.Enqueue(pe_optional_header,
IntrusivePtr{NewRef{}, connection()->bro_analyzer()->GetFile()->GetVal()}, connection()->bro_analyzer()->GetFile()->ToVal(),
std::move(oh)); std::move(oh));
} }
return true; return true;
@ -188,7 +188,7 @@ refine flow File += {
section_header->Assign(9, characteristics_to_bro(${h.characteristics}, 32)); section_header->Assign(9, characteristics_to_bro(${h.characteristics}, 32));
mgr.Enqueue(pe_section_header, mgr.Enqueue(pe_section_header,
IntrusivePtr{NewRef{}, connection()->bro_analyzer()->GetFile()->GetVal()}, connection()->bro_analyzer()->GetFile()->ToVal(),
std::move(section_header) std::move(section_header)
); );
} }

View file

@ -87,7 +87,7 @@ refine flow Flow += {
ids_event->Assign(17, val_mgr->Count(${ev.packet_action})); ids_event->Assign(17, val_mgr->Count(${ev.packet_action}));
mgr.Enqueue(::unified2_event, mgr.Enqueue(::unified2_event,
IntrusivePtr{NewRef{}, connection()->bro_analyzer()->GetFile()->GetVal()}, connection()->bro_analyzer()->GetFile()->ToVal(),
std::move(ids_event)); std::move(ids_event));
} }
return true; return true;
@ -117,7 +117,7 @@ refine flow Flow += {
ids_event->Assign(16, val_mgr->Count(${ev.vlan_id})); ids_event->Assign(16, val_mgr->Count(${ev.vlan_id}));
mgr.Enqueue(::unified2_event, mgr.Enqueue(::unified2_event,
IntrusivePtr{NewRef{}, connection()->bro_analyzer()->GetFile()->GetVal()}, connection()->bro_analyzer()->GetFile()->ToVal(),
std::move(ids_event)); std::move(ids_event));
} }
@ -137,7 +137,7 @@ refine flow Flow += {
packet->Assign(5, to_stringval(${pkt.packet_data})); packet->Assign(5, to_stringval(${pkt.packet_data}));
mgr.Enqueue(::unified2_packet, mgr.Enqueue(::unified2_packet,
IntrusivePtr{NewRef{}, connection()->bro_analyzer()->GetFile()->GetVal()}, connection()->bro_analyzer()->GetFile()->ToVal(),
std::move(packet)); std::move(packet));
} }

View file

@ -412,7 +412,7 @@ void file_analysis::OCSP::ParseRequest(OCSP_REQUEST* req)
if ( ocsp_request ) if ( ocsp_request )
mgr.Enqueue(ocsp_request, mgr.Enqueue(ocsp_request,
IntrusivePtr{NewRef{}, GetFile()->GetVal()}, GetFile()->ToVal(),
val_mgr->Count(version) val_mgr->Count(version)
); );
@ -423,7 +423,7 @@ void file_analysis::OCSP::ParseRequest(OCSP_REQUEST* req)
{ {
zeek::Args rvl; zeek::Args rvl;
rvl.reserve(5); rvl.reserve(5);
rvl.emplace_back(NewRef{}, GetFile()->GetVal()); rvl.emplace_back(GetFile()->ToVal());
OCSP_ONEREQ *one_req = OCSP_request_onereq_get0(req, i); OCSP_ONEREQ *one_req = OCSP_request_onereq_get0(req, i);
OCSP_CERTID *cert_id = OCSP_onereq_get0_id(one_req); OCSP_CERTID *cert_id = OCSP_onereq_get0_id(one_req);
@ -454,13 +454,10 @@ void file_analysis::OCSP::ParseResponse(OCSP_RESPONSE *resp)
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
const char *status_str = OCSP_response_status_str(OCSP_response_status(resp)); const char *status_str = OCSP_response_status_str(OCSP_response_status(resp));
StringVal* status_val = new StringVal(strlen(status_str), status_str); auto status_val = make_intrusive<StringVal>(strlen(status_str), status_str);
if ( ocsp_response_status ) if ( ocsp_response_status )
mgr.Enqueue(ocsp_response_status, mgr.Enqueue(ocsp_response_status, GetFile()->ToVal(), status_val);
IntrusivePtr{NewRef{}, GetFile()->GetVal()},
IntrusivePtr{NewRef{}, status_val}
);
//if (!resp_bytes) //if (!resp_bytes)
// { // {
@ -479,22 +476,16 @@ void file_analysis::OCSP::ParseResponse(OCSP_RESPONSE *resp)
// get the basic response // get the basic response
basic_resp = OCSP_response_get1_basic(resp); basic_resp = OCSP_response_get1_basic(resp);
if ( !basic_resp ) if ( !basic_resp )
{
Unref(status_val);
goto clean_up; goto clean_up;
}
#if ( OPENSSL_VERSION_NUMBER < 0x10100000L ) || defined(LIBRESSL_VERSION_NUMBER) #if ( OPENSSL_VERSION_NUMBER < 0x10100000L ) || defined(LIBRESSL_VERSION_NUMBER)
resp_data = basic_resp->tbsResponseData; resp_data = basic_resp->tbsResponseData;
if ( !resp_data ) if ( !resp_data )
{
Unref(status_val);
goto clean_up; goto clean_up;
}
#endif #endif
vl.emplace_back(NewRef{}, GetFile()->GetVal()); vl.emplace_back(GetFile()->ToVal());
vl.emplace_back(AdoptRef{}, status_val); vl.emplace_back(std::move(status_val));
#if ( OPENSSL_VERSION_NUMBER < 0x10100000L ) || defined(LIBRESSL_VERSION_NUMBER) #if ( OPENSSL_VERSION_NUMBER < 0x10100000L ) || defined(LIBRESSL_VERSION_NUMBER)
vl.emplace_back(val_mgr->Count((uint64_t)ASN1_INTEGER_get(resp_data->version))); vl.emplace_back(val_mgr->Count((uint64_t)ASN1_INTEGER_get(resp_data->version)));
@ -537,7 +528,7 @@ void file_analysis::OCSP::ParseResponse(OCSP_RESPONSE *resp)
zeek::Args rvl; zeek::Args rvl;
rvl.reserve(10); rvl.reserve(10);
rvl.emplace_back(NewRef{}, GetFile()->GetVal()); rvl.emplace_back(GetFile()->ToVal());
// cert id // cert id
const OCSP_CERTID* cert_id = nullptr; const OCSP_CERTID* cert_id = nullptr;

View file

@ -61,8 +61,8 @@ bool file_analysis::X509::EndOfFile()
return false; return false;
// yup, let's call the callback. // yup, let's call the callback.
cache_hit_callback->operator()(IntrusivePtr{NewRef{}, GetFile()->GetVal()}, cache_hit_callback->operator()(GetFile()->ToVal(), entry,
entry, make_intrusive<StringVal>(cert_sha256)); make_intrusive<StringVal>(cert_sha256));
return false; return false;
} }
} }
@ -84,7 +84,7 @@ bool file_analysis::X509::EndOfFile()
// and send the record on to scriptland // and send the record on to scriptland
if ( x509_certificate ) if ( x509_certificate )
mgr.Enqueue(x509_certificate, mgr.Enqueue(x509_certificate,
IntrusivePtr{NewRef{}, GetFile()->GetVal()}, GetFile()->ToVal(),
IntrusivePtr{NewRef{}, cert_val}, IntrusivePtr{NewRef{}, cert_val},
cert_record); cert_record);
@ -294,7 +294,7 @@ void file_analysis::X509::ParseBasicConstraints(X509_EXTENSION* ex)
pBasicConstraint->Assign(1, val_mgr->Count((int32_t) ASN1_INTEGER_get(constr->pathlen))); pBasicConstraint->Assign(1, val_mgr->Count((int32_t) ASN1_INTEGER_get(constr->pathlen)));
mgr.Enqueue(x509_ext_basic_constraints, mgr.Enqueue(x509_ext_basic_constraints,
IntrusivePtr{NewRef{}, GetFile()->GetVal()}, GetFile()->ToVal(),
std::move(pBasicConstraint) std::move(pBasicConstraint)
); );
} }
@ -435,7 +435,7 @@ void file_analysis::X509::ParseSAN(X509_EXTENSION* ext)
sanExt->Assign(4, val_mgr->Bool(otherfields)); sanExt->Assign(4, val_mgr->Bool(otherfields));
mgr.Enqueue(x509_ext_subject_alternative_name, mgr.Enqueue(x509_ext_subject_alternative_name,
IntrusivePtr{NewRef{}, GetFile()->GetVal()}, GetFile()->ToVal(),
std::move(sanExt)); std::move(sanExt));
GENERAL_NAMES_free(altname); GENERAL_NAMES_free(altname);
} }

View file

@ -287,12 +287,11 @@ void file_analysis::X509Common::ParseExtension(X509_EXTENSION* ex, const EventHa
// but I am not sure if there is a better way to do it... // but I am not sure if there is a better way to do it...
if ( h == ocsp_extension ) if ( h == ocsp_extension )
mgr.Enqueue(h, IntrusivePtr{NewRef{}, GetFile()->GetVal()}, mgr.Enqueue(h, GetFile()->ToVal(),
std::move(pX509Ext), std::move(pX509Ext),
val_mgr->Bool(global)); val_mgr->Bool(global));
else else
mgr.Enqueue(h, IntrusivePtr{NewRef{}, GetFile()->GetVal()}, mgr.Enqueue(h, GetFile()->ToVal(), std::move(pX509Ext));
std::move(pX509Ext));
// let individual analyzers parse more. // let individual analyzers parse more.
ParseExtensionsSpecific(ex, global, ext_asn, oid); ParseExtensionsSpecific(ex, global, ext_asn, oid);

View file

@ -39,7 +39,7 @@ refine connection MockConnection += {
return true; return true;
mgr.Enqueue(x509_ocsp_ext_signed_certificate_timestamp, mgr.Enqueue(x509_ocsp_ext_signed_certificate_timestamp,
IntrusivePtr{NewRef{}, bro_analyzer()->GetFile()->GetVal()}, bro_analyzer()->GetFile()->ToVal(),
val_mgr->Count(version), val_mgr->Count(version),
make_intrusive<StringVal>(logid.length(), reinterpret_cast<const char*>(logid.begin())), make_intrusive<StringVal>(logid.length(), reinterpret_cast<const char*>(logid.begin())),
val_mgr->Count(timestamp), val_mgr->Count(timestamp),

View file

@ -86,9 +86,7 @@ function Files::__lookup_file%(fuid: string%): fa_file
%{ %{
auto f = file_mgr->LookupFile(fuid->CheckString()); auto f = file_mgr->LookupFile(fuid->CheckString());
if ( f != nullptr ) if ( f != nullptr )
{ return f->ToVal();
return IntrusivePtr{NewRef{}, f->GetVal()};
}
reporter->Error("file ID %s not a known file", fuid->CheckString()); reporter->Error("file ID %s not a known file", fuid->CheckString());
return nullptr; return nullptr;