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