]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 248946 via svnmerge from
authorMark Michelson <mmichelson@digium.com>
Thu, 25 Feb 2010 22:42:19 +0000 (22:42 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 25 Feb 2010 22:42:19 +0000 (22:42 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

........
  r248946 | mmichelson | 2010-02-25 16:41:48 -0600 (Thu, 25 Feb 2010) | 5 lines

  Fix incorrect ACL behavior when CIDR notation of "/0" is used.

  AST-2010-003
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.0@248947 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/acl.c

index e70b122af22d30f4f0e402efde00423200795e7c..bfb944488650e314e489d88153d0eef0241684e2 100644 (file)
@@ -292,7 +292,14 @@ struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha
 
                if (!strchr(nm, '.')) {
                        if ((sscanf(nm, "%30d", &x) == 1) && (x >= 0) && (x <= 32))
-                               ha->netmask.s_addr = htonl(0xFFFFFFFF << (32 - x));
+                               if (x == 0) {
+                                       /* This is special-cased to prevent unpredictable
+                                        * behavior of shifting left 32 bits
+                                        */
+                                       ha->netmask.s_addr = 0;
+                               } else {
+                                       ha->netmask.s_addr = htonl(0xFFFFFFFF << (32 - x));
+                               }
                        else {
                                ast_log(LOG_WARNING, "Invalid CIDR in %s\n", stuff);
                                ast_free(ha);