[asterisk-commits] tilghman: trunk r86278 - /trunk/main/acl.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Oct 18 02:23:42 CDT 2007
Author: tilghman
Date: Thu Oct 18 02:23:41 2007
New Revision: 86278
URL: http://svn.digium.com/view/asterisk?view=rev&rev=86278
Log:
Code cleanup of acl.c
Reported by dimas
Closes issue #10784
Modified:
trunk/main/acl.c
Modified: trunk/main/acl.c
URL: http://svn.digium.com/view/asterisk/trunk/main/acl.c?view=diff&rev=86278&r1=86277&r2=86278
==============================================================================
--- trunk/main/acl.c (original)
+++ trunk/main/acl.c Thu Oct 18 02:23:41 2007
@@ -123,64 +123,71 @@
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";
- char tmp[256];
+ char *nm;
struct ast_ha *prev = NULL;
struct ast_ha *ret;
- int x, z;
- unsigned int y;
+ int x;
+ char *tmp = strdupa(stuff);
ret = path;
while (path) {
prev = path;
path = path->next;
}
- if ((ha = ast_malloc(sizeof(*ha)))) {
- ast_copy_string(tmp, stuff, sizeof(tmp));
- nm = strchr(tmp, '/');
- if (!nm) {
- nm = "255.255.255.255";
- } else {
- *nm = '\0';
- nm++;
- }
+
+ ha = ast_malloc(sizeof(*ha));
+ if (!ha)
+ return ret;
+
+ nm = strchr(tmp, '/');
+ if (!nm) {
+ /* assume /32. Yes, htonl does not do anything for this particular mask
+ but we better use it to show we remember about byte order */
+ ha->netmask.s_addr = htonl(0xFFFFFFFF);
+ } else {
+ *nm = '\0';
+ nm++;
+
if (!strchr(nm, '.')) {
- if ((sscanf(nm, "%d", &x) == 1) && (x >= 0) && (x <= 32)) {
- y = 0;
- for (z = 0; z < x; z++) {
- y >>= 1;
- y |= 0x80000000;
- }
- ha->netmask.s_addr = htonl(y);
+ if ((sscanf(nm, "%d", &x) == 1) && (x >= 0) && (x <= 32))
+ ha->netmask.s_addr = htonl(0xFFFFFFFF << (32 - x));
+ else {
+ ast_log(LOG_WARNING, "Invalid CIDR in %s\n", stuff);
+ ast_free(ha);
+ if (error)
+ *error = 1;
+ return ret;
}
} else if (!inet_aton(nm, &ha->netmask)) {
- ast_log(LOG_WARNING, "%s is not a valid netmask\n", nm);
+ ast_log(LOG_WARNING, "Invalid mask in %s\n", stuff);
+ ast_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);
- if (error)
- *error = 1;
- ast_free(ha);
- return ret;
- }
- ha->netaddr.s_addr &= ha->netmask.s_addr;
- if (!strncasecmp(sense, "p", 1)) {
- ha->sense = AST_SENSE_ALLOW;
- } else {
- ha->sense = AST_SENSE_DENY;
- }
- ha->next = NULL;
- if (prev) {
- prev->next = ha;
- } else {
- ret = ha;
- }
- }
- ast_debug(1, "%s/%s appended to acl for peer\n", stuff, nm);
+ }
+
+ if (!inet_aton(tmp, &ha->netaddr)) {
+ ast_log(LOG_WARNING, "Invalid IP address in %s\n", stuff);
+ ast_free(ha);
+ if (error)
+ *error = 1;
+ return ret;
+ }
+
+ ha->netaddr.s_addr &= ha->netmask.s_addr;
+
+ ha->sense = strncasecmp(sense, "p", 1) ? AST_SENSE_DENY : AST_SENSE_ALLOW;
+
+ ha->next = NULL;
+ if (prev) {
+ prev->next = ha;
+ } else {
+ ret = ha;
+ }
+
+ ast_debug(1, "%s/%s sense %d appended to acl for peer\n", ast_strdupa(ast_inet_ntoa(ha->netaddr)), ast_strdupa(ast_inet_ntoa(ha->netmask)), ha->sense);
+
return ret;
}
More information about the asterisk-commits
mailing list