]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
fixed bug in dname reading (dnames ending in \. were botched)
authorJelte Jansen <jeltejan@NLnetLabs.nl>
Wed, 17 Aug 2005 14:20:42 +0000 (14:20 +0000)
committerJelte Jansen <jeltejan@NLnetLabs.nl>
Wed, 17 Aug 2005 14:20:42 +0000 (14:20 +0000)
dname.c
dnssec.c
str2host.c

diff --git a/dname.c b/dname.c
index b20b37630be7334ffbdf44dc1c28cd1da931e286..8b310dc68881e2adcb05e77afac8927e0c8a153b 100644 (file)
--- a/dname.c
+++ b/dname.c
@@ -215,7 +215,8 @@ ldns_dname_str_absolute(const char *dname_str)
 {
        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] != '\\'
               );
 }
 
index cb21837420228fb81ffc3ec931d7ac5648aa8249..57dc2098fa6906acd159f5a1d5316527850b2b47 100644 (file)
--- a/dnssec.c
+++ b/dnssec.c
@@ -1461,6 +1461,9 @@ ldns_zone_sign(ldns_zone *zone, ldns_key_list *key_list)
                        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);
        }
index 87bd269fcb65b829a6e7bec0eb1137e408796dba..fae2930261ebdb2795b00ef15c20d75362336687 100644 (file)
@@ -203,7 +203,8 @@ ldns_str2rdf_dname(ldns_rdf **d, const char *str)
                        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 */
@@ -225,7 +226,7 @@ ldns_str2rdf_dname(ldns_rdf **d, const char *str)
        }
 
        /* 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;
@@ -234,7 +235,7 @@ ldns_str2rdf_dname(ldns_rdf **d, const char *str)
 
        /* 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;
 }