1- using FWO . Api . Client ;
1+ using FWO . Api . Client ;
22using FWO . Api . Client . Queries ;
33using FWO . Data ;
44using FWO . Data . Report ;
@@ -63,13 +63,13 @@ private async Task PrepareAppRulesReport(ApiConnection apiConnection)
6363 List < NetworkLocation > disregardedFroms = [ .. rule . Froms ] ;
6464 if ( modellingFilter . ShowSourceMatch )
6565 {
66- ( relevantFroms , disregardedFroms ) = CheckNetworkObjects ( rule . Froms ) ;
66+ ( relevantFroms , disregardedFroms ) = CheckNetworkObjects ( rule . Froms , rule . SourceNegated ) ;
6767 }
6868 List < NetworkLocation > relevantTos = [ ] ;
6969 List < NetworkLocation > disregardedTos = [ .. rule . Tos ] ;
7070 if ( modellingFilter . ShowDestinationMatch )
7171 {
72- ( relevantTos , disregardedTos ) = CheckNetworkObjects ( rule . Tos ) ;
72+ ( relevantTos , disregardedTos ) = CheckNetworkObjects ( rule . Tos , rule . DestinationNegated ) ;
7373 }
7474
7575 if ( relevantFroms . Count > 0 || relevantTos . Count > 0 )
@@ -107,7 +107,7 @@ private async Task GetAppServers(ApiConnection apiConnection)
107107 IPAddress . Parse ( ( s . IpEnd != "" ? s . IpEnd : s . Ip ) . StripOffNetmask ( ) ) ) ) ] ;
108108 }
109109
110- private ( List < NetworkLocation > , List < NetworkLocation > ) CheckNetworkObjects ( NetworkLocation [ ] objList )
110+ private ( List < NetworkLocation > , List < NetworkLocation > ) CheckNetworkObjects ( NetworkLocation [ ] objList , bool negated )
111111 {
112112 List < NetworkLocation > relevantObjects = [ ] ;
113113 List < NetworkLocation > disregardedObjects = [ ] ;
@@ -131,15 +131,15 @@ private async Task GetAppServers(ApiConnection apiConnection)
131131 {
132132 foreach ( var grpobj in obj . Object . ObjectGroupFlats )
133133 {
134- if ( grpobj . Object != null && CheckObj ( grpobj . Object ) )
134+ if ( grpobj . Object != null && CheckObj ( grpobj . Object , negated ) )
135135 {
136136 relevantObjects . Add ( obj ) ;
137137 found = true ;
138138 break ;
139139 }
140140 }
141141 }
142- else if ( CheckObj ( obj . Object ) )
142+ else if ( CheckObj ( obj . Object , negated ) )
143143 {
144144 relevantObjects . Add ( obj ) ;
145145 found = true ;
@@ -153,13 +153,27 @@ private async Task GetAppServers(ApiConnection apiConnection)
153153 return ( relevantObjects , disregardedObjects ) ;
154154 }
155155
156- private bool CheckObj ( NetworkObject obj )
156+ private bool CheckObj ( NetworkObject obj , bool negated )
157157 {
158158 foreach ( var ownerIpRange in ownerIps )
159159 {
160- if ( obj . IP != null &&
161- IpOperations . RangeOverlapExists ( new IPAddressRange ( IPAddress . Parse ( obj . IP . StripOffNetmask ( ) ) ,
162- IPAddress . Parse ( ( obj . IpEnd != null && obj . IpEnd != "" ? obj . IpEnd : obj . IP ) . StripOffNetmask ( ) ) ) , ownerIpRange ) )
160+ if ( obj . IP == null )
161+ {
162+ continue ;
163+ }
164+
165+ IPAddressRange objRange = new ( IPAddress . Parse ( obj . IP . StripOffNetmask ( ) ) ,
166+ IPAddress . Parse ( ( obj . IpEnd != null && obj . IpEnd != "" ? obj . IpEnd : obj . IP ) . StripOffNetmask ( ) ) ) ;
167+
168+ if ( negated )
169+ {
170+ if ( IpOperations . IpToUint ( ownerIpRange . Begin ) < IpOperations . IpToUint ( objRange . Begin ) ||
171+ ( IpOperations . IpToUint ( ownerIpRange . End ) > IpOperations . IpToUint ( objRange . End ) ) )
172+ {
173+ return true ;
174+ }
175+ }
176+ else if ( IpOperations . RangeOverlapExists ( objRange , ownerIpRange ) )
163177 {
164178 return true ;
165179 }
@@ -185,7 +199,7 @@ private void PrepareFilter(ManagementReport mgt)
185199 {
186200 foreach ( var grpobj in from . Object . ObjectGroupFlats )
187201 {
188- if ( grpobj . Object != null && CheckObj ( grpobj . Object ) )
202+ if ( grpobj . Object != null && CheckObj ( grpobj . Object , rule . SourceNegated ) )
189203 {
190204 mgt . HighlightedObjectIds . Add ( grpobj . Object . Id ) ;
191205 }
@@ -207,7 +221,7 @@ private void PrepareFilter(ManagementReport mgt)
207221 {
208222 foreach ( var grpobj in to . Object . ObjectGroupFlats )
209223 {
210- if ( grpobj . Object != null && CheckObj ( grpobj . Object ) )
224+ if ( grpobj . Object != null && CheckObj ( grpobj . Object , rule . DestinationNegated ) )
211225 {
212226 mgt . HighlightedObjectIds . Add ( grpobj . Object . Id ) ;
213227 }
0 commit comments