Add the ability to dynamically specify weights for responses to DUNDi queries.
[asterisk/asterisk.git] / main / acl.c
index 5d467c6..8d7dc42 100644 (file)
@@ -137,7 +137,7 @@ struct ast_ha *ast_duplicate_ha_list(struct ast_ha *original)
        return ret;                     /* Return start of list */
 }
 
-struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path)
+struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path, int *error)
 {
        struct ast_ha *ha;
        char *nm = "255.255.255.255";
@@ -172,13 +172,17 @@ struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path)
                        }
                } else if (!inet_aton(nm, &ha->netmask)) {
                        ast_log(LOG_WARNING, "%s is not a valid netmask\n", nm);
+                       if (error)
+                               *error = 1;
                        free(ha);
-                       return path;
+                       return ret;
                }
                if (!inet_aton(tmp, &ha->netaddr)) {
                        ast_log(LOG_WARNING, "%s is not a valid IP\n", tmp);
+                       if (error)
+                               *error = 1;
                        free(ha);
-                       return path;
+                       return ret;
                }
                ha->netaddr.s_addr &= ha->netmask.s_addr;
                if (!strncasecmp(sense, "p", 1)) {
@@ -193,7 +197,8 @@ struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path)
                        ret = ha;
                }
        }
-       ast_log(LOG_DEBUG, "%s/%s appended to acl for peer\n", stuff, nm);
+       if (option_debug)
+               ast_log(LOG_DEBUG, "%s/%s appended to acl for peer\n", stuff, nm);
        return ret;
 }
 
@@ -207,7 +212,8 @@ int ast_apply_ha(struct ast_ha *ha, struct sockaddr_in *sin)
                /* DEBUG */
                ast_copy_string(iabuf, ast_inet_ntoa(sin->sin_addr), sizeof(iabuf));
                ast_copy_string(iabuf2, ast_inet_ntoa(ha->netaddr), sizeof(iabuf2));
-               ast_log(LOG_DEBUG, "##### Testing %s with %s\n", iabuf, iabuf2);
+               if (option_debug)
+                       ast_log(LOG_DEBUG, "##### Testing %s with %s\n", iabuf, iabuf2);
                /* For each rule, if this address and the netmask = the net address
                   apply the current rule */
                if ((sin->sin_addr.s_addr & ha->netmask.s_addr) == ha->netaddr.s_addr)
@@ -224,8 +230,6 @@ int ast_get_ip_or_srv(struct sockaddr_in *sin, const char *value, const char *se
        char srv[256];
        char host[256];
        int tportno = ntohs(sin->sin_port);
-       if (inet_aton(value, &sin->sin_addr))
-               return 0;
        if (service) {
                snprintf(srv, sizeof(srv), "%s.%s", service, value);
                if (ast_get_srv(NULL, host, sizeof(host), &tportno, srv) > 0) {