From a13d935153d01beb12ffb4842f7c5d2cc2f7d956 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 22 Mar 2021 18:45:31 +0100 Subject: [PATCH] - Reformat pythonmod/pythonmod_utils.{c,h}. --- doc/Changelog | 1 + pythonmod/pythonmod_utils.c | 211 ++++++++++++++++++------------------ pythonmod/pythonmod_utils.h | 52 +++++---- 3 files changed, 140 insertions(+), 124 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 67a53e8f4..dca62e20e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 22 March 2021: George - Fix unused-function warning when compiling with --enable-dnscrypt. - Fix for #367: fix memory leak when cannot bind to listening port. + - Reformat pythonmod/pythonmod_utils.{c,h}. 22 March 2021: Wouter - Merge #449 from orbea: build: Add missing linker flags. diff --git a/pythonmod/pythonmod_utils.c b/pythonmod/pythonmod_utils.c index 9f7282540..21a16bbe8 100644 --- a/pythonmod/pythonmod_utils.c +++ b/pythonmod/pythonmod_utils.c @@ -5,18 +5,18 @@ * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) * * This software is open source. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * + * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * * Neither the name of the organization nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. @@ -56,113 +56,118 @@ #undef _XOPEN_SOURCE #include -/* Store the reply_info and query_info pair in message cache (qstate->msg_cache) */ -int storeQueryInCache(struct module_qstate* qstate, struct query_info* qinfo, struct reply_info* msgrep, int is_referral) +/* Store the reply_info and query_info pair in message cache + * (qstate->msg_cache) */ +int storeQueryInCache(struct module_qstate* qstate, struct query_info* qinfo, + struct reply_info* msgrep, int is_referral) { - if (!msgrep) - return 0; - - if (msgrep->authoritative) /*authoritative answer can't be stored in cache*/ - { - PyErr_SetString(PyExc_ValueError, "Authoritative answer can't be stored"); - return 0; - } + if (!msgrep) + return 0; + + /* authoritative answer can't be stored in cache */ + if (msgrep->authoritative) { + PyErr_SetString(PyExc_ValueError, + "Authoritative answer can't be stored"); + return 0; + } - return dns_cache_store(qstate->env, qinfo, msgrep, is_referral, - qstate->prefetch_leeway, 0, NULL, qstate->query_flags); + return dns_cache_store(qstate->env, qinfo, msgrep, is_referral, + qstate->prefetch_leeway, 0, NULL, qstate->query_flags); } -/* Invalidate the message associated with query_info stored in message cache */ -void invalidateQueryInCache(struct module_qstate* qstate, struct query_info* qinfo) -{ - hashvalue_type h; - struct lruhash_entry* e; - struct reply_info *r; - size_t i, j; - - h = query_info_hash(qinfo, qstate->query_flags); - if ((e=slabhash_lookup(qstate->env->msg_cache, h, qinfo, 0))) - { - r = (struct reply_info*)(e->data); - if (r) - { - r->ttl = 0; - if(rrset_array_lock(r->ref, r->rrset_count, *qstate->env->now)) { - for(i=0; i< r->rrset_count; i++) - { - struct packed_rrset_data* data = - (struct packed_rrset_data*) r->ref[i].key->entry.data; - if(i>0 && r->ref[i].key == r->ref[i-1].key) - continue; - - data->ttl = r->ttl; - for(j=0; jcount + data->rrsig_count; j++) - data->rr_ttl[j] = r->ttl; - } - rrset_array_unlock(r->ref, r->rrset_count); - } +/* Invalidate the message associated with query_info stored in message cache */ +void invalidateQueryInCache(struct module_qstate* qstate, + struct query_info* qinfo) +{ + hashvalue_type h; + struct lruhash_entry* e; + struct reply_info *r; + size_t i, j; + + h = query_info_hash(qinfo, qstate->query_flags); + if ((e=slabhash_lookup(qstate->env->msg_cache, h, qinfo, 0))) { + r = (struct reply_info*)(e->data); + if (r) { + r->ttl = 0; + if(rrset_array_lock(r->ref, r->rrset_count, *qstate->env->now)) { + for(i=0; i< r->rrset_count; i++) { + struct packed_rrset_data* data = + (struct packed_rrset_data*) r->ref[i].key->entry.data; + if(i>0 && r->ref[i].key == r->ref[i-1].key) + continue; + + data->ttl = r->ttl; + for(j=0; jcount + data->rrsig_count; j++) + data->rr_ttl[j] = r->ttl; + } + rrset_array_unlock(r->ref, r->rrset_count); + } + } + lock_rw_unlock(&e->lock); + } else { + log_info("invalidateQueryInCache: qinfo is not in cache"); } - lock_rw_unlock(&e->lock); - } else { - log_info("invalidateQueryInCache: qinfo is not in cache"); - } } /* Create response according to the ldns packet content */ int createResponse(struct module_qstate* qstate, sldns_buffer* pkt) { - struct msg_parse* prs; - struct edns_data edns; - - /* parse message */ - prs = (struct msg_parse*) regional_alloc(qstate->env->scratch, sizeof(struct msg_parse)); - if (!prs) { - log_err("storeResponse: out of memory on incoming message"); - return 0; - } - - memset(prs, 0, sizeof(*prs)); - memset(&edns, 0, sizeof(edns)); - - sldns_buffer_set_position(pkt, 0); - if (parse_packet(pkt, prs, qstate->env->scratch) != LDNS_RCODE_NOERROR) { - verbose(VERB_ALGO, "storeResponse: parse error on reply packet"); - return 0; - } - /* edns is not examined, but removed from message to help cache */ - if(parse_extract_edns(prs, &edns, qstate->env->scratch) != - LDNS_RCODE_NOERROR) - return 0; - - /* remove CD-bit, we asked for in case we handle validation ourself */ - prs->flags &= ~BIT_CD; - - /* allocate response dns_msg in region */ - qstate->return_msg = (struct dns_msg*)regional_alloc(qstate->region, sizeof(struct dns_msg)); - if (!qstate->return_msg) - return 0; - - memset(qstate->return_msg, 0, sizeof(*qstate->return_msg)); - if(!parse_create_msg(pkt, prs, NULL, &(qstate->return_msg)->qinfo, &(qstate->return_msg)->rep, qstate->region)) { - log_err("storeResponse: malloc failure: allocating incoming dns_msg"); - return 0; - } - - /* Make sure that the RA flag is set (since the presence of - * this module means that recursion is available) */ - /* qstate->return_msg->rep->flags |= BIT_RA; */ - - /* Clear the AA flag */ - /* FIXME: does this action go here or in some other module? */ - /*qstate->return_msg->rep->flags &= ~BIT_AA; */ - - /* make sure QR flag is on */ - /*qstate->return_msg->rep->flags |= BIT_QR; */ - - if(verbosity >= VERB_ALGO) - log_dns_msg("storeResponse: packet:", &qstate->return_msg->qinfo, qstate->return_msg->rep); - - return 1; + struct msg_parse* prs; + struct edns_data edns; + + /* parse message */ + prs = (struct msg_parse*) regional_alloc(qstate->env->scratch, + sizeof(struct msg_parse)); + if(!prs) { + log_err("createResponse: out of memory on incoming message"); + return 0; + } + + memset(prs, 0, sizeof(*prs)); + memset(&edns, 0, sizeof(edns)); + + sldns_buffer_set_position(pkt, 0); + if(parse_packet(pkt, prs, qstate->env->scratch) != LDNS_RCODE_NOERROR) { + verbose(VERB_ALGO, "createResponse: parse error on reply packet"); + return 0; + } + /* edns is not examined, but removed from message to help cache */ + if(parse_extract_edns(prs, &edns, qstate->env->scratch) != + LDNS_RCODE_NOERROR) + return 0; + + /* remove CD-bit, we asked for in case we handle validation ourself */ + prs->flags &= ~BIT_CD; + + /* allocate response dns_msg in region */ + qstate->return_msg = (struct dns_msg*) regional_alloc(qstate->region, + sizeof(struct dns_msg)); + if(!qstate->return_msg) + return 0; + + memset(qstate->return_msg, 0, sizeof(*qstate->return_msg)); + if(!parse_create_msg(pkt, prs, NULL, &(qstate->return_msg)->qinfo, + &(qstate->return_msg)->rep, qstate->region)) { + log_err("createResponse: malloc failure: allocating incoming dns_msg"); + return 0; + } + + /* Make sure that the RA flag is set (since the presence of + * this module means that recursion is available) */ + /* qstate->return_msg->rep->flags |= BIT_RA; */ + + /* Clear the AA flag */ + /* FIXME: does this action go here or in some other module? */ + /*qstate->return_msg->rep->flags &= ~BIT_AA; */ + + /* make sure QR flag is on */ + /*qstate->return_msg->rep->flags |= BIT_QR; */ + + if(verbosity >= VERB_ALGO) + log_dns_msg("createResponse: packet:", &qstate->return_msg->qinfo, + qstate->return_msg->rep); + + return 1; } @@ -176,7 +181,7 @@ void reply_addr2str(struct comm_reply* reply, char* dest, int maxlen) sinaddr = &((struct sockaddr_in6*)&(reply->addr))->sin6_addr; dest[0] = 0; if (inet_ntop(af, sinaddr, dest, (socklen_t)maxlen) == 0) - return; + return; dest[maxlen-1] = 0; } @@ -190,6 +195,6 @@ void delegpt_addr_addr2str(struct delegpt_addr* target, char *dest, int maxlen) sinaddr = &((struct sockaddr_in6*)&(target->addr))->sin6_addr; dest[0] = 0; if (inet_ntop(af, sinaddr, dest, (socklen_t)maxlen) == 0) - return; + return; dest[maxlen-1] = 0; } diff --git a/pythonmod/pythonmod_utils.h b/pythonmod/pythonmod_utils.h index 4ea86f9be..3fb0c0d7f 100644 --- a/pythonmod/pythonmod_utils.h +++ b/pythonmod/pythonmod_utils.h @@ -1,22 +1,22 @@ /* * pythonmod_utils.h: utils header file - * + * * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) * * This software is open source. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * + * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * * Neither the name of the organization nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. @@ -46,34 +46,38 @@ struct delegpt_addr; struct sldns_buffer; /** - * Store the reply_info and query_info pair in message cache (qstate->msg_cache) + * Store the reply_info and query_info pair in message cache + * (qstate->msg_cache). * * @param qstate: module environment * @param qinfo: query info, the query for which answer is stored. * @param msgrep: reply in dns_msg * @param is_referral: If true, then the given message to be stored is a - * referral. The cache implementation may use this as a hint. - * It will store only the RRsets, not the message. + * referral. The cache implementation may use this as a hint. + * It will store only the RRsets, not the message. * @return 0 on alloc error (out of memory). */ -int storeQueryInCache(struct module_qstate* qstate, struct query_info* qinfo, struct reply_info* msgrep, int is_referral); +int storeQueryInCache(struct module_qstate* qstate, struct query_info* qinfo, + struct reply_info* msgrep, int is_referral); /** - * Invalidate the message associated with query_info stored in message cache. + * Invalidate the message associated with query_info stored in message cache. * - * This function invalidates the record in message cache associated with the given query only if such a record exists. + * This function invalidates the record in message cache associated with the + * given query only if such a record exists. * * @param qstate: module environment * @param qinfo: query info, the query for which answer is stored. */ -void invalidateQueryInCache(struct module_qstate* qstate, struct query_info* qinfo); +void invalidateQueryInCache(struct module_qstate* qstate, + struct query_info* qinfo); /** - * Create response according to the ldns packet content + * Create response according to the ldns packet content. + * + * This function fills qstate.return_msg up with data of a given packet * - * This function fills qstate.return_msg up with data of a given packet - * * @param qstate: module environment * @param pkt: a sldns_buffer which contains sldns_packet data * @return 0 on failure, out of memory or parse error. @@ -81,14 +85,20 @@ void invalidateQueryInCache(struct module_qstate* qstate, struct query_info* qin int createResponse(struct module_qstate* qstate, struct sldns_buffer* pkt); /** - * Convert reply->addr to string - * @param reply: comm reply with address in it. - * @param dest: destination string. - * @param maxlen: length of string buffer. + * Convert reply->addr to string. + * @param reply: comm reply with address in it. + * @param dest: destination string. + * @param maxlen: length of string buffer. */ void reply_addr2str(struct comm_reply* reply, char* dest, int maxlen); -/* Convert target->addr to string */ -void delegpt_addr_addr2str(struct delegpt_addr* target, char *dest, int maxlen); +/** + * Convert target->addr to string. + * @param target: delegpt_addr with address in it. + * @param dest: destination string. + * @param maxlen: length of string buffer. + */ +void delegpt_addr_addr2str(struct delegpt_addr* target, char *dest, + int maxlen); #endif /* PYTHONMOD_UTILS_H */ -- 2.47.2