* parsers/pix.g (port_object): see #2234 added support for import

of "obejct-group service name tcp|udp" constructs in ASA 8.3 with
subsequent "port-object" statements.
This commit is contained in:
Vadim Kurland
2011-03-22 17:41:42 -07:00
parent 90f6689886
commit 2ebad6b511
11 changed files with 1253 additions and 726 deletions
+6
View File
@@ -1,3 +1,9 @@
2011-03-22 vadim <vadim@netcitadel.com>
* parsers/pix.g (port_object): see #2234 added support for import
of "obejct-group service name tcp|udp" constructs in ASA 8.3 with
subsequent "port-object" statements.
2011-03-21 vadim <vadim@netcitadel.com>
* PortRangeConverter.h (PortRangeConverter): see #2252 TCP and UDP
+6
View File
@@ -97,6 +97,7 @@ void PIXImporter::clear()
current_object_group = NULL;
object_group_name = "";
object_group_comment = "";
object_group_service_protocol = "";
}
/*
@@ -499,6 +500,8 @@ void PIXImporter::newObjectGroupService(const string &name)
maker.createObject(ServiceGroup::TYPENAME, name)));
named_objects_registry[object_group_name] = current_object_group;
object_group_service_protocol = "";
*logger << "Object Group (service) " + name;
}
@@ -578,6 +581,9 @@ void PIXImporter::addIPServiceToObjectGroup()
void PIXImporter::addTCPUDPServiceToObjectGroup()
{
FWObject *new_obj = NULL;
if (protocol.empty() && ! object_group_service_protocol.isEmpty())
protocol = object_group_service_protocol.toStdString();
if (protocol == "tcp") new_obj = createTCPService();
if (protocol == "udp") new_obj = createUDPService();
if (new_obj)
+4
View File
@@ -49,6 +49,7 @@ class PIXImporter : public IOSImporter
QString object_group_name;
QString object_group_comment;
QString object_group_service_protocol;
libfwbuilder::FWObject *current_object_group;
QMap<QString,libfwbuilder::FWObject*> named_objects_registry;
@@ -96,6 +97,9 @@ class PIXImporter : public IOSImporter
void newObjectGroupProtocol(const std::string &group_name);
void newObjectGroupICMP(const std::string &group_name);
void setObjectGroupServiceProtocol(const std::string &proto)
{ object_group_service_protocol = proto.c_str(); }
void setObjectGroupDescription(const std::string &descr);
void addNamedObjectToObjectGroup(const std::string &object_name);
+210 -209
View File
@@ -47,22 +47,22 @@ void PIXCfgLexer::initLiterals()
literals["name"] = 9;
literals["names"] = 8;
literals["ospf"] = 22;
literals["established"] = 68;
literals["mac-address"] = 82;
literals["nameif"] = 87;
literals["established"] = 70;
literals["mac-address"] = 85;
literals["nameif"] = 89;
literals["subnet"] = 33;
literals["controller"] = 71;
literals["controller"] = 73;
literals["object"] = 27;
literals["pcp"] = 23;
literals["remark"] = 95;
literals["access-list"] = 58;
literals["remark"] = 97;
literals["access-list"] = 60;
literals["snp"] = 26;
literals["hostname"] = 56;
literals["hold-time"] = 80;
literals["hostname"] = 58;
literals["hold-time"] = 83;
literals["community-list"] = 7;
literals["permit"] = 59;
literals["security-level"] = 88;
literals["no"] = 86;
literals["permit"] = 61;
literals["security-level"] = 90;
literals["no"] = 52;
literals["source"] = 40;
literals["igrp"] = 18;
literals["group-object"] = 43;
@@ -70,65 +70,66 @@ void PIXCfgLexer::initLiterals()
literals["nos"] = 21;
literals["ipinip"] = 19;
literals["quit"] = 5;
literals["crypto"] = 50;
literals["crypto"] = 51;
literals["protocol"] = 45;
literals["icmp-type"] = 48;
literals["PIX"] = 52;
literals["PIX"] = 54;
literals["icmp-object"] = 47;
literals["exit"] = 97;
literals["exit"] = 76;
literals["nat"] = 29;
literals["object-group"] = 42;
literals["range"] = 32;
literals["service-object"] = 49;
literals["gre"] = 16;
literals["gt"] = 62;
literals["gt"] = 64;
literals["ah"] = 13;
literals["host"] = 31;
literals["secondary"] = 99;
literals["interface"] = 72;
literals["rip"] = 85;
literals["secondary"] = 100;
literals["interface"] = 74;
literals["rip"] = 88;
literals["protocol-object"] = 46;
literals["icmp6"] = 37;
literals["standard"] = 102;
literals["standard"] = 103;
literals["network"] = 28;
literals["service"] = 34;
literals["vlan"] = 74;
literals["access"] = 94;
literals["multicast"] = 83;
literals["any"] = 65;
literals["dhcp"] = 91;
literals["speed"] = 75;
literals["deny"] = 60;
literals["neq"] = 64;
literals["address"] = 90;
literals["vlan"] = 77;
literals["access"] = 96;
literals["multicast"] = 86;
literals["any"] = 67;
literals["dhcp"] = 93;
literals["speed"] = 78;
literals["deny"] = 62;
literals["neq"] = 66;
literals["address"] = 92;
literals["esp"] = 15;
literals["network-object"] = 44;
literals["shutdown"] = 89;
literals["delay"] = 79;
literals["certificate"] = 51;
literals["shutdown"] = 91;
literals["delay"] = 82;
literals["certificate"] = 53;
literals["udp"] = 39;
literals["fragments"] = 69;
literals["eq"] = 61;
literals["fragments"] = 71;
literals["eq"] = 63;
literals["destination"] = 41;
literals["duplex"] = 76;
literals["setroute"] = 100;
literals["duplex"] = 79;
literals["setroute"] = 101;
literals["ip"] = 6;
literals["eigrp"] = 14;
literals["log-input"] = 67;
literals["switchport"] = 93;
literals["log-input"] = 69;
literals["switchport"] = 95;
literals["description"] = 30;
literals["extended"] = 101;
literals["extended"] = 102;
literals["igmp"] = 17;
literals["access-group"] = 96;
literals["ddns"] = 77;
literals["Version"] = 54;
literals["log"] = 66;
literals["forward"] = 78;
literals["ASA"] = 53;
literals["lt"] = 63;
literals["ipv6"] = 81;
literals["time-range"] = 70;
literals["standby"] = 92;
literals["access-group"] = 98;
literals["ddns"] = 80;
literals["Version"] = 56;
literals["log"] = 68;
literals["forward"] = 81;
literals["ASA"] = 55;
literals["lt"] = 65;
literals["ipv6"] = 84;
literals["port-object"] = 50;
literals["time-range"] = 72;
literals["standby"] = 94;
literals["icmp"] = 35;
literals["tcp"] = 38;
}
@@ -444,11 +445,11 @@ void PIXCfgLexer::mLINE_COMMENT(bool _createToken) {
}
}
else {
goto _loop184;
goto _loop188;
}
}
_loop184:;
_loop188:;
} // ( ... )*
mNEWLINE(false);
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
@@ -480,9 +481,9 @@ void PIXCfgLexer::mNEWLINE(bool _createToken) {
}
if ( inputState->guessing==0 ) {
#line 1552 "pix.g"
#line 1577 "pix.g"
newline();
#line 486 "PIXCfgLexer.cpp"
#line 487 "PIXCfgLexer.cpp"
}
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
_token = makeToken(_ttype);
@@ -506,11 +507,11 @@ void PIXCfgLexer::mCOLON_COMMENT(bool _createToken) {
}
}
else {
goto _loop188;
goto _loop192;
}
}
_loop188:;
_loop192:;
} // ( ... )*
mNEWLINE(false);
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
@@ -604,9 +605,9 @@ void PIXCfgLexer::mWhitespace(bool _createToken) {
}
}
if ( inputState->guessing==0 ) {
#line 1547 "pix.g"
#line 1572 "pix.g"
_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP;
#line 610 "PIXCfgLexer.cpp"
#line 611 "PIXCfgLexer.cpp"
}
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
_token = makeToken(_ttype);
@@ -689,15 +690,15 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
{
bool synPredMatched236 = false;
bool synPredMatched240 = false;
if (((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2))) && (true))) {
int _m236 = mark();
synPredMatched236 = true;
int _m240 = mark();
synPredMatched240 = true;
inputState->guessing++;
try {
{
{ // ( ... )+
int _cnt235=0;
int _cnt239=0;
for (;;) {
switch ( LA(1)) {
case 0x61 /* 'a' */ :
@@ -726,27 +727,27 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
}
default:
{
if ( _cnt235>=1 ) { goto _loop235; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt239>=1 ) { goto _loop239; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
}
_cnt235++;
_cnt239++;
}
_loop235:;
_loop239:;
} // ( ... )+
mCOLON(false);
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
synPredMatched236 = false;
synPredMatched240 = false;
}
rewind(_m236);
rewind(_m240);
inputState->guessing--;
}
if ( synPredMatched236 ) {
if ( synPredMatched240 ) {
{
{
{ // ( ... )+
int _cnt240=0;
int _cnt244=0;
for (;;) {
switch ( LA(1)) {
case 0x61 /* 'a' */ :
@@ -775,15 +776,15 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
}
default:
{
if ( _cnt240>=1 ) { goto _loop240; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt244>=1 ) { goto _loop244; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
}
_cnt240++;
_cnt244++;
}
_loop240:;
_loop244:;
} // ( ... )+
{ // ( ... )+
int _cnt244=0;
int _cnt248=0;
for (;;) {
if ((LA(1) == 0x3a /* ':' */ )) {
mCOLON(false);
@@ -816,34 +817,34 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
}
default:
{
goto _loop243;
goto _loop247;
}
}
}
_loop243:;
_loop247:;
} // ( ... )*
}
else {
if ( _cnt244>=1 ) { goto _loop244; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt248>=1 ) { goto _loop248; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt244++;
_cnt248++;
}
_loop244:;
_loop248:;
} // ( ... )+
}
if ( inputState->guessing==0 ) {
#line 1586 "pix.g"
#line 1611 "pix.g"
_ttype = IPV6;
#line 839 "PIXCfgLexer.cpp"
#line 840 "PIXCfgLexer.cpp"
}
}
}
else {
bool synPredMatched201 = false;
bool synPredMatched205 = false;
if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true))) {
int _m201 = mark();
synPredMatched201 = true;
int _m205 = mark();
synPredMatched205 = true;
inputState->guessing++;
try {
{
@@ -851,51 +852,21 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
synPredMatched201 = false;
synPredMatched205 = false;
}
rewind(_m201);
rewind(_m205);
inputState->guessing--;
}
if ( synPredMatched201 ) {
if ( synPredMatched205 ) {
{
bool synPredMatched210 = false;
bool synPredMatched214 = false;
if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (_tokenSet_4.member(LA(2))) && (_tokenSet_4.member(LA(3))))) {
int _m210 = mark();
synPredMatched210 = true;
int _m214 = mark();
synPredMatched214 = true;
inputState->guessing++;
try {
{
{ // ( ... )+
int _cnt205=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt205>=1 ) { goto _loop205; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt205++;
}
_loop205:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt207=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt207>=1 ) { goto _loop207; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt207++;
}
_loop207:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt209=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
@@ -909,47 +880,47 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
}
_loop209:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt211=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt211>=1 ) { goto _loop211; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt211++;
}
_loop211:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt213=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt213>=1 ) { goto _loop213; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt213++;
}
_loop213:;
} // ( ... )+
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
synPredMatched210 = false;
synPredMatched214 = false;
}
rewind(_m210);
rewind(_m214);
inputState->guessing--;
}
if ( synPredMatched210 ) {
if ( synPredMatched214 ) {
{
{ // ( ... )+
int _cnt213=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt213>=1 ) { goto _loop213; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt213++;
}
_loop213:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt215=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt215>=1 ) { goto _loop215; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt215++;
}
_loop215:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt217=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
@@ -978,92 +949,90 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
}
_loop219:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt221=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt221>=1 ) { goto _loop221; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt221++;
}
_loop221:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt223=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt223>=1 ) { goto _loop223; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt223++;
}
_loop223:;
} // ( ... )+
}
if ( inputState->guessing==0 ) {
#line 1575 "pix.g"
#line 1600 "pix.g"
_ttype = IPV4;
#line 986 "PIXCfgLexer.cpp"
#line 987 "PIXCfgLexer.cpp"
}
}
else {
bool synPredMatched225 = false;
bool synPredMatched229 = false;
if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (_tokenSet_4.member(LA(2))) && (_tokenSet_4.member(LA(3))))) {
int _m225 = mark();
synPredMatched225 = true;
int _m229 = mark();
synPredMatched229 = true;
inputState->guessing++;
try {
{
{ // ( ... )+
int _cnt222=0;
int _cnt226=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt222>=1 ) { goto _loop222; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt226>=1 ) { goto _loop226; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt222++;
_cnt226++;
}
_loop222:;
_loop226:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt224=0;
int _cnt228=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt224>=1 ) { goto _loop224; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt228>=1 ) { goto _loop228; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt224++;
_cnt228++;
}
_loop224:;
_loop228:;
} // ( ... )+
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
synPredMatched225 = false;
synPredMatched229 = false;
}
rewind(_m225);
rewind(_m229);
inputState->guessing--;
}
if ( synPredMatched225 ) {
if ( synPredMatched229 ) {
{
{ // ( ... )+
int _cnt228=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt228>=1 ) { goto _loop228; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt228++;
}
_loop228:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt230=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt230>=1 ) { goto _loop230; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt230++;
}
_loop230:;
} // ( ... )+
}
}
else if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true)) {
{ // ( ... )+
int _cnt232=0;
for (;;) {
@@ -1078,10 +1047,42 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
}
_loop232:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt234=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt234>=1 ) { goto _loop234; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt234++;
}
_loop234:;
} // ( ... )+
}
}
else if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true)) {
{ // ( ... )+
int _cnt236=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt236>=1 ) { goto _loop236; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt236++;
}
_loop236:;
} // ( ... )+
if ( inputState->guessing==0 ) {
#line 1579 "pix.g"
#line 1604 "pix.g"
_ttype = INT_CONST;
#line 1085 "PIXCfgLexer.cpp"
#line 1086 "PIXCfgLexer.cpp"
}
}
else {
@@ -1317,16 +1318,16 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
}
default:
{
goto _loop247;
goto _loop251;
}
}
}
_loop247:;
_loop251:;
} // ( ... )*
if ( inputState->guessing==0 ) {
#line 1592 "pix.g"
#line 1617 "pix.g"
_ttype = WORD;
#line 1330 "PIXCfgLexer.cpp"
#line 1331 "PIXCfgLexer.cpp"
}
}
else {
@@ -1368,11 +1369,11 @@ void PIXCfgLexer::mSTRING(bool _createToken) {
matchNot('\"' /* charlit */ );
}
else {
goto _loop250;
goto _loop254;
}
}
_loop250:;
_loop254:;
} // ( ... )*
match('\"' /* charlit */ );
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
@@ -1751,7 +1752,7 @@ void PIXCfgLexer::mEXLAMATION(bool _createToken) {
const unsigned long PIXCfgLexer::_tokenSet_0_data_[] = { 4294958072UL, 1UL, 0UL, 2147483648UL, 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
// 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f 0x7f 0x80 0x81
// 0x82 0x83 0x84 0x85 0x86 0x87
// 0x82 0x83 0x84 0x85 0x86 0x87 0x88
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
@@ -1759,7 +1760,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
// 0x84 0x85 0x86 0x87 0x88
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
@@ -1780,6 +1781,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
// 0x84 0x85 0x86 0x87 0x88
const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgLexer::_tokenSet_6(_tokenSet_6_data_,16);
File diff suppressed because it is too large Load Diff
+6 -2
View File
@@ -108,6 +108,7 @@ public:
public: void object_group_icmp_8_0();
public: void object_group_icmp_8_3();
public: void crypto();
public: void no_commands();
public: void unknown_command();
public: void ip_protocol_names();
public: void named_object_network_parameters();
@@ -135,6 +136,7 @@ public:
public: void icmp_object();
public: void object_group_service_parameters();
public: void service_object();
public: void port_object();
public: void permit_ext();
public: void deny_ext();
public: void remark();
@@ -179,10 +181,10 @@ protected:
private:
static const char* tokenNames[];
#ifndef NO_STATIC_CONSTS
static const int NUM_TOKENS = 136;
static const int NUM_TOKENS = 137;
#else
enum {
NUM_TOKENS = 136
NUM_TOKENS = 137
};
#endif
@@ -212,6 +214,8 @@ private:
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_11;
static const unsigned long _tokenSet_12_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_12;
static const unsigned long _tokenSet_13_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_13;
};
#endif /*INC_PIXCfgParser_hpp_*/
+87 -86
View File
@@ -58,92 +58,93 @@ struct CUSTOM_API PIXCfgParserTokenTypes {
ICMP_OBJECT = 47,
ICMP_TYPE = 48,
SERVICE_OBJECT = 49,
CRYPTO = 50,
CERTIFICATE = 51,
PIX_WORD = 52,
ASA_WORD = 53,
VERSION_WORD = 54,
NUMBER = 55,
HOSTNAME = 56,
STRING = 57,
ACCESS_LIST = 58,
PERMIT = 59,
DENY = 60,
P_EQ = 61,
P_GT = 62,
P_LT = 63,
P_NEQ = 64,
ANY = 65,
LOG = 66,
LOG_INPUT = 67,
ESTABLISHED = 68,
FRAGMENTS = 69,
TIME_RANGE = 70,
CONTROLLER = 71,
INTRFACE = 72,
LINE_COMMENT = 73,
VLAN = 74,
SPEED = 75,
DUPLEX = 76,
DDNS = 77,
FORWARD = 78,
DELAY = 79,
HOLD_TIME = 80,
IPV6_C = 81,
MAC_ADDRESS = 82,
MULTICAST = 83,
PPPOE = 84,
RIP = 85,
NO = 86,
NAMEIF = 87,
SEC_LEVEL = 88,
SHUTDOWN = 89,
ADDRESS = 90,
DHCP = 91,
STANDBY = 92,
SWITCHPORT = 93,
ACCESS = 94,
REMARK = 95,
ACCESS_GROUP = 96,
EXIT = 97,
COLON_COMMENT = 98,
SECONDARY = 99,
SETROUTE = 100,
EXTENDED = 101,
STANDARD = 102,
Whitespace = 103,
HEX_CONST = 104,
NEG_INT_CONST = 105,
DIGIT = 106,
HEXDIGIT = 107,
PIPE_CHAR = 108,
NUMBER_SIGN = 109,
PERCENT = 110,
AMPERSAND = 111,
APOSTROPHE = 112,
OPENING_PAREN = 113,
CLOSING_PAREN = 114,
STAR = 115,
PLUS = 116,
COMMA = 117,
MINUS = 118,
DOT = 119,
SLASH = 120,
COLON = 121,
SEMICOLON = 122,
LESS_THAN = 123,
EQUALS = 124,
GREATER_THAN = 125,
QUESTION = 126,
COMMERCIAL_AT = 127,
OPENING_SQUARE = 128,
CLOSING_SQUARE = 129,
CARET = 130,
UNDERLINE = 131,
OPENING_BRACE = 132,
CLOSING_BRACE = 133,
TILDE = 134,
EXLAMATION = 135,
PORT_OBJECT = 50,
CRYPTO = 51,
NO = 52,
CERTIFICATE = 53,
PIX_WORD = 54,
ASA_WORD = 55,
VERSION_WORD = 56,
NUMBER = 57,
HOSTNAME = 58,
STRING = 59,
ACCESS_LIST = 60,
PERMIT = 61,
DENY = 62,
P_EQ = 63,
P_GT = 64,
P_LT = 65,
P_NEQ = 66,
ANY = 67,
LOG = 68,
LOG_INPUT = 69,
ESTABLISHED = 70,
FRAGMENTS = 71,
TIME_RANGE = 72,
CONTROLLER = 73,
INTRFACE = 74,
LINE_COMMENT = 75,
EXIT = 76,
VLAN = 77,
SPEED = 78,
DUPLEX = 79,
DDNS = 80,
FORWARD = 81,
DELAY = 82,
HOLD_TIME = 83,
IPV6_C = 84,
MAC_ADDRESS = 85,
MULTICAST = 86,
PPPOE = 87,
RIP = 88,
NAMEIF = 89,
SEC_LEVEL = 90,
SHUTDOWN = 91,
ADDRESS = 92,
DHCP = 93,
STANDBY = 94,
SWITCHPORT = 95,
ACCESS = 96,
REMARK = 97,
ACCESS_GROUP = 98,
COLON_COMMENT = 99,
SECONDARY = 100,
SETROUTE = 101,
EXTENDED = 102,
STANDARD = 103,
Whitespace = 104,
HEX_CONST = 105,
NEG_INT_CONST = 106,
DIGIT = 107,
HEXDIGIT = 108,
PIPE_CHAR = 109,
NUMBER_SIGN = 110,
PERCENT = 111,
AMPERSAND = 112,
APOSTROPHE = 113,
OPENING_PAREN = 114,
CLOSING_PAREN = 115,
STAR = 116,
PLUS = 117,
COMMA = 118,
MINUS = 119,
DOT = 120,
SLASH = 121,
COLON = 122,
SEMICOLON = 123,
LESS_THAN = 124,
EQUALS = 125,
GREATER_THAN = 126,
QUESTION = 127,
COMMERCIAL_AT = 128,
OPENING_SQUARE = 129,
CLOSING_SQUARE = 130,
CARET = 131,
UNDERLINE = 132,
OPENING_BRACE = 133,
CLOSING_BRACE = 134,
TILDE = 135,
EXLAMATION = 136,
NULL_TREE_LOOKAHEAD = 3
};
#ifdef __cplusplus
+87 -86
View File
@@ -46,89 +46,90 @@ PROTOCOL_OBJECT="protocol-object"=46
ICMP_OBJECT="icmp-object"=47
ICMP_TYPE="icmp-type"=48
SERVICE_OBJECT="service-object"=49
CRYPTO="crypto"=50
CERTIFICATE="certificate"=51
PIX_WORD="PIX"=52
ASA_WORD="ASA"=53
VERSION_WORD="Version"=54
NUMBER=55
HOSTNAME="hostname"=56
STRING=57
ACCESS_LIST="access-list"=58
PERMIT="permit"=59
DENY="deny"=60
P_EQ="eq"=61
P_GT="gt"=62
P_LT="lt"=63
P_NEQ="neq"=64
ANY="any"=65
LOG="log"=66
LOG_INPUT="log-input"=67
ESTABLISHED="established"=68
FRAGMENTS="fragments"=69
TIME_RANGE="time-range"=70
CONTROLLER="controller"=71
INTRFACE="interface"=72
LINE_COMMENT=73
VLAN="vlan"=74
SPEED="speed"=75
DUPLEX="duplex"=76
DDNS="ddns"=77
FORWARD="forward"=78
DELAY="delay"=79
HOLD_TIME="hold-time"=80
IPV6_C="ipv6"=81
MAC_ADDRESS="mac-address"=82
MULTICAST="multicast"=83
PPPOE=84
RIP="rip"=85
NO="no"=86
NAMEIF="nameif"=87
SEC_LEVEL="security-level"=88
SHUTDOWN="shutdown"=89
ADDRESS="address"=90
DHCP="dhcp"=91
STANDBY="standby"=92
SWITCHPORT="switchport"=93
ACCESS="access"=94
REMARK="remark"=95
ACCESS_GROUP="access-group"=96
EXIT="exit"=97
COLON_COMMENT=98
SECONDARY="secondary"=99
SETROUTE="setroute"=100
EXTENDED="extended"=101
STANDARD="standard"=102
Whitespace=103
HEX_CONST=104
NEG_INT_CONST=105
DIGIT=106
HEXDIGIT=107
PIPE_CHAR=108
NUMBER_SIGN=109
PERCENT=110
AMPERSAND=111
APOSTROPHE=112
OPENING_PAREN=113
CLOSING_PAREN=114
STAR=115
PLUS=116
COMMA=117
MINUS=118
DOT=119
SLASH=120
COLON=121
SEMICOLON=122
LESS_THAN=123
EQUALS=124
GREATER_THAN=125
QUESTION=126
COMMERCIAL_AT=127
OPENING_SQUARE=128
CLOSING_SQUARE=129
CARET=130
UNDERLINE=131
OPENING_BRACE=132
CLOSING_BRACE=133
TILDE=134
EXLAMATION=135
PORT_OBJECT="port-object"=50
CRYPTO="crypto"=51
NO="no"=52
CERTIFICATE="certificate"=53
PIX_WORD="PIX"=54
ASA_WORD="ASA"=55
VERSION_WORD="Version"=56
NUMBER=57
HOSTNAME="hostname"=58
STRING=59
ACCESS_LIST="access-list"=60
PERMIT="permit"=61
DENY="deny"=62
P_EQ="eq"=63
P_GT="gt"=64
P_LT="lt"=65
P_NEQ="neq"=66
ANY="any"=67
LOG="log"=68
LOG_INPUT="log-input"=69
ESTABLISHED="established"=70
FRAGMENTS="fragments"=71
TIME_RANGE="time-range"=72
CONTROLLER="controller"=73
INTRFACE="interface"=74
LINE_COMMENT=75
EXIT="exit"=76
VLAN="vlan"=77
SPEED="speed"=78
DUPLEX="duplex"=79
DDNS="ddns"=80
FORWARD="forward"=81
DELAY="delay"=82
HOLD_TIME="hold-time"=83
IPV6_C="ipv6"=84
MAC_ADDRESS="mac-address"=85
MULTICAST="multicast"=86
PPPOE=87
RIP="rip"=88
NAMEIF="nameif"=89
SEC_LEVEL="security-level"=90
SHUTDOWN="shutdown"=91
ADDRESS="address"=92
DHCP="dhcp"=93
STANDBY="standby"=94
SWITCHPORT="switchport"=95
ACCESS="access"=96
REMARK="remark"=97
ACCESS_GROUP="access-group"=98
COLON_COMMENT=99
SECONDARY="secondary"=100
SETROUTE="setroute"=101
EXTENDED="extended"=102
STANDARD="standard"=103
Whitespace=104
HEX_CONST=105
NEG_INT_CONST=106
DIGIT=107
HEXDIGIT=108
PIPE_CHAR=109
NUMBER_SIGN=110
PERCENT=111
AMPERSAND=112
APOSTROPHE=113
OPENING_PAREN=114
CLOSING_PAREN=115
STAR=116
PLUS=117
COMMA=118
MINUS=119
DOT=120
SLASH=121
COLON=122
SEMICOLON=123
LESS_THAN=124
EQUALS=125
GREATER_THAN=126
QUESTION=127
COMMERCIAL_AT=128
OPENING_SQUARE=129
CLOSING_SQUARE=130
CARET=131
UNDERLINE=132
OPENING_BRACE=133
CLOSING_BRACE=134
TILDE=135
EXLAMATION=136
+27 -2
View File
@@ -151,6 +151,8 @@ cfgfile :
object_group_icmp_8_3
|
crypto
|
no_commands
|
unknown_command
|
@@ -662,11 +664,13 @@ icmp_object : ICMP_OBJECT
//****************************************************************
object_group_service : OBJECT_GROUP SERVICE name:WORD
object_group_service : OBJECT_GROUP SERVICE name:WORD ( tcp:TCP | udp:UDP )?
{
importer->clear();
importer->setCurrentLineNumber(LT(0)->getLine());
importer->newObjectGroupService(name->getText());
if (tcp) importer->setObjectGroupServiceProtocol("tcp");
if (udp) importer->setObjectGroupServiceProtocol("udp");
*dbg << name->getLine() << ":"
<< " Object Group " << name->getText() << std::endl;
}
@@ -683,6 +687,8 @@ object_group_service_parameters :
group_object
|
service_object
|
port_object
)
;
@@ -735,6 +741,15 @@ service_object : SERVICE_OBJECT
)
;
port_object : PORT_OBJECT xoperator
{
importer->setCurrentLineNumber(LT(0)->getLine());
importer->SaveTmpPortToDst();
importer->addTCPUDPServiceToObjectGroup();
*dbg << " PORT OBJECT TCP/UDP" << LT(0)->getText() << " ";
}
;
//****************************************************************
crypto : CRYPTO
{
@@ -756,6 +771,15 @@ unknown_command : WORD
}
;
//****************************************************************
no_commands : NO
{
*dbg << " TOP LEVEL \"NO\" COMMAND: "
<< LT(0)->getText() << std::endl;
consumeUntil(NEWLINE);
}
;
//****************************************************************
certificate : CERTIFICATE WORD
{
@@ -1112,7 +1136,7 @@ intrface : INTRFACE in:WORD
<< " EMPTY INTERFACE " << std::endl;
}
)
NEWLINE LINE_COMMENT
NEWLINE ( LINE_COMMENT | EXIT )
;
interface_parameters :
@@ -1521,6 +1545,7 @@ tokens
GROUP_OBJECT = "group-object";
NETWORK_OBJECT = "network-object";
SERVICE_OBJECT = "service-object";
PORT_OBJECT = "port-object";
PROTOCOL_OBJECT = "protocol-object";
ICMP_OBJECT = "icmp-object";
ICMP_TYPE = "icmp-type";
@@ -0,0 +1,274 @@
: Saved
:
ASA Version 8.3(2)
!
hostname asa5505
!
interface Vlan1
description inside interface
nameif inside
security-level 100
ip address dhcp setroute
!
interface Vlan2
description outside interface
nameif outside
security-level 0
ip address 192.168.2.1 255.255.255.0
!
interface Ethernet0/0
description Switch port 0/0
switchport access vlan 2
!
!
object network internal_subnet_1
subnet 192.168.1.0 255.255.255.192
description Internal Subnet 1
object network internal_subnet_2
subnet 192.168.1.64 255.255.255.192
description Internal Subnet 2
! this object matches network in standard objects lib, but it should be created anyway
object network internal_subnet_3
subnet 192.168.1.0 255.255.255.0
description Internal Subnet 1
! this object matches internale_subnet_1 but has different name and should be created
object network internal_subnet_4
subnet 192.168.1.0 255.255.255.192
object network Internal_net
subnet 192.168.1.0 255.255.255.0
object network outside_range-1
range 22.22.22.30 22.22.22.40
object network range_1
range 10.1.1.1 10.1.1.100
object network firewall90:FastEthernet1:ip-1
host 22.22.22.23
object network hostA:eth0
host 192.168.1.10
object network spamhost1
host 61.150.47.112
object network spamhost2
host 61.150.47.113
object network external_gw2
host 22.22.22.100
!
! Example of a named object with "nat" command
!
object network my-range-obj
range 10.2.2.1 10.2.2.10
object network my-inside-net
subnet 192.168.2.0 255.255.255.0
nat (inside,outside) dynamic my-range-ob
!
! ipv6 addresses
!
object network ipv6-host-object-1
host 2001:0db8:85a3:0000:0000:8a2e:0370:7334
description Example of IPv6 host object
object network ipv6-network-object-1
subnet 2001::/64
description IPv6 network object example
object network ipv6-host-object-3
host fe80::202:b3ff:fe1e:8329
description Example of IPv6 host object
object network ipv6-host-object-3
host a1b2:c3d4:e5f6:b3ff:fe1e:8329:0:1234
description Example of IPv6 host object
! empty named object definition
object network dummy-address
!
! more good network objects after the empty one
object network internal_subnet_5
subnet 10.10.1.0 255.255.255.0
!
! another test for an empty object and non-empty object but no comments this time
object network dummy-address-1
object network internal_subnet_6
subnet 10.10.2.0 255.255.255.0
!
object network ipv6-host-object-2
host 2001:af::1
description Test IPv6 host
object network host-1
host 10.0.0.1
!
object service smtp
service tcp destination eq smtp
object service http
service tcp destination eq www
object service squid
service tcp destination eq 3128
object service smtps
service tcp destination eq 465
!
object service icmp1
service icmp echo
object service icmp2
service icmp unreachable
object service ip5
service 111
!
object service tcp-src-1
service tcp source lt 1024
object service tcp-src-2
service tcp source gt 1024
object service tcp-src-3
service tcp source eq 80
object service tcp-src-4
service tcp source neq 88
object service tcp-src-5
service tcp source range 1000 1010
!
object service tcp-dst-1
service tcp destination lt 1024
object service tcp-dst-2
service tcp destination gt 1024
object service tcp-dst-3
service tcp destination eq 80
object service tcp-dst-4
service tcp destination neq 88
object service tcp-dst-5
service tcp destination range 1001 1011
!
object service tcp-src-dst-1
service tcp source lt 1024 destination eq 80
object service tcp-src-dst-2
service tcp source gt 1024 destination eq 2222
object service tcp-src-dst-3
service tcp source eq 80 destination gt 1024
object service tcp-src-dst-4
service tcp source neq 88 destination gt 1024
object service tcp-src-dst-5
service tcp source range 1002 1012 destination gt 1024
!
object service udp-src-1
service udp source lt 1024
object service udp-src-2
service udp source gt 1024
object service udp-src-3
service udp source eq 80
object service udp-src-4
service udp source neq 88
object service udp-src-5
service udp source range 1000 1010
!
object service udp-dst-1
service udp destination lt 1024
object service udp-dst-2
service udp destination gt 1024
object service udp-dst-3
service udp destination eq 80
object service udp-dst-4
service udp destination neq 88
object service udp-dst-5
service udp destination range 1001 1011
!
object service ip1
service ip
object service ip2
service eigrp
object service icmp6-1
service icmp6 neighbor-advertisement
!
! named object using unknown protocol name
object service ip3
service some_weird_protocol
! incomplete statement
!
object service ip4
!
object-group network outside.id178211X29963.osrc.net.0
network-object object internal_subnet_1
network-object object internal_subnet_2
object-group network outside.id21353X4994.osrc.net.0
network-object object internal_subnet_1
network-object object Internal_net
network-object object internal_subnet_2
object-group network outside.id77971X5929.osrc.net.1
network-object object internal_subnet_1
network-object object internal_subnet_2
object-group network outside.id77971X5929.odst.net.1
network-object object spamhost1
network-object object spamhost2
object-group network outside.id77971X5929.tsrc.net.1
network-object object outside_range-1
network-object object external_gw2
object-group network outside.id77971X5929.osrc.net.0
network-object object internal_subnet_1
network-object object internal_subnet_2
object-group network outside.id77971X5929.odst.net.0
network-object object spamhost1
network-object object spamhost2
object-group network outside.id77971X5929.tsrc.net.0
network-object object outside_range-1
network-object object external_gw2
object-group service outside.id77971X5929.osrv.1
service-object object smtp
service-object object smtps
object-group service sg1
service-object ip
service-object eigrp
service-object gre
service-object 111
object-group service sg2
service-object icmp echo
service-object icmp echo-reply
service-object icmp 111
object-group service sg3
service-object tcp source gt 1024 destination eq www
service-object tcp source gt 1024 destination range 10000 10010
service-object tcp source gt 1024 destination neq www
service-object tcp source gt 1024 destination lt 1024
service-object tcp destination eq 22
object-group service sg4
service-object tcp source gt 1024
service-object tcp source lt 1024
service-object tcp source eq www
service-object tcp source neq www
object-group service sg5
service-object udp source gt 1024
service-object udp source gt 1024 destination eq www
service-object udp destination eq domain
service-object udp destination eq 5353
service-object object udp-dst-1
service-object object udp-dst-2
group-object sg1
group-object sg2
!
object-group protocol pg1
protocol-object 111
protocol-object ah
protocol-object ip
protocol-object eigrp
object-group protocol pg2
protocol-object 112
protocol-object object ip5
group-object pg1
!
object-group icmp-type ig1
icmp-object echo
icmp-object 111
object-group icmp-type ig2
icmp-object echo-reply
icmp-object 112
object-group icmp-type ig3
icmp-object mask-reply
group-object ig1
object-group service id5102X14531.srv.tcp.0 tcp
port-object eq 80
port-object eq 443
exit
@@ -229,9 +229,6 @@ object-group network outside.id77971X5929.osrc.net.1
object-group network outside.id77971X5929.odst.net.1
network-object object spamhost1
network-object object spamhost2
object-group service outside.id77971X5929.osrv.1
service-object object smtp
service-object object smtps
object-group network outside.id77971X5929.tsrc.net.1
network-object object outside_range-1
network-object object external_gw2
@@ -244,6 +241,16 @@ object-group network outside.id77971X5929.odst.net.0
object-group network outside.id77971X5929.tsrc.net.0
network-object object outside_range-1
network-object object external_gw2
object-group service outside.id77971X5929.osrv.1
service-object object smtp
service-object object smtps
object-group service id5102X14531.srv.tcp.0 tcp
port-object eq 80
port-object eq 443
exit
!
object-group service sg1
service-object ip