Esempio n. 1
0
void
nsec3_icmtl_replay_label_add(nsec3_icmtl_replay *replay, const u8 *fqdn, dnslabel_vector_reference labels, s32 label_top)
{
    zdb_rr_label *rr_label = zdb_rr_label_add(replay->zone, labels, label_top);

    u16 flags = rr_label->flags;

    if((flags & ZDB_RR_LABEL_UNDERDELEGATION) == 0) /** @todo !zdb_rr_label_is_glue(label) */
    {
        /* APEX or NS+DS */

        if( ((flags & ZDB_RR_LABEL_APEX) != 0) ||
            (((flags & ZDB_RR_LABEL_DELEGATION) != 0) && (zdb_record_find(&rr_label->resource_record_set, TYPE_DS) != NULL) ) )
        {
            treeset_node *node = treeset_avl_insert(&replay->nsec3_labels, (u8*)fqdn);

            if(node->data == NULL)
            {
#ifndef NDEBUG
                log_debug("journal: NSEC3: queue: %{dnsname} for NSEC3 update", fqdn);
#endif
                node->key = dnsname_dup(fqdn);
                node->data = rr_label;
            }
        }
    }
}
Esempio n. 2
0
void nsec3_icmtl_replay_nsec3param_add(nsec3_icmtl_replay *replay, const zdb_ttlrdata *ttlrdata)
{
    assert(ttlrdata->next == NULL);
    
    treeset_node *node = treeset_avl_find(&replay->nsec3param_add, ttlrdata->rdata_pointer);
    
    if(node == NULL)
    {
        zdb_ttlrdata* clone = zdb_ttlrdata_clone(ttlrdata);
        
        treeset_node *node = treeset_avl_insert(&replay->nsec3param_add, clone->rdata_pointer);
        node->data = clone;
        
        /* If the node was previously deleted, don't delete it anymore */
        
        treeset_node *added_node = treeset_avl_find(&replay->nsec3param_del, ttlrdata->rdata_pointer);
        
        if(added_node != NULL)
        {
            treeset_avl_delete(&replay->nsec3param_del, ttlrdata->rdata_pointer);

            zdb_ttlrdata* nsec3param = (zdb_ttlrdata*)added_node->data;
            treeset_avl_delete(&replay->nsec3param_del, nsec3param->rdata_pointer);
            zdb_ttlrdata_delete(nsec3param);
        }
    }
}
Esempio n. 3
0
void
nsec_icmtl_replay_nsec_add(nsec_icmtl_replay *replay, const u8* fqdn)
{
    treeset_node *node = treeset_avl_insert(&replay->nsec_add, (u8*)fqdn);

    node->key = dnsname_dup(fqdn);
    node->data = NULL;
}
Esempio n. 4
0
void nsec3_icmtl_replay_nsec3_add(nsec3_icmtl_replay *replay, const u8* fqdn, const zdb_ttlrdata *ttlrdata)
{
    assert(ttlrdata->next == NULL);
    
    treeset_node *node = treeset_avl_insert(&replay->nsec3_add, (u8*)fqdn);
    if(node->data == NULL)
    {
        node->key = dnsname_dup(fqdn);
        node->data = zdb_ttlrdata_clone(ttlrdata);
    }
    else
    {
        zdb_ttlrdata_delete(node->data);
        node->data = zdb_ttlrdata_clone(ttlrdata);
    }
}
Esempio n. 5
0
void nsec3_icmtl_replay_nsec3_rrsig_del(nsec3_icmtl_replay *replay, const u8* fqdn, const zdb_ttlrdata *ttlrdata)
{
    assert(ttlrdata->next == NULL);

    treeset_node *node = treeset_avl_insert(&replay->nsec3rrsig_del, (u8*)fqdn);
    if(node->data == NULL)
    {
        node->key = dnsname_dup(fqdn);
        node->data = zdb_ttlrdata_clone(ttlrdata);
    }
    else
    {
        //zdb_ttlrdata_delete(node->data);
        zdb_ttlrdata *newone = zdb_ttlrdata_clone(ttlrdata);
        newone->next = (zdb_ttlrdata*)node->data;
        node->data = newone;
    }
}
Esempio n. 6
0
void nsec3_icmtl_replay_nsec3_rrsig_add(nsec3_icmtl_replay *replay, const u8* fqdn, zdb_packed_ttlrdata *packed_ttlrdata)
{
    treeset_node *node = treeset_avl_insert(&replay->nsec3rrsig_add, (u8*)fqdn);
    
    if(node->data == NULL)
    {
        node->key = dnsname_dup(fqdn);
        node->data = packed_ttlrdata;
    }
    else
    {
        //zdb_ttlrdata_delete(node->data);

        zdb_packed_ttlrdata **nsec3_rrsig_ptr = (zdb_packed_ttlrdata **)&node->data;
        zdb_packed_ttlrdata *nsec3_rrsig = (zdb_packed_ttlrdata *)node->data;

        while(nsec3_rrsig != NULL)
        {
            if((nsec3_rrsig->rdata_size == packed_ttlrdata->rdata_size) && (RRSIG_KEY_NATIVETAG(nsec3_rrsig) == RRSIG_KEY_NATIVETAG(packed_ttlrdata)))
            {
                /* got a match ? */
                
                if(memcmp(&nsec3_rrsig->rdata_start[0], &packed_ttlrdata->rdata_start[0], nsec3_rrsig->rdata_size) == 0)
                {
                    /* got a match ! delete the previous one (?) */
                    packed_ttlrdata->next = nsec3_rrsig->next;
                    ZDB_RECORD_ZFREE(nsec3_rrsig);
                    break;
                }
            }
            
            nsec3_rrsig_ptr = &nsec3_rrsig->next;
            nsec3_rrsig = nsec3_rrsig->next;
        }
        
        *nsec3_rrsig_ptr = packed_ttlrdata;
    }
}