]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
added some convenience functions
authorJelte Jansen <jeltejan@NLnetLabs.nl>
Tue, 26 Jul 2005 08:46:08 +0000 (08:46 +0000)
committerJelte Jansen <jeltejan@NLnetLabs.nl>
Tue, 26 Jul 2005 08:46:08 +0000 (08:46 +0000)
Makefile.in
ldns/str2host.h
resolver.c
str2host.c
util.c

index 0613446765c83bd4df5a604041f73333afe61be6..fd2ba8e1ba45f422dce9f160d91fbd5836de8be8 100644 (file)
@@ -146,8 +146,6 @@ clean:
        rm -f tests/*.o
        rm -f $(PROG_TARGETS)
        rm -rf autom4te.cache/
-       rm -f config.status
-       rm -f config.log
        rm -f tags
 
 realclean: clean docclean libclean
index 004a083dc1c5304f262d4ee3c22f1f8bfb116d7f..107863dab63915b587c350db87dbff03d6c8c5bd 100644 (file)
 #include <ldns/buffer.h>
 #include <ctype.h>
 
+/**
+ * Returns true if the given string represent an IPv4 address
+ */
+bool ldns_is_ipv4_addr(const char *str);
+
+/**
+ * Returns true if the given string represent an IPv6 address
+ */
+bool ldns_is_ipv6_addr(const char *str);
+
 /**
  * convert a byte into wireformat
  * \param[in] rd the rdf where to put the data
index 1cc2d5457d28b7f862da8159505231df99179ac0..105f9dc69f5094f3b91a6c33434e75c82c24dc79 100644 (file)
@@ -590,14 +590,14 @@ ldns_resolver_deep_free(ldns_resolver *res)
                        for (i = 0; i < res->_searchlist_count; i++) {
                                ldns_rdf_deep_free(res->_searchlist[i]);
                        }
+                       LDNS_FREE(res->_searchlist);
                }
                if (res->_nameservers) {
                        for (i = 0; i < res->_nameserver_count; i++) {
                                ldns_rdf_deep_free(res->_nameservers[i]);
                        }
+                       LDNS_FREE(res->_nameservers);
                }
-               LDNS_FREE(res->_searchlist);
-               LDNS_FREE(res->_nameservers);
                if (ldns_resolver_domain(res)) {
                        ldns_rdf_deep_free(ldns_resolver_domain(res));
                }
index 847ca6497bbf7a0462b33018bae210b06aefba7c..79c8b39f05b73dc72da7e2bf7d1b218e3e58f6d1 100644 (file)
 #include <sys/param.h>
 #endif
 
+bool
+ldns_is_ipv4_addr(const char *str)
+{
+       int a, i;
+       const char *dot = str;
+
+       if (strlen(str) < 7 || strlen(str) > 16) {
+               return false;
+       }
+
+       for (i = 0; i < 3; i++) {
+               a = atoi(dot);
+               if (a < 0 || a > 255) {
+                       return false;
+               }
+               dot = strchr(dot, '.');
+               if (!dot) {
+                       return false;
+               }
+       }
+       a = atoi(dot);
+       if (a < 0 || a > 255) {
+               return false;
+       }
+
+       return true;
+}
+
+/* todo: check for more errors (like ffffff:f etc) */
+bool
+ldns_is_ipv6_addr(const char *str)
+{
+       int a;
+       size_t i;
+       const char *dot = str;
+
+       if (strlen(str) < 3 || strlen(str) > 40) {
+               return false;
+       }
+
+       for (i = 0; i < strlen(str); i++) {
+               if (str[i] != ':' &&
+                   ldns_hexdigit_to_int(str[i]) < 0) {
+                       return false;
+               }
+       }
+       a = atoi(dot);
+       if (a < 0 || a > 255) {
+               return false;
+       }
+
+       return true;
+}
+
 ldns_status
 ldns_str2rdf_int16(ldns_rdf **rd, const char *shortstr)
 {
diff --git a/util.c b/util.c
index b3d9ca6f36626d4590c355df58d11653bdbd9bd0..7e873caa9d6e766b63407966ac32353413945699 100644 (file)
--- a/util.c
+++ b/util.c
@@ -64,7 +64,6 @@ ldns_lookup_by_id(ldns_lookup_table *table, int id)
        }
        return NULL;
 }
-
 int 
 ldns_get_bit(uint8_t bits[], size_t index)
 {
@@ -107,7 +106,7 @@ ldns_hexdigit_to_int(char ch)
        case 'e': case 'E': return 14;
        case 'f': case 'F': return 15;
        default:
-               abort();
+               return -1;
        }
 }