diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-03-20 19:08:57 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-03-20 19:08:57 +0000 |
commit | 87e7c952733a6fc60f1f348be3465ec4b8489ab6 (patch) | |
tree | c024d1725230240639e94d21816d9b14810bd5e5 /acl.c | |
parent | 51335c6cf3ccb500880afaa13ef432514c0ac28f (diff) |
Fix ACL for bizarre routing cases
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2504 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'acl.c')
-rwxr-xr-x | acl.c | 22 |
1 files changed, 12 insertions, 10 deletions
@@ -279,7 +279,7 @@ int ast_ouraddrfor(struct in_addr *them, struct in_addr *us) fgets(line,sizeof(line),PROC); while (!feof(PROC)) { - char iface[8]; + char iface[256]; unsigned int dest, gateway, mask; int i,fieldnum; char *fields[40]; @@ -303,18 +303,20 @@ int ast_ouraddrfor(struct in_addr *them, struct in_addr *us) i = offset - line; } } + if (fieldnum >= 8) { - sscanf(fields[0],"%s",iface); - sscanf(fields[1],"%x",&dest); - sscanf(fields[2],"%x",&gateway); - sscanf(fields[7],"%x",&mask); + sscanf(fields[0],"%s",iface); + sscanf(fields[1],"%x",&dest); + sscanf(fields[2],"%x",&gateway); + sscanf(fields[7],"%x",&mask); #if 0 - printf("Addr: %s %08x Dest: %08x Mask: %08x\n", inet_ntoa(*them), remote_ip, dest, mask); + printf("Addr: %s %08x Dest: %08x Mask: %08x\n", inet_ntoa(*them), remote_ip, dest, mask); #endif - /* Looks simple, but here is the magic */ - if (((remote_ip & mask) ^ dest) == 0) { - res = ast_lookup_iface(iface,us); - break; + /* Looks simple, but here is the magic */ + if (((remote_ip & mask) ^ dest) == 0) { + res = ast_lookup_iface(iface,us); + break; + } } } fclose(PROC); |