Skip to content
Snippets Groups Projects
Verified Commit 81b77e15 authored by Josef Schlehofer's avatar Josef Schlehofer
Browse files

Revert "fwlogs: handle receive and package handling errors"

This reverts commit bac99090.
parent 49be209a
No related merge requests found
Pipeline #106715 passed with stages
in 1 minute and 2 seconds
#include "fwlog.h"
#include <errno.h>
#include <libnetfilter_log/libnetfilter_log.h>
#include "log.h"
......@@ -13,9 +12,8 @@ static int local_callback(struct nflog_g_handle *gh, struct nfgenmsg *nfmsg,
struct local_data *local_data = data;
char *payload;
int payload_len = nflog_get_payload(nfa, &payload);
local_data->callback(payload, payload_len, local_data->data);
return 0;
int payload_len = nflog_get_payload(nfa, &payload);;
return local_data->callback(payload, payload_len, local_data->data) ? 0 : -1;
}
void fwlog_run(uint16_t log_group, int flags, fwlog_callback callback, void *data) {
......@@ -43,13 +41,8 @@ void fwlog_run(uint16_t log_group, int flags, fwlog_callback callback, void *dat
char buf[BUFSIZ];
while ((rn = recv(fd, buf, sizeof(buf), 0)) && rn >= 0) {
trace("Received data from nflog (len=%lu)", rn);
if (nflog_handle_packet(nflog, buf, rn) < 0) {
error("Packet handling failed");
break;
}
nflog_handle_packet(nflog, buf, rn);
}
if (rn == -1 && errno != EINTR) // Note: we use interrupt for termination
error("Unable to receive data from netfilter");
nflog_unbind_group(nflog_g);
nflog_close(nflog);
......
......@@ -10,7 +10,7 @@
#define FWLOG_LIMIT (1 << 0) // Request only max_packet_size() to be copied from kernel
typedef void (*fwlog_callback)(uint8_t *payload, size_t payload_len, void *data);
typedef bool (*fwlog_callback)(uint8_t *payload, size_t payload_len, void *data);
// This function connects to Firewall log and calls callback for every packet
// received from given log_group.
......
......@@ -6,7 +6,7 @@
#include "parser.h"
static void callback(uint8_t *payload, size_t payload_len, void *data) {
static bool callback(uint8_t *payload, size_t payload_len, void *data) {
sender_t sender = data;
struct packet_data dt;
......@@ -14,8 +14,10 @@ static void callback(uint8_t *payload, size_t payload_len, void *data) {
debug("Proto: %s | Source: %s :%d | Destination: %s :%d | Time: %ld",
dt.proto, dt.source_ip, dt.source_port, dt.dest_ip, dt.dest_port,
dt.ts);
sender_send(sender, &dt); // Ignoring send failure causes only packet info drop
if (!sender_send(sender, &dt))
return false;
}
return true;
}
......
......@@ -59,7 +59,7 @@ static char *generate_filename() {
return filename;
}
static void callback(uint8_t *payload, size_t payload_len, void *data) {
static bool callback(uint8_t *payload, size_t payload_len, void *data) {
char *filename = generate_filename();
int fd;
std_fatal(fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, S_IRWXU | S_IRWXG | S_IRWXO));
......@@ -73,6 +73,7 @@ static void callback(uint8_t *payload, size_t payload_len, void *data) {
info("Recorded packet: %s", filename);
free(filename);
return true;
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment