Jason Ish
e21ae88e05
rust: utility function to copy Rust strings to C strings
...
As there are a few places where a Rust string is copied into a provided
C string buffer, create a utility function to take care of these
details.
3 years ago
Jason Ish
6344501dba
tls: fix date logging for dates before 1970
...
The Rust time crate used by the x509-parser crate represents dates
before 1970 as negative numbers which do not survive the conversion to
SCTime_t and formatting with the current time formatting functions.
Instead of fixing our formatting functions to handle such dates,
create a Rust function for logging TLS dates directly to JSON using
the time crate that handles such dates properly.
Also add a FFI function for formatting to a provided C buffer for the
legacy tls-log.
Issue: 5817
3 years ago
Jason Ish
64cb687a65
rust: suppress specific manual_flatten list
...
In this case of debug code, the explicit iterator seems to make more
sense.
3 years ago
Jason Ish
7080ecbb76
rust: remove explicit lifetimes where not needed
3 years ago
Jason Ish
e7f5bd047d
rust: fix needless borrows of references
...
Fixed automatically by cargo clippy --fix.
3 years ago
Jason Ish
29f345af1a
rust: allow uninlined_format_args
...
Newer versions of Rust/clippy are getting picky about format strings.
We should allow and use the new style, but also not prevent the old
style.
3 years ago
Jason Ish
3f4dad8676
ftp: add events for command too long
...
Issue: 5235
3 years ago
Jason Ish
48920bd784
rust/derive: allow event name to be set as attribute
...
When deriving AppLayerEvent, allow the event name to be set with the
"name" attribute in cases where the transformed name is not suitable.
This allows us to use enum variant names like
"FtpEventRequestCommandTooLong" for direct use in C, but is also a
name that doesn't transform well to an event name in rules, where we
want to see "request_command_too_long".
3 years ago
Philippe Antoine
b52293b609
dcerpc: config limit maximum number of live transactions
...
As is done for other protocols
Ticket: #5779
3 years ago
Philippe Antoine
ba99241957
http2: fix leak with range files
...
Ticket: #5808
May have been introduced by a24d7dc45c
Function http2_range_open expects to be called only when
tx.file_range is nil. One condition to ensure this is to check
that we are beginning the files contents. The filetracker field
file_open is not fit for this, as it may be reset to false.
3 years ago
Victor Julien
37f13a4fc7
smb: set defaults for file transfer limits
...
Ticket: #5782 .
3 years ago
Jason Ish
fab3f36b8c
dns: never return error on UDP DNS
...
UDP parsers should never return error as it should indicate to Suricata
that an unrecoverable error has occurred. UDP being record based for
the most part is almost always recoverable, at least for protocols like
DNS.
3 years ago
Jason Ish
d720ead470
dns: split header and body parsing
...
As part of extra header validation, split out DNS body parsing to
avoid the overhead of parsing the header twice.
3 years ago
Jason Ish
595700ab7e
dns: validate header on every incoming message
...
As UDP streams getting probed, a stream that does not appear to be DNS
at first, may have a single packet that does look close enough to DNS
to be picked up as DNS causing every subsequent packet to result in a
parser error.
To mitigate this, probe every incoming DNS message header for validity
before continuing onto the body. If the header doesn't validate as
DNS, just ignore the packet so no parse error is registered.
3 years ago
Jason Ish
c98c49d4ba
dns: parse and alert on invalid opcodes
...
Accept DNS messages with an invalid opcode that are otherwise
valid. Such DNS message will create a parser event.
This is a change of behavior, previously an invalid opcode would cause
the DNS message to not be detected or parsed as DNS.
Issue: #5444
3 years ago
Jason Ish
7afc2e3aed
dns: rustfmt
3 years ago
Jason Ish
39d2524bf6
dns: mark test buffers with rustfmt::skip
3 years ago
Victor Julien
6cc9811edd
files: move FileContainer into FileTransferTracker
...
Update SMB, NFS, HTTP2.
3 years ago
Victor Julien
e3e55406a7
files: update API and callers to take stream config
...
This is to allow not storing the stream buffer config in each file.
3 years ago
Victor Julien
71bc9e75f5
app-layer: get sbconfg with files
3 years ago
Victor Julien
a1a221066f
files: remove filecontainer drop trait
...
In preparation of it becoming impossible to use due to the free
function getting an cfg argument.
3 years ago
Victor Julien
0320c03f8c
http2: explicity free files
...
In preparation of adding an argument to the free functions which
means the drop trait can't be used anymore.
3 years ago
Victor Julien
4b1e9f7c21
smb: explicity free files
...
In preparation of adding an argument to the free functions which
means the drop trait can't be used anymore.
3 years ago
Victor Julien
3a24cce289
nfs: explicity free files
...
In preparation of adding an argument to the free functions which
means the drop trait can't be used anymore.
3 years ago
Victor Julien
4bfeac6591
nfs: file handling cleanups
3 years ago
Victor Julien
33f6a16290
smb: file handling cleanups
3 years ago
Victor Julien
d57510a10f
files: remove unused Rust binding for file pruning
3 years ago
Victor Julien
a24d7dc45c
smb: fix post-trunc chunk behavior
...
After a gap in a file transaction, the file tracker is truncated. However
this did not clear any stored out of order chunks from memory or stop more
chunks to be stored, leading to accumulation of a large number of chunks.
This patches fixes this be clearing the stored chunks on trunc. It also
makes sure no more chunks are stored in the tracker after the trunc.
Bug: #5781 .
3 years ago
Philippe Antoine
55c4834e4e
smb: configurable max number of transactions per flow
...
Ticket: #5753
3 years ago
Philippe Antoine
1d9183638f
smb: convert transaction list to vecdeque
...
Allows for more efficient removal from front of the list.
Ticket: #5753
3 years ago
Philippe Antoine
cb89192ec3
smb: fix typo in comment
3 years ago
Haleema Khan
cfcb7df9dc
mqtt: rustfmt parser.rs
3 years ago
Haleema Khan
23acb89653
mqtt: add unittests for nom7 parsers
...
Ticket: #5742
3 years ago
Haleema Khan
cdc5ccd7f7
rfb: rustfmt parser.rs
3 years ago
Haleema Khan
b95d7efbd0
rfb: add unittests for nom7 parsers
...
Task: #5741
3 years ago
Philippe Antoine
3979acb5ed
smb: set event for ntlmssp unusual order
3 years ago
Philippe Antoine
e41c01a483
smb: rustfmt ntlmssp_records.rs
3 years ago
Philippe Antoine
1db8685848
smb/ntlmssp: parse fields independently of order
...
Instead of relying on the usual ordering...
Ticket: #5258
3 years ago
Jason Ish
ae192ebae7
rust: sync log levels with C
3 years ago
Jeff Lucovsky
f8474344cd
log: Add module and subsystem identifiers to log
...
Issue: 2497
This changeset provides subsystem and module identifiers in the log when
the log format string contains "%S". By convention, the log format
surrounds "%S" with brackets.
The subsystem name is generally the same as the thread name. The module
name is derived from the source code module name and usually consists of
the first one or 2 segments of the name using the dash character as the
segment delimiter.
3 years ago
Victor Julien
b31ffde6f4
output: remove error codes from output
3 years ago
Jason Ish
bd9adac3ac
rust/clippy: comments on why we have specific allows
3 years ago
Jason Ish
dfd7abe185
rust/clippy: fix lint: type_complexity
...
Convert a DNS sub-parser to use a return type rather than a large
tuple. For mqtt, allow the lint for now, but remove the global allow.
3 years ago
Jason Ish
e49ce49471
rust/clippy: allow result_unit_err in http2 only
...
Its the only module making use of this pattern, but we shouldn't let
new modules use this pattern.
3 years ago
Jason Ish
7ba2dadc7f
rust/clippy: fix lint: upper_case_acronyms
3 years ago
Jason Ish
029ac650d7
rust/clippy: fix lint: manual_find
...
These get_tx methods look like ideal candidates for generic and/or
derived methods.
3 years ago
Jason Ish
4940dfb3bd
rust/clippy: fix lint: len_without_is_empty
3 years ago
Jason Ish
e1cffd348f
rust/clippy: fix lint: field_reassign_with_default
3 years ago
Jason Ish
9df7c326b9
rust/clippy: remove allow: collapsible_else_if
3 years ago
Jason Ish
30ee5fc835
rust/clippy: remove allow: collapsible_if
...
Already clean.
3 years ago
Jason Ish
da12b77f18
rust/clippy: fix lint: new_without_default
3 years ago
Jason Ish
c4cf062a6f
rust/clippy: fix lint: redundant_pattern_matching
3 years ago
Jason Ish
7c293ff68f
rust/clippy: fix lint: never_loop
3 years ago
Jason Ish
e8823644ec
rust/clippy: fix lint: nonminimal_bool
3 years ago
Jason Ish
53ae0c8a06
rust/clippy: fix lint: derive_partial_eq_without_eq
3 years ago
Jason Ish
5d62995e26
rust/clippy: fix lint: explicit_counter_loop
3 years ago
Jason Ish
f250b92180
rust/clippy: fix lint: extra_unused_lifetimes
3 years ago
Jason Ish
3044565cf4
rust/clippy: fix lint: needless_range_loop
3 years ago
Jason Ish
2ac52d0610
rust/clippy: remove lint: for_loops_over_fallibles
...
Already clean.
3 years ago
Jason Ish
c026d8531b
rust/clippy: fix lint: match_ref_pats
3 years ago
Jason Ish
359d5fcb7e
rust/clippy: fix lint: needless_lifetimes
3 years ago
Jason Ish
4e001688de
rust/clippy: remove lint: bool_comparison
...
Already clean.
3 years ago
Jason Ish
f15ffbc869
rust/clippy: fix lint: single_match
...
Allow this lint in some cases where a match statement adds clarity.
3 years ago
Jason Ish
925bc74c1f
rust/clippy: fix lint: while_let_loop
3 years ago
Jason Ish
cf20fa1e67
template: import c_void, c_char, c_int
...
These are ffi types that are commonly used, import them so they can be
used by their short names instead of a fully qualified name.
3 years ago
Jason Ish
4220f18258
template: remove no_mangle and pub where not needed
...
Extern functions that are only used as a function pointer do not
require "pub" or "no_mangle".
3 years ago
Jason Ish
4a7567b3f0
template: rename template-rust to template
...
Remove the distinction between the C template protocol "template" and
the Rust template protocol "template-rust" and make the Rust parser
simply template now that we no longer have support to generate a C
protocol template.
3 years ago
Jason Ish
38321a213f
rust/app-layer-template: rustfmt
3 years ago
Jason Ish
50a787a9a3
app-layer-template-rust: remove C app-layer stub
...
Remove the app-layer-PROTO stub for Rust based parsers. It is no longer
needed as Rust parsers now contain the registration function in Rust.
Ticket: 4939
3 years ago
Jason Ish
baa7021ee6
rust/conf: add fn conf_get_node
...
A wrapper around ConfGetNode to get a configuration node by name.
3 years ago
Victor Julien
64c0459d2d
rust/lzma: clippy fixup
3 years ago
Jason Ish
35f99d1af7
rust/http2: fix clippy lint for is_empty()
...
This snuck through as "cargo clippy" check wasn't finding lints that
were fixed by the previous test for fixable lints.
3 years ago
Todd Mortimer
7d1a8cc335
file/swf: Use lzma-rs decompression instead of libhtp.
...
Use the lzma-rs crate for decompressing swf/lzma files instead of
the lzma decompressor in libhtp. This decouples suricata from libhtp
except for actual http parsing, and means libhtp no longer has to
export a lzma decompression interface.
Ticket: #5638
3 years ago
Victor Julien
45eb038e63
smb: fix file reopening issue
...
Fuzzing highlighted an issue where a command sequence on the same file
id triggered a logging issue:
file data for id N
close id N
file data for id N
If this happened in a single blob of data passed to the parser, the
existing file tx would be reused, the file "reopened", confusing the
file logging logic. This would trigger a debug assert.
This patch makes sure a new file tx is created for the file data
coming in after the first file tx is closed.
Bug: #5567 .
3 years ago
Philippe Antoine
29f40c9e07
dcerpc: fix integer underflow
...
as input.len() can be 65536, it cannot be directly cast to u16
Ticket: #5557
3 years ago
Jason Ish
91617f479a
rust: sha-1 is now sha1
...
This is the same crate, but renamed to be more consistent with the
RustCrypto project naming. Some recent discussion is available here:
https://github.com/RustCrypto/hashes/issues/438
3 years ago
Philippe Antoine
af44504550
smb: do not use tree id to match request and response
...
Completes commit e94920b49f
This must be true for access to state ssn2vecoffset_map
Ticket: #5161
3 years ago
Victor Julien
cade6046c5
rust/files: open file without trackid as pointer
3 years ago
Victor Julien
ad869e1c52
rust/filecontainer: remove unused declaration
3 years ago
Philippe Antoine
086b28da3d
http2: fix decompression buffering
...
It was not enough to set Cursor position to 0,
also its inner Vec should be cleared.
This way, a new input gets written at the beginning of the
Cursor and its inner Vec...
Ticket: #5691
3 years ago
Philippe Antoine
c6349d3cfc
http2: support padded data frames
...
Ticket: #5691
3 years ago
Philippe Antoine
e1ee401a12
quic: use VecDeque
...
Ticket: #5637
3 years ago
Philippe Antoine
286bd2a7ed
rust: fix cargo clippy --all-features
4 years ago
Philippe Antoine
bc287018e5
rust: cargo clippy --all-features --fix --allow-no-vcs
4 years ago
Philippe Antoine
cd4bf518f3
rust: fix warnings on rustc 1.67.0-nightly
...
warning: for loop over an `Option`. This is more readably written
as an `if let` statement
4 years ago
Juliana Fajardini
a654ef50de
pgsql: add test for parameter status parser
...
Since we've done some changes to how the parameters are parsed, add one
more test case to check that.
Bug #5579
4 years ago
Juliana Fajardini
c4fbd78770
pgsql: move database into opt parameters list
...
For StartupMessages, the database parameter is optional. This moves the
parameter into the optional_parameters list.
Bug #5579
4 years ago
Philippe Antoine
cc68898532
pgsql: support empty parameter values
...
Bug #5579
4 years ago
Philippe Antoine
1e0190bc6b
pgsql: support out of order parameters for startup message
...
As user can be not the first parameter
Bug #5579
4 years ago
Jason Ish
1f056f9974
bittorrent-dht: parse and log node6 lists
...
Node6 lists are just like node lists, but for IPv6 addresses.
4 years ago
Jason Ish
86d5ab8644
bittorrent-dht: remove tests that are no longer valid
4 years ago
Jason Ish
2f9eb5d1dd
bittorrent-dht: fix values decoding, as a list of peers
...
The "values" field is not a string, but instead peer information in
compact format. Decode this properly and then properly format in the
log.
4 years ago
Jason Ish
4a0859beeb
jsonbuilder: add append_hex - add hex to array
...
New method, append_hex to add a byte array to a JSON array in hex
encoding.
4 years ago
Jason Ish
4bc9cf3986
bittorrent-dht: parse token and target as byte values
4 years ago
Jason Ish
5a30ee77a1
bittorrent-dht: only attempt to parse dht messages
...
The bittorrent flow is shared with transport messages as well as dht
messages. Only attempt to parse dht message as dht, ignore the rest.
4 years ago
Jason Ish
98a9391210
bittorrent-dht: decode node data structures
...
Instead of decoding the nodes field into a blog of bytes, decode it into
an array of node info objects, each with a node id, IP address and port.
4 years ago
Jason Ish
3cb50592ed
bittorrent-dht: convert some fields to byte arrays
...
Some fields that were previously strings are not always value UTF-8
data, instead the protocol specification refers to them as strings of
bytes, so in other words byte arrays.
Currently fields converted are:
- client_version
- info_hash
- response.id
- request.id
- nodes
- token
4 years ago
Jason Ish
78ba17caa8
bittorrent-dht: register a pattern for protocol detection
...
Removes the port based probing which takes a long time to register for
ports 1024-65535 and instead use pattern based protocol detection.
4 years ago
Jason Ish
350c0723d7
bittorrent-dht: set parser to unidirectional
...
This parser does not match up responses with requests so flag it as
unidirectional.
4 years ago
Jason Ish
06eaec67ac
bittorrent: updates for new event handling
...
Fixes anomaly events.
4 years ago
Aaron Bungay
86037885a9
bittorrent-dht: add bittorrent-dht app layer
...
Parses and logs the bittorrent-dht protocol.
Note: Includes some compilation fixups after rebase by Jason Ish.
Feature: #3086
4 years ago
Haleema Khan
8d5c5f24a1
dns/eve: add 'HTTPS' type logging
...
Add a new DNS record type to represent HTTPS
Ticket: #4751
4 years ago
Alice Akaki
ccdc992a71
rust: fix lint warnings about mixed case hex literals
...
Ticket: #4593
4 years ago
Gabriel Lima Luz
4e90d17fd9
rust: fix lint warnings about if same then else
...
Ticket: 4609
4 years ago
Kristina Jefferson
9cd00424c3
rust: fix lint warnings about ptr_arg
...
Ticket: #4599
4 years ago
Jason Ish
21bb697bc9
rust: fix clippy lint for unneeded late initialization
4 years ago
Jason Ish
7cca238128
rust: fix clippy lint for cmp_null is debug code
...
Ticket: 5577
4 years ago
Jason Ish
f0952aef0d
rust: fix clippy lints for unneeded reference in debug code
4 years ago
Jason Ish
6a7439a26b
rust: fix clippy lints for is_empty in debug code
4 years ago
Jason Ish
560c4ea125
rust: don't allow fixed up clippy lints
4 years ago
Jason Ish
6db85d6f89
rust: clippy fix for bitwise or with 0
4 years ago
Jason Ish
04f0ee0151
rust: fix clippy lints for clippy::unnecessary_cast
4 years ago
Jason Ish
b6cc0e25b1
rust: fix clippy lints for clippy::redundant_static_lifetimes
4 years ago
Jason Ish
13db83274b
rust: fix clippy lints for clippy::redundant_pattern_matching
4 years ago
Jason Ish
7ba1d3e300
rust: fix clippy lints for clippy::nonminimal_bool
4 years ago
Jason Ish
6ba0a67143
rust: fix clippy lints for clippy::map_flatten
4 years ago
Jason Ish
7ebdfa539a
rust: fix clippy lints for clippy::manual_find
4 years ago
Jason Ish
119e02cf81
rust: fix clippy lints for clippy::collapsible_if
4 years ago
Jason Ish
572505870a
rust: fix clippy lints for clippy::collapsible_else_if
4 years ago
Jason Ish
6b71d69356
rust: fix clippy lints for clippy::bool_comparison
4 years ago
Jason Ish
e373d9f5e0
rust: fix clippy lints for clippy::crate_in_macro_def
4 years ago
Jason Ish
565da0d0af
rust: fix clippy lints for clippy::redundant_field_names
4 years ago
Jason Ish
5f7ba03e63
rust: fix clippy lints for clippy::needless_bool
4 years ago
Jason Ish
3ec435a703
rust: fix clippy lints for clippy::manual_range_contains
4 years ago
Jason Ish
f342d4aacd
rust: fix clippy lints for clippy::len_zero
4 years ago
Jason Ish
5e5401d3e9
rust: fix clippy lints for clippy::char_lit_as_u8
4 years ago
Jason Ish
29a4a7fddc
rust: fix clippy lints for clippy::assign_op_pattern
4 years ago
Jason Ish
c4034dafa1
rust: fix clippy lints for clippy::derive_partial_eq_without_eq
4 years ago
Jason Ish
5a10fcd2d8
rust: suppress large enum variant lint at location
...
And disable the global lint.
4 years ago
Jason Ish
74b7522b6a
rust/http2: box decompressor variants
...
These variants, in particular the Brotli one can be large at over 2500
bytes which is allocated no matter which decompressor is being used.
Gzip comes in at over 500 bytes. Box deflate for consistency.
4 years ago
Jason Ish
36f8ada305
rust: remove clippy lints that no longer warn
4 years ago
Jason Ish
e8c00dd980
rust: sort clippy allow statements
4 years ago
Haleema Khan
6c922e0b98
rust: fix lint warning for clippy::enum's name
...
Ticket: #4597
4 years ago
Jason Ish
2a42386c28
rust: fix clippy lint for null comparison
...
Use .is_null() instead of checking for equality against
std::ptr::null().
4 years ago
Jason Ish
45dfea2497
rust/modbus: derive default instead of manual impl
...
Cleans up a clippy lint for a trivial default impl that can be derived.
4 years ago
Jason Ish
9218da0eb8
rust/frames: cleanup clippy lint for unsafe
...
Where possible mark the relevant functions unsafe. Otherwise suppress
the warning for now as this pattern is supposed to be a safe API around
an unsafe one. Might need some further investigation, but in general the
"guarantee" here is provided from the C side.
4 years ago
Jason Ish
105d9a5f02
rust: fix clippy lint for unnecessary_unwrap
...
Avoid check if not none followed by unwrap.
4 years ago
Jason Ish
85cfa7254b
rust: fix clippy lint for single_char_add_str
...
Idiomatic cleanup and a fix automatically done by `cargo clippy --fix`.
4 years ago
Jason Ish
f3e4bcfe23
rust: fix clippy lint for bool_assert_comparison
...
Checking for is_empty is faster than checking for equality.
4 years ago
Jason Ish
f60e1b30f6
rust: fix clippy lint for partialeq_to_none
...
Use .is_some() and .is_none() instead of comparing against None.
Comparing against None requires a value to impl PartialEq, is_none() and
is_some() do not and are more idiomatic.
4 years ago
Jason Ish
7d623f0854
rust: fix clippy lint for explicit_auto_deref
...
This adds unnecessary complexity to code.
4 years ago
Jason Ish
c503ca62e2
rust: fix clippy lint for needless_late_init
4 years ago
Jason Ish
94dd85baed
rust: fix clippy lint for borrow_deref_ref
...
This type of borrow then reference has no effect.
4 years ago
Jason Ish
e9597f3d0c
rust: fix clippy lint for redundant_closure
...
Removes a closure where the function can be directly provided.
4 years ago
Jason Ish
c5b26e2043
rust: fix clippy ling for needless borrows
...
Cleanup needless borrows found by clippy. This fix done automatically by
`cargo clippy --fix`.
4 years ago
Jason Ish
63b3d73ccc
rust: allow some more clippy lints
...
Allow these lints for now until some more investigation can be done, as
--fix attempts to fix these.
4 years ago
Eric Leblond
a9519778de
rust/smb: avoid allocation in smb status function
...
Avoid an allocation by returning a static string.
4 years ago
Eric Leblond
9cb06d4376
detect/smb: add smb.ntlmssp_domain keyword
...
Feature #5411 .
4 years ago
Eric Leblond
5debb86cd5
rust/smb1: add a missing command
4 years ago
Eric Leblond
69ef1bc194
detect/smb: add smb.ntlmssp_user keyword
...
Feature #5411 .
4 years ago