@@ -1573,6 +1573,16 @@ static int test_static_routes(void) {
15731573
15741574 WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_route_default_policy_set (WOLFSENTRY_CONTEXT_ARGS_OUT , WOLFSENTRY_ACTION_RES_NONE ));
15751575
1576+ /* non-decisional default_policy values (STOP/ERROR alone) must be rejected. */
1577+ WOLFSENTRY_EXIT_UNLESS_EXPECTED_FAILURE (
1578+ INVALID_ARG ,
1579+ wolfsentry_route_default_policy_set (WOLFSENTRY_CONTEXT_ARGS_OUT , WOLFSENTRY_ACTION_RES_STOP ));
1580+ WOLFSENTRY_EXIT_UNLESS_EXPECTED_FAILURE (
1581+ INVALID_ARG ,
1582+ wolfsentry_route_default_policy_set (WOLFSENTRY_CONTEXT_ARGS_OUT , WOLFSENTRY_ACTION_RES_ERROR ));
1583+ WOLFSENTRY_EXIT_UNLESS_EXPECTED_FAILURE (
1584+ INVALID_ARG ,
1585+ wolfsentry_route_default_policy_set (WOLFSENTRY_CONTEXT_ARGS_OUT , WOLFSENTRY_ACTION_RES_STOP | WOLFSENTRY_ACTION_RES_ERROR ));
15761586
15771587 WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_route_insert (WOLFSENTRY_CONTEXT_ARGS_OUT , NULL /* caller_arg */ , & remote .sa , & local .sa , flags , 0 /* event_label_len */ , 0 /* event_label */ , & id , & action_results ));
15781588
@@ -2747,6 +2757,65 @@ static int test_static_routes(void) {
27472757 & action_results ));
27482758 }
27492759
2760+ /* max_connection_count == 0 means "no limit": CONNECT dispatches must not
2761+ * be rejected regardless of how many times we fire them.
2762+ */
2763+ {
2764+ struct wolfsentry_eventconfig nolimit_config = config ;
2765+ wolfsentry_ent_id_t nolimit_route_id ;
2766+ wolfsentry_route_flags_t nolimit_flags ;
2767+ unsigned int i ;
2768+
2769+ nolimit_config .max_connection_count = 0 ;
2770+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_event_insert (
2771+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
2772+ "nolimit-conn-test" ,
2773+ WOLFSENTRY_LENGTH_NULL_TERMINATED ,
2774+ 0 /* priority */ ,
2775+ & nolimit_config ,
2776+ WOLFSENTRY_EVENT_FLAG_NONE ,
2777+ NULL /* id */ ));
2778+
2779+ WOLFSENTRY_CLEAR_ALL_BITS (nolimit_flags );
2780+ WOLFSENTRY_SET_BITS (nolimit_flags , WOLFSENTRY_ROUTE_FLAG_TCPLIKE_PORT_NUMBERS
2781+ | WOLFSENTRY_ROUTE_FLAG_DIRECTION_IN
2782+ | WOLFSENTRY_ROUTE_FLAG_GREENLISTED );
2783+ memcpy (remote .sa .addr , "\7\10\11\12" , sizeof remote .addr_buf );
2784+ memcpy (local .sa .addr , "\377\376\375\374" , sizeof local .addr_buf );
2785+
2786+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_route_insert (
2787+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
2788+ NULL /* caller_arg */ ,
2789+ & remote .sa , & local .sa , nolimit_flags ,
2790+ "nolimit-conn-test" ,
2791+ WOLFSENTRY_LENGTH_NULL_TERMINATED ,
2792+ & nolimit_route_id , & action_results ));
2793+
2794+ for (i = 0 ; i < 20 ; ++ i ) {
2795+ WOLFSENTRY_CLEAR_ALL_BITS (action_results );
2796+ WOLFSENTRY_SET_BITS (action_results , WOLFSENTRY_ACTION_RES_CONNECT );
2797+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_route_event_dispatch_with_inited_result (
2798+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
2799+ & remote .sa , & local .sa , nolimit_flags ,
2800+ NULL /* event_label */ , 0 /* event_label_len */ ,
2801+ NULL /* caller_arg */ ,
2802+ & id , & inexact_matches , & action_results ));
2803+ WOLFSENTRY_EXIT_ON_TRUE (WOLFSENTRY_CHECK_BITS (action_results , WOLFSENTRY_ACTION_RES_REJECT ));
2804+ }
2805+
2806+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_route_delete_by_id (
2807+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
2808+ NULL /* caller_arg */ ,
2809+ nolimit_route_id ,
2810+ NULL /* event_label */ , 0 /* event_label_len */ ,
2811+ & action_results ));
2812+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_event_delete (
2813+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
2814+ "nolimit-conn-test" ,
2815+ WOLFSENTRY_LENGTH_NULL_TERMINATED ,
2816+ & action_results ));
2817+ }
2818+
27502819 printf ("all subtests succeeded -- %u distinct ents inserted and deleted.\n" ,wolfsentry -> mk_id_cb_state .id_counter );
27512820
27522821 WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_shutdown (WOLFSENTRY_CONTEXT_ARGS_OUT_EX (& wolfsentry )));
@@ -3703,6 +3772,46 @@ static int test_user_values(void) {
37033772
37043773 }
37053774
3775+ #ifdef WOLFSENTRY_HAVE_JSON_DOM
3776+ /* strings rendered as JSON must escape quotes and backslashes. */
3777+ {
3778+ static const char raw [] = "a\"b\\c" ;
3779+ const struct wolfsentry_kv_pair * kv_exports ;
3780+ char render_buf [64 ];
3781+ int render_buf_space = (int )sizeof render_buf ;
3782+
3783+ memset (render_buf , 0 , sizeof render_buf );
3784+
3785+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_user_value_store_string (
3786+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
3787+ "json_escape_string" ,
3788+ WOLFSENTRY_LENGTH_NULL_TERMINATED ,
3789+ raw ,
3790+ WOLFSENTRY_LENGTH_NULL_TERMINATED ,
3791+ 0 ));
3792+ {
3793+ const char * value = NULL ;
3794+ int value_len = -1 ;
3795+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_user_value_get_string (
3796+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
3797+ "json_escape_string" ,
3798+ WOLFSENTRY_LENGTH_NULL_TERMINATED ,
3799+ & value , & value_len , & kv_ref ));
3800+ }
3801+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_context_lock_shared (WOLFSENTRY_CONTEXT_ARGS_OUT ));
3802+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_kv_pair_export (WOLFSENTRY_CONTEXT_ARGS_OUT , kv_ref , & kv_exports ));
3803+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_kv_render_value (WOLFSENTRY_CONTEXT_ARGS_OUT , kv_exports , render_buf , & render_buf_space ));
3804+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_context_unlock (WOLFSENTRY_CONTEXT_ARGS_OUT ));
3805+ WOLFSENTRY_EXIT_ON_FALSE (strstr (render_buf , "\\\"" ) != NULL );
3806+ WOLFSENTRY_EXIT_ON_FALSE (strstr (render_buf , "\\\\" ) != NULL );
3807+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_user_value_release_record (WOLFSENTRY_CONTEXT_ARGS_OUT , & kv_ref ));
3808+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_user_value_delete (
3809+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
3810+ "json_escape_string" ,
3811+ WOLFSENTRY_LENGTH_NULL_TERMINATED ));
3812+ }
3813+ #endif /* WOLFSENTRY_HAVE_JSON_DOM */
3814+
37063815 WOLFSENTRY_EXIT_UNLESS_EXPECTED_FAILURE (
37073816 BAD_VALUE ,
37083817 wolfsentry_user_value_store_string (
@@ -4086,6 +4195,25 @@ static int test_user_addr_families(void) {
40864195 family_number ,
40874196 & bits ));
40884197 WOLFSENTRY_EXIT_ON_FALSE (bits == 48 );
4198+
4199+ /* LINK64 must roundtrip through pton → ntop → verify label. */
4200+ {
4201+ struct wolfsentry_addr_family_bynumber * addr_family = NULL ;
4202+ const char * family_name = NULL ;
4203+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_addr_family_pton (
4204+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
4205+ "LINK64" ,
4206+ WOLFSENTRY_LENGTH_NULL_TERMINATED ,
4207+ & family_number ));
4208+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_addr_family_ntop (
4209+ WOLFSENTRY_CONTEXT_ARGS_OUT ,
4210+ family_number ,
4211+ & addr_family ,
4212+ & family_name ));
4213+ WOLFSENTRY_EXIT_ON_FALSE ((family_name != NULL ) && (! strcmp (family_name , "LINK64" )));
4214+ if (addr_family )
4215+ WOLFSENTRY_EXIT_ON_FAILURE (wolfsentry_addr_family_drop_reference (WOLFSENTRY_CONTEXT_ARGS_OUT , addr_family , & action_results ));
4216+ }
40894217 }
40904218#endif /* WOLFSENTRY_PROTOCOL_NAMES */
40914219
0 commit comments