expose struct ast_ha so external code can do things such as printing it
[asterisk/asterisk.git] / main / acl.c
index 7e50d1f..efbc9d1 100644 (file)
@@ -70,14 +70,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/lock.h"
 #include "asterisk/srv.h"
 
-struct ast_ha {
-       /* Host access rule */
-       struct in_addr netaddr;
-       struct in_addr netmask;
-       int sense;
-       struct ast_ha *next;
-};
-
 struct my_ifreq {
        char ifrn_name[IFNAMSIZ];       /* Interface name, e.g. "eth0", "ppp0", etc.  */
        struct sockaddr_in ifru_addr;
@@ -90,7 +82,7 @@ void ast_free_ha(struct ast_ha *ha)
        while (ha) {
                hal = ha;
                ha = ha->next;
-               free(hal);
+               ast_free(hal);
        }
 }
 
@@ -137,7 +129,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,12 +164,16 @@ 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);
-                       free(ha);
+                       if (error)
+                               *error = 1;
+                       ast_free(ha);
                        return ret;
                }
                if (!inet_aton(tmp, &ha->netaddr)) {
                        ast_log(LOG_WARNING, "%s is not a valid IP\n", tmp);
-                       free(ha);
+                       if (error)
+                               *error = 1;
+                       ast_free(ha);
                        return ret;
                }
                ha->netaddr.s_addr &= ha->netmask.s_addr;
@@ -193,7 +189,7 @@ 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);
+       ast_debug(1, "%s/%s appended to acl for peer\n", stuff, nm);
        return ret;
 }
 
@@ -202,12 +198,14 @@ int ast_apply_ha(struct ast_ha *ha, struct sockaddr_in *sin)
        /* Start optimistic */
        int res = AST_SENSE_ALLOW;
        while (ha) {
+#if 0  /* debugging code */
                char iabuf[INET_ADDRSTRLEN];
                char iabuf2[INET_ADDRSTRLEN];
                /* 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);
+               ast_debug(1, "##### Testing %s with %s\n", iabuf, iabuf2);
+#endif
                /* 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 +222,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) {
@@ -274,6 +270,20 @@ static const struct dscp_codepoint dscp_pool1[] = {
        { "EF", 0x2E },
 };
 
+int ast_str2cos(const char *value, unsigned int *cos) 
+{
+       int fval;
+       
+       if (sscanf(value, "%d", &fval) == 1) {
+               if (fval < 8) {
+                   *cos = fval;
+                   return 0;
+               }
+       }
+       
+       return -1;
+}
+
 int ast_str2tos(const char *value, unsigned int *tos)
 {
        int fval;
@@ -316,7 +326,6 @@ int ast_ouraddrfor(struct in_addr *them, struct in_addr *us)
        int s;
        struct sockaddr_in sin;
        socklen_t slen;
-
        s = socket(PF_INET, SOCK_DGRAM, 0);
        if (s < 0) {
                ast_log(LOG_WARNING, "Cannot create socket\n");