summaryrefslogtreecommitdiff
path: root/accel-pppd/logs
diff options
context:
space:
mode:
authorDenys Fedoryshchenko <denys.f@collabora.com>2026-10-28 18:01:05 +0200
committerGitHub <noreply@github.com>2026-10-28 18:01:05 +0200
commit0e392406411d25270f5ab1df86eceda4b3ec8d5d (patch)
treee5405db640768f550e50420a1f13bef3404f5ac3 /accel-pppd/logs
parentb8a3c54aa34434312aa0053686ec37a133fb54e6 (diff)
parent58e399400c4ef4b71472ab7c2c71c54a677a05a8 (diff)
downloadaccel-ppp-0e392406411d25270f5ab1df86eceda4b3ec8d5d.tar.gz
accel-ppp-0e392406411d25270f5ab1df86eceda4b3ec8d5d.zip
Merge pull request #374 from nuclearcat/fix/log-line-bound
log: bound log lines and share target unpacking
Diffstat (limited to 'accel-pppd/logs')
-rw-r--r--accel-pppd/logs/log_pgsql.c15
-rw-r--r--accel-pppd/logs/log_syslog.c15
-rw-r--r--accel-pppd/logs/log_tcp.c11
3 files changed, 14 insertions, 27 deletions
diff --git a/accel-pppd/logs/log_pgsql.c b/accel-pppd/logs/log_pgsql.c
index 6589da0e..0fae52bc 100644
--- a/accel-pppd/logs/log_pgsql.c
+++ b/accel-pppd/logs/log_pgsql.c
@@ -53,17 +53,12 @@ static int need_close;
static void unpack_msg(struct log_msg_t *msg)
{
- struct log_chunk_t *chunk;
- int pos = 0;
+ int pos = log_unpack_msg(msg, log_buf, LOG_MAX_SIZE);
- list_for_each_entry(chunk, msg->chunks, entry) {
- memcpy(log_buf + pos, chunk->msg, chunk->len);
- pos += chunk->len;
- }
- if (pos > 1)
- log_buf[pos - 1] = 0;
- else
- log_buf[0] = 0;
+ /* a line cut to fit the buffer has lost its newline */
+ if (pos && log_buf[pos - 1] == '\n')
+ pos--;
+ log_buf[pos] = 0;
}
static void set_hdr(struct log_msg_t *msg, struct ap_session *ses)
diff --git a/accel-pppd/logs/log_syslog.c b/accel-pppd/logs/log_syslog.c
index f06c1cc8..7e298fe6 100644
--- a/accel-pppd/logs/log_syslog.c
+++ b/accel-pppd/logs/log_syslog.c
@@ -33,21 +33,16 @@ static int prio_map[] = {LOG_INFO, LOG_ERR, LOG_WARNING, LOG_INFO, LOG_INFO, LOG
static void unpack_msg(struct log_msg_t *msg)
{
- struct log_chunk_t *chunk;
int pos;
strcpy(log_buf, msg->hdr->msg);
pos = strlen(log_buf);
+ pos += log_unpack_msg(msg, log_buf + pos, LOG_MAX_SIZE - pos);
- list_for_each_entry(chunk, msg->chunks, entry) {
- memcpy(log_buf + pos, chunk->msg, chunk->len);
- pos += chunk->len;
- }
-
- if (pos > 1)
- log_buf[pos - 1] = 0;
- else
- log_buf[0] = 0;
+ /* a line cut to fit the buffer has lost its newline */
+ if (pos && log_buf[pos - 1] == '\n')
+ pos--;
+ log_buf[pos] = 0;
}
static void set_hdr(struct log_msg_t *msg, struct ap_session *ses)
diff --git a/accel-pppd/logs/log_tcp.c b/accel-pppd/logs/log_tcp.c
index ca803a7e..1704caf9 100644
--- a/accel-pppd/logs/log_tcp.c
+++ b/accel-pppd/logs/log_tcp.c
@@ -17,6 +17,8 @@
#include "memdebug.h"
+#define BUF_SIZE (LOG_MAX_SIZE + 64)
+
struct tcp_target_t
{
struct log_target_t target;
@@ -54,15 +56,10 @@ static void disconnect(struct tcp_target_t *t)
static void unpack_msg(struct tcp_target_t *t, struct log_msg_t *msg)
{
- struct log_chunk_t *chunk;
int pos = strlen(msg->hdr->msg);
strcpy(t->buf, msg->hdr->msg);
-
- list_for_each_entry(chunk, msg->chunks, entry) {
- memcpy(t->buf + pos, chunk->msg, chunk->len);
- pos += chunk->len;
- }
+ pos += log_unpack_msg(msg, t->buf + pos, BUF_SIZE - pos);
t->buf_size = pos;
t->buf_pos = 0;
@@ -266,7 +263,7 @@ static int start_log(const char *_opt)
t = _malloc(sizeof(*t));
memset(t, 0, sizeof(*t));
- t->buf = _malloc(LOG_MAX_SIZE + 64);
+ t->buf = _malloc(BUF_SIZE);
t->conn_timer.expire_tv.tv_sec = conf_connect_interval;
t->conn_timer.expire = connect_timer;