Add the ability to dynamically specify weights for responses to DUNDi queries.
[asterisk/asterisk.git] / main / acl.c
index f3fd509..8d7dc42 100644 (file)
@@ -78,9 +78,6 @@ struct ast_ha {
        struct ast_ha *next;
 };
 
-/* Default IP - if not otherwise set, don't breathe garbage */
-static struct in_addr __ourip = { 0x00000000 };
-
 struct my_ifreq {
        char ifrn_name[IFNAMSIZ];       /* Interface name, e.g. "eth0", "ppp0", etc.  */
        struct sockaddr_in ifru_addr;
@@ -140,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";
@@ -175,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)) {
@@ -196,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;
 }
 
@@ -210,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)
@@ -227,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) {
@@ -294,44 +295,16 @@ int ast_str2tos(const char *value, unsigned int *tos)
                }
        }
 
-       if (!strcasecmp(value, "lowdelay"))
-               *tos = IPTOS_LOWDELAY;
-       else if (!strcasecmp(value, "throughput"))
-               *tos = IPTOS_THROUGHPUT;
-       else if (!strcasecmp(value, "reliability"))
-               *tos = IPTOS_RELIABILITY;
-       else if (!strcasecmp(value, "mincost"))
-               *tos = IPTOS_MINCOST;
-       else if (!strcasecmp(value, "none"))
-               *tos = 0;
-       else
-               return -1;
-
-       ast_log(LOG_WARNING, "TOS value %s is deprecated. Please see doc/ip-tos.txt for more information.\n", value);
-
-       return 0;
+       return -1;
 }
 
 const char *ast_tos2str(unsigned int tos)
 {
        unsigned int x;
 
-       switch (tos) {
-       case 0:
-               return "none";
-       case IPTOS_LOWDELAY:
-               return "lowdelay";
-       case IPTOS_THROUGHPUT:
-               return "throughput";
-       case IPTOS_RELIABILITY:
-               return "reliability";
-       case IPTOS_MINCOST:
-               return "mincost";
-       default:
-               for (x = 0; x < sizeof(dscp_pool1) / sizeof(dscp_pool1[0]); x++) {
-                       if (dscp_pool1[x].space == (tos >> 2))
-                               return dscp_pool1[x].name;
-               }
+       for (x = 0; x < sizeof(dscp_pool1) / sizeof(dscp_pool1[0]); x++) {
+               if (dscp_pool1[x].space == (tos >> 2))
+                       return dscp_pool1[x].name;
        }
 
        return "unknown";
@@ -342,29 +315,6 @@ int ast_get_ip(struct sockaddr_in *sin, const char *value)
        return ast_get_ip_or_srv(sin, value, NULL);
 }
 
-/* iface is the interface (e.g. eth0); address is the return value */
-int ast_lookup_iface(char *iface, struct in_addr *address)
-{
-       int mysock, res = 0;
-       struct my_ifreq ifreq;
-
-       memset(&ifreq, 0, sizeof(ifreq));
-       ast_copy_string(ifreq.ifrn_name, iface, sizeof(ifreq.ifrn_name));
-
-       mysock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
-       res = ioctl(mysock, SIOCGIFADDR, &ifreq);
-
-       close(mysock);
-       if (res < 0) {
-               ast_log(LOG_WARNING, "Unable to get IP of %s: %s\n", iface, strerror(errno));
-               memcpy((char *)address, (char *)&__ourip, sizeof(__ourip));
-               return -1;
-       } else {
-               memcpy((char *)address, (char *)&ifreq.ifru_addr.sin_addr, sizeof(ifreq.ifru_addr.sin_addr));
-               return 0;
-       }
-}
-
 int ast_ouraddrfor(struct in_addr *them, struct in_addr *us)
 {
        int s;