summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/tools/ipscan_y.y
diff options
context:
space:
mode:
authorcy <cy@FreeBSD.org>2013-07-19 05:41:57 +0000
committercy <cy@FreeBSD.org>2013-07-19 05:41:57 +0000
commit672af8808c0e7c15f330b401482f9271c2eb3fa6 (patch)
tree225b5acf68c01bc6a260b386c2b2dbf4fa2839e3 /contrib/ipfilter/tools/ipscan_y.y
parent71e82d94e82560b20789833f60056506de34de8b (diff)
downloadFreeBSD-src-672af8808c0e7c15f330b401482f9271c2eb3fa6.zip
FreeBSD-src-672af8808c0e7c15f330b401482f9271c2eb3fa6.tar.gz
As per the developers handbook (5.3.1 step 1), prepare the vendor trees for
import of new ipfilter vendor sources by flattening them. To keep the tags consistent with dist, the tags are also flattened. Approved by: glebius (Mentor)
Diffstat (limited to 'contrib/ipfilter/tools/ipscan_y.y')
-rw-r--r--contrib/ipfilter/tools/ipscan_y.y569
1 files changed, 0 insertions, 569 deletions
diff --git a/contrib/ipfilter/tools/ipscan_y.y b/contrib/ipfilter/tools/ipscan_y.y
deleted file mode 100644
index 5d7e7e6..0000000
--- a/contrib/ipfilter/tools/ipscan_y.y
+++ /dev/null
@@ -1,569 +0,0 @@
-/*
- * Copyright (C) 2001-2004 by Darren Reed.
- *
- * See the IPFILTER.LICENCE file for details on licencing.
- */
-%{
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include "ipf.h"
-#include "opts.h"
-#include "kmem.h"
-#include "ipscan_l.h"
-#include "netinet/ip_scan.h"
-
-#define YYDEBUG 1
-
-extern char *optarg;
-extern void yyerror __P((char *));
-extern int yyparse __P((void));
-extern int yylex __P((void));
-extern int yydebug;
-extern FILE *yyin;
-extern int yylineNum;
-extern void printbuf __P((char *, int, int));
-
-
-void printent __P((ipscan_t *));
-void showlist __P((void));
-int getportnum __P((char *));
-struct in_addr gethostip __P((char *));
-struct in_addr combine __P((int, int, int, int));
-char **makepair __P((char *, char *));
-void addtag __P((char *, char **, char **, struct action *));
-int cram __P((char *, char *));
-void usage __P((char *));
-int main __P((int, char **));
-
-int opts = 0;
-int fd = -1;
-
-
-%}
-
-%union {
- char *str;
- char **astr;
- u_32_t num;
- struct in_addr ipa;
- struct action act;
- union i6addr ip6;
-}
-
-%type <str> tag
-%type <act> action redirect result
-%type <ipa> ipaddr
-%type <num> portnum
-%type <astr> matchup onehalf twohalves
-
-%token <num> YY_NUMBER YY_HEX
-%token <str> YY_STR
-%token YY_COMMENT
-%token YY_CMP_EQ YY_CMP_NE YY_CMP_LE YY_CMP_GE YY_CMP_LT YY_CMP_GT
-%token YY_RANGE_OUT YY_RANGE_IN
-%token <ip6> YY_IPV6
-%token IPSL_START IPSL_STARTGROUP IPSL_CONTENT
-
-%token IPSL_CLOSE IPSL_TRACK IPSL_EOF IPSL_REDIRECT IPSL_ELSE
-
-%%
-file: line ';'
- | assign ';'
- | file line ';'
- | file assign ';'
- | YY_COMMENT
- ;
-
-line: IPSL_START dline
- | IPSL_STARTGROUP gline
- | IPSL_CONTENT oline
- ;
-
-dline: cline { resetlexer(); }
- | sline { resetlexer(); }
- | csline { resetlexer(); }
- ;
-
-gline: YY_STR ':' glist '=' action
- ;
-
-oline: cline
- | sline
- | csline
- ;
-
-assign: YY_STR assigning YY_STR
- { set_variable($1, $3);
- resetlexer();
- free($1);
- free($3);
- yyvarnext = 0;
- }
- ;
-
-assigning:
- '=' { yyvarnext = 1; }
- ;
-
-cline: tag ':' matchup '=' action { addtag($1, $3, NULL, &$5); }
- ;
-
-sline: tag ':' '(' ')' ',' matchup '=' action { addtag($1, NULL, $6, &$8); }
- ;
-
-csline: tag ':' matchup ',' matchup '=' action { addtag($1, $3, $5, &$7); }
- ;
-
-glist: YY_STR
- | glist ',' YY_STR
- ;
-
-tag: YY_STR { $$ = $1; }
- ;
-
-matchup:
- onehalf { $$ = $1; }
- | twohalves { $$ = $1; }
- ;
-
-action: result { $$.act_val = $1.act_val;
- $$.act_ip = $1.act_ip;
- $$.act_port = $1.act_port; }
- | result IPSL_ELSE result { $$.act_val = $1.act_val;
- $$.act_else = $3.act_val;
- if ($1.act_val == IPSL_REDIRECT) {
- $$.act_ip = $1.act_ip;
- $$.act_port = $1.act_port;
- }
- if ($3.act_val == IPSL_REDIRECT) {
- $$.act_eip = $3.act_eip;
- $$.act_eport = $3.act_eport;
- }
- }
-
-result: IPSL_CLOSE { $$.act_val = IPSL_CLOSE; }
- | IPSL_TRACK { $$.act_val = IPSL_TRACK; }
- | redirect { $$.act_val = IPSL_REDIRECT;
- $$.act_ip = $1.act_ip;
- $$.act_port = $1.act_port; }
- ;
-
-onehalf:
- '(' YY_STR ')' { $$ = makepair($2, NULL); }
- ;
-
-twohalves:
- '(' YY_STR ',' YY_STR ')' { $$ = makepair($2, $4); }
- ;
-
-redirect:
- IPSL_REDIRECT '(' ipaddr ')' { $$.act_ip = $3;
- $$.act_port = 0; }
- | IPSL_REDIRECT '(' ipaddr ',' portnum ')'
- { $$.act_ip = $3;
- $$.act_port = $5; }
- ;
-
-
-ipaddr: YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER
- { $$ = combine($1,$3,$5,$7); }
- | YY_STR { $$ = gethostip($1);
- free($1);
- }
- ;
-
-portnum:
- YY_NUMBER { $$ = htons($1); }
- | YY_STR { $$ = getportnum($1);
- free($1);
- }
- ;
-
-%%
-
-
-static struct wordtab yywords[] = {
- { "close", IPSL_CLOSE },
- { "content", IPSL_CONTENT },
- { "else", IPSL_ELSE },
- { "start-group", IPSL_STARTGROUP },
- { "redirect", IPSL_REDIRECT },
- { "start", IPSL_START },
- { "track", IPSL_TRACK },
- { NULL, 0 }
-};
-
-
-int cram(dst, src)
-char *dst;
-char *src;
-{
- char c, *s, *t, *u;
- int i, j, k;
-
- c = *src;
- s = src + 1;
- t = strchr(s, c);
- *t = '\0';
- for (u = dst, i = 0; (i <= ISC_TLEN) && (s < t); ) {
- c = *s++;
- if (c == '\\') {
- if (s >= t)
- break;
- j = k = 0;
- do {
- c = *s++;
- if (j && (!ISDIGIT(c) || (c > '7') ||
- (k >= 248))) {
- *u++ = k, i++;
- j = k = 0;
- s--;
- break;
- }
- i++;
-
- if (ISALPHA(c) || (c > '7')) {
- switch (c)
- {
- case 'n' :
- *u++ = '\n';
- break;
- case 'r' :
- *u++ = '\r';
- break;
- case 't' :
- *u++ = '\t';
- break;
- default :
- *u++ = c;
- break;
- }
- } else if (ISDIGIT(c)) {
- j = 1;
- k <<= 3;
- k |= (c - '0');
- i--;
- } else
- *u++ = c;
- } while ((i <= ISC_TLEN) && (s <= t) && (j > 0));
- } else
- *u++ = c, i++;
- }
- return i;
-}
-
-
-void printent(isc)
-ipscan_t *isc;
-{
- char buf[ISC_TLEN+1];
- u_char *u;
- int i, j;
-
- buf[ISC_TLEN] = '\0';
- bcopy(isc->ipsc_ctxt, buf, ISC_TLEN);
- printf("%s : (\"", isc->ipsc_tag);
- printbuf(isc->ipsc_ctxt, isc->ipsc_clen, 0);
-
- bcopy(isc->ipsc_cmsk, buf, ISC_TLEN);
- printf("\", \"%s\"), (\"", buf);
-
- printbuf(isc->ipsc_stxt, isc->ipsc_slen, 0);
-
- bcopy(isc->ipsc_smsk, buf, ISC_TLEN);
- printf("\", \"%s\") = ", buf);
-
- switch (isc->ipsc_action)
- {
- case ISC_A_TRACK :
- printf("track");
- break;
- case ISC_A_REDIRECT :
- printf("redirect");
- printf("(%s", inet_ntoa(isc->ipsc_ip));
- if (isc->ipsc_port)
- printf(",%d", isc->ipsc_port);
- printf(")");
- break;
- case ISC_A_CLOSE :
- printf("close");
- break;
- default :
- break;
- }
-
- if (isc->ipsc_else != ISC_A_NONE) {
- printf(" else ");
- switch (isc->ipsc_else)
- {
- case ISC_A_TRACK :
- printf("track");
- break;
- case ISC_A_REDIRECT :
- printf("redirect");
- printf("(%s", inet_ntoa(isc->ipsc_eip));
- if (isc->ipsc_eport)
- printf(",%d", isc->ipsc_eport);
- printf(")");
- break;
- case ISC_A_CLOSE :
- printf("close");
- break;
- default :
- break;
- }
- }
- printf("\n");
-
- if (opts & OPT_DEBUG) {
- for (u = (u_char *)isc, i = sizeof(*isc); i; ) {
- printf("#");
- for (j = 32; (j > 0) && (i > 0); j--, i--)
- printf("%s%02x", (j & 7) ? "" : " ", *u++);
- printf("\n");
- }
- }
- if (opts & OPT_VERBOSE) {
- printf("# hits %d active %d fref %d sref %d\n",
- isc->ipsc_hits, isc->ipsc_active, isc->ipsc_fref,
- isc->ipsc_sref);
- }
-}
-
-
-void addtag(tstr, cp, sp, act)
-char *tstr;
-char **cp, **sp;
-struct action *act;
-{
- ipscan_t isc, *iscp;
-
- bzero((char *)&isc, sizeof(isc));
-
- strncpy(isc.ipsc_tag, tstr, sizeof(isc.ipsc_tag));
- isc.ipsc_tag[sizeof(isc.ipsc_tag) - 1] = '\0';
-
- if (cp) {
- isc.ipsc_clen = cram(isc.ipsc_ctxt, cp[0]);
- if (cp[1]) {
- if (cram(isc.ipsc_cmsk, cp[1]) != isc.ipsc_clen) {
- fprintf(stderr,
- "client text/mask strings different length\n");
- return;
- }
- }
- }
-
- if (sp) {
- isc.ipsc_slen = cram(isc.ipsc_stxt, sp[0]);
- if (sp[1]) {
- if (cram(isc.ipsc_smsk, sp[1]) != isc.ipsc_slen) {
- fprintf(stderr,
- "server text/mask strings different length\n");
- return;
- }
- }
- }
-
- if (act->act_val == IPSL_CLOSE) {
- isc.ipsc_action = ISC_A_CLOSE;
- } else if (act->act_val == IPSL_TRACK) {
- isc.ipsc_action = ISC_A_TRACK;
- } else if (act->act_val == IPSL_REDIRECT) {
- isc.ipsc_action = ISC_A_REDIRECT;
- isc.ipsc_ip = act->act_ip;
- isc.ipsc_port = act->act_port;
- fprintf(stderr, "%d: redirect unsupported\n", yylineNum + 1);
- }
-
- if (act->act_else == IPSL_CLOSE) {
- isc.ipsc_else = ISC_A_CLOSE;
- } else if (act->act_else == IPSL_TRACK) {
- isc.ipsc_else = ISC_A_TRACK;
- } else if (act->act_else == IPSL_REDIRECT) {
- isc.ipsc_else = ISC_A_REDIRECT;
- isc.ipsc_eip = act->act_eip;
- isc.ipsc_eport = act->act_eport;
- fprintf(stderr, "%d: redirect unsupported\n", yylineNum + 1);
- }
-
- if (!(opts & OPT_DONOTHING)) {
- iscp = &isc;
- if (opts & OPT_REMOVE) {
- if (ioctl(fd, SIOCRMSCA, &iscp) == -1)
- perror("SIOCADSCA");
- } else {
- if (ioctl(fd, SIOCADSCA, &iscp) == -1)
- perror("SIOCADSCA");
- }
- }
-
- if (opts & OPT_VERBOSE)
- printent(&isc);
-}
-
-
-char **makepair(s1, s2)
-char *s1, *s2;
-{
- char **a;
-
- a = malloc(sizeof(char *) * 2);
- a[0] = s1;
- a[1] = s2;
- return a;
-}
-
-
-struct in_addr combine(a1, a2, a3, a4)
-int a1, a2, a3, a4;
-{
- struct in_addr in;
-
- a1 &= 0xff;
- in.s_addr = a1 << 24;
- a2 &= 0xff;
- in.s_addr |= (a2 << 16);
- a3 &= 0xff;
- in.s_addr |= (a3 << 8);
- a4 &= 0xff;
- in.s_addr |= a4;
- in.s_addr = htonl(in.s_addr);
- return in;
-}
-
-
-struct in_addr gethostip(host)
-char *host;
-{
- struct hostent *hp;
- struct in_addr in;
-
- in.s_addr = 0;
-
- hp = gethostbyname(host);
- if (!hp)
- return in;
- bcopy(hp->h_addr, (char *)&in, sizeof(in));
- return in;
-}
-
-
-int getportnum(port)
-char *port;
-{
- struct servent *s;
-
- s = getservbyname(port, "tcp");
- if (s == NULL)
- return -1;
- return s->s_port;
-}
-
-
-void showlist()
-{
- ipscanstat_t ipsc, *ipscp = &ipsc;
- ipscan_t isc;
-
- if (ioctl(fd, SIOCGSCST, &ipscp) == -1)
- perror("ioctl(SIOCGSCST)");
- else if (opts & OPT_SHOWLIST) {
- while (ipsc.iscs_list != NULL) {
- if (kmemcpy((char *)&isc, (u_long)ipsc.iscs_list,
- sizeof(isc)) == -1) {
- perror("kmemcpy");
- break;
- } else {
- printent(&isc);
- ipsc.iscs_list = isc.ipsc_next;
- }
- }
- } else {
- printf("scan entries loaded\t%d\n", ipsc.iscs_entries);
- printf("scan entries matches\t%ld\n", ipsc.iscs_acted);
- printf("negative matches\t%ld\n", ipsc.iscs_else);
- }
-}
-
-
-void usage(prog)
-char *prog;
-{
- fprintf(stderr, "Usage:\t%s [-dnrv] -f <filename>\n", prog);
- fprintf(stderr, "\t%s [-dlv]\n", prog);
- exit(1);
-}
-
-
-int main(argc, argv)
-int argc;
-char *argv[];
-{
- FILE *fp = NULL;
- int c;
-
- (void) yysettab(yywords);
-
- if (argc < 2)
- usage(argv[0]);
-
- while ((c = getopt(argc, argv, "df:lnrsv")) != -1)
- switch (c)
- {
- case 'd' :
- opts |= OPT_DEBUG;
- yydebug++;
- break;
- case 'f' :
- if (!strcmp(optarg, "-"))
- fp = stdin;
- else {
- fp = fopen(optarg, "r");
- if (!fp) {
- perror("open");
- exit(1);
- }
- }
- yyin = fp;
- break;
- case 'l' :
- opts |= OPT_SHOWLIST;
- break;
- case 'n' :
- opts |= OPT_DONOTHING;
- break;
- case 'r' :
- opts |= OPT_REMOVE;
- break;
- case 's' :
- opts |= OPT_STAT;
- break;
- case 'v' :
- opts |= OPT_VERBOSE;
- break;
- }
-
- if (!(opts & OPT_DONOTHING)) {
- fd = open(IPL_SCAN, O_RDWR);
- if (fd == -1) {
- perror("open(IPL_SCAN)");
- exit(1);
- }
- }
-
- if (fp != NULL) {
- yylineNum = 1;
-
- while (!feof(fp))
- yyparse();
- fclose(fp);
- exit(0);
- }
-
- if (opts & (OPT_SHOWLIST|OPT_STAT)) {
- showlist();
- exit(0);
- }
- exit(1);
-}
OpenPOWER on IntegriCloud