From 51863ec150986da9c2dc7185f62f684cfbda8d23 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Thu, 8 Oct 2015 20:28:29 +0200 Subject: [PATCH 01/10] sql: fix syntax --- mysql/create_tables.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql/create_tables.sql b/mysql/create_tables.sql index c203fa2..ce129e4 100644 --- a/mysql/create_tables.sql +++ b/mysql/create_tables.sql @@ -140,7 +140,7 @@ CREATE TABLE IF NOT EXISTS mxq_server ( host_mtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP, server_start TIMESTAMP DEFAULT 0, - server_stop TIMESTAMP DEFAULT 0, + server_stop TIMESTAMP DEFAULT 0 ); From 61065a9ab9be482bb1e1e67a7611d3ad53214623 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Thu, 8 Oct 2015 22:30:54 +0200 Subject: [PATCH 02/10] mxqd: return failure when fork fails in setup_cronolog --- mxqd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mxqd.c b/mxqd.c index 9ab4fda..7cccd05 100644 --- a/mxqd.c +++ b/mxqd.c @@ -112,7 +112,7 @@ int setup_cronolog(char *cronolog, char *link, char *format) pid = fork(); if (pid < 0) { mx_log_err("cronolog fork failed: %m"); - return 1; + return 0; } else if(pid == 0) { res = dup2(pipe_fd[0], STDIN_FILENO); if (res == -1) { From 907f222729ece1ad553db57f1b721bd6eea8ca12 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Fri, 9 Oct 2015 08:39:10 +0200 Subject: [PATCH 03/10] mxqd: fail with diagnostic if unable to write to log directory Failures of cronolog are not detected by the current code, because cronologs own stderr goes to /dev/null. While there are many reasons, why cronolog mail fail, not being able to write to the log directory altogether is a very prominent one which is easy to detect beforehand. This may become even more relevant when we start to support mxqd being run as non-root. --- mxqd.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mxqd.c b/mxqd.c index 7cccd05..5239c27 100644 --- a/mxqd.c +++ b/mxqd.c @@ -404,6 +404,10 @@ int server_init(struct mxq_server *server, int argc, char *argv[]) setup_stdin("/dev/null"); if (!arg_nolog) { + if (access("/var/log",R_OK|W_OK|X_OK)) { + mx_log_err("MAIN: cant write to /var/log: %m"); + exit(EX_IOERR); + } res = setup_cronolog("/usr/sbin/cronolog", "/var/log/mxqd_log", "/var/log/%Y/mxqd_log-%Y-%m"); if (!res) { mx_log_err("MAIN: cronolog setup failed. exiting."); From 6105b4b2b7f80582d971dedde41d1cd9e0b1d004 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Fri, 9 Oct 2015 09:41:11 +0200 Subject: [PATCH 04/10] mx_getopt: fix typo in comment --- mx_getopt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mx_getopt.c b/mx_getopt.c index 3271663..1e5da27 100644 --- a/mx_getopt.c +++ b/mx_getopt.c @@ -349,7 +349,7 @@ static int _mx_getopt_long(struct mx_getopt_ctl *optctl, int *optindex) *optindex = -1; - /* not an option: pop arguement */ + /* not an option: pop argument */ if(!maybe_option) { mx_getopt_pop_current_argument(optctl); From a5807d031063de206696ddc67151e291b3509eaf Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Fri, 9 Oct 2015 14:55:49 +0200 Subject: [PATCH 05/10] mx_flock: increase loglevel --- mx_flock.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mx_flock.c b/mx_flock.c index eb522ad..bdbbaf3 100644 --- a/mx_flock.c +++ b/mx_flock.c @@ -30,7 +30,7 @@ static inline int _flock_open(struct mx_flock *lock, mode_t mode) fd = open(lock->fname, O_RDONLY|O_CREAT|O_NOCTTY|O_CLOEXEC, mode); if (fd < 0) { - mx_log_debug("open(): %m"); + mx_log_err("%s: %m",lock->fname); return -1; } @@ -80,7 +80,7 @@ struct mx_flock *mx_flock(int operation, char *fmt, ...) lock = malloc(sizeof(*lock)); if (!lock) { - mx_log_debug("malloc(): %m"); + mx_log_err("malloc(): %m"); return NULL; } @@ -93,7 +93,7 @@ struct mx_flock *mx_flock(int operation, char *fmt, ...) va_end(ap); if (res == -1) { - mx_log_debug("vasprintf(): %m"); + mx_log_err("vasprintf(): %m"); _flock_free(lock); return NULL; } @@ -111,7 +111,7 @@ struct mx_flock *mx_flock(int operation, char *fmt, ...) if (res < 0) { if (errno == EWOULDBLOCK) return lock; - mx_log_debug("flock(): %m"); + mx_log_err("flock(): %m"); _flock_free(lock); return NULL; } @@ -144,11 +144,11 @@ int mx_funlock(struct mx_flock *lock) res = unlink(lock->fname); if (res < 0) - mx_log_debug("unlink(): %m"); + mx_log_warning("unlink(): %m"); res = flock(lock->fd, LOCK_UN); if (res < 0) - mx_log_debug("flock(): %m"); + mx_log_warning("flock(): %m"); _flock_close(lock); _flock_free(lock); From d19c21ddaef6619080011d0e9a51afd4131fe536 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Fri, 9 Oct 2015 09:48:31 +0200 Subject: [PATCH 06/10] mxqd: abort with USAGE on unknown option We should not continue with a misstyped option (eg --nolog instead of --no-log) --- mxqd.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mxqd.c b/mxqd.c index 5239c27..dc4e579 100644 --- a/mxqd.c +++ b/mxqd.c @@ -247,8 +247,7 @@ int server_init(struct mxq_server *server, int argc, char *argv[]) mx_getopt_init(&optctl, argc-1, &argv[1], opts); - optctl.flags = MX_FLAG_STOPONUNKNOWN|MX_FLAG_STOPONNOOPT; -// optctl.flags = MX_FLAG_STOPONUNKNOWN; +// optctl.flags = MX_FLAG_STOPONUNKNOWN|MX_FLAG_STOPONNOOPT; while ((opt=mx_getopt(&optctl, &i)) != MX_GETOPT_END) { if (opt == MX_GETOPT_ERROR) { From c0b6bad0b260cee20579c19bc19e6008376d621c Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Fri, 9 Oct 2015 16:25:42 +0200 Subject: [PATCH 07/10] mxqd: cleanup --- mxqd.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/mxqd.h b/mxqd.h index c4db22d..8de7d89 100644 --- a/mxqd.h +++ b/mxqd.h @@ -75,14 +75,11 @@ struct mxq_server { char *host_id; char *hostname; char *server_id; - char *lockfilename; char *pidfilename; struct mx_flock *flock; char *initial_path; char *initial_tmpdir; - - int is_running; }; From 905dde3f24c8ced4747ee0f0e7c745785abb0c29 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Wed, 14 Oct 2015 11:13:44 +0200 Subject: [PATCH 08/10] mx_util: free the right pointer in mx_strvec_free --- mx_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mx_util.c b/mx_util.c index efde13f..790fc6b 100644 --- a/mx_util.c +++ b/mx_util.c @@ -1126,7 +1126,7 @@ void mx_strvec_free(char **strvec) return; for (sv = strvec; *sv; sv++) { - free(sv); + free(*sv); } free(strvec); } From d5e75e2df9441b6c0e0c6462e8cc3ec1553af0b2 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Wed, 14 Oct 2015 11:21:30 +0200 Subject: [PATCH 09/10] test_mx_util: add test for mx_strvec --- test_mx_util.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test_mx_util.c b/test_mx_util.c index 5700e80..b4ef240 100644 --- a/test_mx_util.c +++ b/test_mx_util.c @@ -356,6 +356,15 @@ static void test_mx_strscan(void) mx_proc_pid_stat_free(&pps2); } +static void test_mx_strvec() { + char **strvec; + + strvec=mx_strvec_new(); + mx_strvec_push_str(&strvec,strdup("Hallo")); + mx_strvec_push_str(&strvec,strdup("Bla")); + mx_strvec_push_str(&strvec,strdup("lall")); + mx_strvec_free(strvec); +} int main(int argc, char *argv[]) { @@ -372,5 +381,6 @@ int main(int argc, char *argv[]) test_mx_strtobytes(); test_mx_read_first_line_from_file(); test_mx_strscan(); + test_mx_strvec(); return 0; } From f83e67a9904bd7e26a4b0180e29f1d6514153ef1 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Wed, 14 Oct 2015 15:07:18 +0200 Subject: [PATCH 10/10] mxqd: fix irrelevant memory leak --- mxqd.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mxqd.c b/mxqd.c index dc4e579..47881c4 100644 --- a/mxqd.c +++ b/mxqd.c @@ -1372,6 +1372,7 @@ void server_close(struct mxq_server *server) mx_funlock(server->flock); mx_free_null(server->boot_id); + mx_free_null(server->host_id); } int killall(struct mxq_server *server, int sig, unsigned int pgrp)