예제 #1
0
static void
expire_dynamic_trigger(void *data)
{
	banrecord_t *rec = data;
	struct in_addr sin;
	prefix_t *pfx;
	patricia_node_t *node;
	trigger_t *t = rec->trigger;

	run_triggers(ACTION_UNBAN, rec->trigger, &rec->pkt, rec);

	switch (t->type) {
	case TRIGGER_SRC:
		sin.s_addr = rec->pkt.pkt_src.s_addr;
		break;
	case TRIGGER_DST:
	default:
		sin.s_addr = rec->pkt.pkt_dst.s_addr;
		break;
	};

	pfx = New_Prefix(AF_INET, &sin, 32);

	node = patricia_lookup(banrecord_trie, pfx);
	patricia_remove(banrecord_trie, node);

	Deref_Prefix(pfx);

	free(rec);
}
예제 #2
0
int
main (int    argc,
      char **argv)
{
  GOptionContext *context;
  GError *real_error = NULL;
  GError **error = &real_error;
  GCancellable *cancellable = NULL;
  gboolean ret = FALSE;

  g_type_init ();

  context = g_option_context_new ("- Regenerate caches in operating system tree");
  g_option_context_add_main_entries (context, options, NULL);

  if (!g_option_context_parse (context, &argc, &argv, error))
    goto out;

  if (!run_triggers (cancellable, error))
    goto out;

  ret = TRUE;
 out:
  if (real_error)
    g_printerr ("%s\n", real_error->message);
  g_clear_error (&real_error);
  if (!ret)
    return 1;
  return 0;
}
예제 #3
0
static banrecord_t *
trigger_ban(trigger_t *t, packet_info_t *packet, iprecord_t *irec)
{
	banrecord_t *rec;
	prefix_t *pfx;
	patricia_node_t *node;
	struct in_addr sin;

	switch (t->type) {
	case TRIGGER_SRC:
		sin.s_addr = packet->pkt_src.s_addr;
		break;
	case TRIGGER_DST:
	default:
		sin.s_addr = packet->pkt_dst.s_addr;
		break;
	};

	if (ban_find(sin.s_addr) != NULL)
		return NULL;

	rec = calloc(sizeof(banrecord_t), 1);

	rec->trigger = t;
	memcpy(&rec->irec, irec, sizeof(iprecord_t));
	memcpy(&rec->pkt, packet, sizeof(packet_info_t));
	rec->added = mowgli_eventloop_get_time(eventloop);
	rec->expiry_ts = rec->added + (t->expiry ? t->expiry : expiry);

	pfx = New_Prefix(AF_INET, &sin, 32);

	node = patricia_lookup(banrecord_trie, pfx);
	node->data = rec;

	Deref_Prefix(pfx);

	run_triggers(ACTION_BAN, t, packet, rec);

	rec->timer = mowgli_timer_add_once(eventloop, "expire_dynamic_trigger", expire_dynamic_trigger, rec, (t->expiry ? t->expiry : expiry));

	return rec;
}