Example #1
0
static void fwd_ipt_clear_ruleset_table(struct iptc_handle *h)
{
	const char *chain;

	/* pass 1: flush all chains */
	for( chain = iptc_first_chain(h); chain;
	     chain = iptc_next_chain(h)
	) {
		iptc_flush_entries(chain, h);
	}

	/* pass 2: remove user defined chains */
	for( chain = iptc_first_chain(h); chain;
	     chain = iptc_next_chain(h)
	) {
		if( ! iptc_builtin(chain, h) )
			iptc_delete_chain(chain, h);
	}
}
Example #2
0
int
delete_ntk_forward_chain(iptc_handle_t * t)
{
	int res;

	res = iptc_is_chain(NTK_MARK_CHAIN, *t);
	if (!res)
		return 0;
	res = iptc_flush_entries(NTK_MARK_CHAIN, t);
	if (!res)
		goto cannot_delete;
	res = iptc_delete_chain(NTK_MARK_CHAIN, t);
	if (!res)
		goto cannot_delete;
	return 0;

  cannot_delete:
	error("In delete_ntk_forward_chain: -> %s", iptc_strerror(errno));
	err_ret(ERR_NETDEL, -1);
}
Example #3
0
// Delete existing iptables chain.
static int __lua_iptc_delete_chain(lua_State *L)
{
    int i, r;
    const char *table = luaL_checkstring(L, 1);
    const char *chain = luaL_checkstring(L, 2); 

    i = find_table(table);

    if(i == -1)
        return eprintf("Invalid table: %s", table);

    if(!tables[i].handle)
        return eprintf("Invalid table: %s", table);

    r = iptc_delete_chain(chain, tables[i].handle);
    if(!r) return eprintf("Unable to delete chain: %s: %s", table, chain);

    lua_pushnumber(L, 0);
    return 1;
}
Example #4
0
// Delete all user-defined iptables chains.
static int __lua_iptc_delete_user_chains(lua_State *L)
{
    int i;
    const char *chain;
    const char *table = luaL_checkstring(L, 1);
    char *chains;
    unsigned int c, count = 0;
    
    i = find_table(table);

    if(i == -1)
        return eprintf("Invalid table: %s", table);

    if(!tables[i].handle)
        return eprintf("Invalid table: %s", table);

    chain = iptc_first_chain(tables[i].handle);

    while(chain)
    {
        count++;
        chain = iptc_next_chain(tables[i].handle);
    }
    
    chains = malloc(sizeof(ipt_chainlabel) * count);

    c = 0;
    chain = iptc_first_chain(tables[i].handle);

    while(chain)
    {
        strcpy(chains + c * sizeof(ipt_chainlabel), chain);
        c++;
        chain = iptc_next_chain(tables[i].handle);
    }

    for(c = 0; c < count; c++)
    {
        if(iptc_builtin(chains + c * sizeof(ipt_chainlabel), tables[i].handle))
            continue;

        iptc_delete_chain(chains + c * sizeof(ipt_chainlabel), tables[i].handle);
    }

    free(chains);

// XXX: Nope!  Must copy chain names (as above, from iptables.c).
#if 0
    chain = iptc_first_chain(tables[i].handle);

    while(chain)
    {
        fprintf(stderr, "chain \"%s\", [%d]0x%08x\n", chain, i, tables[i].handle);

        if(!iptc_builtin(chain, tables[i].handle))
        {
            fprintf(stderr, "iptc_delete_chain: %d\n",
                iptc_delete_chain(chain, tables[i].handle));
        }

        chain = iptc_next_chain(tables[i].handle);
    }
#endif

    return 0;
}