From: Felix Morgner Date: Fri, 6 Feb 2015 12:58:13 +0000 (+0100) Subject: fixed memory leaks. closes issue #52 X-Git-Url: http://git.code-monkey.de/?p=umurmur.git;a=commitdiff_plain;h=3c918a16e5959c8ea47600ced42fba0e15b39e11 fixed memory leaks. closes issue #52 --- diff --git a/src/ban.c b/src/ban.c index c7ed670..47f02ed 100644 --- a/src/ban.c +++ b/src/ban.c @@ -109,9 +109,11 @@ void Ban_pruneBanned() #ifdef DEBUG char hexhash[41]; SSLi_hash2hex(ban->hash, hexhash); + char *addressString = Util_addressToString(&ban->address); Log_debug("BL: User %s Reason: '%s' Hash: %s IP: %s Time left: %d", - ban->name, ban->reason, hexhash, Util_addressToString(&ban->address), + ban->name, ban->reason, hexhash, addressString, ban->time + ban->duration - time(NULL)); + free(addressString); #endif /* Duration of 0 = forever */ if (ban->duration != 0 && ban->time + ban->duration - time(NULL) <= 0) { @@ -307,7 +309,9 @@ static void Ban_saveBanFile(void) ban = list_get_entry(itr, ban_t, node); SSLi_hash2hex(ban->hash, hexhash); - fprintf(file, "%s,%s,%d,%ld,%d,%s,%s\n", hexhash, Util_addressToString(&ban->address),ban->mask, (long int)ban->time, ban->duration, ban->name, ban->reason); + char *addressString = Util_addressToString(&ban->address); + fprintf(file, "%s,%s,%d,%ld,%d,%s,%s\n", hexhash, addressString,ban->mask, (long int)ban->time, ban->duration, ban->name, ban->reason); + free(addressString); } fclose(file); banlist_changed = false; diff --git a/src/client.c b/src/client.c index b3b12b7..1c5972b 100644 --- a/src/client.c +++ b/src/client.c @@ -323,9 +323,12 @@ int Client_add(int fd, struct sockaddr_storage *remote) { client_t* newclient; message_t *sendmsg; + char* addressString = NULL; if (Ban_isBannedAddr(remote)) { - Log_info("Address %s banned. Disconnecting", Util_addressToString(remote)); + addressString = Util_addressToString(remote); + Log_info("Address %s banned. Disconnecting", addressString); + free(addressString); return -1; } @@ -336,7 +339,9 @@ int Client_add(int fd, struct sockaddr_storage *remote) memcpy(&newclient->remote_tcp, remote, sizeof(struct sockaddr_storage)); newclient->ssl = SSLi_newconnection(&newclient->tcpfd, &newclient->SSLready); if (newclient->ssl == NULL) { - Log_warn("SSL negotiation failed with %s on port %d", Util_addressToString(remote), Util_addressToPort(remote)); + addressString = Util_addressToString(remote); + Log_warn("SSL negotiation failed with %s on port %d", addressString, Util_addressToPort(remote)); + free(addressString); free(newclient); return -1; } diff --git a/src/server.c b/src/server.c index 4b90734..9bb6ccb 100644 --- a/src/server.c +++ b/src/server.c @@ -141,7 +141,7 @@ void Server_runLoop(struct pollfd* pollfds) while (!shutdown_server) { struct sockaddr_storage remote; int i; - + #ifdef USE_SHAREDMEMORY_API Sharedmemory_alivetick(); #endif @@ -180,7 +180,9 @@ void Server_runLoop(struct pollfd* pollfds) tcpfd = accept(pollfds[i].fd, (struct sockaddr *)&remote, &addrlen); fcntl(tcpfd, F_SETFL, O_NONBLOCK); setsockopt(tcpfd, IPPROTO_TCP, TCP_NODELAY, (char *) &on, sizeof(int)); - Log_debug("Connection from %s port %d\n", Util_addressToString(&remote), Util_addressToPort(&remote)); + char *addressString = Util_addressToString(&remote); + Log_debug("Connection from %s port %d\n", addressString, Util_addressToPort(&remote)); + free(addressString); if (Client_add(tcpfd, &remote) < 0) close(tcpfd); } @@ -198,9 +200,9 @@ void Server_runLoop(struct pollfd* pollfds) if (pollfds[nofServerSocks + i].revents & POLLOUT) Client_write_fd(pollfds[nofServerSocks + i].fd); } -#ifdef USE_SHAREDMEMORY_API +#ifdef USE_SHAREDMEMORY_API Sharedmemory_update(); -#endif +#endif } } @@ -216,8 +218,11 @@ void Server_setupTCPSockets(struct sockaddr_storage* addresses[2], struct pollfd Log_fatal("socket IPv4"); if (setsockopt(sockets[0], SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) != 0) Log_fatal("setsockopt IPv4: %s", strerror(errno)); - if (bind(sockets[0], (struct sockaddr *)addresses[0], sizeof (struct sockaddr_in)) < 0) - Log_fatal("bind %s %d: %s", Util_addressToString(addresses[0]), Util_addressToPort(addresses[0]), strerror(errno)); + if (bind(sockets[0], (struct sockaddr *)addresses[0], sizeof (struct sockaddr_in)) < 0) { + char *addressString = Util_addressToString(addresses[0]); + Log_fatal("bind %s %d: %s", addressString, Util_addressToPort(addresses[0]), strerror(errno)); + free(addressString); + } if (listen(sockets[0], 3) < 0) Log_fatal("listen IPv4"); fcntl(sockets[0], F_SETFL, O_NONBLOCK); @@ -235,8 +240,11 @@ void Server_setupTCPSockets(struct sockaddr_storage* addresses[2], struct pollfd Log_fatal("setsockopt IPv6: %s", strerror(errno)); if (setsockopt(sockets[1], IPPROTO_IPV6, IPV6_V6ONLY, &yes, sizeof(int)) != 0) Log_fatal("setsockopt IPv6: %s", strerror(errno)); - if (bind(sockets[1], (struct sockaddr *)addresses[1], sizeof (struct sockaddr_in6)) < 0) - Log_fatal("bind %s %d: %s", Util_addressToString(addresses[1]), Util_addressToPort(addresses[1]), strerror(errno)); + if (bind(sockets[1], (struct sockaddr *)addresses[1], sizeof (struct sockaddr_in6)) < 0) { + char *addressString = Util_addressToString(addresses[1]); + Log_fatal("bind %s %d: %s", addressString, Util_addressToPort(addresses[1]), strerror(errno)); + free(addressString); + } if (listen(sockets[1], 3) < 0) Log_fatal("listen IPv6"); fcntl(sockets[1], F_SETFL, O_NONBLOCK); @@ -258,8 +266,11 @@ void Server_setupUDPSockets(struct sockaddr_storage* addresses[2], struct pollfd if (hasv4) { sockets[0] = socket(PF_INET, SOCK_DGRAM, 0); - if (bind(sockets[0], (struct sockaddr *) addresses[0], sizeof (struct sockaddr_in)) < 0) - Log_fatal("bind %s %d: %s", Util_addressToString(addresses[0]), Util_addressToPort(addresses[0]), strerror(errno)); + if (bind(sockets[0], (struct sockaddr *) addresses[0], sizeof (struct sockaddr_in)) < 0) { + char *addressString = Util_addressToString(addresses[0]); + Log_fatal("bind %s %d: %s", addressString, Util_addressToPort(addresses[0]), strerror(errno)); + free(addressString); + } val = 0xe0; if (setsockopt(sockets[0], IPPROTO_IP, IP_TOS, &val, sizeof(val)) < 0) Log_warn("Server: Failed to set TOS for UDP Socket"); @@ -277,8 +288,11 @@ void Server_setupUDPSockets(struct sockaddr_storage* addresses[2], struct pollfd sockets[1] = socket(PF_INET6, SOCK_DGRAM, 0); if (setsockopt(sockets[1], IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(int)) != 0) Log_fatal("setsockopt IPv6: %s", strerror(errno)); - if (bind(sockets[1], (struct sockaddr *) addresses[1], sizeof (struct sockaddr_in6)) < 0) - Log_fatal("bind %s %d: %s", Util_addressToString(addresses[1]), Util_addressToPort(addresses[1]), strerror(errno)); + if (bind(sockets[1], (struct sockaddr *) addresses[1], sizeof (struct sockaddr_in6)) < 0) { + char *addressString = Util_addressToString(addresses[1]); + Log_fatal("bind %s %d: %s", addressString, Util_addressToPort(addresses[1]), strerror(errno)); + free(addressString); + } val = 0xe0; if (setsockopt(sockets[1], IPPROTO_IPV6, IPV6_TCLASS, &val, sizeof(val)) < 0) Log_warn("Server: Failed to set TOS for UDP Socket");