Skip to content

Commit 18a88c5

Browse files
authored
Merge pull request #57 from GSI-Fing-Udelar/main
feat: update setvar flow
2 parents 2745742 + 137a58c commit 18a88c5

12 files changed

Lines changed: 6950 additions & 6265 deletions

g4/SecLangLexer.g4

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ ACTION_SETUID
308308
;
309309

310310
ACTION_SETVAR
311-
: 'setvar'
311+
: 'setvar' -> pushMode(SETVAR)
312312
;
313313

314314
ACTION_SEVERITY
@@ -1143,47 +1143,87 @@ STRING
11431143
mode MACRO;
11441144

11451145
MACRO_EXPANSION
1146-
: VARIABLE_NAME '}' -> popMode
1146+
: (LETTER | DIGIT) (LETTER | DIGIT | '_' | '-' | '.')* '}' -> popMode
11471147
;
11481148

11491149
mode SETVAR;
11501150

1151+
COLON_SETVAR
1152+
: ':' -> type(COLON)
1153+
;
1154+
11511155
SINGLE_QUOTE_SETVAR
11521156
: '\'' -> type(SINGLE_QUOTE)
11531157
;
11541158

1159+
COLLECTION_NAME_SETVAR
1160+
: ('ip'
1161+
| 'IP'
1162+
| 'global'
1163+
| 'GLOBAL'
1164+
| 'resource'
1165+
| 'RESOURCE'
1166+
| 'session'
1167+
| 'SESSION'
1168+
| 'user'
1169+
| 'USER'
1170+
| 'tx'
1171+
| 'TX')
1172+
;
1173+
1174+
DOT
1175+
: '.'
1176+
;
1177+
11551178
COLLECTION_ELEMENT
1156-
: ('t'|'T') ('x'|'X') '.' (LETTER) (LETTER | DIGIT | '_' | '-')* -> popMode
1179+
: (LETTER | DIGIT) (LETTER | DIGIT | '_' | '-')*
11571180
;
11581181

11591182
COLLECTION_WITH_MACRO
1160-
: 'tx.' IDENT '{%' -> mode(MACRO)
1183+
: '%{' -> pushMode(MACRO)
11611184
;
11621185

1163-
VAR_ASSIGNMENT
1164-
: ~('\''|' ')+ -> popMode
1165-
;
1166-
11671186
EQUAL_SETVAR
1168-
: '=' -> type(EQUAL)
1187+
: '=' -> type(EQUAL), pushMode(SETVAR_ASSIGNMENT)
11691188
;
11701189

11711190
EQUALS_PLUS_SETVAR
1172-
: EQUAL_SETVAR '+' -> type(EQUALS_PLUS)
1191+
: EQUAL_SETVAR '+' -> type(EQUALS_PLUS), pushMode(SETVAR_ASSIGNMENT)
11731192
;
11741193

11751194
EQUALS_MINUS_SETVAR
1176-
: EQUAL_SETVAR '-' -> type(EQUALS_MINUS)
1195+
: EQUAL_SETVAR '-' -> type(EQUALS_MINUS), pushMode(SETVAR_ASSIGNMENT)
11771196
;
11781197

11791198

1199+
mode SETVAR_ASSIGNMENT;
1200+
1201+
VAR_ASSIGNMENT
1202+
: ('\\\''|~('\''|','|'"'))+
1203+
;
1204+
1205+
SINGLE_QUOTE_SETVAR_ASSIGNMENT
1206+
: '\'' -> type(SINGLE_QUOTE), pushMode(DEFAULT_MODE)
1207+
;
1208+
1209+
QUOTE_SETVAR_ASSIGNMENT
1210+
: '"' -> type(QUOTE), pushMode(DEFAULT_MODE)
1211+
;
1212+
1213+
COMMA_SETVAR_ASSIGNMENT
1214+
: ',' -> type(COMMA), pushMode(DEFAULT_MODE)
1215+
;
1216+
1217+
SPACE_SETVAR_ASSIGNMENT
1218+
: WS -> skip
1219+
;
1220+
11801221
mode COMMA_SEPARATED_STRING_MODE;
11811222

11821223
COLON_COMMA_STRING
11831224
: COLON_DEFAULT -> type(COLON)
11841225
;
11851226

1186-
11871227
COMMA_SEPARATED_STRING
11881228
: ~([:,"])+ -> popMode
11891229
;

g4/SecLangParser.g4

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,6 @@ values:
225225
| CONFIG_VALUE_PATH
226226
| STRING
227227
| VARIABLE_NAME
228-
| VAR_ASSIGNMENT
229228
| COMMA_SEPARATED_STRING
230229
| ACTION_CTL_BODY_PROCESSOR_TYPE
231230
| AUDIT_PARTS
@@ -434,6 +433,7 @@ flow_action_with_params:
434433

435434
action_value:
436435
action_value_types
436+
| SINGLE_QUOTE action_value_types SINGLE_QUOTE
437437
| SINGLE_QUOTE string_literal SINGLE_QUOTE
438438
;
439439

@@ -474,17 +474,23 @@ collection_value:
474474
;
475475

476476
setvar_action:
477-
setvar_stmt assignment values
477+
col_name DOT setvar_stmt assignment var_assignment
478+
;
479+
480+
col_name:
481+
COLLECTION_NAME_SETVAR
478482
;
479483

480484
setvar_stmt:
481-
COLLECTION_ELEMENT
482-
| COLLECTION_WITH_MACRO
483-
| VARIABLE_NAME
485+
(COLLECTION_ELEMENT | COLLECTION_WITH_MACRO MACRO_EXPANSION) +
484486
;
485487

486488
assignment:
487489
EQUAL
488490
| EQUALS_PLUS
489491
| EQUALS_MINUS
490492
;
493+
494+
var_assignment:
495+
VAR_ASSIGNMENT
496+
;

listener.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ type ParserResult struct {
2626
rangeEvents []string
2727
rangeStartEvents []int
2828
rangeEndEvents []int
29+
setvarCollections []string
30+
setvarNames []string
31+
setvarOperations []string
2932
}
3033

3134
type TreeShapeListener struct {
@@ -156,3 +159,19 @@ func (l *TreeShapeListener) EnterOperator_value(ctx *parser.Operator_valueContex
156159
func (l *TreeShapeListener) EnterOperator_not(ctx *parser.Operator_notContext) {
157160
l.results.negatedOperatorCount++
158161
}
162+
163+
func (l *TreeShapeListener) EnterCol_name(ctx *parser.Col_nameContext) {
164+
l.results.setvarCollections = append(l.results.setvarCollections, ctx.GetText())
165+
}
166+
167+
func (l *TreeShapeListener) EnterSetvar_stmt(ctx *parser.Setvar_stmtContext) {
168+
l.results.setvarNames = append(l.results.setvarNames, ctx.GetText())
169+
}
170+
171+
func (l *TreeShapeListener) EnterAssignment(ctx *parser.AssignmentContext) {
172+
l.results.setvarOperations = append(l.results.setvarOperations, ctx.GetText())
173+
}
174+
175+
func (l *TreeShapeListener) EnterVar_assignment(ctx *parser.Var_assignmentContext) {
176+
l.results.directiveValues = append(l.results.directiveValues, ctx.GetText())
177+
}

0 commit comments

Comments
 (0)