@@ -49,13 +49,18 @@ static int fixup_mflag(void** param);
49
49
static int fixup_bflag (void * * param );
50
50
static int fixup_qvalue (void * * param );
51
51
static int fixup_f_send_sock (void * * param );
52
+ static int fixup_blacklist_name (void * * param );
52
53
static int fixup_blacklist (void * * param );
54
+ static int fixup_blacklist_ip (void * * param );
55
+ static int fixup_blacklist_free (void * * param );
53
56
static int fixup_check_wrvar (void * * param );
54
57
static int fixup_avp_list (void * * param );
55
58
static int fixup_check_avp (void * * param );
56
59
static int fixup_event_name (void * * param );
57
60
static int fixup_format_string (void * * param );
58
61
static int fixup_nt_string (void * * param );
62
+ static int fixup_nt_str (void * * param );
63
+ static int fixup_nt_str_free (void * * param );
59
64
60
65
static int w_forward (struct sip_msg * msg , struct proxy_l * dest );
61
66
static int w_send (struct sip_msg * msg , struct proxy_l * dest , str * headers );
@@ -229,6 +234,37 @@ static cmd_export_t core_cmds[]={
229
234
{"unuse_blacklist" , (cmd_function )w_unuse_blacklist , {
230
235
{CMD_PARAM_STR , fixup_blacklist , 0 }, {0 ,0 ,0 }},
231
236
ALL_ROUTES },
237
+ {"check_blacklist" , (cmd_function )w_check_blacklist , {
238
+ {CMD_PARAM_STR , fixup_blacklist , 0 },
239
+ {CMD_PARAM_STR , fixup_blacklist_ip , fixup_blacklist_free }, /* ip */
240
+ {CMD_PARAM_INT |CMD_PARAM_OPT , 0 , 0 }, /* port */
241
+ {CMD_PARAM_STR |CMD_PARAM_OPT |CMD_PARAM_FIX_NULL ,
242
+ fixup_blacklist_proto , 0 }, /* proto */
243
+ {CMD_PARAM_STR |CMD_PARAM_OPT |CMD_PARAM_FIX_NULL ,
244
+ fixup_nt_str , fixup_nt_str_free }, /* pattern */
245
+ {0 ,0 ,0 }},
246
+ ALL_ROUTES },
247
+ {"add_blacklist_rule" , (cmd_function )w_add_blacklist_rule , {
248
+ {CMD_PARAM_STR , fixup_blacklist_name , 0 },
249
+ {CMD_PARAM_STR , fixup_blacklist_net , fixup_blacklist_net_free }, /* ip */
250
+ {CMD_PARAM_INT |CMD_PARAM_OPT , 0 , 0 }, /* port */
251
+ {CMD_PARAM_STR |CMD_PARAM_OPT |CMD_PARAM_FIX_NULL ,
252
+ fixup_blacklist_proto , 0 }, /* proto */
253
+ {CMD_PARAM_STR |CMD_PARAM_OPT |CMD_PARAM_FIX_NULL ,
254
+ fixup_nt_str , fixup_nt_str_free }, /* pattern */
255
+ {CMD_PARAM_INT |CMD_PARAM_OPT , 0 , 0 }, /* expire */
256
+ {0 ,0 ,0 }},
257
+ ALL_ROUTES },
258
+ {"del_blacklist_rule" , (cmd_function )w_del_blacklist_rule , {
259
+ {CMD_PARAM_STR , fixup_blacklist_name , 0 },
260
+ {CMD_PARAM_STR , fixup_blacklist_net , fixup_blacklist_net_free }, /* ip */
261
+ {CMD_PARAM_INT |CMD_PARAM_OPT , 0 , 0 }, /* port */
262
+ {CMD_PARAM_STR |CMD_PARAM_OPT |CMD_PARAM_FIX_NULL ,
263
+ fixup_blacklist_proto , 0 }, /* proto */
264
+ {CMD_PARAM_STR |CMD_PARAM_OPT |CMD_PARAM_FIX_NULL ,
265
+ fixup_nt_str , fixup_nt_str_free }, /* pattern */
266
+ {0 ,0 ,0 }},
267
+ ALL_ROUTES },
232
268
{"cache_store" , (cmd_function )w_cache_store , {
233
269
{CMD_PARAM_STR , 0 , 0 },
234
270
{CMD_PARAM_STR , 0 , 0 },
@@ -449,21 +485,47 @@ static int fixup_f_send_sock(void** param)
449
485
return E_BAD_ADDRESS ;
450
486
}
451
487
488
+ static int fixup_blacklist_name (void * * param )
489
+ {
490
+ str * s = (str * )* param ;
491
+ * param = get_bl_head_by_name (s );
492
+ if (!* param ) {
493
+ LM_ERR ("blacklist %.*s not configured\n" , s -> len , s -> s );
494
+ return E_CFG ;
495
+ }
496
+ return 0 ;
497
+ }
498
+
452
499
static int fixup_blacklist (void * * param )
453
500
{
454
501
str * s = (str * )* param ;
455
502
456
- if (!str_strcasecmp (s , _str ("all" )))
503
+ if (!str_strcasecmp (s , _str ("all" ))) {
457
504
* param = NULL ;
458
- else {
459
- * param = get_bl_head_by_name (s );
460
- if (!* param ) {
461
- LM_ERR ("[UN]USE_BLACKLIST - list "
462
- "%.*s not configured\n" , s -> len , s -> s );
463
- return E_CFG ;
464
- }
505
+ return 0 ;
506
+ } else {
507
+ return fixup_blacklist_name (param );
465
508
}
509
+ }
466
510
511
+ static int fixup_blacklist_free (void * * param )
512
+ {
513
+ pkg_free (* param );
514
+ return 0 ;
515
+ }
516
+
517
+ static int fixup_blacklist_ip (void * * param )
518
+ {
519
+ str * s = (str * )* param ;
520
+ struct ip_addr * ip_pkg ;
521
+ struct ip_addr * ip = str2ip (s );
522
+ if (!ip )
523
+ return E_BAD_ADDRESS ;
524
+ ip_pkg = pkg_malloc (sizeof * ip_pkg );
525
+ if (!ip_pkg )
526
+ return E_OUT_OF_MEM ;
527
+ memcpy (ip_pkg , ip , sizeof * ip_pkg );
528
+ * param = ip_pkg ;
467
529
return 0 ;
468
530
}
469
531
@@ -544,6 +606,32 @@ static int fixup_nt_string(void** param)
544
606
return 0 ;
545
607
}
546
608
609
+ static int fixup_nt_str (void * * param )
610
+ {
611
+ str * s = (str * )* param ;
612
+ str * s_nt ;
613
+
614
+ s_nt = pkg_malloc (sizeof * s_nt + (s ?s -> len :0 ) + 1 );
615
+ if (!s_nt )
616
+ return E_OUT_OF_MEM ;
617
+ s_nt -> s = (char * )(s_nt + 1 );
618
+ if (s ) {
619
+ s_nt -> len = s -> len ;
620
+ memcpy (s_nt -> s , s -> s , s -> len );
621
+ } else {
622
+ s_nt -> len = 0 ;
623
+ }
624
+ s_nt -> s [s_nt -> len ] = '\0' ;
625
+
626
+ * param = s_nt ;
627
+ return 0 ;
628
+ }
629
+
630
+ static int fixup_nt_str_free (void * * param )
631
+ {
632
+ pkg_free (((str * )* param )-> s );
633
+ return 0 ;
634
+ }
547
635
548
636
static int w_forward (struct sip_msg * msg , struct proxy_l * dest )
549
637
{
0 commit comments