suricata
datasets-string.c
Go to the documentation of this file.
1
/* Copyright (C) 2017-2024 Open Information Security Foundation
2
*
3
* You can copy, redistribute or modify this Program under the terms of
4
* the GNU General Public License version 2 as published by the Free
5
* Software Foundation.
6
*
7
* This program is distributed in the hope that it will be useful,
8
* but WITHOUT ANY WARRANTY; without even the implied warranty of
9
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
* GNU General Public License for more details.
11
*
12
* You should have received a copy of the GNU General Public License
13
* version 2 along with this program; if not, write to the Free Software
14
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15
* 02110-1301, USA.
16
*/
17
18
/**
19
* \file
20
*
21
* \author Victor Julien <victor@inliniac.net>
22
*/
23
24
#include "
suricata-common.h
"
25
#include "
conf.h
"
26
#include "
datasets.h
"
27
#include "
datasets-string.h
"
28
#include "
util-thash.h
"
29
#include "
util-print.h
"
30
#include "
util-hash-lookup3.h
"
31
#include "
rust.h
"
32
33
#if 0
34
static
int
StringAsAscii(
const
void
*s,
char
*out,
size_t
out_size)
35
{
36
const
StringType
*
str
= s;
37
uint32_t
offset
= 0;
38
PrintRawUriBuf
(out, &
offset
, out_size,
str
->ptr,
str
->len);
39
if
(out[0] ==
'\0'
)
40
return
0;
41
strlcat
(out,
"\n"
, out_size);
42
return
strlen(out);
43
}
44
#endif
45
46
int
StringAsBase64
(
const
void
*s,
char
*out,
size_t
out_size)
47
{
48
const
StringType
*
str
= s;
49
50
unsigned
long
len
= SCBase64EncodeBufferSize(
str
->len);
51
if
(
len
+ 2 > out_size) {
52
// linefeed and final zero : signal we need more space
53
return
(
int
)
len
+ 2;
54
}
55
if
(SCBase64Encode((
unsigned
char
*)
str
->ptr,
str
->len, (uint8_t *)out, &
len
) != SC_BASE64_OK)
56
return
0;
57
58
strlcat
(out,
"\n"
, out_size);
59
return
(
int
)strlen(out);
60
}
61
62
int
StringSet
(
void
*
dst
,
void
*
src
)
63
{
64
StringType
*src_s =
src
;
65
StringType
*dst_s =
dst
;
66
SCLogDebug
(
"dst %p src %p, src_s->ptr %p src_s->len %u"
,
dst
,
src
, src_s->
ptr
, src_s->
len
);
67
68
dst_s->
len
= src_s->
len
;
69
dst_s->
ptr
=
SCMalloc
(dst_s->
len
);
70
if
(dst_s->
ptr
== NULL) {
71
SCLogError
(
"Failed to allocate memory for string of length %u"
, dst_s->
len
);
72
return
-1;
73
}
74
memcpy(dst_s->
ptr
, src_s->
ptr
, dst_s->
len
);
75
76
dst_s->
rep
= src_s->
rep
;
77
SCLogDebug
(
"dst %p src %p, dst_s->ptr %p dst_s->len %u"
,
dst
,
src
, dst_s->
ptr
, dst_s->
len
);
78
return
0;
79
}
80
81
int
StringJsonSet
(
void
*
dst
,
void
*
src
)
82
{
83
if
(
StringSet
(
dst
,
src
) < 0)
84
return
-1;
85
86
StringType
*src_s =
src
;
87
StringType
*dst_s =
dst
;
88
89
if
(
DatajsonCopyJson
(&dst_s->
json
, &src_s->
json
) < 0) {
90
SCFree
(dst_s->
ptr
);
91
return
-1;
92
}
93
94
return
0;
95
}
96
97
bool
StringCompare
(
void
*a,
void
*b)
98
{
99
const
StringType
*as = a;
100
const
StringType
*bs = b;
101
102
if
(as->
len
!= bs->
len
)
103
return
false
;
104
105
return
(memcmp(as->
ptr
, bs->
ptr
, as->
len
) == 0);
106
}
107
108
uint32_t
StringHash
(uint32_t hash_seed,
void
*s)
109
{
110
StringType
*
str
= s;
111
return
hashlittle_safe
(
str
->ptr,
str
->len, hash_seed);
112
}
113
114
uint32_t
StringGetLength
(
void
*s)
115
{
116
StringType
*
str
= s;
117
return
str
->len;
118
}
119
120
// base data stays in hash
121
void
StringFree
(
void
*s)
122
{
123
StringType
*
str
= s;
124
SCFree
(
str
->ptr);
125
}
126
127
void
StringJsonFree
(
void
*s)
128
{
129
StringType
*
str
= s;
130
SCFree
(
str
->ptr);
131
if
(
str
->json.value) {
132
SCFree
(
str
->json.value);
133
}
134
}
135
136
uint32_t
StringJsonGetLength
(
void
*s)
137
{
138
StringType
*
str
= s;
139
return
str
->json.len +
str
->len;
140
}
StringType::rep
DataRepType rep
Definition:
datasets-string.h:33
len
uint8_t len
Definition:
app-layer-dnp3.h:2
datasets-string.h
offset
uint64_t offset
Definition:
util-streaming-buffer.h:0
SCLogDebug
#define SCLogDebug(...)
Definition:
util-debug.h:282
StringJsonFree
void StringJsonFree(void *s)
Definition:
datasets-string.c:127
PrintRawUriBuf
void PrintRawUriBuf(char *retbuf, uint32_t *offset, uint32_t retbuflen, const uint8_t *buf, size_t buflen)
Definition:
util-print.c:93
rust.h
StringJsonGetLength
uint32_t StringJsonGetLength(void *s)
Definition:
datasets-string.c:136
StringSet
int StringSet(void *dst, void *src)
Definition:
datasets-string.c:62
datasets.h
strlcat
size_t strlcat(char *, const char *src, size_t siz)
Definition:
util-strlcatu.c:45
StringAsBase64
int StringAsBase64(const void *s, char *out, size_t out_size)
Definition:
datasets-string.c:46
util-print.h
StringGetLength
uint32_t StringGetLength(void *s)
Definition:
datasets-string.c:114
hashlittle_safe
uint32_t hashlittle_safe(const void *key, size_t length, uint32_t initval)
Definition:
util-hash-lookup3.c:482
StringType
Definition:
datasets-string.h:30
conf.h
StringType::ptr
uint8_t * ptr
Definition:
datasets-string.h:36
StringType::len
uint32_t len
Definition:
datasets-string.h:31
StringType::json
DataJsonType json
Definition:
datasets-string.h:34
suricata-common.h
StringCompare
bool StringCompare(void *a, void *b)
Definition:
datasets-string.c:97
util-hash-lookup3.h
DatajsonCopyJson
int DatajsonCopyJson(DataJsonType *dst, DataJsonType *src)
Definition:
datasets-context-json.c:54
SCMalloc
#define SCMalloc(sz)
Definition:
util-mem.h:47
str
#define str(s)
Definition:
suricata-common.h:308
SCLogError
#define SCLogError(...)
Macro used to log ERROR messages.
Definition:
util-debug.h:274
SCFree
#define SCFree(p)
Definition:
util-mem.h:61
StringHash
uint32_t StringHash(uint32_t hash_seed, void *s)
Definition:
datasets-string.c:108
src
uint16_t src
Definition:
app-layer-dnp3.h:5
StringJsonSet
int StringJsonSet(void *dst, void *src)
Definition:
datasets-string.c:81
dst
uint16_t dst
Definition:
app-layer-dnp3.h:4
util-thash.h
StringFree
void StringFree(void *s)
Definition:
datasets-string.c:121
src
datasets-string.c
Generated on Mon Jan 19 2026 23:30:21 for suricata by
1.8.18