• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

OISF / suricata / 22550902417

01 Mar 2026 07:32PM UTC coverage: 68.401% (-5.3%) from 73.687%
22550902417

Pull #14922

github

web-flow
github-actions: bump actions/upload-artifact from 6.0.0 to 7.0.0

Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Pull Request #14922: github-actions: bump actions/upload-artifact from 6.0.0 to 7.0.0

218243 of 319063 relevant lines covered (68.4%)

3284926.58 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

9.9
/src/output-json-pgsql.c
1
/* Copyright (C) 2022-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 Juliana Fajardini <jufajardini@oisf.net>
22
 *
23
 * Implement JSON/eve logging for app-layer Pgsql.
24
 */
25

26
#include "suricata-common.h"
27
#include "detect.h"
28
#include "pkt-var.h"
29
#include "conf.h"
30

31
#include "threads.h"
32
#include "threadvars.h"
33
#include "tm-threads.h"
34

35
#include "util-unittest.h"
36
#include "util-buffer.h"
37
#include "util-debug.h"
38
#include "util-byte.h"
39

40
#include "output.h"
41
#include "output-json.h"
42

43
#include "app-layer.h"
44
#include "app-layer-parser.h"
45

46
#include "output-json-pgsql.h"
47
#include "rust.h"
48

49
#define PGSQL_LOG_PASSWORDS BIT_U32(0)
×
50
#define PGSQL_DEFAULTS      (PGSQL_LOG_PASSWORDS)
×
51

52
typedef struct OutputPgsqlCtx_ {
53
    uint32_t flags;
54
    OutputJsonCtx *eve_ctx;
55
} OutputPgsqlCtx;
56

57
typedef struct LogPgsqlLogThread_ {
58
    OutputPgsqlCtx *pgsqllog_ctx;
59
    OutputJsonThreadCtx *ctx;
60
} LogPgsqlLogThread;
61

62
bool JsonPgsqlAddMetadata(void *vtx, SCJsonBuilder *jb)
63
{
×
64
    return SCPgsqlLogger(vtx, PGSQL_DEFAULTS, jb);
×
65
}
×
66

67
static int JsonPgsqlLogger(ThreadVars *tv, void *thread_data, const Packet *p, Flow *f, void *state,
68
        void *txptr, uint64_t tx_id)
69
{
×
70
    LogPgsqlLogThread *thread = thread_data;
×
71
    SCLogDebug("Logging pgsql transaction %" PRIu64 ".", tx_id);
×
72

73
    SCJsonBuilder *jb =
×
74
            CreateEveHeader(p, LOG_DIR_FLOW, "pgsql", NULL, thread->pgsqllog_ctx->eve_ctx);
×
75
    if (unlikely(jb == NULL)) {
×
76
        return TM_ECODE_FAILED;
×
77
    }
×
78

79
    if (!SCPgsqlLogger(txptr, thread->pgsqllog_ctx->flags, jb)) {
×
80
        goto error;
×
81
    }
×
82

83
    OutputJsonBuilderBuffer(tv, p, p->flow, jb, thread->ctx);
×
84
    SCJbFree(jb);
×
85

86
    return TM_ECODE_OK;
×
87

88
error:
×
89
    SCJbFree(jb);
×
90
    return TM_ECODE_FAILED;
×
91
}
×
92

93
static void OutputPgsqlLogDeInitCtxSub(OutputCtx *output_ctx)
94
{
×
95
    OutputPgsqlCtx *pgsqllog_ctx = (OutputPgsqlCtx *)output_ctx->data;
×
96
    SCFree(pgsqllog_ctx);
×
97
    SCFree(output_ctx);
×
98
}
×
99

100
static void JsonPgsqlLogParseConfig(SCConfNode *conf, OutputPgsqlCtx *pgsqllog_ctx)
101
{
×
102
    pgsqllog_ctx->flags = ~0U;
×
103

104
    const char *query = SCConfNodeLookupChildValue(conf, "passwords");
×
105
    if (query != NULL) {
×
106
        if (SCConfValIsTrue(query)) {
×
107
            pgsqllog_ctx->flags |= PGSQL_LOG_PASSWORDS;
×
108
        } else {
×
109
            pgsqllog_ctx->flags &= ~PGSQL_LOG_PASSWORDS;
×
110
        }
×
111
    } else {
×
112
        pgsqllog_ctx->flags &= ~PGSQL_LOG_PASSWORDS;
×
113
    }
×
114
}
×
115

116
static OutputInitResult OutputPgsqlLogInitSub(SCConfNode *conf, OutputCtx *parent_ctx)
117
{
×
118
    OutputInitResult result = { NULL, false };
×
119
    OutputJsonCtx *ojc = parent_ctx->data;
×
120

121
    OutputPgsqlCtx *pgsql_ctx = SCCalloc(1, sizeof(OutputPgsqlCtx));
×
122
    if (unlikely(pgsql_ctx == NULL))
×
123
        return result;
×
124

125
    OutputCtx *output_ctx = SCCalloc(1, sizeof(OutputCtx));
×
126
    if (unlikely(output_ctx == NULL)) {
×
127
        SCFree(pgsql_ctx);
×
128
        return result;
×
129
    }
×
130

131
    pgsql_ctx->eve_ctx = ojc;
×
132

133
    output_ctx->data = pgsql_ctx;
×
134
    output_ctx->DeInit = OutputPgsqlLogDeInitCtxSub;
×
135

136
    JsonPgsqlLogParseConfig(conf, pgsql_ctx);
×
137

138
    SCAppLayerParserRegisterLogger(IPPROTO_TCP, ALPROTO_PGSQL);
×
139

140
    SCLogDebug("PostgreSQL log sub-module initialized.");
×
141

142
    result.ctx = output_ctx;
×
143
    result.ok = true;
×
144
    return result;
×
145
}
×
146

147
static TmEcode JsonPgsqlLogThreadInit(ThreadVars *t, const void *initdata, void **data)
148
{
×
149
    LogPgsqlLogThread *thread = SCCalloc(1, sizeof(LogPgsqlLogThread));
×
150
    if (unlikely(thread == NULL)) {
×
151
        return TM_ECODE_FAILED;
×
152
    }
×
153

154
    if (initdata == NULL) {
×
155
        SCLogDebug("Error getting context for EveLogPgsql.  \"initdata\" is NULL.");
×
156
        goto error_exit;
×
157
    }
×
158

159
    thread->pgsqllog_ctx = ((OutputCtx *)initdata)->data;
×
160
    thread->ctx = CreateEveThreadCtx(t, thread->pgsqllog_ctx->eve_ctx);
×
161
    if (!thread->ctx) {
×
162
        goto error_exit;
×
163
    }
×
164
    *data = (void *)thread;
×
165

166
    return TM_ECODE_OK;
×
167

168
error_exit:
×
169
    SCFree(thread);
×
170
    return TM_ECODE_FAILED;
×
171
}
×
172

173
static TmEcode JsonPgsqlLogThreadDeinit(ThreadVars *t, void *data)
174
{
×
175
    LogPgsqlLogThread *thread = (LogPgsqlLogThread *)data;
×
176
    if (thread == NULL) {
×
177
        return TM_ECODE_OK;
×
178
    }
×
179
    FreeEveThreadCtx(thread->ctx);
×
180
    SCFree(thread);
×
181
    return TM_ECODE_OK;
×
182
}
×
183

184
void JsonPgsqlLogRegister(void)
185
{
36✔
186
    /* PGSQL_START_REMOVE */
187
    if (SCConfGetNode("app-layer.protocols.pgsql") == NULL) {
36✔
188
        SCLogDebug("Disabling Pgsql eve-logger");
27✔
189
        return;
27✔
190
    }
27✔
191
    /* PGSQL_END_REMOVE */
192
    /* Register as an eve sub-module. */
193
    OutputRegisterTxSubModule(LOGGER_JSON_TX, "eve-log", "JsonPgsqlLog", "eve-log.pgsql",
9✔
194
            OutputPgsqlLogInitSub, ALPROTO_PGSQL, JsonPgsqlLogger, JsonPgsqlLogThreadInit,
9✔
195
            JsonPgsqlLogThreadDeinit);
9✔
196

197
    SCLogDebug("PostgreSQL JSON logger registered.");
9✔
198
}
9✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc