Skip to content
Snippets Groups Projects
Commit a3f3536f authored by Jan Kadlec's avatar Jan Kadlec
Browse files

new_node: misc fixes, mostly leaks.

parent b9a6924c
Branches
Tags
No related merge requests found
......@@ -199,24 +199,29 @@ static int cmd_remote(const char *cmd, uint16_t rrt, int argc, char *argv[])
/* Build query data. */
knot_pkt_begin(pkt, KNOT_AUTHORITY);
knot_rrset_t *rr = NULL;
if (argc > 0) {
rr = remote_build_rr("data.", rrt);
knot_rrset_t rr;
int res = remote_build_rr(&rr, "data.", rrt);
if (res != KNOT_EOK) {
log_server_error("Couldn't create the query.\n");
knot_pkt_free(&pkt);
return 1;
}
for (int i = 0; i < argc; ++i) {
switch(rrt) {
case KNOT_RRTYPE_NS:
remote_create_ns(rr, argv[i]);
remote_create_ns(&rr, argv[i]);
break;
case KNOT_RRTYPE_TXT:
default:
remote_create_txt(rr, argv[i], strlen(argv[i]));
remote_create_txt(&rr, argv[i], strlen(argv[i]));
break;
}
}
int res = knot_pkt_put(pkt, 0, rr, KNOT_PF_FREE);
res = knot_pkt_put(pkt, 0, &rr, KNOT_PF_FREE);
if (res != KNOT_EOK) {
log_server_error("Couldn't create the query.\n");
knot_rrset_free(&rr, NULL);
knot_rrset_clear(&rr, NULL);
knot_pkt_free(&pkt);
return 1;
}
......
......@@ -500,18 +500,18 @@ static int remote_send_chunk(int c, knot_pkt_t *query, const char* d, uint16_t l
assert(ret == KNOT_EOK);
/* Create TXT RR with result. */
knot_rrset_t *rr = remote_build_rr("result.", KNOT_RRTYPE_TXT);
if (rr == NULL) {
ret = KNOT_ENOMEM;
knot_rrset_t rr;
ret = remote_build_rr(&rr, "result.", KNOT_RRTYPE_TXT);
if (ret != KNOT_EOK) {
goto failed;
}
ret = remote_create_txt(rr, d, len);
ret = remote_create_txt(&rr, d, len);
assert(ret == KNOT_EOK);
ret = knot_pkt_put(resp, 0, rr, KNOT_PF_FREE);
ret = knot_pkt_put(resp, 0, &rr, KNOT_PF_FREE);
if (ret != KNOT_EOK) {
knot_rrset_free(&rr, NULL);
knot_rrset_clear(&rr, NULL);
goto failed;
}
......@@ -770,24 +770,22 @@ int remote_query_sign(uint8_t *wire, size_t *size, size_t maxlen,
return ret;
}
knot_rrset_t* remote_build_rr(const char *k, uint16_t t)
int remote_build_rr(knot_rrset_t *rr, const char *k, uint16_t t)
{
if (!k) {
return NULL;
return KNOT_EINVAL;
}
/* Assert K is FQDN. */
knot_dname_t *key = knot_dname_from_str(k);
if (key == NULL) {
return NULL;
return KNOT_ENOMEM;
}
/* Create RRSet. */
knot_rrset_t *rr = knot_rrset_new(key, t, KNOT_CLASS_CH, NULL);
if (rr == NULL)
knot_dname_free(&key, NULL);
/* Init RRSet. */
knot_rrset_init(rr, key, t, KNOT_CLASS_CH);
return rr;
return KNOT_EOK;
}
int remote_create_txt(knot_rrset_t *rr, const char *v, size_t v_len)
......
......@@ -161,7 +161,7 @@ int remote_query_sign(uint8_t *wire, size_t *size, size_t maxlen,
*
* \return created RR set or NULL.
*/
knot_rrset_t* remote_build_rr(const char *k, uint16_t t);
int remote_build_rr(knot_rrset_t *rr, const char *k, uint16_t t);
/*!
* \brief Create a TXT rdata.
......
......@@ -30,11 +30,12 @@
/* - Forward declarations --------------------------------------------------- */
static knot_rrset_t *create_nsec3_rrset(knot_dname_t *,
const knot_nsec3_params_t *,
const bitmap_t *,
const uint8_t *,
uint32_t);
static int create_nsec3_rrset(knot_rrset_t *rrset,
knot_dname_t *dname,
const knot_nsec3_params_t *,
const bitmap_t *,
const uint8_t *,
uint32_t);
/* - Helper functions ------------------------------------------------------- */
......@@ -249,32 +250,30 @@ static void nsec3_fill_rdata(uint8_t *rdata, const knot_nsec3_params_t *params,
*
* \return Pointer to created RRSet on success, NULL on errors.
*/
static knot_rrset_t *create_nsec3_rrset(knot_dname_t *owner,
const knot_nsec3_params_t *params,
const bitmap_t *rr_types,
const uint8_t *next_hashed,
uint32_t ttl)
static int create_nsec3_rrset(knot_rrset_t *rrset,
knot_dname_t *owner,
const knot_nsec3_params_t *params,
const bitmap_t *rr_types,
const uint8_t *next_hashed,
uint32_t ttl)
{
assert(rrset);
assert(owner);
assert(params);
assert(rr_types);
knot_rrset_t *rrset;
rrset = knot_rrset_new(owner, KNOT_RRTYPE_NSEC3, KNOT_CLASS_IN, NULL);
if (!rrset) {
return NULL;
}
knot_rrset_init(rrset, owner, KNOT_RRTYPE_NSEC3, KNOT_CLASS_IN);
size_t rdata_size = nsec3_rdata_size(params, rr_types);
uint8_t *rdata = knot_rrset_create_rr(rrset, rdata_size, ttl, NULL);
if (!rdata) {
knot_rrset_free(&rrset, NULL);
return NULL;
knot_rrset_clear(rrset, NULL);
return KNOT_ENOMEM;
}
nsec3_fill_rdata(rdata, params, rr_types, next_hashed, ttl);
return rrset;
return KNOT_EOK;
}
/*!
......@@ -297,16 +296,17 @@ static knot_node_t *create_nsec3_node(knot_dname_t *owner,
return NULL;
}
knot_rrset_t *nsec3_rrset;
nsec3_rrset = create_nsec3_rrset(owner, nsec3_params,
rr_types, NULL, ttl);
if (!nsec3_rrset) {
knot_rrset_t nsec3_rrset;
int ret = create_nsec3_rrset(&nsec3_rrset, owner, nsec3_params,
rr_types, NULL, ttl);
if (ret != KNOT_EOK) {
knot_node_free(&new_node);
return NULL;
}
if (knot_node_add_rrset_no_merge(new_node, nsec3_rrset) != KNOT_EOK) {
knot_rrset_free(&nsec3_rrset, NULL);
ret = knot_node_add_rrset_no_merge(new_node, &nsec3_rrset);
knot_rrset_clear(&nsec3_rrset, NULL);
if (ret != KNOT_EOK) {
knot_node_free(&new_node);
return NULL;
}
......
......@@ -421,13 +421,11 @@ static int rrset_deserialize_rr(knot_rrset_t *rrset,
void knot_rrset_init(knot_rrset_t *rrset, knot_dname_t *owner, uint16_t type,
uint16_t rclass)
{
if (rrset) {
rrset->owner = owner;
rrset->type = type;
rrset->rclass = rclass;
knot_rrs_init(&rrset->rrs);
rrset->additional = NULL;
}
rrset->owner = owner;
rrset->type = type;
rrset->rclass = rclass;
knot_rrs_init(&rrset->rrs);
rrset->additional = NULL;
}
knot_rrset_t *knot_rrset_new(knot_dname_t *owner, uint16_t type,
......@@ -846,10 +844,6 @@ void knot_rrset_free(knot_rrset_t **rrset, mm_ctx_t *mm)
void knot_rrset_clear(knot_rrset_t *rrset, mm_ctx_t *mm)
{
if (rrset == NULL) {
return;
}
rrset_deep_free_content(rrset, mm);
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment