Skip to content
Snippets Groups Projects
Commit 4ba3ced4 authored by Mark Spencer's avatar Mark Spencer
Browse files

Fix ACL for bizarre routing cases

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2504 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 21d31939
No related branches found
No related tags found
No related merge requests found
...@@ -279,7 +279,7 @@ int ast_ouraddrfor(struct in_addr *them, struct in_addr *us) ...@@ -279,7 +279,7 @@ int ast_ouraddrfor(struct in_addr *them, struct in_addr *us)
fgets(line,sizeof(line),PROC); fgets(line,sizeof(line),PROC);
while (!feof(PROC)) { while (!feof(PROC)) {
char iface[8]; char iface[256];
unsigned int dest, gateway, mask; unsigned int dest, gateway, mask;
int i,fieldnum; int i,fieldnum;
char *fields[40]; char *fields[40];
...@@ -303,18 +303,20 @@ int ast_ouraddrfor(struct in_addr *them, struct in_addr *us) ...@@ -303,18 +303,20 @@ int ast_ouraddrfor(struct in_addr *them, struct in_addr *us)
i = offset - line; i = offset - line;
} }
} }
if (fieldnum >= 8) {
sscanf(fields[0],"%s",iface); sscanf(fields[0],"%s",iface);
sscanf(fields[1],"%x",&dest); sscanf(fields[1],"%x",&dest);
sscanf(fields[2],"%x",&gateway); sscanf(fields[2],"%x",&gateway);
sscanf(fields[7],"%x",&mask); sscanf(fields[7],"%x",&mask);
#if 0 #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 #endif
/* Looks simple, but here is the magic */ /* Looks simple, but here is the magic */
if (((remote_ip & mask) ^ dest) == 0) { if (((remote_ip & mask) ^ dest) == 0) {
res = ast_lookup_iface(iface,us); res = ast_lookup_iface(iface,us);
break; break;
}
} }
} }
fclose(PROC); fclose(PROC);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment