diff --git a/src/datastructure.c b/src/datastructure.c index af6b1cc1..e1aa775a 100644 --- a/src/datastructure.c +++ b/src/datastructure.c @@ -319,13 +319,13 @@ void change_clientcount(clientsData *client, int total, int blocked, int overTim } } -int findCacheID(int domainID, int clientID, enum query_types query_type) +int _findCacheID(int domainID, int clientID, enum query_types query_type, const char *func, int line, const char *file) { // Compare content of client against known client IP addresses for(int cacheID = 0; cacheID < counters->dns_cache_size; cacheID++) { // Get cache pointer - DNSCacheData* dns_cache = getDNSCache(cacheID, true); + DNSCacheData* dns_cache = _getDNSCache(cacheID, true, line, func, file); // Check if the returned pointer is valid before trying to access it if(dns_cache == NULL) @@ -343,7 +343,7 @@ int findCacheID(int domainID, int clientID, enum query_types query_type) const int cacheID = counters->dns_cache_size; // Get client pointer - DNSCacheData* dns_cache = getDNSCache(cacheID, false); + DNSCacheData* dns_cache = _getDNSCache(cacheID, false, line, func, file); if(dns_cache == NULL) { @@ -563,7 +563,7 @@ static const char *query_status_str[QUERY_STATUS_MAX] = { "SPECIAL_DOMAIN" }; -void _query_set_status(queriesData *query, const enum query_status new_status, const char *file, const int line) +void _query_set_status(queriesData *query, const enum query_status new_status, const char *func, const int line, const char *file) { // Debug logging if(config.debug & DEBUG_STATUS) @@ -571,14 +571,14 @@ void _query_set_status(queriesData *query, const enum query_status new_status, c const char *oldstr = query->status < QUERY_STATUS_MAX ? query_status_str[query->status] : "INVALID"; if(query->status == new_status) { - logg("Query %i: status unchanged: %s (%d) in %s:%i", - query->id, oldstr, query->status, short_path(file), line); + logg("Query %i: status unchanged: %s (%d) in %s() (%s:%i)", + query->id, oldstr, query->status, func, short_path(file), line); } else { const char *newstr = new_status < QUERY_STATUS_MAX ? query_status_str[new_status] : "INVALID"; - logg("Query %i: status changed: %s (%d) -> %s (%d) in %s:%i", - query->id, oldstr, query->status, newstr, new_status, short_path(file), line); + logg("Query %i: status changed: %s (%d) -> %s (%d) in %s() (%s:%i)", + query->id, oldstr, query->status, newstr, new_status, func, short_path(file), line); } } diff --git a/src/datastructure.h b/src/datastructure.h index 98876cc1..e1ef2779 100644 --- a/src/datastructure.h +++ b/src/datastructure.h @@ -113,13 +113,14 @@ int findQueryID(const int id); int findUpstreamID(const char * upstream, const in_port_t port); int findDomainID(const char *domain, const bool count); int findClientID(const char *client, const bool count, const bool aliasclient); -int findCacheID(int domainID, int clientID, enum query_types query_type); +#define findCacheID(domainID, clientID, query_type) _findCacheID(domainID, clientID, query_type, __FUNCTION__, __LINE__, __FILE__) +int _findCacheID(int domainID, int clientID, enum query_types query_type, const char *func, const int line, const char *file); bool isValidIPv4(const char *addr); bool isValidIPv6(const char *addr); bool is_blocked(const enum query_status status) __attribute__ ((const)); -#define query_set_status(query, new_status) _query_set_status(query, new_status, __FILE__, __LINE__) -void _query_set_status(queriesData *query, const enum query_status new_status, const char *file, const int line); +#define query_set_status(query, new_status) _query_set_status(query, new_status, __FUNCTION__, __LINE__, __FILE__) +void _query_set_status(queriesData *query, const enum query_status new_status, const char *func, const int line, const char *file); void FTL_reload_all_domainlists(void); void FTL_reset_per_client_domain_data(void); @@ -135,14 +136,14 @@ const char *get_query_reply_str(const enum reply_type query) __attribute__ ((con // Pointer getter functions #define getQuery(queryID, checkMagic) _getQuery(queryID, checkMagic, __LINE__, __FUNCTION__, __FILE__) -queriesData* _getQuery(int queryID, bool checkMagic, int line, const char * function, const char * file); +queriesData* _getQuery(int queryID, bool checkMagic, int line, const char *func, const char *file); #define getClient(clientID, checkMagic) _getClient(clientID, checkMagic, __LINE__, __FUNCTION__, __FILE__) -clientsData* _getClient(int clientID, bool checkMagic, int line, const char * function, const char * file); +clientsData* _getClient(int clientID, bool checkMagic, int line, const char *func, const char *file); #define getDomain(domainID, checkMagic) _getDomain(domainID, checkMagic, __LINE__, __FUNCTION__, __FILE__) -domainsData* _getDomain(int domainID, bool checkMagic, int line, const char * function, const char * file); +domainsData* _getDomain(int domainID, bool checkMagic, int line, const char *func, const char *file); #define getUpstream(upstreamID, checkMagic) _getUpstream(upstreamID, checkMagic, __LINE__, __FUNCTION__, __FILE__) -upstreamsData* _getUpstream(int upstreamID, bool checkMagic, int line, const char * function, const char * file); +upstreamsData* _getUpstream(int upstreamID, bool checkMagic, int line, const char *func, const char *file); #define getDNSCache(cacheID, checkMagic) _getDNSCache(cacheID, checkMagic, __LINE__, __FUNCTION__, __FILE__) -DNSCacheData* _getDNSCache(int cacheID, bool checkMagic, int line, const char * function, const char * file); +DNSCacheData* _getDNSCache(int cacheID, bool checkMagic, int line, const char *func, const char *file); #endif //DATASTRUCTURE_H diff --git a/src/shmem.c b/src/shmem.c index 648b3f44..01d94b7b 100644 --- a/src/shmem.c +++ b/src/shmem.c @@ -999,16 +999,13 @@ void set_per_client_regex(const int clientID, const int regexID, const bool valu ((bool*) shm_per_client_regex.ptr)[id] = value; } -static inline bool check_range(int ID, int MAXID, const char* type, int line, const char * function, const char * file) +static inline bool check_range(int ID, int MAXID, const char* type, const char *func, int line, const char *file) { // Check bounds if(ID < 0 || ID > MAXID) { - if(config.debug) - { - logg("ERROR: Trying to access %s ID %i, but maximum is %i", type, ID, MAXID); - logg(" found in %s() (%s:%i)", function, file, line); - } + logg("ERROR: Trying to access %s ID %i, but maximum is %i", type, ID, MAXID); + logg(" found in %s() (%s:%i)", func, short_path(file), line); return false; } @@ -1016,16 +1013,13 @@ static inline bool check_range(int ID, int MAXID, const char* type, int line, co return true; } -static inline bool check_magic(int ID, bool checkMagic, unsigned char magic, const char* type, int line, const char * function, const char * file) +static inline bool check_magic(int ID, bool checkMagic, unsigned char magic, const char *type, const char *func, int line, const char *file) { // Check magic only if requested (skipped for new entries which are uninitialized) if(checkMagic && magic != MAGICBYTE) { - if(config.debug) - { - logg("ERROR: Trying to access %s ID %i, but magic byte is %x", type, ID, magic); - logg(" found in %s() (%s:%i)", function, file, line); - } + logg("ERROR: Trying to access %s ID %i, but magic byte is %x", type, ID, magic); + logg(" found in %s() (%s:%i)", func, short_path(file), line); return false; } @@ -1033,7 +1027,7 @@ static inline bool check_magic(int ID, bool checkMagic, unsigned char magic, con return true; } -queriesData* _getQuery(int queryID, bool checkMagic, int line, const char * function, const char * file) +queriesData* _getQuery(int queryID, bool checkMagic, int line, const char *func, const char *file) { // This does not exist, return a NULL pointer if(queryID == -1) @@ -1043,19 +1037,19 @@ queriesData* _getQuery(int queryID, bool checkMagic, int line, const char * func if(config.debug & DEBUG_LOCKS && !is_our_lock()) { logg("ERROR: Tried to obtain query pointer without lock in %s() (%s:%i)!", - function, file, line); + func, short_path(file), line); generate_backtrace(); return NULL; } - if(check_range(queryID, counters->queries_MAX, "query", line, function, file) && - check_magic(queryID, checkMagic, queries[queryID].magic, "query", line, function, file)) + if(check_range(queryID, counters->queries_MAX, "query", func, line, file) && + check_magic(queryID, checkMagic, queries[queryID].magic, "query", func, line, file)) return &queries[queryID]; else return NULL; } -clientsData* _getClient(int clientID, bool checkMagic, int line, const char * function, const char * file) +clientsData* _getClient(int clientID, bool checkMagic, int line, const char *func, const char *file) { // This does not exist, we return a NULL pointer if(clientID == -1) @@ -1065,19 +1059,19 @@ clientsData* _getClient(int clientID, bool checkMagic, int line, const char * fu if(config.debug & DEBUG_LOCKS && !is_our_lock()) { logg("ERROR: Tried to obtain client pointer without lock in %s() (%s:%i)!", - function, file, line); + func, short_path(file), line); generate_backtrace(); return NULL; } - if(check_range(clientID, counters->clients_MAX, "client", line, function, file) && - check_magic(clientID, checkMagic, clients[clientID].magic, "client", line, function, file)) + if(check_range(clientID, counters->clients_MAX, "client", func, line, file) && + check_magic(clientID, checkMagic, clients[clientID].magic, "client", func, line, file)) return &clients[clientID]; else return NULL; } -domainsData* _getDomain(int domainID, bool checkMagic, int line, const char * function, const char * file) +domainsData* _getDomain(int domainID, bool checkMagic, int line, const char *func, const char *file) { // This does not exist, we return a NULL pointer if(domainID == -1) @@ -1087,19 +1081,19 @@ domainsData* _getDomain(int domainID, bool checkMagic, int line, const char * fu if(config.debug & DEBUG_LOCKS && !is_our_lock()) { logg("ERROR: Tried to obtain domain pointer without lock in %s() (%s:%i)!", - function, file, line); + func, short_path(file), line); generate_backtrace(); return NULL; } - if(check_range(domainID, counters->domains_MAX, "domain", line, function, file) && - check_magic(domainID, checkMagic, domains[domainID].magic, "domain", line, function, file)) + if(check_range(domainID, counters->domains_MAX, "domain", func, line, file) && + check_magic(domainID, checkMagic, domains[domainID].magic, "domain", func, line, file)) return &domains[domainID]; else return NULL; } -upstreamsData* _getUpstream(int upstreamID, bool checkMagic, int line, const char * function, const char * file) +upstreamsData* _getUpstream(int upstreamID, bool checkMagic, int line, const char *func, const char *file) { // This does not exist, we return a NULL pointer if(upstreamID == -1) @@ -1109,19 +1103,19 @@ upstreamsData* _getUpstream(int upstreamID, bool checkMagic, int line, const cha if(config.debug & DEBUG_LOCKS && !is_our_lock()) { logg("ERROR: Tried to obtain upstream pointer without lock in %s() (%s:%i)!", - function, file, line); + func, short_path(file), line); generate_backtrace(); return NULL; } - if(check_range(upstreamID, counters->upstreams_MAX, "upstream", line, function, file) && - check_magic(upstreamID, checkMagic, upstreams[upstreamID].magic, "upstream", line, function, file)) + if(check_range(upstreamID, counters->upstreams_MAX, "upstream", func, line, file) && + check_magic(upstreamID, checkMagic, upstreams[upstreamID].magic, "upstream", func, line, file)) return &upstreams[upstreamID]; else return NULL; } -DNSCacheData* _getDNSCache(int cacheID, bool checkMagic, int line, const char * function, const char * file) +DNSCacheData* _getDNSCache(int cacheID, bool checkMagic, int line, const char *func, const char *file) { // This does not exist, we return a NULL pointer if(cacheID == -1) @@ -1131,13 +1125,13 @@ DNSCacheData* _getDNSCache(int cacheID, bool checkMagic, int line, const char * if(config.debug & DEBUG_LOCKS && !is_our_lock()) { logg("ERROR: Tried to obtain cache pointer without lock in %s() (%s:%i)!", - function, file, line); + func, short_path(file), line); generate_backtrace(); return NULL; } - if(check_range(cacheID, counters->dns_cache_MAX, "dns_cache", line, function, file) && - check_magic(cacheID, checkMagic, dns_cache[cacheID].magic, "dns_cache", line, function, file)) + if(check_range(cacheID, counters->dns_cache_MAX, "dns_cache", func, line, file) && + check_magic(cacheID, checkMagic, dns_cache[cacheID].magic, "dns_cache", func, line, file)) return &dns_cache[cacheID]; else return NULL;