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); } }
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); }
// 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; }
// 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; }