char *n;
{
int i;
- struct in_addr addr;
-
- addr.s_addr = inet_addr(n);
+ char *m;
+ struct in_addr addr, mask;
+
+ /* If there's an explicate netmask, use it. */
+ if ((m = strchr(n, '/'))) {
+ *m++ = '\0';
+ mask.s_addr = inet_addr(m);
+ addr.s_addr = inet_addr(n);
+ *(m - 1) = '/';
+
+ for (i = 0; i < num_interfaces; i++)
+ if ((interfaces[i].addr.s_addr & mask.s_addr) == addr.s_addr)
+ return(TRUE);
+ } else {
+ addr.s_addr = inet_addr(n);
- for (i = 0; i < num_interfaces; i++)
- if (interfaces[i].addr.s_addr == addr.s_addr ||
- (interfaces[i].addr.s_addr & interfaces[i].netmask.s_addr)
- == addr.s_addr)
- return(TRUE);
+ for (i = 0; i < num_interfaces; i++)
+ if (interfaces[i].addr.s_addr == addr.s_addr ||
+ (interfaces[i].addr.s_addr & interfaces[i].netmask.s_addr)
+ == addr.s_addr)
+ return(TRUE);
+ }
return(FALSE);
}
}
-main(argc, argv)
+int main(argc, argv)
int argc;
char **argv;
{
/* load ip addr/mask for each interface */
load_interfaces();
+ /* allocate space for data structures in the parser */
+ init_parser();
+
if (yyparse() || parse_error) {
(void) printf("doesn't parse.\n");
} else {
/* dump aliases */
(void) printf("Matching Aliases --\n");
dumpaliases();
+
+ exit(0);
}