From 4e3b5578572fbfb35b7dd051b62c6132b6eaa924 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Thu, 18 Feb 2016 23:25:46 +1000 Subject: [PATCH] * initial --- .gitignore | 3 +++ CMakeLists.txt | 9 +++++++++ src/CMakeLists.txt | 6 ++++++ src/common.h | 11 +++++++++++ src/jail.c | 16 ++++++++++++++++ src/jail.h | 15 +++++++++++++++ src/log.c | 21 +++++++++++++++++++++ src/log.h | 15 +++++++++++++++ src/logfile.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/logfile.h | 14 ++++++++++++++ src/main.c | 8 ++++++++ src/match.h | 12 ++++++++++++ 12 files changed, 176 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 src/CMakeLists.txt create mode 100644 src/common.h create mode 100644 src/jail.c create mode 100644 src/jail.h create mode 100644 src/log.c create mode 100644 src/log.h create mode 100644 src/logfile.c create mode 100644 src/logfile.h create mode 100644 src/main.c create mode 100644 src/match.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f5fd1bf --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +CMakeCache.txt +CMakeFiles/ +*.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..41b4385 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,9 @@ +SET(CNAME "f2b") +SET(VERSION 0.07) + +PROJECT(${CNAME} C) +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +SET(CMAKE_INSTALL_PREFIX "/usr/local") + +ADD_SUBDIRECTORY (src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..6c973f8 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,6 @@ +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +add_executable(f2b "main.c" "logfile.c" "log.c") + +install(TARGETS f2b + RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin") diff --git a/src/common.h b/src/common.h new file mode 100644 index 0000000..c45b2b1 --- /dev/null +++ b/src/common.h @@ -0,0 +1,11 @@ +#ifndef F2B_COMMON_H_ +#define F2B_COMMON_H_ + +#include +#include +#include +#include +#include +#include + +#endif /* F2B_COMMON_H_ */ diff --git a/src/jail.c b/src/jail.c new file mode 100644 index 0000000..92f6cce --- /dev/null +++ b/src/jail.c @@ -0,0 +1,16 @@ +#include "jail.h" + +/* +size_t +f2b_jail_poll(const jail_t *jail) { + size_t processed = 0; + char logline[LOGLINE_MAX] = { '\0' }; + + for (f2b_logfile_t *file = jail->logfiles; file != NULL; file = file->next) { + if (f2b_logfile_getline(file, logline) < 0) + continue; + } + + return processed; +} +*/ diff --git a/src/jail.h b/src/jail.h new file mode 100644 index 0000000..ce13aeb --- /dev/null +++ b/src/jail.h @@ -0,0 +1,15 @@ +#ifndef F2B_JAIL_H_ +#define F2B_JAIL_H_ + +#include "logfile.h" +#include "match.h" + +#define LOGLINE_MAX 2048 + +typedef struct f2b_jail_t { + char name[32]; + f2b_match_t *matches; + f2b_logfile_t *logfiles; +}; + +#endif /* F2B_JAIL_H_ */ diff --git a/src/log.c b/src/log.c new file mode 100644 index 0000000..ea41463 --- /dev/null +++ b/src/log.c @@ -0,0 +1,21 @@ +#include +#include +#include + +#include "common.h" +#include "log.h" + +#define LOGLINE_MAX 1024 + +void log_msg(log_msgtype_t l, const char *fmt, ...) { + va_list args; + char line[LOGLINE_MAX] = ""; + char msg[LOGLINE_MAX] = ""; + + va_start(args, fmt); + snprintf(msg, sizeof(msg), fmt, args); + va_end(args); + strncat(line, msg, sizeof(line)); + + return; +} diff --git a/src/log.h b/src/log.h new file mode 100644 index 0000000..19068da --- /dev/null +++ b/src/log.h @@ -0,0 +1,15 @@ +#ifndef F2B_LOG_H_ +#define F2B_LOG_H_ + +typedef enum { + log_debug = 0, + log_info = 1, + log_note = 1, + log_warn = 2, + log_error = 3, + log_fatal = 4 +} log_msgtype_t; + +void log_msg (log_msgtype_t l, const char *fmt, ...); + +#endif /* F2B_LOG_H_ */ diff --git a/src/logfile.c b/src/logfile.c new file mode 100644 index 0000000..70bb31c --- /dev/null +++ b/src/logfile.c @@ -0,0 +1,46 @@ +#include + +#include "common.h" +#include "log.h" +#include "logfile.h" + +bool +f2b_logfile_open(f2b_logfile_t *file, const char *filename) { + struct stat st; + + assert(file != NULL); + assert(filename != NULL); + + memset(file, 0x0, sizeof(f2b_logfile_t)); + + if (stat(filename, &st) != 0) { + log_msg(log_error, "can't open file %s: %s", filename, strerror(errno)); + return false; + } + + strncpy(file->path, filename, sizeof(file->path)); + memcpy(&file->st, &st, sizeof(st)); + + if ((file->fd = fopen(filename, "r")) == NULL) { + log_msg(log_error, "can't open file %s: %s", filename, strerror(errno)); + return false; + } + + if (fseek(file->fd, 0, SEEK_END) < 0) { + log_msg(log_error, "can't seek to end of file %s: %s", filename, strerror(errno)); + return false; + } + + return true; +} + +void +f2b_logfile_close(const f2b_logfile_t *file); + +bool +f2b_logfile_rotated(const f2b_logfile_t *file); + +ssize_t +f2b_logfile_getline(const f2b_logfile_t *file, const char *buf, size_t bufsize) { + return -1; +} diff --git a/src/logfile.h b/src/logfile.h new file mode 100644 index 0000000..62c5c18 --- /dev/null +++ b/src/logfile.h @@ -0,0 +1,14 @@ +#ifndef F2B_LOGFILE_H_ +#define F2B_LOGFILE_H_ + +#include +#include + +typedef struct { + struct f2b_logfile_t *next; + char path[PATH_MAX]; + FILE *fd; + struct stat st; +} f2b_logfile_t; + +#endif /* F2B_LOGFILE_H_ */ diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..c3459b2 --- /dev/null +++ b/src/main.c @@ -0,0 +1,8 @@ +#include "common.h" +#include "logfile.h" +#include "match.h" + +int main() { + printf("Hello world!\n"); + return 0; +} diff --git a/src/match.h b/src/match.h new file mode 100644 index 0000000..225ac6a --- /dev/null +++ b/src/match.h @@ -0,0 +1,12 @@ +#ifndef F2B_MATCH_H_ +#define F2B_MATCH_H_ + +typedef struct { + struct f2b_match_t *next; + const char *ip; + size_t count; + time_t firstseen; + time_t lastseen; +} f2b_match_t; + +#endif /* F2B_MATCH_H_ */