@@ -54,53 +54,66 @@ func (cv commandEvaluate) EvalCommandPolicy(commands []string, evalExpr string,
5454 if err != nil {
5555 return CmdEvalResult {Match : false }
5656 }
57- val , err := cv .evalPolicy (commands , cmdExec , evalExpr , policy , pep .EvalParamNum , []string {pep .PolicyQueryParam }... )
57+ val , err := cv .evalPolicy (commands , cmdExec , evalExpr , policy , pep .EvalParamNum , []string {pep .PolicyQueryParam }, pep . ReturnKeys )
5858 if err != nil {
5959 return CmdEvalResult {Match : false , Error : err }
6060 }
6161 return CmdEvalResult {Match : val .EvalExpResult == 0 , Error : err , PolicyResult : val .PolicyResult }
6262}
6363
64- func (cv commandEvaluate ) evalPolicy (commands []string , cmdExec cmd , evalExpr string , policy string , compareComm int , propertyEval ... string ) (FinalResult , error ) {
65- resMap := make (map [int ][]string )
66- cmdTotalRes := make ([]string , 0 )
67- var commNum = 0
68- for index := range commands {
69- res := cmdExec .execCommand (index , cmdTotalRes , make ([]IndexValue , 0 ), evalExpr )
70- sb := strings.Builder {}
71- for _ , s := range res {
72- sb .WriteString (s )
73- }
74- resMap [commNum ] = res
75- cmdTotalRes = append (cmdTotalRes , sb .String ())
76- commNum ++
77- }
78- policyEvalResults := make ([]* validator.ValidateResult , 0 )
64+ func (cv commandEvaluate ) evalPolicy (commands []string , cmdExec cmd , evalExpr string , policy string , compareComm int , propertyEval []string , ReturnFields []string ) (* FinalResult , error ) {
65+ resMap , cmdTotalRes := cv .ExecCommands (commands , cmdExec , evalExpr )
66+ policyEvalResults := make ([]utils.PolicyResult , 0 )
7967 var policyRes int
8068 if val , ok := resMap [compareComm ]; ok {
8169 for _ , cmdRes := range val {
8270 res , err := validator .NewPolicyEval ().EvaluatePolicy (propertyEval , policy , cmdRes )
8371 if err != nil {
84- res = [] * validator. ValidateResult {{ Value : false }}
72+ return nil , err
8573 }
86- policyEvalResults = append (policyEvalResults , res ... )
74+ policyResult := utils .MatchPolicy (res [0 ].ExpressionValue [0 ].Value , ReturnFields )
75+ policyEvalResults = append (policyEvalResults , policyResult )
8776 }
8877 for _ , per := range policyEvalResults {
89- if ! per .Value {
90- policyRes = 1
91- break
78+ if returnVal , ok := per .ReturnValues ["allow" ]; ok {
79+ val , err := strconv .ParseBool (returnVal )
80+ if err != nil {
81+ continue
82+ }
83+ if ! val {
84+ policyRes = 1
85+ break
86+ }
9287 }
9388 }
9489 }
9590 match := policyRes == 0
9691 policyExpr := utils .GetPolicyExpr (evalExpr )
9792 if len (policyExpr ) == len (evalExpr ) {
98- return FinalResult {EvalExpResult : policyRes , PolicyResult : policyEvalResults }, nil
93+ return & FinalResult {EvalExpResult : policyRes , PolicyResult : policyEvalResults }, nil
9994 }
10095 neweEvalExpr := strings .Replace (evalExpr , policyExpr , fmt .Sprintf ("'true' == '%s'" , strconv .FormatBool (match )), - 1 )
10196 evalExpResult , err := cmdExec .evalExpression (cmdTotalRes , len (cmdTotalRes ), make ([]string , 0 ), 0 , neweEvalExpr )
102- return FinalResult {EvalExpResult : evalExpResult , PolicyResult : policyEvalResults }, err
97+ return & FinalResult {EvalExpResult : evalExpResult , PolicyResult : policyEvalResults }, err
98+
99+ }
103100
101+ //ExecCommands execute shell commands and encapsulate it results
102+ func (cv commandEvaluate ) ExecCommands (commands []string , cmdExec cmd , evalExpr string ) (map [int ][]string , []string ) {
103+ resMap := make (map [int ][]string )
104+ cmdTotalRes := make ([]string , 0 )
105+ var commNum = 0
106+ for index := range commands {
107+ res := cmdExec .execCommand (index , cmdTotalRes , make ([]IndexValue , 0 ), evalExpr )
108+ sb := strings.Builder {}
109+ for _ , s := range res {
110+ sb .WriteString (s )
111+ }
112+ resMap [commNum ] = res
113+ cmdTotalRes = append (cmdTotalRes , sb .String ())
114+ commNum ++
115+ }
116+ return resMap , cmdTotalRes
104117}
105118
106119func (cv commandEvaluate ) evalCommand (commands []string , cmdExec cmd , evalExpr string ) (int , error ) {
@@ -121,12 +134,12 @@ func (cv commandEvaluate) evalCommand(commands []string, cmdExec cmd, evalExpr s
121134type CmdEvalResult struct {
122135 Match bool
123136 CmdEvalExpr string
124- PolicyResult []* validator. ValidateResult
137+ PolicyResult []utils. PolicyResult
125138 Error error
126139}
127140
128141//FinalResult eval result object
129142type FinalResult struct {
130143 EvalExpResult int
131- PolicyResult []* validator. ValidateResult
144+ PolicyResult []utils. PolicyResult
132145}
0 commit comments