mirror of
https://github.com/fwbuilder/fwbuilder
synced 2026-03-21 10:47:16 +01:00
* parsers/pix.g (tcp_udp_rule_extended): see #2273 Improvements in
the parser for PIX/ASA configs to make it recognize object-group and named object names used to define source port, destination address or destination port in "access-list ... tcp|udp" rules, including ambiguous situation when an object-group appears after source address specification because this group can define either source port or destination address.
This commit is contained in:
parent
704be1f951
commit
b89afcc87a
2
VERSION
2
VERSION
@ -7,7 +7,7 @@ FWB_MICRO_VERSION=0
|
||||
# build number is like "nano" version number. I am incrementing build
|
||||
# number during development cycle
|
||||
#
|
||||
BUILD_NUM="3508"
|
||||
BUILD_NUM="3509"
|
||||
|
||||
VERSION="$FWB_MAJOR_VERSION.$FWB_MINOR_VERSION.$FWB_MICRO_VERSION.$BUILD_NUM"
|
||||
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
#define VERSION "4.2.0.3508"
|
||||
#define VERSION "4.2.0.3509"
|
||||
#define GENERATION "4.2"
|
||||
|
||||
@ -1,3 +1,13 @@
|
||||
2011-03-25 vadim <vadim@netcitadel.com>
|
||||
|
||||
* parsers/pix.g (tcp_udp_rule_extended): see #2273 Improvements in
|
||||
the parser for PIX/ASA configs to make it recognize object-group
|
||||
and named object names used to define source port, destination
|
||||
address or destination port in "access-list ... tcp|udp" rules,
|
||||
including ambiguous situation when an object-group appears after
|
||||
source address specification because this group can define either
|
||||
source port or destination address.
|
||||
|
||||
2011-03-24 vadim <vadim@netcitadel.com>
|
||||
|
||||
* ASA8ObjectGroup.cpp: see #2263 looks like "object-group service"
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
|
||||
%define name fwbuilder
|
||||
%define version 4.2.0.3508
|
||||
%define version 4.2.0.3509
|
||||
%define release 1
|
||||
|
||||
%if "%_vendor" == "MandrakeSoft"
|
||||
|
||||
@ -4,6 +4,6 @@ Replaces: fwbuilder (<=4.1.1-1), fwbuilder-common, fwbuilder-bsd, fwbuilder-linu
|
||||
Priority: extra
|
||||
Section: checkinstall
|
||||
Maintainer: vadim@fwbuilder.org
|
||||
Version: 4.2.0.3508-1
|
||||
Version: 4.2.0.3509-1
|
||||
Depends: libqt4-gui (>= 4.3.0), libxml2, libxslt1.1, libsnmp | libsnmp15
|
||||
Description: Firewall Builder GUI and policy compilers
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
|
||||
%define name fwbuilder
|
||||
%define version 4.2.0.3508
|
||||
%define version 4.2.0.3509
|
||||
%define release 1
|
||||
|
||||
%if "%_vendor" == "MandrakeSoft"
|
||||
|
||||
@ -579,6 +579,19 @@ void PIXImporter::newObjectGroupService(const string &name)
|
||||
*logger << "Object Group (service) " + name;
|
||||
}
|
||||
|
||||
bool PIXImporter::isKnownServiceGroupName(const string &object_group_name)
|
||||
{
|
||||
QString qs_object_group_name = QString::fromUtf8(object_group_name.c_str());
|
||||
qDebug() << "isKnownServiceGroupName:" << qs_object_group_name;
|
||||
|
||||
if (named_objects_registry.count(qs_object_group_name) > 0)
|
||||
{
|
||||
FWObject *grp = named_objects_registry[qs_object_group_name];
|
||||
return ServiceGroup::isA(grp);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void PIXImporter::newObjectGroupProtocol(const string &name)
|
||||
{
|
||||
object_group_name = QString::fromUtf8(name.c_str());
|
||||
|
||||
@ -110,6 +110,8 @@ class PIXImporter : public IOSImporter
|
||||
void newObjectGroupProtocol(const std::string &group_name);
|
||||
void newObjectGroupICMP(const std::string &group_name);
|
||||
|
||||
bool isKnownServiceGroupName(const std::string &object_group_name);
|
||||
|
||||
void setObjectGroupServiceProtocol(const std::string &proto)
|
||||
{ object_group_service_protocol = proto.c_str(); }
|
||||
|
||||
|
||||
@ -53,7 +53,6 @@ void PIXCfgLexer::initLiterals()
|
||||
literals["subnet"] = 33;
|
||||
literals["ipsec"] = 20;
|
||||
literals["controller"] = 78;
|
||||
literals["object"] = 27;
|
||||
literals["pcp"] = 23;
|
||||
literals["remark"] = 107;
|
||||
literals["access-list"] = 61;
|
||||
@ -82,7 +81,6 @@ void PIXCfgLexer::initLiterals()
|
||||
literals["icmp-object"] = 47;
|
||||
literals["exit"] = 80;
|
||||
literals["nat"] = 29;
|
||||
literals["object-group"] = 42;
|
||||
literals["range"] = 32;
|
||||
literals["service-object"] = 50;
|
||||
literals["gre"] = 16;
|
||||
@ -224,7 +222,7 @@ ANTLR_USE_NAMESPACE(antlr)RefToken PIXCfgLexer::nextToken()
|
||||
case 0x79 /* 'y' */ :
|
||||
case 0x7a /* 'z' */ :
|
||||
{
|
||||
mNUMBER(true);
|
||||
mNUMBER_ADDRESS_OR_WORD(true);
|
||||
theRetToken=_returnToken;
|
||||
break;
|
||||
}
|
||||
@ -455,11 +453,11 @@ void PIXCfgLexer::mLINE_COMMENT(bool _createToken) {
|
||||
}
|
||||
}
|
||||
else {
|
||||
goto _loop206;
|
||||
goto _loop222;
|
||||
}
|
||||
|
||||
}
|
||||
_loop206:;
|
||||
_loop222:;
|
||||
} // ( ... )*
|
||||
mNEWLINE(false);
|
||||
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
|
||||
@ -491,9 +489,9 @@ void PIXCfgLexer::mNEWLINE(bool _createToken) {
|
||||
|
||||
}
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1652 "pix.g"
|
||||
#line 1746 "pix.g"
|
||||
newline();
|
||||
#line 497 "PIXCfgLexer.cpp"
|
||||
#line 495 "PIXCfgLexer.cpp"
|
||||
}
|
||||
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
|
||||
_token = makeToken(_ttype);
|
||||
@ -517,11 +515,11 @@ void PIXCfgLexer::mCOLON_COMMENT(bool _createToken) {
|
||||
}
|
||||
}
|
||||
else {
|
||||
goto _loop210;
|
||||
goto _loop226;
|
||||
}
|
||||
|
||||
}
|
||||
_loop210:;
|
||||
_loop226:;
|
||||
} // ( ... )*
|
||||
mNEWLINE(false);
|
||||
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
|
||||
@ -615,9 +613,9 @@ void PIXCfgLexer::mWhitespace(bool _createToken) {
|
||||
}
|
||||
}
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1647 "pix.g"
|
||||
#line 1741 "pix.g"
|
||||
_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP;
|
||||
#line 621 "PIXCfgLexer.cpp"
|
||||
#line 619 "PIXCfgLexer.cpp"
|
||||
}
|
||||
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
|
||||
_token = makeToken(_ttype);
|
||||
@ -653,6 +651,19 @@ void PIXCfgLexer::mHEX_CONST(bool _createToken) {
|
||||
_saveIndex=0;
|
||||
}
|
||||
|
||||
void PIXCfgLexer::mNUMBER(bool _createToken) {
|
||||
int _ttype; ANTLR_USE_NAMESPACE(antlr)RefToken _token; ANTLR_USE_NAMESPACE(std)string::size_type _begin = text.length();
|
||||
_ttype = NUMBER;
|
||||
ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
|
||||
|
||||
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
|
||||
_token = makeToken(_ttype);
|
||||
_token->setText(text.substr(_begin, text.length()-_begin));
|
||||
}
|
||||
_returnToken = _token;
|
||||
_saveIndex=0;
|
||||
}
|
||||
|
||||
void PIXCfgLexer::mNEG_INT_CONST(bool _createToken) {
|
||||
int _ttype; ANTLR_USE_NAMESPACE(antlr)RefToken _token; ANTLR_USE_NAMESPACE(std)string::size_type _begin = text.length();
|
||||
_ttype = NEG_INT_CONST;
|
||||
@ -694,111 +705,92 @@ void PIXCfgLexer::mHEXDIGIT(bool _createToken) {
|
||||
_saveIndex=0;
|
||||
}
|
||||
|
||||
void PIXCfgLexer::mNUMBER(bool _createToken) {
|
||||
void PIXCfgLexer::mOBJECT(bool _createToken) {
|
||||
int _ttype; ANTLR_USE_NAMESPACE(antlr)RefToken _token; ANTLR_USE_NAMESPACE(std)string::size_type _begin = text.length();
|
||||
_ttype = NUMBER;
|
||||
_ttype = OBJECT;
|
||||
ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
|
||||
|
||||
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
|
||||
_token = makeToken(_ttype);
|
||||
_token->setText(text.substr(_begin, text.length()-_begin));
|
||||
}
|
||||
_returnToken = _token;
|
||||
_saveIndex=0;
|
||||
}
|
||||
|
||||
void PIXCfgLexer::mOBJECT_GROUP(bool _createToken) {
|
||||
int _ttype; ANTLR_USE_NAMESPACE(antlr)RefToken _token; ANTLR_USE_NAMESPACE(std)string::size_type _begin = text.length();
|
||||
_ttype = OBJECT_GROUP;
|
||||
ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
|
||||
|
||||
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
|
||||
_token = makeToken(_ttype);
|
||||
_token->setText(text.substr(_begin, text.length()-_begin));
|
||||
}
|
||||
_returnToken = _token;
|
||||
_saveIndex=0;
|
||||
}
|
||||
|
||||
void PIXCfgLexer::mNUMBER_ADDRESS_OR_WORD(bool _createToken) {
|
||||
int _ttype; ANTLR_USE_NAMESPACE(antlr)RefToken _token; ANTLR_USE_NAMESPACE(std)string::size_type _begin = text.length();
|
||||
_ttype = NUMBER_ADDRESS_OR_WORD;
|
||||
ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
|
||||
|
||||
{
|
||||
bool synPredMatched258 = false;
|
||||
if (((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2))) && (true))) {
|
||||
int _m258 = mark();
|
||||
synPredMatched258 = true;
|
||||
bool synPredMatched287 = false;
|
||||
if (((LA(1) == 0x6f /* 'o' */ ) && (LA(2) == 0x62 /* 'b' */ ) && (LA(3) == 0x6a /* 'j' */ ))) {
|
||||
int _m287 = mark();
|
||||
synPredMatched287 = true;
|
||||
inputState->guessing++;
|
||||
try {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt257=0;
|
||||
for (;;) {
|
||||
switch ( LA(1)) {
|
||||
case 0x61 /* 'a' */ :
|
||||
case 0x62 /* 'b' */ :
|
||||
case 0x63 /* 'c' */ :
|
||||
case 0x64 /* 'd' */ :
|
||||
case 0x65 /* 'e' */ :
|
||||
case 0x66 /* 'f' */ :
|
||||
{
|
||||
matchRange('a','f');
|
||||
break;
|
||||
}
|
||||
case 0x30 /* '0' */ :
|
||||
case 0x31 /* '1' */ :
|
||||
case 0x32 /* '2' */ :
|
||||
case 0x33 /* '3' */ :
|
||||
case 0x34 /* '4' */ :
|
||||
case 0x35 /* '5' */ :
|
||||
case 0x36 /* '6' */ :
|
||||
case 0x37 /* '7' */ :
|
||||
case 0x38 /* '8' */ :
|
||||
case 0x39 /* '9' */ :
|
||||
{
|
||||
matchRange('0','9');
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if ( _cnt257>=1 ) { goto _loop257; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
}
|
||||
_cnt257++;
|
||||
}
|
||||
_loop257:;
|
||||
} // ( ... )+
|
||||
mCOLON(false);
|
||||
match("obj");
|
||||
match("ect");
|
||||
}
|
||||
}
|
||||
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
|
||||
synPredMatched258 = false;
|
||||
synPredMatched287 = false;
|
||||
}
|
||||
rewind(_m258);
|
||||
rewind(_m287);
|
||||
inputState->guessing--;
|
||||
}
|
||||
if ( synPredMatched258 ) {
|
||||
if ( synPredMatched287 ) {
|
||||
{
|
||||
match("object");
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt262=0;
|
||||
for (;;) {
|
||||
switch ( LA(1)) {
|
||||
case 0x61 /* 'a' */ :
|
||||
case 0x62 /* 'b' */ :
|
||||
case 0x63 /* 'c' */ :
|
||||
case 0x64 /* 'd' */ :
|
||||
case 0x65 /* 'e' */ :
|
||||
case 0x66 /* 'f' */ :
|
||||
if ((LA(1) == 0x2d /* '-' */ )) {
|
||||
{
|
||||
matchRange('a','f');
|
||||
break;
|
||||
match("-gr");
|
||||
match("oup");
|
||||
}
|
||||
case 0x30 /* '0' */ :
|
||||
case 0x31 /* '1' */ :
|
||||
case 0x32 /* '2' */ :
|
||||
case 0x33 /* '3' */ :
|
||||
case 0x34 /* '4' */ :
|
||||
case 0x35 /* '5' */ :
|
||||
case 0x36 /* '6' */ :
|
||||
case 0x37 /* '7' */ :
|
||||
case 0x38 /* '8' */ :
|
||||
case 0x39 /* '9' */ :
|
||||
{
|
||||
matchRange('0','9');
|
||||
break;
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1798 "pix.g"
|
||||
_ttype = OBJECT_GROUP;
|
||||
#line 770 "PIXCfgLexer.cpp"
|
||||
}
|
||||
default:
|
||||
{
|
||||
if ( _cnt262>=1 ) { goto _loop262; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
}
|
||||
_cnt262++;
|
||||
}
|
||||
_loop262:;
|
||||
} // ( ... )+
|
||||
{ // ( ... )+
|
||||
int _cnt266=0;
|
||||
for (;;) {
|
||||
if ((LA(1) == 0x3a /* ':' */ )) {
|
||||
mCOLON(false);
|
||||
{ // ( ... )*
|
||||
else {
|
||||
match("");
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1800 "pix.g"
|
||||
_ttype = OBJECT;
|
||||
#line 778 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
bool synPredMatched277 = false;
|
||||
if (((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2))) && (true))) {
|
||||
int _m277 = mark();
|
||||
synPredMatched277 = true;
|
||||
inputState->guessing++;
|
||||
try {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt276=0;
|
||||
for (;;) {
|
||||
switch ( LA(1)) {
|
||||
case 0x61 /* 'a' */ :
|
||||
@ -827,374 +819,37 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
|
||||
}
|
||||
default:
|
||||
{
|
||||
goto _loop265;
|
||||
if ( _cnt276>=1 ) { goto _loop276; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
}
|
||||
_cnt276++;
|
||||
}
|
||||
_loop265:;
|
||||
} // ( ... )*
|
||||
}
|
||||
else {
|
||||
if ( _cnt266>=1 ) { goto _loop266; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt266++;
|
||||
}
|
||||
_loop266:;
|
||||
} // ( ... )+
|
||||
}
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1686 "pix.g"
|
||||
_ttype = IPV6;
|
||||
#line 850 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
bool synPredMatched223 = false;
|
||||
if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true))) {
|
||||
int _m223 = mark();
|
||||
synPredMatched223 = true;
|
||||
inputState->guessing++;
|
||||
try {
|
||||
{
|
||||
mDIGIT(false);
|
||||
_loop276:;
|
||||
} // ( ... )+
|
||||
mCOLON(false);
|
||||
}
|
||||
}
|
||||
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
|
||||
synPredMatched223 = false;
|
||||
synPredMatched277 = false;
|
||||
}
|
||||
rewind(_m223);
|
||||
rewind(_m277);
|
||||
inputState->guessing--;
|
||||
}
|
||||
if ( synPredMatched223 ) {
|
||||
if ( synPredMatched277 ) {
|
||||
{
|
||||
bool synPredMatched232 = false;
|
||||
if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (_tokenSet_4.member(LA(2))) && (_tokenSet_4.member(LA(3))))) {
|
||||
int _m232 = mark();
|
||||
synPredMatched232 = true;
|
||||
inputState->guessing++;
|
||||
try {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt227=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt227>=1 ) { goto _loop227; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt227++;
|
||||
}
|
||||
_loop227:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt229=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt229>=1 ) { goto _loop229; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt229++;
|
||||
}
|
||||
_loop229:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt231=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt231>=1 ) { goto _loop231; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt231++;
|
||||
}
|
||||
_loop231:;
|
||||
} // ( ... )+
|
||||
}
|
||||
}
|
||||
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
|
||||
synPredMatched232 = false;
|
||||
}
|
||||
rewind(_m232);
|
||||
inputState->guessing--;
|
||||
}
|
||||
if ( synPredMatched232 ) {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt235=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt235>=1 ) { goto _loop235; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt235++;
|
||||
}
|
||||
_loop235:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt237=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt237>=1 ) { goto _loop237; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt237++;
|
||||
}
|
||||
_loop237:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt239=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt239>=1 ) { goto _loop239; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt239++;
|
||||
}
|
||||
_loop239:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt241=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt241>=1 ) { goto _loop241; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt241++;
|
||||
}
|
||||
_loop241:;
|
||||
} // ( ... )+
|
||||
}
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1675 "pix.g"
|
||||
_ttype = IPV4;
|
||||
#line 997 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
else {
|
||||
bool synPredMatched247 = false;
|
||||
if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (_tokenSet_4.member(LA(2))) && (_tokenSet_4.member(LA(3))))) {
|
||||
int _m247 = mark();
|
||||
synPredMatched247 = true;
|
||||
inputState->guessing++;
|
||||
try {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt244=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt244>=1 ) { goto _loop244; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt244++;
|
||||
}
|
||||
_loop244:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt246=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt246>=1 ) { goto _loop246; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt246++;
|
||||
}
|
||||
_loop246:;
|
||||
} // ( ... )+
|
||||
}
|
||||
}
|
||||
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
|
||||
synPredMatched247 = false;
|
||||
}
|
||||
rewind(_m247);
|
||||
inputState->guessing--;
|
||||
}
|
||||
if ( synPredMatched247 ) {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt250=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt250>=1 ) { goto _loop250; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt250++;
|
||||
}
|
||||
_loop250:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt252=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt252>=1 ) { goto _loop252; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt252++;
|
||||
}
|
||||
_loop252:;
|
||||
} // ( ... )+
|
||||
}
|
||||
}
|
||||
else if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true)) {
|
||||
{ // ( ... )+
|
||||
int _cnt254=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt254>=1 ) { goto _loop254; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt254++;
|
||||
}
|
||||
_loop254:;
|
||||
} // ( ... )+
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1679 "pix.g"
|
||||
_ttype = INT_CONST;
|
||||
#line 1096 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((_tokenSet_5.member(LA(1))) && (true) && (true)) {
|
||||
{
|
||||
switch ( LA(1)) {
|
||||
case 0x61 /* 'a' */ :
|
||||
case 0x62 /* 'b' */ :
|
||||
case 0x63 /* 'c' */ :
|
||||
case 0x64 /* 'd' */ :
|
||||
case 0x65 /* 'e' */ :
|
||||
case 0x66 /* 'f' */ :
|
||||
case 0x67 /* 'g' */ :
|
||||
case 0x68 /* 'h' */ :
|
||||
case 0x69 /* 'i' */ :
|
||||
case 0x6a /* 'j' */ :
|
||||
case 0x6b /* 'k' */ :
|
||||
case 0x6c /* 'l' */ :
|
||||
case 0x6d /* 'm' */ :
|
||||
case 0x6e /* 'n' */ :
|
||||
case 0x6f /* 'o' */ :
|
||||
case 0x70 /* 'p' */ :
|
||||
case 0x71 /* 'q' */ :
|
||||
case 0x72 /* 'r' */ :
|
||||
case 0x73 /* 's' */ :
|
||||
case 0x74 /* 't' */ :
|
||||
case 0x75 /* 'u' */ :
|
||||
case 0x76 /* 'v' */ :
|
||||
case 0x77 /* 'w' */ :
|
||||
case 0x78 /* 'x' */ :
|
||||
case 0x79 /* 'y' */ :
|
||||
case 0x7a /* 'z' */ :
|
||||
{
|
||||
matchRange('a','z');
|
||||
break;
|
||||
}
|
||||
case 0x41 /* 'A' */ :
|
||||
case 0x42 /* 'B' */ :
|
||||
case 0x43 /* 'C' */ :
|
||||
case 0x44 /* 'D' */ :
|
||||
case 0x45 /* 'E' */ :
|
||||
case 0x46 /* 'F' */ :
|
||||
case 0x47 /* 'G' */ :
|
||||
case 0x48 /* 'H' */ :
|
||||
case 0x49 /* 'I' */ :
|
||||
case 0x4a /* 'J' */ :
|
||||
case 0x4b /* 'K' */ :
|
||||
case 0x4c /* 'L' */ :
|
||||
case 0x4d /* 'M' */ :
|
||||
case 0x4e /* 'N' */ :
|
||||
case 0x4f /* 'O' */ :
|
||||
case 0x50 /* 'P' */ :
|
||||
case 0x51 /* 'Q' */ :
|
||||
case 0x52 /* 'R' */ :
|
||||
case 0x53 /* 'S' */ :
|
||||
case 0x54 /* 'T' */ :
|
||||
case 0x55 /* 'U' */ :
|
||||
case 0x56 /* 'V' */ :
|
||||
case 0x57 /* 'W' */ :
|
||||
case 0x58 /* 'X' */ :
|
||||
case 0x59 /* 'Y' */ :
|
||||
case 0x5a /* 'Z' */ :
|
||||
{
|
||||
matchRange('A','Z');
|
||||
break;
|
||||
}
|
||||
case 0x24 /* '$' */ :
|
||||
{
|
||||
match('$' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
|
||||
}
|
||||
}
|
||||
}
|
||||
{ // ( ... )*
|
||||
{ // ( ... )+
|
||||
int _cnt281=0;
|
||||
for (;;) {
|
||||
switch ( LA(1)) {
|
||||
case 0x21 /* '!' */ :
|
||||
case 0x22 /* '\"' */ :
|
||||
case 0x23 /* '#' */ :
|
||||
case 0x24 /* '$' */ :
|
||||
case 0x25 /* '%' */ :
|
||||
case 0x26 /* '&' */ :
|
||||
case 0x27 /* '\'' */ :
|
||||
case 0x28 /* '(' */ :
|
||||
case 0x29 /* ')' */ :
|
||||
case 0x2a /* '*' */ :
|
||||
case 0x2b /* '+' */ :
|
||||
case 0x2c /* ',' */ :
|
||||
case 0x2d /* '-' */ :
|
||||
case 0x2e /* '.' */ :
|
||||
case 0x2f /* '/' */ :
|
||||
case 0x61 /* 'a' */ :
|
||||
case 0x62 /* 'b' */ :
|
||||
case 0x63 /* 'c' */ :
|
||||
case 0x64 /* 'd' */ :
|
||||
case 0x65 /* 'e' */ :
|
||||
case 0x66 /* 'f' */ :
|
||||
{
|
||||
matchRange('!','/');
|
||||
matchRange('a','f');
|
||||
break;
|
||||
}
|
||||
case 0x30 /* '0' */ :
|
||||
@ -1211,39 +866,359 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
|
||||
matchRange('0','9');
|
||||
break;
|
||||
}
|
||||
case 0x3a /* ':' */ :
|
||||
default:
|
||||
{
|
||||
match(':' /* charlit */ );
|
||||
break;
|
||||
if ( _cnt281>=1 ) { goto _loop281; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
case 0x3b /* ';' */ :
|
||||
{
|
||||
match(';' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x3c /* '<' */ :
|
||||
{
|
||||
match('<' /* charlit */ );
|
||||
break;
|
||||
_cnt281++;
|
||||
}
|
||||
_loop281:;
|
||||
} // ( ... )+
|
||||
{ // ( ... )+
|
||||
int _cnt285=0;
|
||||
for (;;) {
|
||||
if ((LA(1) == 0x3a /* ':' */ )) {
|
||||
mCOLON(false);
|
||||
{ // ( ... )*
|
||||
for (;;) {
|
||||
switch ( LA(1)) {
|
||||
case 0x61 /* 'a' */ :
|
||||
case 0x62 /* 'b' */ :
|
||||
case 0x63 /* 'c' */ :
|
||||
case 0x64 /* 'd' */ :
|
||||
case 0x65 /* 'e' */ :
|
||||
case 0x66 /* 'f' */ :
|
||||
{
|
||||
matchRange('a','f');
|
||||
break;
|
||||
}
|
||||
case 0x30 /* '0' */ :
|
||||
case 0x31 /* '1' */ :
|
||||
case 0x32 /* '2' */ :
|
||||
case 0x33 /* '3' */ :
|
||||
case 0x34 /* '4' */ :
|
||||
case 0x35 /* '5' */ :
|
||||
case 0x36 /* '6' */ :
|
||||
case 0x37 /* '7' */ :
|
||||
case 0x38 /* '8' */ :
|
||||
case 0x39 /* '9' */ :
|
||||
{
|
||||
matchRange('0','9');
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
goto _loop284;
|
||||
}
|
||||
}
|
||||
}
|
||||
_loop284:;
|
||||
} // ( ... )*
|
||||
}
|
||||
case 0x3d /* '=' */ :
|
||||
{
|
||||
match('=' /* charlit */ );
|
||||
break;
|
||||
else {
|
||||
if ( _cnt285>=1 ) { goto _loop285; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
case 0x3e /* '>' */ :
|
||||
{
|
||||
match('>' /* charlit */ );
|
||||
break;
|
||||
|
||||
_cnt285++;
|
||||
}
|
||||
_loop285:;
|
||||
} // ( ... )+
|
||||
}
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1791 "pix.g"
|
||||
_ttype = IPV6;
|
||||
#line 932 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
bool synPredMatched242 = false;
|
||||
if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true))) {
|
||||
int _m242 = mark();
|
||||
synPredMatched242 = true;
|
||||
inputState->guessing++;
|
||||
try {
|
||||
{
|
||||
mDIGIT(false);
|
||||
}
|
||||
}
|
||||
case 0x3f /* '?' */ :
|
||||
{
|
||||
match('?' /* charlit */ );
|
||||
break;
|
||||
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
|
||||
synPredMatched242 = false;
|
||||
}
|
||||
case 0x40 /* '@' */ :
|
||||
rewind(_m242);
|
||||
inputState->guessing--;
|
||||
}
|
||||
if ( synPredMatched242 ) {
|
||||
{
|
||||
match('@' /* charlit */ );
|
||||
bool synPredMatched251 = false;
|
||||
if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (_tokenSet_4.member(LA(2))) && (_tokenSet_4.member(LA(3))))) {
|
||||
int _m251 = mark();
|
||||
synPredMatched251 = true;
|
||||
inputState->guessing++;
|
||||
try {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt246=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt246>=1 ) { goto _loop246; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt246++;
|
||||
}
|
||||
_loop246:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt248=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt248>=1 ) { goto _loop248; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt248++;
|
||||
}
|
||||
_loop248:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt250=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt250>=1 ) { goto _loop250; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt250++;
|
||||
}
|
||||
_loop250:;
|
||||
} // ( ... )+
|
||||
}
|
||||
}
|
||||
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
|
||||
synPredMatched251 = false;
|
||||
}
|
||||
rewind(_m251);
|
||||
inputState->guessing--;
|
||||
}
|
||||
if ( synPredMatched251 ) {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt254=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt254>=1 ) { goto _loop254; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt254++;
|
||||
}
|
||||
_loop254:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt256=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt256>=1 ) { goto _loop256; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt256++;
|
||||
}
|
||||
_loop256:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt258=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt258>=1 ) { goto _loop258; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt258++;
|
||||
}
|
||||
_loop258:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt260=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt260>=1 ) { goto _loop260; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt260++;
|
||||
}
|
||||
_loop260:;
|
||||
} // ( ... )+
|
||||
}
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1779 "pix.g"
|
||||
_ttype = IPV4;
|
||||
#line 1079 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
else {
|
||||
bool synPredMatched266 = false;
|
||||
if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (_tokenSet_4.member(LA(2))) && (_tokenSet_4.member(LA(3))))) {
|
||||
int _m266 = mark();
|
||||
synPredMatched266 = true;
|
||||
inputState->guessing++;
|
||||
try {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt263=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt263>=1 ) { goto _loop263; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt263++;
|
||||
}
|
||||
_loop263:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt265=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt265>=1 ) { goto _loop265; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt265++;
|
||||
}
|
||||
_loop265:;
|
||||
} // ( ... )+
|
||||
}
|
||||
}
|
||||
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
|
||||
synPredMatched266 = false;
|
||||
}
|
||||
rewind(_m266);
|
||||
inputState->guessing--;
|
||||
}
|
||||
if ( synPredMatched266 ) {
|
||||
{
|
||||
{ // ( ... )+
|
||||
int _cnt269=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt269>=1 ) { goto _loop269; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt269++;
|
||||
}
|
||||
_loop269:;
|
||||
} // ( ... )+
|
||||
mDOT(false);
|
||||
{ // ( ... )+
|
||||
int _cnt271=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt271>=1 ) { goto _loop271; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt271++;
|
||||
}
|
||||
_loop271:;
|
||||
} // ( ... )+
|
||||
}
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1782 "pix.g"
|
||||
_ttype = NUMBER;
|
||||
#line 1162 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
else if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true)) {
|
||||
{ // ( ... )+
|
||||
int _cnt273=0;
|
||||
for (;;) {
|
||||
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
|
||||
mDIGIT(false);
|
||||
}
|
||||
else {
|
||||
if ( _cnt273>=1 ) { goto _loop273; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
|
||||
}
|
||||
|
||||
_cnt273++;
|
||||
}
|
||||
_loop273:;
|
||||
} // ( ... )+
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1784 "pix.g"
|
||||
_ttype = INT_CONST;
|
||||
#line 1183 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((_tokenSet_5.member(LA(1))) && (true) && (true)) {
|
||||
{
|
||||
switch ( LA(1)) {
|
||||
case 0x61 /* 'a' */ :
|
||||
case 0x62 /* 'b' */ :
|
||||
case 0x63 /* 'c' */ :
|
||||
case 0x64 /* 'd' */ :
|
||||
case 0x65 /* 'e' */ :
|
||||
case 0x66 /* 'f' */ :
|
||||
case 0x67 /* 'g' */ :
|
||||
case 0x68 /* 'h' */ :
|
||||
case 0x69 /* 'i' */ :
|
||||
case 0x6a /* 'j' */ :
|
||||
case 0x6b /* 'k' */ :
|
||||
case 0x6c /* 'l' */ :
|
||||
case 0x6d /* 'm' */ :
|
||||
case 0x6e /* 'n' */ :
|
||||
case 0x6f /* 'o' */ :
|
||||
case 0x70 /* 'p' */ :
|
||||
case 0x71 /* 'q' */ :
|
||||
case 0x72 /* 'r' */ :
|
||||
case 0x73 /* 's' */ :
|
||||
case 0x74 /* 't' */ :
|
||||
case 0x75 /* 'u' */ :
|
||||
case 0x76 /* 'v' */ :
|
||||
case 0x77 /* 'w' */ :
|
||||
case 0x78 /* 'x' */ :
|
||||
case 0x79 /* 'y' */ :
|
||||
case 0x7a /* 'z' */ :
|
||||
{
|
||||
matchRange('a','z');
|
||||
break;
|
||||
}
|
||||
case 0x41 /* 'A' */ :
|
||||
@ -1276,74 +1251,186 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
|
||||
matchRange('A','Z');
|
||||
break;
|
||||
}
|
||||
case 0x5c /* '\\' */ :
|
||||
case 0x24 /* '$' */ :
|
||||
{
|
||||
match('\\' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x5e /* '^' */ :
|
||||
{
|
||||
match('^' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x5f /* '_' */ :
|
||||
{
|
||||
match('_' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x60 /* '`' */ :
|
||||
{
|
||||
match('`' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x61 /* 'a' */ :
|
||||
case 0x62 /* 'b' */ :
|
||||
case 0x63 /* 'c' */ :
|
||||
case 0x64 /* 'd' */ :
|
||||
case 0x65 /* 'e' */ :
|
||||
case 0x66 /* 'f' */ :
|
||||
case 0x67 /* 'g' */ :
|
||||
case 0x68 /* 'h' */ :
|
||||
case 0x69 /* 'i' */ :
|
||||
case 0x6a /* 'j' */ :
|
||||
case 0x6b /* 'k' */ :
|
||||
case 0x6c /* 'l' */ :
|
||||
case 0x6d /* 'm' */ :
|
||||
case 0x6e /* 'n' */ :
|
||||
case 0x6f /* 'o' */ :
|
||||
case 0x70 /* 'p' */ :
|
||||
case 0x71 /* 'q' */ :
|
||||
case 0x72 /* 'r' */ :
|
||||
case 0x73 /* 's' */ :
|
||||
case 0x74 /* 't' */ :
|
||||
case 0x75 /* 'u' */ :
|
||||
case 0x76 /* 'v' */ :
|
||||
case 0x77 /* 'w' */ :
|
||||
case 0x78 /* 'x' */ :
|
||||
case 0x79 /* 'y' */ :
|
||||
case 0x7a /* 'z' */ :
|
||||
{
|
||||
matchRange('a','z');
|
||||
match('$' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
goto _loop269;
|
||||
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
|
||||
}
|
||||
}
|
||||
}
|
||||
{ // ( ... )*
|
||||
for (;;) {
|
||||
switch ( LA(1)) {
|
||||
case 0x21 /* '!' */ :
|
||||
case 0x22 /* '\"' */ :
|
||||
case 0x23 /* '#' */ :
|
||||
case 0x24 /* '$' */ :
|
||||
case 0x25 /* '%' */ :
|
||||
case 0x26 /* '&' */ :
|
||||
case 0x27 /* '\'' */ :
|
||||
case 0x28 /* '(' */ :
|
||||
case 0x29 /* ')' */ :
|
||||
case 0x2a /* '*' */ :
|
||||
case 0x2b /* '+' */ :
|
||||
case 0x2c /* ',' */ :
|
||||
case 0x2d /* '-' */ :
|
||||
case 0x2e /* '.' */ :
|
||||
case 0x2f /* '/' */ :
|
||||
{
|
||||
matchRange('!','/');
|
||||
break;
|
||||
}
|
||||
case 0x30 /* '0' */ :
|
||||
case 0x31 /* '1' */ :
|
||||
case 0x32 /* '2' */ :
|
||||
case 0x33 /* '3' */ :
|
||||
case 0x34 /* '4' */ :
|
||||
case 0x35 /* '5' */ :
|
||||
case 0x36 /* '6' */ :
|
||||
case 0x37 /* '7' */ :
|
||||
case 0x38 /* '8' */ :
|
||||
case 0x39 /* '9' */ :
|
||||
{
|
||||
matchRange('0','9');
|
||||
break;
|
||||
}
|
||||
case 0x3a /* ':' */ :
|
||||
{
|
||||
match(':' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x3b /* ';' */ :
|
||||
{
|
||||
match(';' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x3c /* '<' */ :
|
||||
{
|
||||
match('<' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x3d /* '=' */ :
|
||||
{
|
||||
match('=' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x3e /* '>' */ :
|
||||
{
|
||||
match('>' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x3f /* '?' */ :
|
||||
{
|
||||
match('?' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x40 /* '@' */ :
|
||||
{
|
||||
match('@' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x41 /* 'A' */ :
|
||||
case 0x42 /* 'B' */ :
|
||||
case 0x43 /* 'C' */ :
|
||||
case 0x44 /* 'D' */ :
|
||||
case 0x45 /* 'E' */ :
|
||||
case 0x46 /* 'F' */ :
|
||||
case 0x47 /* 'G' */ :
|
||||
case 0x48 /* 'H' */ :
|
||||
case 0x49 /* 'I' */ :
|
||||
case 0x4a /* 'J' */ :
|
||||
case 0x4b /* 'K' */ :
|
||||
case 0x4c /* 'L' */ :
|
||||
case 0x4d /* 'M' */ :
|
||||
case 0x4e /* 'N' */ :
|
||||
case 0x4f /* 'O' */ :
|
||||
case 0x50 /* 'P' */ :
|
||||
case 0x51 /* 'Q' */ :
|
||||
case 0x52 /* 'R' */ :
|
||||
case 0x53 /* 'S' */ :
|
||||
case 0x54 /* 'T' */ :
|
||||
case 0x55 /* 'U' */ :
|
||||
case 0x56 /* 'V' */ :
|
||||
case 0x57 /* 'W' */ :
|
||||
case 0x58 /* 'X' */ :
|
||||
case 0x59 /* 'Y' */ :
|
||||
case 0x5a /* 'Z' */ :
|
||||
{
|
||||
matchRange('A','Z');
|
||||
break;
|
||||
}
|
||||
case 0x5c /* '\\' */ :
|
||||
{
|
||||
match('\\' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x5e /* '^' */ :
|
||||
{
|
||||
match('^' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x5f /* '_' */ :
|
||||
{
|
||||
match('_' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x60 /* '`' */ :
|
||||
{
|
||||
match('`' /* charlit */ );
|
||||
break;
|
||||
}
|
||||
case 0x61 /* 'a' */ :
|
||||
case 0x62 /* 'b' */ :
|
||||
case 0x63 /* 'c' */ :
|
||||
case 0x64 /* 'd' */ :
|
||||
case 0x65 /* 'e' */ :
|
||||
case 0x66 /* 'f' */ :
|
||||
case 0x67 /* 'g' */ :
|
||||
case 0x68 /* 'h' */ :
|
||||
case 0x69 /* 'i' */ :
|
||||
case 0x6a /* 'j' */ :
|
||||
case 0x6b /* 'k' */ :
|
||||
case 0x6c /* 'l' */ :
|
||||
case 0x6d /* 'm' */ :
|
||||
case 0x6e /* 'n' */ :
|
||||
case 0x6f /* 'o' */ :
|
||||
case 0x70 /* 'p' */ :
|
||||
case 0x71 /* 'q' */ :
|
||||
case 0x72 /* 'r' */ :
|
||||
case 0x73 /* 's' */ :
|
||||
case 0x74 /* 't' */ :
|
||||
case 0x75 /* 'u' */ :
|
||||
case 0x76 /* 'v' */ :
|
||||
case 0x77 /* 'w' */ :
|
||||
case 0x78 /* 'x' */ :
|
||||
case 0x79 /* 'y' */ :
|
||||
case 0x7a /* 'z' */ :
|
||||
{
|
||||
matchRange('a','z');
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
goto _loop293;
|
||||
}
|
||||
}
|
||||
}
|
||||
_loop293:;
|
||||
} // ( ... )*
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1807 "pix.g"
|
||||
_ttype = WORD;
|
||||
#line 1428 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
_loop269:;
|
||||
} // ( ... )*
|
||||
if ( inputState->guessing==0 ) {
|
||||
#line 1692 "pix.g"
|
||||
_ttype = WORD;
|
||||
#line 1341 "PIXCfgLexer.cpp"
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
|
||||
}
|
||||
}
|
||||
}}
|
||||
}
|
||||
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
|
||||
_token = makeToken(_ttype);
|
||||
@ -1379,11 +1466,11 @@ void PIXCfgLexer::mSTRING(bool _createToken) {
|
||||
matchNot('\"' /* charlit */ );
|
||||
}
|
||||
else {
|
||||
goto _loop272;
|
||||
goto _loop296;
|
||||
}
|
||||
|
||||
}
|
||||
_loop272:;
|
||||
_loop296:;
|
||||
} // ( ... )*
|
||||
match('\"' /* charlit */ );
|
||||
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
|
||||
@ -1763,7 +1850,7 @@ const unsigned long PIXCfgLexer::_tokenSet_0_data_[] = { 4294958072UL, 1UL, 0UL,
|
||||
// 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xe 0xf 0x10 0x11 0x12 0x13 0x14
|
||||
// 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f 0x7f 0x80 0x81
|
||||
// 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f
|
||||
// 0x90
|
||||
// 0x90 0x91
|
||||
const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgLexer::_tokenSet_0(_tokenSet_0_data_,16);
|
||||
const unsigned long PIXCfgLexer::_tokenSet_1_data_[] = { 4294958072UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL };
|
||||
// 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xe 0xf 0x10 0x11 0x12 0x13 0x14
|
||||
@ -1771,7 +1858,7 @@ const unsigned long PIXCfgLexer::_tokenSet_1_data_[] = { 4294958072UL, 429496729
|
||||
// & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G
|
||||
// H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b c d e f g h
|
||||
// i j k l m n o p q r s t u v w x y z { | } ~ 0x7f 0x80 0x81 0x82 0x83
|
||||
// 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90
|
||||
// 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 0x91
|
||||
const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgLexer::_tokenSet_1(_tokenSet_1_data_,16);
|
||||
const unsigned long PIXCfgLexer::_tokenSet_2_data_[] = { 0UL, 67043328UL, 0UL, 126UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL };
|
||||
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
@ -1792,6 +1879,6 @@ const unsigned long PIXCfgLexer::_tokenSet_6_data_[] = { 4294967288UL, 429496729
|
||||
// % & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F
|
||||
// G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b c d e f g
|
||||
// h i j k l m n o p q r s t u v w x y z { | } ~ 0x7f 0x80 0x81 0x82 0x83
|
||||
// 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90
|
||||
// 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 0x91
|
||||
const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgLexer::_tokenSet_6(_tokenSet_6_data_,16);
|
||||
|
||||
|
||||
@ -54,10 +54,13 @@ public:
|
||||
public: void mWhitespace(bool _createToken);
|
||||
protected: void mINT_CONST(bool _createToken);
|
||||
protected: void mHEX_CONST(bool _createToken);
|
||||
protected: void mNUMBER(bool _createToken);
|
||||
protected: void mNEG_INT_CONST(bool _createToken);
|
||||
protected: void mDIGIT(bool _createToken);
|
||||
protected: void mHEXDIGIT(bool _createToken);
|
||||
public: void mNUMBER(bool _createToken);
|
||||
protected: void mOBJECT(bool _createToken);
|
||||
protected: void mOBJECT_GROUP(bool _createToken);
|
||||
public: void mNUMBER_ADDRESS_OR_WORD(bool _createToken);
|
||||
public: void mDOT(bool _createToken);
|
||||
public: void mSTRING(bool _createToken);
|
||||
public: void mPIPE_CHAR(bool _createToken);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -46,18 +46,21 @@ class CUSTOM_API PIXCfgParser : public ANTLR_USE_NAMESPACE(antlr)LLkParser, publ
|
||||
virtual void reportError(const ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex)
|
||||
{
|
||||
importer->addMessageToLog("Parser error: " + ex.toString());
|
||||
std::cerr << ex.toString() << std::endl;
|
||||
}
|
||||
|
||||
/// Parser error-reporting function can be overridden in subclass
|
||||
virtual void reportError(const ANTLR_USE_NAMESPACE(std)string& s)
|
||||
{
|
||||
importer->addMessageToLog("Parser error: " + s);
|
||||
std::cerr << s << std::endl;
|
||||
}
|
||||
|
||||
/// Parser warning-reporting function can be overridden in subclass
|
||||
virtual void reportWarning(const ANTLR_USE_NAMESPACE(std)string& s)
|
||||
{
|
||||
importer->addMessageToLog("Parser warning: " + s);
|
||||
std::cerr << s << std::endl;
|
||||
}
|
||||
|
||||
#line 38 "PIXCfgParser.hpp"
|
||||
@ -145,15 +148,19 @@ public:
|
||||
public: void remark();
|
||||
public: void rule_extended();
|
||||
public: void rule_standard();
|
||||
public: void ip_protocols();
|
||||
public: void hostaddr_expr();
|
||||
public: void ip_protocols();
|
||||
public: void time_range();
|
||||
public: void fragments();
|
||||
public: void log();
|
||||
public: void icmp_spec();
|
||||
public: void acl_xoperator_src();
|
||||
public: void tcp_udp_rule_extended();
|
||||
public: void hostaddr_expr_1();
|
||||
public: void acl_tcp_udp_dst_port_spec();
|
||||
public: void hostaddr_expr_2();
|
||||
public: void acl_xoperator_dst();
|
||||
public: void established();
|
||||
public: void hostaddr_expr_3();
|
||||
public: void single_port_op();
|
||||
public: void port_range();
|
||||
public: void port_spec();
|
||||
@ -188,10 +195,10 @@ protected:
|
||||
private:
|
||||
static const char* tokenNames[];
|
||||
#ifndef NO_STATIC_CONSTS
|
||||
static const int NUM_TOKENS = 145;
|
||||
static const int NUM_TOKENS = 146;
|
||||
#else
|
||||
enum {
|
||||
NUM_TOKENS = 145
|
||||
NUM_TOKENS = 146
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -233,6 +240,18 @@ private:
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_17;
|
||||
static const unsigned long _tokenSet_18_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_18;
|
||||
static const unsigned long _tokenSet_19_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_19;
|
||||
static const unsigned long _tokenSet_20_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_20;
|
||||
static const unsigned long _tokenSet_21_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_21;
|
||||
static const unsigned long _tokenSet_22_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_22;
|
||||
static const unsigned long _tokenSet_23_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_23;
|
||||
static const unsigned long _tokenSet_24_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_24;
|
||||
};
|
||||
|
||||
#endif /*INC_PIXCfgParser_hpp_*/
|
||||
|
||||
@ -125,34 +125,35 @@ struct CUSTOM_API PIXCfgParserTokenTypes {
|
||||
NEG_INT_CONST = 114,
|
||||
DIGIT = 115,
|
||||
HEXDIGIT = 116,
|
||||
PIPE_CHAR = 117,
|
||||
NUMBER_SIGN = 118,
|
||||
PERCENT = 119,
|
||||
AMPERSAND = 120,
|
||||
APOSTROPHE = 121,
|
||||
OPENING_PAREN = 122,
|
||||
CLOSING_PAREN = 123,
|
||||
STAR = 124,
|
||||
PLUS = 125,
|
||||
COMMA = 126,
|
||||
MINUS = 127,
|
||||
DOT = 128,
|
||||
SLASH = 129,
|
||||
COLON = 130,
|
||||
SEMICOLON = 131,
|
||||
LESS_THAN = 132,
|
||||
EQUALS = 133,
|
||||
GREATER_THAN = 134,
|
||||
QUESTION = 135,
|
||||
COMMERCIAL_AT = 136,
|
||||
OPENING_SQUARE = 137,
|
||||
CLOSING_SQUARE = 138,
|
||||
CARET = 139,
|
||||
UNDERLINE = 140,
|
||||
OPENING_BRACE = 141,
|
||||
CLOSING_BRACE = 142,
|
||||
TILDE = 143,
|
||||
EXLAMATION = 144,
|
||||
NUMBER_ADDRESS_OR_WORD = 117,
|
||||
PIPE_CHAR = 118,
|
||||
NUMBER_SIGN = 119,
|
||||
PERCENT = 120,
|
||||
AMPERSAND = 121,
|
||||
APOSTROPHE = 122,
|
||||
OPENING_PAREN = 123,
|
||||
CLOSING_PAREN = 124,
|
||||
STAR = 125,
|
||||
PLUS = 126,
|
||||
COMMA = 127,
|
||||
MINUS = 128,
|
||||
DOT = 129,
|
||||
SLASH = 130,
|
||||
COLON = 131,
|
||||
SEMICOLON = 132,
|
||||
LESS_THAN = 133,
|
||||
EQUALS = 134,
|
||||
GREATER_THAN = 135,
|
||||
QUESTION = 136,
|
||||
COMMERCIAL_AT = 137,
|
||||
OPENING_SQUARE = 138,
|
||||
CLOSING_SQUARE = 139,
|
||||
CARET = 140,
|
||||
UNDERLINE = 141,
|
||||
OPENING_BRACE = 142,
|
||||
CLOSING_BRACE = 143,
|
||||
TILDE = 144,
|
||||
EXLAMATION = 145,
|
||||
NULL_TREE_LOOKAHEAD = 3
|
||||
};
|
||||
#ifdef __cplusplus
|
||||
|
||||
@ -23,7 +23,7 @@ PCP="pcp"=23
|
||||
PIM="pim"=24
|
||||
PPTP="pptp"=25
|
||||
SNP="snp"=26
|
||||
OBJECT="object"=27
|
||||
OBJECT=27
|
||||
NETWORK="network"=28
|
||||
NAT="nat"=29
|
||||
DESCRIPTION="description"=30
|
||||
@ -38,7 +38,7 @@ TCP="tcp"=38
|
||||
UDP="udp"=39
|
||||
SOURCE="source"=40
|
||||
DESTINATION="destination"=41
|
||||
OBJECT_GROUP="object-group"=42
|
||||
OBJECT_GROUP=42
|
||||
GROUP_OBJECT="group-object"=43
|
||||
NETWORK_OBJECT="network-object"=44
|
||||
PROTOCOL="protocol"=45
|
||||
@ -113,31 +113,32 @@ HEX_CONST=113
|
||||
NEG_INT_CONST=114
|
||||
DIGIT=115
|
||||
HEXDIGIT=116
|
||||
PIPE_CHAR=117
|
||||
NUMBER_SIGN=118
|
||||
PERCENT=119
|
||||
AMPERSAND=120
|
||||
APOSTROPHE=121
|
||||
OPENING_PAREN=122
|
||||
CLOSING_PAREN=123
|
||||
STAR=124
|
||||
PLUS=125
|
||||
COMMA=126
|
||||
MINUS=127
|
||||
DOT=128
|
||||
SLASH=129
|
||||
COLON=130
|
||||
SEMICOLON=131
|
||||
LESS_THAN=132
|
||||
EQUALS=133
|
||||
GREATER_THAN=134
|
||||
QUESTION=135
|
||||
COMMERCIAL_AT=136
|
||||
OPENING_SQUARE=137
|
||||
CLOSING_SQUARE=138
|
||||
CARET=139
|
||||
UNDERLINE=140
|
||||
OPENING_BRACE=141
|
||||
CLOSING_BRACE=142
|
||||
TILDE=143
|
||||
EXLAMATION=144
|
||||
NUMBER_ADDRESS_OR_WORD=117
|
||||
PIPE_CHAR=118
|
||||
NUMBER_SIGN=119
|
||||
PERCENT=120
|
||||
AMPERSAND=121
|
||||
APOSTROPHE=122
|
||||
OPENING_PAREN=123
|
||||
CLOSING_PAREN=124
|
||||
STAR=125
|
||||
PLUS=126
|
||||
COMMA=127
|
||||
MINUS=128
|
||||
DOT=129
|
||||
SLASH=130
|
||||
COLON=131
|
||||
SEMICOLON=132
|
||||
LESS_THAN=133
|
||||
EQUALS=134
|
||||
GREATER_THAN=135
|
||||
QUESTION=136
|
||||
COMMERCIAL_AT=137
|
||||
OPENING_SQUARE=138
|
||||
CLOSING_SQUARE=139
|
||||
CARET=140
|
||||
UNDERLINE=141
|
||||
OPENING_BRACE=142
|
||||
CLOSING_BRACE=143
|
||||
TILDE=144
|
||||
EXLAMATION=145
|
||||
|
||||
@ -90,18 +90,21 @@ options
|
||||
virtual void reportError(const ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex)
|
||||
{
|
||||
importer->addMessageToLog("Parser error: " + ex.toString());
|
||||
std::cerr << ex.toString() << std::endl;
|
||||
}
|
||||
|
||||
/// Parser error-reporting function can be overridden in subclass
|
||||
virtual void reportError(const ANTLR_USE_NAMESPACE(std)string& s)
|
||||
{
|
||||
importer->addMessageToLog("Parser error: " + s);
|
||||
std::cerr << s << std::endl;
|
||||
}
|
||||
|
||||
/// Parser warning-reporting function can be overridden in subclass
|
||||
virtual void reportWarning(const ANTLR_USE_NAMESPACE(std)string& s)
|
||||
{
|
||||
importer->addMessageToLog("Parser warning: " + s);
|
||||
std::cerr << s << std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
@ -899,6 +902,21 @@ deny_standard: STANDARD DENY
|
||||
|
||||
//****************************************************************
|
||||
// the difference between standard and extended acls should be in these rules
|
||||
|
||||
// standard acl only matches destination address
|
||||
rule_standard :
|
||||
{
|
||||
importer->tmp_a = "0.0.0.0";
|
||||
importer->tmp_nm = "0.0.0.0";
|
||||
importer->SaveTmpAddrToSrc();
|
||||
}
|
||||
hostaddr_expr
|
||||
{
|
||||
importer->SaveTmpAddrToDst();
|
||||
*dbg << "(dst) " << std::endl;
|
||||
}
|
||||
;
|
||||
|
||||
rule_extended :
|
||||
(
|
||||
ip_protocols
|
||||
@ -920,40 +938,125 @@ rule_extended :
|
||||
(fragments)?
|
||||
(log)?
|
||||
|
|
||||
(TCP|UDP)
|
||||
{
|
||||
importer->protocol = LT(0)->getText();
|
||||
*dbg << "protocol " << LT(0)->getText() << " ";
|
||||
}
|
||||
hostaddr_expr { importer->SaveTmpAddrToSrc(); *dbg << "(src) "; }
|
||||
(acl_xoperator_src)?
|
||||
hostaddr_expr { importer->SaveTmpAddrToDst(); *dbg << "(dst) "; }
|
||||
(acl_xoperator_dst)?
|
||||
(established)?
|
||||
(time_range)?
|
||||
(fragments)?
|
||||
(log)?
|
||||
tcp_udp_rule_extended
|
||||
)
|
||||
{
|
||||
*dbg << std::endl;
|
||||
}
|
||||
;
|
||||
|
||||
// standard acl only matches destination address
|
||||
rule_standard :
|
||||
tcp_udp_rule_extended :
|
||||
( TCP | UDP )
|
||||
{
|
||||
importer->tmp_a = "0.0.0.0";
|
||||
importer->tmp_nm = "0.0.0.0";
|
||||
importer->SaveTmpAddrToSrc();
|
||||
}
|
||||
hostaddr_expr
|
||||
{
|
||||
importer->SaveTmpAddrToDst();
|
||||
*dbg << "(dst) " << std::endl;
|
||||
importer->protocol = LT(0)->getText();
|
||||
*dbg << "protocol " << LT(0)->getText() << " ";
|
||||
}
|
||||
hostaddr_expr { importer->SaveTmpAddrToSrc(); *dbg << "(src) "; }
|
||||
(
|
||||
(OBJECT_GROUP) => (
|
||||
// This object-group can be either
|
||||
// source port or destination address
|
||||
//
|
||||
// Using disambiguating predicate; it must be the first element
|
||||
// in the production (i.e. nothing should precede {}?)
|
||||
{ importer->isKnownServiceGroupName(LT(2)->getText()) }?
|
||||
OBJECT_GROUP src_grp_name:WORD
|
||||
{
|
||||
importer->src_port_spec = src_grp_name->getText();
|
||||
*dbg << "src port spec: "
|
||||
<< src_grp_name->getText() << std::endl;
|
||||
}
|
||||
// destination address spec follows; hostaddr_expr matches
|
||||
// OBJECT | OBJECT_GROUP among pure addresses
|
||||
hostaddr_expr_1
|
||||
{
|
||||
importer->SaveTmpAddrToDst();
|
||||
*dbg << "(dst) ";
|
||||
}
|
||||
acl_tcp_udp_dst_port_spec
|
||||
|
|
||||
// still object-group after src address but this group is not
|
||||
// a known service group - must be dest. address group
|
||||
hostaddr_expr_2
|
||||
{
|
||||
importer->SaveTmpAddrToDst();
|
||||
*dbg << "(dst) ";
|
||||
}
|
||||
acl_tcp_udp_dst_port_spec
|
||||
)
|
||||
|
|
||||
// not "object-group" keyword after src address spec.
|
||||
OBJECT dst_addr_name:WORD (acl_xoperator_dst)? (established)?
|
||||
{
|
||||
// looks like "object foo" at this point can only be dest addr.
|
||||
// (judging by cli prompts on 8.3)
|
||||
importer->tmp_a = dst_addr_name->getText();
|
||||
importer->tmp_nm = "";
|
||||
importer->SaveTmpAddrToDst();
|
||||
*dbg << "dst addr object " << dst_addr_name->getText() << " ";
|
||||
}
|
||||
acl_tcp_udp_dst_port_spec
|
||||
|
|
||||
// if not object-group and object, then it can optionally
|
||||
// be regular inline port spec, followed by dest address spec
|
||||
(
|
||||
xoperator
|
||||
{
|
||||
importer->SaveTmpPortToSrc();
|
||||
}
|
||||
)?
|
||||
hostaddr_expr_3 { importer->SaveTmpAddrToDst(); *dbg << "(dst) "; }
|
||||
acl_tcp_udp_dst_port_spec
|
||||
)
|
||||
(time_range)?
|
||||
(fragments)?
|
||||
(log)?
|
||||
;
|
||||
|
||||
//****************************************************************
|
||||
|
||||
acl_tcp_udp_dst_port_spec :
|
||||
(
|
||||
// destination port spec. Can be blank, a named
|
||||
// object, object-group or inline
|
||||
|
||||
(OBJECT_GROUP) => (
|
||||
// This object-group can be only destination port
|
||||
OBJECT_GROUP dst_port_group_name:WORD
|
||||
{
|
||||
importer->dst_port_spec = dst_port_group_name->getText();
|
||||
*dbg << "dst port spec: "
|
||||
<< dst_port_group_name->getText() << std::endl;
|
||||
}
|
||||
(established)?
|
||||
)
|
||||
|
|
||||
// not "object-group"
|
||||
OBJECT dst_port_obj_name:WORD
|
||||
{
|
||||
importer->dst_port_spec = dst_port_obj_name->getText();
|
||||
*dbg << "dst addr object " << dst_port_obj_name->getText()
|
||||
<< std::endl;
|
||||
}
|
||||
(established)?
|
||||
|
|
||||
// if not object-group and object, then it can optionally
|
||||
// be regular inline port spec
|
||||
(acl_xoperator_dst)?
|
||||
(established)?
|
||||
)
|
||||
;
|
||||
|
||||
acl_xoperator_dst : xoperator
|
||||
{
|
||||
importer->SaveTmpPortToDst();
|
||||
}
|
||||
;
|
||||
|
||||
xoperator : single_port_op | port_range ;
|
||||
|
||||
//****************************************************************
|
||||
|
||||
ip_protocols :
|
||||
(
|
||||
( ip_protocol_names | ICMP6 )
|
||||
@ -989,20 +1092,6 @@ icmp_spec :
|
||||
)
|
||||
;
|
||||
|
||||
acl_xoperator_src : xoperator
|
||||
{
|
||||
importer->SaveTmpPortToSrc();
|
||||
}
|
||||
;
|
||||
|
||||
acl_xoperator_dst : xoperator
|
||||
{
|
||||
importer->SaveTmpPortToDst();
|
||||
}
|
||||
;
|
||||
|
||||
xoperator : single_port_op | port_range ;
|
||||
|
||||
single_port_op : (P_EQ | P_GT | P_LT | P_NEQ )
|
||||
{
|
||||
importer->tmp_port_op = LT(0)->getText();
|
||||
@ -1037,6 +1126,11 @@ pair_of_ports_spec : (s1:WORD|s2:INT_CONST) (e1:WORD|e2:INT_CONST)
|
||||
}
|
||||
;
|
||||
|
||||
// using these to help with debugging
|
||||
hostaddr_expr_1 : hostaddr_expr ;
|
||||
hostaddr_expr_2 : hostaddr_expr ;
|
||||
hostaddr_expr_3 : hostaddr_expr ;
|
||||
|
||||
hostaddr_expr :
|
||||
INTRFACE intf_name:WORD
|
||||
{
|
||||
@ -1606,8 +1700,9 @@ tokens
|
||||
NAMES = "names";
|
||||
NAME = "name";
|
||||
|
||||
OBJECT = "object";
|
||||
OBJECT_GROUP = "object-group";
|
||||
// OBJECT = "object";
|
||||
// OBJECT_GROUP = "object-group";
|
||||
|
||||
GROUP_OBJECT = "group-object";
|
||||
NETWORK_OBJECT = "network-object";
|
||||
SERVICE_OBJECT = "service-object";
|
||||
@ -1634,7 +1729,6 @@ tokens
|
||||
|
||||
}
|
||||
|
||||
|
||||
LINE_COMMENT : "!" (~('\r' | '\n'))* NEWLINE ;
|
||||
|
||||
// This is for lines like these that appear at the top of "show run"
|
||||
@ -1657,6 +1751,9 @@ INT_CONST:;
|
||||
protected
|
||||
HEX_CONST:;
|
||||
|
||||
protected
|
||||
NUMBER:;
|
||||
|
||||
protected
|
||||
NEG_INT_CONST:;
|
||||
|
||||
@ -1666,7 +1763,14 @@ DIGIT : '0'..'9' ;
|
||||
protected
|
||||
HEXDIGIT : 'a'..'f' ;
|
||||
|
||||
NUMBER :
|
||||
protected
|
||||
OBJECT :;
|
||||
|
||||
protected
|
||||
OBJECT_GROUP :;
|
||||
|
||||
|
||||
NUMBER_ADDRESS_OR_WORD :
|
||||
(
|
||||
( DIGIT ) =>
|
||||
(
|
||||
@ -1675,6 +1779,7 @@ NUMBER :
|
||||
{ _ttype = IPV4; }
|
||||
|
|
||||
( (DIGIT)+ DOT (DIGIT)+ )=> ( (DIGIT)+ DOT (DIGIT)+ )
|
||||
{ _ttype = NUMBER; }
|
||||
|
|
||||
( DIGIT )+ { _ttype = INT_CONST; }
|
||||
)
|
||||
@ -1685,6 +1790,16 @@ NUMBER :
|
||||
( COLON ( 'a'..'f' | '0'..'9' )* )+ )
|
||||
{ _ttype = IPV6; }
|
||||
)
|
||||
|
|
||||
("obj" "ect") =>
|
||||
(
|
||||
"object"
|
||||
(
|
||||
("-gr" "oup") { _ttype = OBJECT_GROUP; }
|
||||
|
|
||||
"" { _ttype = OBJECT; }
|
||||
)
|
||||
)
|
||||
|
|
||||
( 'a'..'z' | 'A'..'Z' | '$' )
|
||||
( '!'..'/' | '0'..'9' | ':' | ';' | '<' | '=' | '>' |
|
||||
|
||||
@ -0,0 +1,199 @@
|
||||
: Saved
|
||||
:
|
||||
ASA Version 8.3(2)
|
||||
!
|
||||
hostname asa5505
|
||||
|
||||
|
||||
interface Vlan1
|
||||
nameif inside
|
||||
security-level 100
|
||||
ip address 192.168.1.1 255.255.255.0
|
||||
exit
|
||||
|
||||
interface Vlan2
|
||||
nameif outside
|
||||
security-level 0
|
||||
ip address dhcp setroute
|
||||
exit
|
||||
|
||||
interface Ethernet0/0
|
||||
description Switch port 0/0
|
||||
exit
|
||||
|
||||
|
||||
no logging buffered
|
||||
no logging console
|
||||
no logging timestamp
|
||||
no logging on
|
||||
|
||||
|
||||
timeout xlate 0:0:0
|
||||
timeout conn 0:0:0
|
||||
timeout udp 0:0:0
|
||||
timeout sunrpc 0:0:0
|
||||
timeout h323 0:0:0
|
||||
timeout sip 0:0:0
|
||||
timeout sip_media 0:0:0
|
||||
timeout half-closed 0:0:0
|
||||
timeout uauth 0:0:0
|
||||
|
||||
|
||||
clear config ssh
|
||||
aaa authentication ssh console LOCAL
|
||||
|
||||
clear config snmp-server
|
||||
no snmp-server enable traps
|
||||
|
||||
clear config ntp
|
||||
|
||||
|
||||
no service resetinbound
|
||||
no service resetoutside
|
||||
no sysopt connection timewait
|
||||
no sysopt nodnsalias inbound
|
||||
no sysopt nodnsalias outbound
|
||||
|
||||
|
||||
class-map inspection_default
|
||||
match default-inspection-traffic
|
||||
|
||||
policy-map global_policy
|
||||
class inspection_default
|
||||
|
||||
service-policy global_policy global
|
||||
|
||||
|
||||
|
||||
clear xlate
|
||||
clear config nat
|
||||
clear config access-list
|
||||
clear config icmp
|
||||
clear config telnet
|
||||
clear config object-group
|
||||
clear config object
|
||||
|
||||
|
||||
object service http.0
|
||||
service tcp destination eq 80
|
||||
exit
|
||||
|
||||
object service https.0
|
||||
service tcp destination eq 443
|
||||
exit
|
||||
|
||||
object network server-1.0
|
||||
host 192.168.1.100
|
||||
exit
|
||||
|
||||
object network Internal_net.0
|
||||
subnet 192.168.1.0 255.255.255.0
|
||||
exit
|
||||
|
||||
object network external_net.0
|
||||
subnet 192.0.2.0 255.255.255.0
|
||||
|
||||
object-group service srv-group-1 tcp
|
||||
port-object eq 80
|
||||
port-object eq 443
|
||||
exit
|
||||
|
||||
object service ip2
|
||||
service eigrp
|
||||
|
||||
object-group protocol pg1
|
||||
protocol-object 111
|
||||
protocol-object ah
|
||||
protocol-object ip
|
||||
protocol-object eigrp
|
||||
|
||||
object-group network src-network-group-1
|
||||
network-object 192.168.1.0 255.255.255.0
|
||||
network-object 192.168.2.0 255.255.255.0
|
||||
|
||||
object-group network dst-network-group-1
|
||||
network-object object external_net.0
|
||||
|
||||
|
||||
|
||||
!################
|
||||
!
|
||||
|
||||
access-list inside_in extended permit object-group pg1 192.168.1.0 255.255.255.0 any
|
||||
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 any
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 host 192.0.2.1
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 192.0.2.0 255.255.255.0
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object external_net.0
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group dst-network-group-1
|
||||
|
||||
|
||||
! named object in both source and destination
|
||||
!
|
||||
access-list inside_in extended permit tcp object server-1.0 object external_net.0
|
||||
|
||||
|
||||
! src port definitions
|
||||
!
|
||||
access-list inside_in extended permit tcp object server-1.0 eq 80 any
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 lt 1024 any
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 gt 1024 any
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 range 1000 1100 any
|
||||
|
||||
|
||||
! ASA 8.3 does not take this acl definition (assumes object http.0 is dest address)
|
||||
! access-list inside_in extended permit tcp object server-1.0 object http.0 any
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group srv-group-1 any
|
||||
|
||||
|
||||
|
||||
|
||||
! dest port is defined using in-line port operators
|
||||
!
|
||||
access-list inside_in extended permit tcp object server-1.0 any eq 80
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 host 192.0.2.1 eq 80
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 192.0.2.0 255.255.255.0 eq 80
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object external_net.0 eq 80
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group dst-network-group-1 eq 80
|
||||
|
||||
|
||||
! object-group service is used to define destination ports
|
||||
!
|
||||
access-list inside_in extended permit tcp object server-1.0 any object-group srv-group-1
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 host 192.0.2.1 object-group srv-group-1
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 192.0.2.0 255.255.255.0 object-group srv-group-1
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object external_net.0 object-group srv-group-1
|
||||
|
||||
|
||||
|
||||
|
||||
! object-group service is used to define source ports
|
||||
!
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group srv-group-1 any
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group srv-group-1 host 192.0.2.1
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group srv-group-1 192.0.2.0 255.255.255.0
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group srv-group-1 object external_net.0
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group srv-group-1 object-group dst-network-group-1
|
||||
|
||||
|
||||
access-group inside_in in interface inside
|
||||
@ -158,7 +158,10 @@ access-list inside_in extended deny ip any any log 0 interval 300
|
||||
! port definitions in both source and destination
|
||||
|
||||
! the following is unsupported at this time , see #2273
|
||||
! access-list inside_in extended permit tcp object server-1.0 object-group id5102X14531.srv.tcp.0 any
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group id5102X14531.srv.tcp.0 any
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 object-group dst-network-group-1
|
||||
|
||||
access-list inside_in extended permit tcp object server-1.0 eq 80 any
|
||||
access-list inside_in extended permit tcp object server-1.0 gt 1010 any
|
||||
access-list inside_in extended permit tcp object server-1.0 lt 1024 any
|
||||
@ -202,6 +205,11 @@ access-list outside_out standard permit 192.0.2.0 255.255.255.0
|
||||
access-list outside_out standard permit host 192.0.2.1
|
||||
access-list outside_out standard permit any
|
||||
|
||||
! tests for access lists using object groups for both source service and destination address
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
! access-group statements
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user