@@ -54,6 +54,7 @@ struct acl {
5454
5555 int flag_log ;
5656 int flag_fold ;
57+ int flag_fold_report ;
5758 int flag_pedantic ;
5859 int flag_table ;
5960
@@ -263,26 +264,30 @@ vcl_acl_fold(struct vcc *tl, struct acl_e **l, struct acl_e **r)
263264 do {
264265 switch (cmp ) {
265266 case ACL_CONTAINED :
266- VSB_cat (tl -> sb , "ACL entry:\n" );
267- vcc_ErrWhere (tl , (* r )-> t_addr );
268- VSB_cat (tl -> sb , "supersedes / removes:\n" );
269- vcc_ErrWhere (tl , (* l )-> t_addr );
270- vcc_Warn (tl );
267+ if (tl -> acl -> flag_fold_report ) {
268+ VSB_cat (tl -> sb , "ACL entry:\n" );
269+ vcc_ErrWhere (tl , (* r )-> t_addr );
270+ VSB_cat (tl -> sb , "supersedes / removes:\n" );
271+ vcc_ErrWhere (tl , (* l )-> t_addr );
272+ vcc_Warn (tl );
273+ }
271274 VRBT_REMOVE (acl_tree , & tl -> acl -> acl_tree , * l );
272275 FREE_OBJ (* l );
273276 * l = VRBT_PREV (acl_tree , & tl -> acl -> acl_tree , * r );
274277 break ;
275278 case ACL_LEFT :
276279 (* l )-> mask -- ;
277280 (* l )-> fixed = "folded" ;
278- VSB_cat (tl -> sb , "ACL entry:\n" );
279- vcc_ErrWhere (tl , (* l )-> t_addr );
280- VSB_cat (tl -> sb , "left of:\n" );
281- vcc_ErrWhere (tl , (* r )-> t_addr );
282- VSB_printf (tl -> sb , "removing the latter and expanding "
283- "mask of the former by one to /%u\n" ,
284- (* l )-> mask - 8 );
285- vcc_Warn (tl );
281+ if (tl -> acl -> flag_fold_report ) {
282+ VSB_cat (tl -> sb , "ACL entry:\n" );
283+ vcc_ErrWhere (tl , (* l )-> t_addr );
284+ VSB_cat (tl -> sb , "left of:\n" );
285+ vcc_ErrWhere (tl , (* r )-> t_addr );
286+ VSB_printf (tl -> sb , "removing the latter and "
287+ "expanding mask of the former by one to "
288+ "/%u\n" , (* l )-> mask - 8 );
289+ vcc_Warn (tl );
290+ }
286291 VRBT_REMOVE (acl_tree , & tl -> acl -> acl_tree , * r );
287292 FREE_OBJ (* r );
288293 VRBT_REMOVE (acl_tree , & tl -> acl -> acl_tree , * l );
@@ -807,13 +812,30 @@ static void
807812vcc_parseAclFold (struct vcc * tl , int sign )
808813{
809814 struct acl * acl ;
815+ struct token * t ;
810816
811817 CHECK_OBJ_NOTNULL (tl , VCC_MAGIC );
812818 assert (vcc_IdIs (tl -> t , "fold" ));
813819 acl = tl -> acl ;
814820 CHECK_OBJ_NOTNULL (acl , VCC_ACL_MAGIC );
815821
822+ t = tl -> t ;
816823 acl -> flag_fold = sign ;
824+ acl -> flag_fold_report = 1 ;
825+ vcc_NextToken (tl );
826+ if (tl -> t -> tok != ',' )
827+ return ;
828+
829+ vcc_NextToken (tl );
830+ if (! vcc_IdIs (tl -> t , "noreport" )) {
831+ VSB_cat (tl -> sb , "Unknown modifier:\n" );
832+ vcc_ErrWhere (tl , tl -> t );
833+ } else if (! sign ) {
834+ VSB_cat (tl -> sb , "-fold,noreport is invalid, use -fold:\n" );
835+ vcc_ErrWhere (tl , t );
836+ } else {
837+ acl -> flag_fold_report = 0 ;
838+ }
817839 vcc_NextToken (tl );
818840}
819841
@@ -828,6 +850,7 @@ vcc_ParseAcl(struct vcc *tl)
828850 tl -> acl = acl ;
829851 acl -> flag_pedantic = 1 ;
830852 acl -> flag_fold = 1 ;
853+ acl -> flag_fold_report = 1 ;
831854 vcc_NextToken (tl );
832855 VRBT_INIT (& acl -> acl_tree );
833856
0 commit comments