Author: file
Date: Thu Mar  5 06:13:38 2015
New Revision: 432480

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=432480
Log:
Add sanity checking when setting result information and adding records.

Modified:
    team/group/dns/main/dns_core.c

Modified: team/group/dns/main/dns_core.c
URL: 
http://svnview.digium.com/svn/asterisk/team/group/dns/main/dns_core.c?view=diff&rev=432480&r1=432479&r2=432480
==============================================================================
--- team/group/dns/main/dns_core.c (original)
+++ team/group/dns/main/dns_core.c Thu Mar  5 06:13:38 2015
@@ -42,6 +42,8 @@
 #include "asterisk/dns_resolver.h"
 #include "asterisk/dns_internal.h"
 
+#include <arpa/nameser.h>
+
 AST_RWLIST_HEAD_STATIC(resolvers, ast_dns_resolver);
 
 const char *ast_dns_query_get_name(const struct ast_dns_query *query)
@@ -348,6 +350,12 @@
 int ast_dns_resolver_set_result(struct ast_dns_query *query, unsigned int 
nxdomain, unsigned int secure, unsigned int bogus,
        const char *canonical)
 {
+       if (secure && bogus) {
+               ast_debug(2, "Query '%p': Could not set result information, it 
can not be both secure and bogus\n",
+                       query);
+               return -1;
+       }
+
        if (query->result) {
                ast_dns_result_free(query->result);
        }
@@ -369,7 +377,33 @@
 {
        struct ast_dns_record *record;
 
-       if (!query->result) {
+       if (rr_type < 0) {
+               ast_debug(2, "Query '%p': Could not add record, invalid 
resource record type '%d'\n",
+                       query, rr_type);
+               return -1;
+       } else if (rr_type > ns_t_max) {
+               ast_debug(2, "Query '%p': Could not add record, resource record 
type '%d' exceeds maximum\n",
+                       query, rr_type);
+               return -1;
+       } else if (rr_class < 0) {
+               ast_debug(2, "Query '%p': Could not add record, invalid 
resource record class '%d'\n",
+                       query, rr_class);
+               return -1;
+       } else if (rr_class > ns_c_max) {
+               ast_debug(2, "Query '%p': Could not add record, resource record 
class '%d' exceeds maximum\n",
+                       query, rr_class);
+               return -1;
+       } else if (ttl < 0) {
+               ast_debug(2, "Query '%p': Could not add record, invalid TTL 
'%d'\n",
+                       query, ttl);
+               return -1;
+       } else if (!data || !size) {
+               ast_debug(2, "Query '%p': Could not add record, no data 
specified\n",
+                       query);
+               return -1;
+       } else if (!query->result) {
+               ast_debug(2, "Query '%p': No result was set on the query, thus 
records can not be added\n",
+                       query);
                return -1;
        }
 


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to