Log everything to a file - fiche - A pastebin adjusted for gopher use
(HTM) git clone git://vernunftzentrum.de/fiche.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit 80ee24683f7881c2e6dca88b4561f0c5ddd60b41
(DIR) parent ee48d3e30c29361557beffbd4a18b889685a679d
(HTM) Author: Christian Kellermann <ckeen@pestilenz.org>
Date: Fri, 2 Mar 2018 20:49:16 +0100
Log everything to a file
This patch opens up a global file handle for logging before the user
is changed. This way the file handle is opened as root and should
allow creating logs in places like /var/log.
Diffstat:
fiche.c | 72 +++++++++++++++++++------------
1 file changed, 44 insertions(+), 28 deletions(-)
---
(DIR) diff --git a/fiche.c b/fiche.c
@@ -54,6 +54,9 @@ $ cat fiche.c | nc localhost 9999
*/
const char *Fiche_Symbols = "abcdefghijklmnopqrstuvwxyz0123456789";
+/* File handle for the log file */
+static FILE *logfile_handle = NULL;
+
/******************************************************************************
* Inner structs
@@ -223,6 +226,27 @@ int fiche_run(Fiche_Settings settings) {
seed = time(NULL);
+ // Check if log file is writable (if set)
+ if ( settings.log_file_path ) {
+
+ // Create log file if it doesn't exist
+ FILE *f = fopen(settings.log_file_path, "a+");
+ if (!f){
+ print_error("Unable to create log file!");
+ return -1;
+ }
+
+ // Then check if it's accessible
+ if ( access(settings.log_file_path, W_OK) != 0 ) {
+ print_error("Log file not writable!");
+ fclose(f);
+ return -1;
+ }
+
+ logfile_handle = f;
+
+ }
+
// Display welcome message
{
char date[64];
@@ -250,24 +274,10 @@ int fiche_run(Fiche_Settings settings) {
}
}
- // Check if log file is writable (if set)
- if ( settings.log_file_path ) {
-
- // Create log file if it doesn't exist
- FILE *f = fopen(settings.log_file_path, "a+");
- fclose(f);
-
- // Then check if it's accessible
- if ( access(settings.log_file_path, W_OK) != 0 ) {
- print_error("Log file not writable!");
- return -1;
- }
-
- }
-
// Try to set domain name
if ( set_domain_name(&settings) != 0 ) {
print_error("Was not able to set domain name!");
+ if (logfile_handle) fclose(logfile_handle);
return -1;
}
@@ -279,6 +289,8 @@ int fiche_run(Fiche_Settings settings) {
// This is allways allocated on the heap
free(settings.domain);
+ if (logfile_handle) fclose(logfile_handle);
+
return 0;
}
@@ -290,30 +302,36 @@ int fiche_run(Fiche_Settings settings) {
static void print_error(const char *format, ...) {
va_list args;
- va_start(args, format);
+ FILE *fd = logfile_handle ? logfile_handle : stderr;
- printf("[Fiche][ERROR] ");
- vprintf(format, args);
- printf("\n");
+ va_start(args, format);
+ fprintf(fd, "[Fiche][ERROR] ");
+ vfprintf(fd, format, args);
+ fprintf(fd, "\n");
+ fflush(fd);
va_end(args);
}
static void print_status(const char *format, ...) {
va_list args;
- va_start(args, format);
+ FILE *fd = logfile_handle ? logfile_handle : stderr;
- printf("[Fiche][STATUS] ");
- vprintf(format, args);
- printf("\n");
+ va_start(args, format);
+ fprintf(fd, "[Fiche][STATUS] ");
+ vfprintf(fd, format, args);
+ fprintf(fd, "\n");
+ fflush(fd);
va_end(args);
}
static void print_separator() {
- printf("============================================================\n");
+ FILE *fd = logfile_handle ? logfile_handle : stderr;
+ fprintf(fd, "============================================================\n");
+ fflush(fd);
}
@@ -325,8 +343,7 @@ static void log_entry(const Fiche_Settings *s, const char *ip,
return;
}
- FILE *f = fopen(s->log_file_path, "a");
- if (!f) {
+ if (!logfile_handle) {
print_status("Was not able to save entry to the log!");
return;
}
@@ -335,8 +352,7 @@ static void log_entry(const Fiche_Settings *s, const char *ip,
get_date(date);
// Write entry to file
- fprintf(f, "%s -- %s -- %s (%s)\n", slug, date, ip, hostname);
- fclose(f);
+ fprintf(logfile_handle, "%s -- %s -- %s (%s)\n", slug, date, ip, hostname);
}