diff --git a/client/maxadmin.c b/client/maxadmin.c index 1b1a894ed..900637426 100644 --- a/client/maxadmin.c +++ b/client/maxadmin.c @@ -994,7 +994,10 @@ bool getPassword(char *passwd, size_t len) if (tcsetattr(STDIN_FILENO, 0, &tty_attr) == 0) { printf("Password: "); - fgets(passwd, len, stdin); + if (fgets(passwd, len, stdin) == NULL) + { + printf("Failed to read password\n"); + } tty_attr.c_lflag = c_lflag; diff --git a/server/core/adminusers.c b/server/core/adminusers.c index 5ef2e0c1e..34bc14b0c 100644 --- a/server/core/adminusers.c +++ b/server/core/adminusers.c @@ -260,8 +260,14 @@ static const char* admin_remove_user(USERS *users, const char* fname, /** one step back */ MXS_ERROR("Unable to set stream position. "); } - fgets(line, LINELEN, fp); - fputs(line, fp_tmp); + if (fgets(line, LINELEN, fp)) + { + fputs(line, fp_tmp); + } + else + { + MXS_ERROR("Failed to read line from admin users file"); + } } if (fgetpos(fp, &rpos) != 0) diff --git a/server/core/gateway.cc b/server/core/gateway.cc index 48160314c..fa681b583 100644 --- a/server/core/gateway.cc +++ b/server/core/gateway.cc @@ -304,7 +304,10 @@ static void sigterm_handler(int i) if (n_shutdowns == 1) { - write(STDERR_FILENO, shutdown_msg, sizeof(shutdown_msg) - 1); + if (write(STDERR_FILENO, shutdown_msg, sizeof(shutdown_msg) - 1) == -1) + { + printf("Failed to write shutdown message!\n"); + } } else { @@ -320,11 +323,17 @@ sigint_handler(int i) if (n_shutdowns == 1) { - write(STDERR_FILENO, shutdown_msg, sizeof(shutdown_msg) - 1); + if (write(STDERR_FILENO, shutdown_msg, sizeof(shutdown_msg) - 1) == -1) + { + printf("Failed to write shutdown message!\n"); + } } else if (n_shutdowns == 2) { - write(STDERR_FILENO, patience_msg, sizeof(patience_msg) - 1); + if (write(STDERR_FILENO, patience_msg, sizeof(patience_msg) - 1) == -1) + { + printf("Failed to write shutdown message!\n"); + } } else { @@ -2621,7 +2630,10 @@ static int set_user(const char* user) void write_child_exit_code(int fd, int code) { /** Notify the parent process that an error has occurred */ - write(fd, &code, sizeof (int)); + if (write(fd, &code, sizeof (int)) == -1) + { + printf("Failed to write child process message!\n"); + } close(fd); } diff --git a/server/core/hashtable.c b/server/core/hashtable.c index 30975784b..495a0bb20 100644 --- a/server/core/hashtable.c +++ b/server/core/hashtable.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -741,7 +742,12 @@ hashtable_save(HASHTABLE *table, const char *filename, close(fd); return -1; } - write(fd, &rval, sizeof(rval)); // Write zero counter, will be overrwriten at end + if (write(fd, &rval, sizeof(rval)) == -1) // Write zero counter, will be overrwriten at end + { + char err[MXS_STRERROR_BUFLEN]; + MXS_ERROR("Failed to write hashtable item count: %d, %s", errno, + strerror_r(errno, err, sizeof(err))); + } if ((iter = hashtable_iterator(table)) != NULL) { while ((key = hashtable_next(iter)) != NULL) @@ -766,7 +772,12 @@ hashtable_save(HASHTABLE *table, const char *filename, /* Now go back and write the count of entries */ if (lseek(fd, 7L, SEEK_SET) != -1) { - write(fd, &rval, sizeof(rval)); + if (write(fd, &rval, sizeof(rval)) == -1) + { + char err[MXS_STRERROR_BUFLEN]; + MXS_ERROR("Failed to write hashtable item count: %d, %s", errno, + strerror_r(errno, err, sizeof(err))); + } } close(fd); diff --git a/server/core/monitor.c b/server/core/monitor.c index 25b371df9..695a6ab7b 100644 --- a/server/core/monitor.c +++ b/server/core/monitor.c @@ -958,17 +958,23 @@ static const char* mon_get_event_name(MXS_MONITOR_SERVERS* node) static void mon_append_node_names(MXS_MONITOR_SERVERS* servers, char* dest, int len, int status) { char *separator = ""; - char arr[MAX_SERVER_NAME_LEN + 32]; // Some extra space for port + char arr[MAX_SERVER_NAME_LEN + 64]; // Some extra space for port and separator dest[0] = '\0'; - while (servers && strlen(dest) < (len - strlen(separator))) + while (servers && len) { if (status == 0 || servers->server->status & status) { - strncat(dest, separator, len); + snprintf(arr, sizeof(arr), "%s%s:%d", separator, servers->server->name, + servers->server->port); separator = ","; - snprintf(arr, sizeof(arr), "%s:%d", servers->server->name, servers->server->port); - strncat(dest, arr, len - strlen(dest) - 1); + int arrlen = strlen(arr); + + if (arrlen < len) + { + strcat(dest, arr); + len -= arrlen; + } } servers = servers->next; } diff --git a/server/modules/routing/binlogrouter/blr_file.c b/server/modules/routing/binlogrouter/blr_file.c index 4e8f2231a..05ea9834a 100644 --- a/server/modules/routing/binlogrouter/blr_file.c +++ b/server/modules/routing/binlogrouter/blr_file.c @@ -1197,8 +1197,12 @@ blr_cache_response(ROUTER_INSTANCE *router, char *response, GWBUF *buf) { return; } - write(fd, GWBUF_DATA(buf), GWBUF_LENGTH(buf)); - // TODO: Check result. + if (write(fd, GWBUF_DATA(buf), GWBUF_LENGTH(buf)) == -1) + { + char err[MXS_STRERROR_BUFLEN]; + MXS_ERROR("Failed to write cached response: %d, %s", + errno, strerror_r(errno, err, sizeof(err))); + } close(fd); } @@ -1251,7 +1255,12 @@ blr_cache_read_response(ROUTER_INSTANCE *router, char *response) close(fd); return NULL; } - read(fd, GWBUF_DATA(buf), statb.st_size); + if (read(fd, GWBUF_DATA(buf), statb.st_size) == -1) + { + char err[MXS_STRERROR_BUFLEN]; + MXS_ERROR("Failed to read cached response: %d, %s", + errno, strerror_r(errno, err, sizeof(err))); + } close(fd); return buf; } @@ -1421,11 +1430,10 @@ blr_read_events_all_events(ROUTER_INSTANCE *router, int fix, int debug) break; case -1: { - char err_msg[BLRM_STRERROR_R_MSG_SIZE + 1] = ""; - strerror_r(errno, err_msg, BLRM_STRERROR_R_MSG_SIZE); + char err[MXS_STRERROR_BUFLEN]; MXS_ERROR("Failed to read binlog file %s at position %llu" - " (%s).", router->binlog_name, - pos, err_msg); + " (%s).", router->binlog_name, pos, + strerror_r(errno, err, sizeof(err))); if (errno == EBADF) { @@ -1533,7 +1541,7 @@ blr_read_events_all_events(ROUTER_INSTANCE *router, int fix, int debug) } else { - char errmsg[BLRM_STRERROR_R_MSG_SIZE + 1] = ""; + char errmsg[BINLOG_ERROR_MSG_LEN + 1] = ""; /* fill replication header struct */ hdr.timestamp = EXTRACT32(hdbuf); hdr.event_type = hdbuf[4]; @@ -1641,12 +1649,12 @@ blr_read_events_all_events(ROUTER_INSTANCE *router, int fix, int debug) { if (n == -1) { - char err_msg[BLRM_STRERROR_R_MSG_SIZE + 1] = ""; - strerror_r(errno, err_msg, BLRM_STRERROR_R_MSG_SIZE); + char err[MXS_STRERROR_BUFLEN]; MXS_ERROR("Error reading the event at %llu in %s. " "%s, expected %d bytes.", pos, router->binlog_name, - err_msg, hdr.event_size - BINLOG_EVENT_HDR_LEN); + strerror_r(errno, err, sizeof(err)), + hdr.event_size - BINLOG_EVENT_HDR_LEN); } else { @@ -1709,7 +1717,7 @@ blr_read_events_all_events(ROUTER_INSTANCE *router, int fix, int debug) uint32_t event_size = EXTRACT32(hdbuf + BINLOG_EVENT_LEN_OFFSET); uint8_t *decrypt_ptr; unsigned long next_pos; - char errmsg[BLRM_STRERROR_R_MSG_SIZE + 1] = ""; + char errmsg[BINLOG_ERROR_MSG_LEN + 1] = ""; /** * Events are encrypted. diff --git a/server/modules/routing/binlogrouter/blr_slave.c b/server/modules/routing/binlogrouter/blr_slave.c index 7c72215dc..919097d7b 100644 --- a/server/modules/routing/binlogrouter/blr_slave.c +++ b/server/modules/routing/binlogrouter/blr_slave.c @@ -3556,7 +3556,12 @@ blr_start_slave(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave) router->prevbinlog, router->last_safe_pos); /* Truncate previous binlog file to last_safe pos */ - truncate(file, router->last_safe_pos); + if (truncate(file, router->last_safe_pos) == -1) + { + char err[MXS_STRERROR_BUFLEN]; + MXS_ERROR("Failed to truncate file: %d, %s", + errno, strerror_r(errno, err, sizeof(err))); + } /* Log it */ MXS_WARNING("A transaction is still opened at pos %lu"