From 971b4c5937a3b15e9c5ddf55e3c9fb78b1790bbc Mon Sep 17 00:00:00 2001
From: Lubos Slovak <lubos.slovak@nic.cz>
Date: Wed, 28 May 2014 11:23:54 +0200
Subject: [PATCH] axfr: Reviewed axfr.c/.h and fixed small issues.

- Unified function names.
- Added missing parameter checks where necessary.
- Fixed line length.
---
 src/knot/nameserver/axfr.c          | 62 +++++++++++++++++++----------
 src/knot/nameserver/axfr.h          |  2 +-
 src/knot/nameserver/ixfr.c          |  2 +-
 src/knot/nameserver/process_query.c |  2 +-
 4 files changed, 45 insertions(+), 23 deletions(-)

diff --git a/src/knot/nameserver/axfr.c b/src/knot/nameserver/axfr.c
index 28b0d3d486..9beda87040 100644
--- a/src/knot/nameserver/axfr.c
+++ b/src/knot/nameserver/axfr.c
@@ -31,8 +31,11 @@ struct axfr_proc {
 	unsigned cur_rrset;
 };
 
-static int put_rrsets(knot_pkt_t *pkt, zone_node_t *node, struct axfr_proc *state)
+static int axfr_put_rrsets(knot_pkt_t *pkt, zone_node_t *node,
+                           struct axfr_proc *state)
 {
+	assert(node != NULL);
+
 	int ret = KNOT_EOK;
 	int i = state->cur_rrset;
 	uint16_t rrset_count = node->rrset_count;
@@ -57,8 +60,11 @@ static int put_rrsets(knot_pkt_t *pkt, zone_node_t *node, struct axfr_proc *stat
 	return ret;
 }
 
-static int axfr_process_node_tree(knot_pkt_t *pkt, const void *item, struct xfr_proc *state)
+static int axfr_process_node_tree(knot_pkt_t *pkt, const void *item,
+                                  struct xfr_proc *state)
 {
+	assert(item != NULL);
+
 	struct axfr_proc *axfr = (struct axfr_proc*)state;
 
 	if (axfr->i == NULL) {
@@ -68,9 +74,9 @@ static int axfr_process_node_tree(knot_pkt_t *pkt, const void *item, struct xfr_
 	/* Put responses. */
 	int ret = KNOT_EOK;
 	zone_node_t *node = NULL;
-	while(!hattrie_iter_finished(axfr->i)) {
+	while (!hattrie_iter_finished(axfr->i)) {
 		node = (zone_node_t *)*hattrie_iter_val(axfr->i);
-		ret = put_rrsets(pkt, node, axfr);
+		ret = axfr_put_rrsets(pkt, node, axfr);
 		if (ret != KNOT_EOK) {
 			break;
 		}
@@ -124,14 +130,19 @@ static int axfr_query_init(struct query_data *qdata)
 	qdata->ext = axfr;
 	qdata->ext_cleanup = &axfr_query_cleanup;
 
-	/* No zone changes during multipacket answer (unlocked in axfr_answer_cleanup) */
+	/* No zone changes during multipacket answer
+	   (unlocked in axfr_answer_cleanup) */
 	rcu_read_lock();
 
 	return KNOT_EOK;
 }
 
-int xfr_process_list(knot_pkt_t *pkt, xfr_put_cb process_item, struct query_data *qdata)
+int xfr_process_list(knot_pkt_t *pkt, xfr_put_cb process_item,
+                     struct query_data *qdata)
 {
+	if (pkt == NULL || qdata == NULL || qdata->ext == NULL) {
+		return KNOT_EINVAL;
+	}
 
 	int ret = KNOT_EOK;
 	mm_ctx_t *mm = qdata->mm;
@@ -177,10 +188,11 @@ int xfr_process_list(knot_pkt_t *pkt, xfr_put_cb process_item, struct query_data
 #define AXFROUT_LOG(severity, msg...) \
 	QUERY_LOG(severity, qdata, "Outgoing AXFR", msg)
 
-int axfr_query(knot_pkt_t *pkt, struct query_data *qdata)
+int axfr_process_query(knot_pkt_t *pkt, struct query_data *qdata)
 {
-	assert(pkt);
-	assert(qdata);
+	if (pkt == NULL || qdata == NULL) {
+		return KNOT_EINVAL;
+	}
 
 	int ret = KNOT_EOK;
 	struct timeval now = {0};
@@ -197,14 +209,17 @@ int axfr_query(knot_pkt_t *pkt, struct query_data *qdata)
 		/* Check valid zone, transaction security and contents. */
 		NS_NEED_ZONE(qdata, KNOT_RCODE_NOTAUTH);
 		NS_NEED_AUTH(&qdata->zone->conf->acl.xfr_out, qdata);
-		NS_NEED_ZONE_CONTENTS(qdata, KNOT_RCODE_SERVFAIL); /* Check expiration. */
+		/* Check expiration. */
+		NS_NEED_ZONE_CONTENTS(qdata, KNOT_RCODE_SERVFAIL);
 
 		ret = axfr_query_init(qdata);
 		if (ret != KNOT_EOK) {
-			AXFROUT_LOG(LOG_ERR, "Failed to start (%s).", knot_strerror(ret));
+			AXFROUT_LOG(LOG_ERR, "Failed to start (%s).",
+			            knot_strerror(ret));
 			return ret;
 		} else {
-			AXFROUT_LOG(LOG_INFO, "Started (serial %u).", zone_contents_serial(qdata->zone->contents));
+			AXFROUT_LOG(LOG_INFO, "Started (serial %u).",
+			           zone_contents_serial(qdata->zone->contents));
 		}
 	}
 
@@ -219,9 +234,9 @@ int axfr_query(knot_pkt_t *pkt, struct query_data *qdata)
 		return NS_PROC_FULL; /* Check for more. */
 	case KNOT_EOK:    /* Last response. */
 		gettimeofday(&now, NULL);
-		AXFROUT_LOG(LOG_INFO, "Finished in %.02fs (%u messages, ~%.01fkB).",
-		         time_diff(&axfr->proc.tstamp, &now) / 1000.0,
-		         axfr->proc.npkts, axfr->proc.nbytes / 1024.0);
+		AXFROUT_LOG(LOG_INFO, "Finished in %.02fs (%u messages, ~%.01f"
+		           "kB).", time_diff(&axfr->proc.tstamp, &now) / 1000.0,
+		           axfr->proc.npkts, axfr->proc.nbytes / 1024.0);
 		return NS_PROC_DONE;
 		break;
 	default:          /* Generic error. */
@@ -233,6 +248,8 @@ int axfr_query(knot_pkt_t *pkt, struct query_data *qdata)
 
 static void axfr_answer_cleanup(struct answer_data *data)
 {
+	assert(data != NULL);
+
 	struct xfr_proc *proc = data->ext;
 	if (proc) {
 		zone_contents_deep_free(&proc->contents);
@@ -291,13 +308,15 @@ static int axfr_answer_finalize(struct answer_data *data)
 
 	/* Write zone file. */
 	zone_t *zone = data->param->zone;
-	rc = zonefile_write(zone->conf->file, proc->contents, data->param->remote);
+	rc = zonefile_write(zone->conf->file, proc->contents,
+	                    data->param->remote);
 	if (rc != KNOT_EOK) {
 		return rc;
 	}
 
 	/* Switch contents. */
-	zone_contents_t *old_contents = zone_switch_contents(zone, proc->contents);
+	zone_contents_t *old_contents =
+	                zone_switch_contents(zone, proc->contents);
 	synchronize_rcu();
 	AXFRIN_LOG(LOG_INFO, "Serial %u -> %u",
 	           zone_contents_serial(old_contents),
@@ -316,9 +335,8 @@ static int axfr_answer_finalize(struct answer_data *data)
 
 static int process_axfr_packet(knot_pkt_t *pkt, struct xfr_proc *proc)
 {
-	if (pkt == NULL) {
-		return NS_PROC_FAIL;
-	}
+	assert(pkt != NULL);
+	assert(proc != NULL);
 
 	++proc->npkts;
 
@@ -344,6 +362,10 @@ static int process_axfr_packet(knot_pkt_t *pkt, struct xfr_proc *proc)
 
 int axfr_process_answer(knot_pkt_t *pkt, struct answer_data *data)
 {
+	if (pkt == NULL || data == NULL) {
+		return NS_PROC_FAIL;
+	}
+
 	/* Initialize processing with first packet. */
 	if (data->ext == NULL) {
 		NS_NEED_TSIG_SIGNED(&data->param->tsig_ctx, 0);
diff --git a/src/knot/nameserver/axfr.h b/src/knot/nameserver/axfr.h
index 1be08c583b..d58c7071a9 100644
--- a/src/knot/nameserver/axfr.h
+++ b/src/knot/nameserver/axfr.h
@@ -58,7 +58,7 @@ int xfr_process_list(knot_pkt_t *pkt, xfr_put_cb put, struct query_data *qdata);
  * \retval FAIL if it encountered an error.
  * \retval DONE if finished.
  */
-int axfr_query(knot_pkt_t *pkt, struct query_data *qdata);
+int axfr_process_query(knot_pkt_t *pkt, struct query_data *qdata);
 
 /*!
  * \brief Processes an AXFR query response.
diff --git a/src/knot/nameserver/ixfr.c b/src/knot/nameserver/ixfr.c
index eac0fa42f8..4e31b32f16 100644
--- a/src/knot/nameserver/ixfr.c
+++ b/src/knot/nameserver/ixfr.c
@@ -591,7 +591,7 @@ int ixfr_query(knot_pkt_t *pkt, struct query_data *qdata)
 		case KNOT_ENOENT:
 			IXFROUT_LOG(LOG_INFO, "Incomplete history, fallback to AXFR.");
 			qdata->packet_type = KNOT_QUERY_AXFR; /* Solve as AXFR. */
-			return axfr_query(pkt, qdata);
+			return axfr_process_query(pkt, qdata);
 		default:            /* Server errors. */
 			IXFROUT_LOG(LOG_ERR, "Failed to start (%s).", knot_strerror(ret));
 			return NS_PROC_FAIL;
diff --git a/src/knot/nameserver/process_query.c b/src/knot/nameserver/process_query.c
index df7afbda36..80fd2cc2e2 100644
--- a/src/knot/nameserver/process_query.c
+++ b/src/knot/nameserver/process_query.c
@@ -390,7 +390,7 @@ static int query_internet(knot_pkt_t *pkt, knot_process_t *ctx)
 		next_state = notify_query(pkt, data);
 		break;
 	case KNOT_QUERY_AXFR:
-		next_state = axfr_query(pkt, data);
+		next_state = axfr_process_query(pkt, data);
 		break;
 	case KNOT_QUERY_IXFR:
 		next_state = ixfr_query(pkt, data);
-- 
GitLab