{
return (dname_str &&
strlen(dname_str) > 1 &&
- dname_str[strlen(dname_str) - 1] == '.'
+ dname_str[strlen(dname_str) - 1] == '.' &&
+ dname_str[strlen(dname_str) - 2] != '\\'
);
}
cur_rrsigs = ldns_sign_public(cur_rrset, key_list);
ldns_zone_push_rr_list(signed_zone, cur_rrset);
ldns_zone_push_rr_list(signed_zone, cur_rrsigs);
+ } else {
+ /* push it unsigned? */
+ ldns_zone_push_rr_list(signed_zone, cur_rrset);
}
cur_rrset = ldns_rr_list_pop_rrset(signed_zone_rrs);
}
break;
case '\\':
/* octet value or literal char */
- if (isdigit((int) s[1]) &&
+ if (strlen((char *)s) > 3 &&
+ isdigit((int) s[1]) &&
isdigit((int) s[2]) &&
isdigit((int) s[3])) {
/* cast this so it fits */
}
/* add root label if last char was not '.' */
- if (str[strlen(str)-1] != '.') {
+ if (!ldns_dname_str_absolute(str)) {
len += label_len + 1;
*pq = label_len;
*q = 0;
/* s - buf_str works because no magic is done in the above for-loop */
*d = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_DNAME, len, buf);
-
+
return LDNS_STATUS_OK;
}