iMerge pull request #18 from bket/daemon - 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 888b578907be5e3aca8fa0c286b10eea813c52f9 /ckeen/repos/fiche/commit/888b578907be5e3aca8fa0c286b10eea813c52f9.gph vernunftzentrum.de 70 1parent a0bbd2fa28625f03f41778f815572e4aa05dce02 /ckeen/repos/fiche/commit/a0bbd2fa28625f03f41778f815572e4aa05dce02.gph vernunftzentrum.de 70 hAuthor: solusipse URL:mailto:solus1ps3@gmail.com vernunftzentrum.de 70 iDate: Sat, 19 Sep 2015 16:29:54 +0200 Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iMerge pull request #18 from bket/daemon Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 idaemonizing fiche Err vernunftzentrum.de 70 iDiffstat: Err vernunftzentrum.de 70 i README.md | 18 +++++++++++++++++- Err vernunftzentrum.de 70 i fiche.c | 64 ++++++++++++++++++++++--------- Err vernunftzentrum.de 70 i fiche.h | 10 ++++++---- Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i3 files changed, 68 insertions(+), 24 deletions(-) Err vernunftzentrum.de 70 i--- Err vernunftzentrum.de 70 1diff --git a/README.md b/README.md /ckeen/repos/fiche/file/README.md.gph vernunftzentrum.de 70 i@@ -47,7 +47,7 @@ providing fiche-based service all the time on this address `solusipse.net` and t Err vernunftzentrum.de 70 i ## Server-side usage ## Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i ``` Err vernunftzentrum.de 70 i-usage: fiche [-pbsdolBuw]. Err vernunftzentrum.de 70 i+usage: fiche [-DepbsdolBuw]. Err vernunftzentrum.de 70 i [-d domain] [-p port] [-s slug size] Err vernunftzentrum.de 70 i [-o output directory] [-B buffer size] [-u user name] Err vernunftzentrum.de 70 i [-l log file] [-b banlist] [-w whitelist] Err vernunftzentrum.de 70 i@@ -171,6 +171,22 @@ There is no specific syntax, there files may contain not only addresses. Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i ----------------- Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i+#### Daemonize #### Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+Fork fiche to the background: Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+fiche -D Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+----------------- Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+#### Extended character set for the URL #### Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+Fork can extend the charcter set for the URL: Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+fiche -e Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+----------------- Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i #### Examples #### Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i Logging connections with banlist: Err vernunftzentrum.de 70 1diff --git a/fiche.c b/fiche.c /ckeen/repos/fiche/file/fiche.c.gph vernunftzentrum.de 70 i@@ -9,11 +9,13 @@ Live example: http://code.solusipse.net/ Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i ------------------------------------------------------------------------------- Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i-usage: fiche [-epbsdolBuw]. Err vernunftzentrum.de 70 i- [-e] [-d domain] [-p port] [-s slug size] Err vernunftzentrum.de 70 i+usage: fiche [-DepbsdolBuw]. Err vernunftzentrum.de 70 i+ [-D] [-e] [-d domain] [-p port] [-s slug size] Err vernunftzentrum.de 70 i [-o output directory] [-B buffer size] [-u user name] Err vernunftzentrum.de 70 i [-l log file] [-b banlist] [-w whitelist] Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i+-D option is for daemonizing fiche Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i -e option is for using an extended character set for the URL Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i Compile with Makefile or manually with -O2 and -pthread flags. Err vernunftzentrum.de 70 i@@ -48,7 +50,18 @@ int main(int argc, char **argv) Err vernunftzentrum.de 70 i server_address = set_address(server_address); Err vernunftzentrum.de 70 i bind_to_port(listen_socket, server_address); Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i- while (1) perform_connection(listen_socket); Err vernunftzentrum.de 70 i+ if (DAEMON) Err vernunftzentrum.de 70 i+ { Err vernunftzentrum.de 70 i+ pid_t pid; Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+ pid = fork(); Err vernunftzentrum.de 70 i+ if (pid == -1) Err vernunftzentrum.de 70 i+ error("ERROR: Failed to fork"); Err vernunftzentrum.de 70 i+ if (pid == 0) Err vernunftzentrum.de 70 i+ while (1) perform_connection(listen_socket); Err vernunftzentrum.de 70 i+ } Err vernunftzentrum.de 70 i+ else Err vernunftzentrum.de 70 i+ while (1) perform_connection(listen_socket); Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i void *thread_connection(void *args) Err vernunftzentrum.de 70 i@@ -134,7 +147,7 @@ void perform_connection(int listen_socket) Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i void display_date() Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i- printf("%s\n", get_date()); Err vernunftzentrum.de 70 i+ info("%s\n", get_date()); Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i char *get_date() Err vernunftzentrum.de 70 i@@ -160,7 +173,7 @@ struct client_data get_client_address(struct sockaddr_in client_address) Err vernunftzentrum.de 70 i hostp = gethostbyaddr((const char *)&client_address.sin_addr.s_addr, sizeof(client_address.sin_addr.s_addr), AF_INET); Err vernunftzentrum.de 70 i if (hostp == NULL) Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i- printf("ERROR: Couldn't obtain client's hostname\n"); Err vernunftzentrum.de 70 i+ info("ERROR: Couldn't obtain client's hostname\n"); Err vernunftzentrum.de 70 i data.hostname = "n/a"; Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i else Err vernunftzentrum.de 70 i@@ -169,7 +182,7 @@ struct client_data get_client_address(struct sockaddr_in client_address) Err vernunftzentrum.de 70 i hostaddrp = inet_ntoa(client_address.sin_addr); Err vernunftzentrum.de 70 i if (hostaddrp == NULL) Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i- printf("ERROR: Couldn't obtain client's address\n"); Err vernunftzentrum.de 70 i+ info("ERROR: Couldn't obtain client's address\n"); Err vernunftzentrum.de 70 i data.ip_address = "n/a"; Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i else Err vernunftzentrum.de 70 i@@ -199,11 +212,11 @@ void save_log(char *slug, char *hostaddrp, char *h_name) Err vernunftzentrum.de 70 i void display_info(struct client_data data, char *slug, char *message) Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i if (slug == NULL) Err vernunftzentrum.de 70 i- printf("%s\n", message); Err vernunftzentrum.de 70 i- else printf("Saved to: %s\n", slug); Err vernunftzentrum.de 70 i+ info("%s\n", message); Err vernunftzentrum.de 70 i+ else info("Saved to: %s\n", slug); Err vernunftzentrum.de 70 i display_date(); Err vernunftzentrum.de 70 i- printf("Client: %s (%s)\n", data.ip_address, data.hostname); Err vernunftzentrum.de 70 i- display_line(); Err vernunftzentrum.de 70 i+ info("Client: %s (%s)\n", data.ip_address, data.hostname); Err vernunftzentrum.de 70 i+ info("====================================\n"); Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i char *check_banlist(char *ip_address) Err vernunftzentrum.de 70 i@@ -362,20 +375,33 @@ void set_basedir() Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i void startup_message() Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i- display_line(); Err vernunftzentrum.de 70 i- printf("Domain name: %s\n", DOMAIN); Err vernunftzentrum.de 70 i- printf("Saving files to: %s\n", BASEDIR); Err vernunftzentrum.de 70 i- printf("Fiche started listening on port %d.\n", PORT); Err vernunftzentrum.de 70 i- display_line(); Err vernunftzentrum.de 70 i+ info("====================================\n"); Err vernunftzentrum.de 70 i+ info("Domain name: %s\n", DOMAIN); Err vernunftzentrum.de 70 i+ info("Saving files to: %s\n", BASEDIR); Err vernunftzentrum.de 70 i+ info("Fiche started listening on port %d.\n", PORT); Err vernunftzentrum.de 70 i+ info("====================================\n"); Err vernunftzentrum.de 70 i+} Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+void info(char *buffer, ...) Err vernunftzentrum.de 70 i+{ Err vernunftzentrum.de 70 i+ if (DAEMON) Err vernunftzentrum.de 70 i+ return; Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+ printf(buffer); Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i void parse_parameters(int argc, char **argv) Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i int c; Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i- while ((c = getopt (argc, argv, "ep:b:s:d:o:l:B:u:w:")) != -1) Err vernunftzentrum.de 70 i+ if (strcmp(*argv, "-D")) Err vernunftzentrum.de 70 i+ DAEMON = 1; Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i+ while ((c = getopt (argc, argv, "Dep:b:s:d:o:l:B:u:w:")) != -1) Err vernunftzentrum.de 70 i switch (c) Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i+ case 'D': Err vernunftzentrum.de 70 i+ break; Err vernunftzentrum.de 70 i case 'e': Err vernunftzentrum.de 70 i snprintf(symbols, sizeof symbols, "%s", "abcdefghijklmnopqrstuvwxyz0123456789-+_=.ABCDEFGHIJKLMNOPQRSTUVWXYZ"); Err vernunftzentrum.de 70 i break; Err vernunftzentrum.de 70 i@@ -387,7 +413,7 @@ void parse_parameters(int argc, char **argv) Err vernunftzentrum.de 70 i break; Err vernunftzentrum.de 70 i case 'B': Err vernunftzentrum.de 70 i BUFSIZE = atoi(optarg); Err vernunftzentrum.de 70 i- printf("Buffer size set to: %d.\n", BUFSIZE); Err vernunftzentrum.de 70 i+ info("Buffer size set to: %d.\n", BUFSIZE); Err vernunftzentrum.de 70 i break; Err vernunftzentrum.de 70 i case 'b': Err vernunftzentrum.de 70 i BANFILE = optarg; Err vernunftzentrum.de 70 i@@ -395,14 +421,14 @@ void parse_parameters(int argc, char **argv) Err vernunftzentrum.de 70 i break; Err vernunftzentrum.de 70 i case 's': Err vernunftzentrum.de 70 i SLUG_SIZE = atoi(optarg); Err vernunftzentrum.de 70 i- printf("Slug size set to: %d.\n", SLUG_SIZE); Err vernunftzentrum.de 70 i+ info("Slug size set to: %d.\n", SLUG_SIZE); Err vernunftzentrum.de 70 i break; Err vernunftzentrum.de 70 i case 'o': Err vernunftzentrum.de 70 i BASEDIR = optarg; Err vernunftzentrum.de 70 i break; Err vernunftzentrum.de 70 i case 'l': Err vernunftzentrum.de 70 i LOG = optarg; Err vernunftzentrum.de 70 i- printf("Log file: %s\n", LOG); Err vernunftzentrum.de 70 i+ info("Log file: %s\n", LOG); Err vernunftzentrum.de 70 i break; Err vernunftzentrum.de 70 i case 'u': Err vernunftzentrum.de 70 i set_uid_gid(optarg); Err vernunftzentrum.de 70 1diff --git a/fiche.h b/fiche.h /ckeen/repos/fiche/file/fiche.h.gph vernunftzentrum.de 70 i@@ -9,11 +9,13 @@ Live example: http://code.solusipse.net/ Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i ------------------------------------------------------------------------------- Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i-usage: fiche [-epbsdolBuw]. Err vernunftzentrum.de 70 i- [-e] [-d domain] [-p port] [-s slug size] Err vernunftzentrum.de 70 i+usage: fiche [-DepbsdolBuw]. Err vernunftzentrum.de 70 i+ [-D] [-e] [-d domain] [-p port] [-s slug size] Err vernunftzentrum.de 70 i [-o output directory] [-B buffer size] [-u user name] Err vernunftzentrum.de 70 i [-l log file] [-b banlist] [-w whitelist] Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i+-D option is for daemonizing fiche Err vernunftzentrum.de 70 i+ Err vernunftzentrum.de 70 i -e option is for using an extended character set for the URL Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i Compile with Makefile or manually with -O2 and -pthread flags. Err vernunftzentrum.de 70 i@@ -51,6 +53,7 @@ char *BANLIST; Err vernunftzentrum.de 70 i char *BANFILE; Err vernunftzentrum.de 70 i char *WHITEFILE; Err vernunftzentrum.de 70 i char *WHITELIST; Err vernunftzentrum.de 70 i+int DAEMON = 0; Err vernunftzentrum.de 70 i int PORT = 9999; Err vernunftzentrum.de 70 i int SLUG_SIZE = 4; Err vernunftzentrum.de 70 i int BUFSIZE = 32768; Err vernunftzentrum.de 70 i@@ -77,7 +80,6 @@ int create_directory(char *slug); Err vernunftzentrum.de 70 i int check_protocol(char *buffer); Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i void bind_to_port(int listen_socket, struct sockaddr_in serveraddr); Err vernunftzentrum.de 70 i-void display_line(){printf("====================================\n");} Err vernunftzentrum.de 70 i void error(char *error_code){perror(error_code); exit(1);} Err vernunftzentrum.de 70 i void display_date(); Err vernunftzentrum.de 70 i void perform_connection(int listen_socket); Err vernunftzentrum.de 70 i@@ -91,8 +93,8 @@ void parse_parameters(int argc, char **argv); Err vernunftzentrum.de 70 i void save_log(char *slug, char *hostaddrp, char *h_name); Err vernunftzentrum.de 70 i void change_owner(char *directory); Err vernunftzentrum.de 70 i void set_uid_gid(); Err vernunftzentrum.de 70 i+void info(char *buffer, ...); Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i-char *return_line(){return("\n====================================");} Err vernunftzentrum.de 70 i char *check_banlist(char *ip_address); Err vernunftzentrum.de 70 i char *check_whitelist(char *ip_address); Err vernunftzentrum.de 70 i char *get_date(); Err vernunftzentrum.de 70 .