]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
ACL: ast_apply_acl_nolog - identical to ast_apply_acl but without logging.
authorJaco Kroon <jaco@uls.co.za>
Wed, 4 Dec 2019 08:35:52 +0000 (10:35 +0200)
committerJaco Kroon <jaco@uls.co.za>
Thu, 12 Dec 2019 07:45:42 +0000 (01:45 -0600)
Due to use in res_rtp_asterisk there is a need to be able to apply an
ACL without logging any invalid/denies.  It's probably sensible to at
least validate the ACL once directly after load and report invalid ACLs.

Change-Id: I256169229d945ca7c1bbf228fc492d91df345843
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
include/asterisk/acl.h
main/acl.c

index 09adc527df490348b1844bd62e5d70fcb14b0f9a..f7655fe56e3b9c89fcb8c26f87bc84a517c64a81 100644 (file)
@@ -212,6 +212,20 @@ enum ast_acl_sense ast_apply_ha(const struct ast_ha *ha, const struct ast_sockad
  */
 enum ast_acl_sense ast_apply_acl(struct ast_acl_list *acl_list, const struct ast_sockaddr *addr, const char *purpose);
 
+/*!
+ * \brief Apply a set of rules to a given IP address, don't log failure.
+ *
+ * \details
+ * Exactly like ast_apply_acl, except that it will never log anything.
+ *
+ * \param acl_list The head of the list of ACLs to evaluate
+ * \param addr An ast_sockaddr whose address is considered when matching rules
+ *
+ * \retval AST_SENSE_ALLOW The IP address passes our ACLs
+ * \retval AST_SENSE_DENY The IP address fails our ACLs
+ */
+enum ast_acl_sense ast_apply_acl_nolog(struct ast_acl_list *acl_list, const struct ast_sockaddr *addr);
+
 /*!
  * \brief Get the IP address given a hostname
  *
index c131551783e4284aa70f9a307d85f45392127690..27da4eec7daf06601dbd96071e2d080c792abffb 100644 (file)
@@ -723,7 +723,7 @@ void ast_ha_join_cidr(const struct ast_ha *ha, struct ast_str **buf)
        }
 }
 
-enum ast_acl_sense ast_apply_acl(struct ast_acl_list *acl_list, const struct ast_sockaddr *addr, const char *purpose)
+static enum ast_acl_sense ast_apply_acl_internal(struct ast_acl_list *acl_list, const struct ast_sockaddr *addr, const char *log_prefix)
 {
        struct ast_acl *acl;
 
@@ -737,16 +737,22 @@ enum ast_acl_sense ast_apply_acl(struct ast_acl_list *acl_list, const struct ast
        AST_LIST_TRAVERSE(acl_list, acl, list) {
                if (acl->is_invalid) {
                        /* In this case, the baseline ACL shouldn't ever trigger this, but if that somehow happens, it'll still be shown. */
-                       ast_log(LOG_WARNING, "%sRejecting '%s' due to use of an invalid ACL '%s'.\n", purpose ? purpose : "", ast_sockaddr_stringify_addr(addr),
-                                       ast_strlen_zero(acl->name) ? "(BASELINE)" : acl->name);
+                       if (log_prefix) {
+                               ast_log(LOG_WARNING, "%sRejecting '%s' due to use of an invalid ACL '%s'.\n",
+                                               log_prefix, ast_sockaddr_stringify_addr(addr),
+                                               ast_strlen_zero(acl->name) ? "(BASELINE)" : acl->name);
+                       }
                        AST_LIST_UNLOCK(acl_list);
                        return AST_SENSE_DENY;
                }
 
                if (acl->acl) {
                        if (ast_apply_ha(acl->acl, addr) == AST_SENSE_DENY) {
-                               ast_log(LOG_NOTICE, "%sRejecting '%s' due to a failure to pass ACL '%s'\n", purpose ? purpose : "", ast_sockaddr_stringify_addr(addr),
-                                               ast_strlen_zero(acl->name) ? "(BASELINE)" : acl->name);
+                               if (log_prefix) {
+                                       ast_log(LOG_NOTICE, "%sRejecting '%s' due to a failure to pass ACL '%s'\n",
+                                                       log_prefix, ast_sockaddr_stringify_addr(addr),
+                                                       ast_strlen_zero(acl->name) ? "(BASELINE)" : acl->name);
+                               }
                                AST_LIST_UNLOCK(acl_list);
                                return AST_SENSE_DENY;
                        }
@@ -758,6 +764,15 @@ enum ast_acl_sense ast_apply_acl(struct ast_acl_list *acl_list, const struct ast
        return AST_SENSE_ALLOW;
 }
 
+
+enum ast_acl_sense ast_apply_acl(struct ast_acl_list *acl_list, const struct ast_sockaddr *addr, const char *purpose) {
+       return ast_apply_acl_internal(acl_list, addr, purpose ?: "");
+}
+
+enum ast_acl_sense ast_apply_acl_nolog(struct ast_acl_list *acl_list, const struct ast_sockaddr *addr) {
+       return ast_apply_acl_internal(acl_list, addr, NULL);
+}
+
 enum ast_acl_sense ast_apply_ha(const struct ast_ha *ha, const struct ast_sockaddr *addr)
 {
        /* Start optimistic */