add support for per-zone user chains
[project/firewall3.git] / defaults.c
index 7f41c83..973b3a7 100644 (file)
@@ -223,9 +223,14 @@ fw3_print_default_head_rules(enum fw3_table table, enum fw3_family family,
 
                if (defs->custom_chains)
                {
-                       fw3_pr("-A delegate_input -j input_rule\n");
-                       fw3_pr("-A delegate_output -j output_rule\n");
-                       fw3_pr("-A delegate_forward -j forwarding_rule\n");
+                       fw3_pr("-A delegate_input -j input_rule "
+                              "-m comment --comment \"user chain for input\"\n");
+
+                       fw3_pr("-A delegate_output -j output_rule "
+                              "-m comment --comment \"user chain for output\"\n");
+
+                       fw3_pr("-A delegate_forward -j forwarding_rule "
+                              "-m comment --comment \"user chain for forwarding\"\n");
                }
 
                for (i = 0; i < ARRAY_SIZE(chains); i++)
@@ -258,8 +263,11 @@ fw3_print_default_head_rules(enum fw3_table table, enum fw3_family family,
        case FW3_TABLE_NAT:
                if (defs->custom_chains)
                {
-                       fw3_pr("-A delegate_prerouting -j prerouting_rule\n");
-                       fw3_pr("-A delegate_postrouting -j postrouting_rule\n");
+                       fw3_pr("-A delegate_prerouting -j prerouting_rule "
+                              "-m comment --comment \"user chain for prerouting\"\n");
+
+                       fw3_pr("-A delegate_postrouting -j postrouting_rule "
+                              "-m comment --comment \"user chain for postrouting\"\n");
                }
                break;
 
@@ -318,19 +326,19 @@ fw3_set_defaults(struct fw3_state *state)
 }
 
 static void
-reset_policy(enum fw3_table table)
+reset_policy(enum fw3_table table, enum fw3_target policy)
 {
        if (table != FW3_TABLE_FILTER)
                return;
 
-       fw3_pr(":INPUT ACCEPT [0:0]\n");
-       fw3_pr(":OUTPUT ACCEPT [0:0]\n");
-       fw3_pr(":FORWARD ACCEPT [0:0]\n");
+       fw3_pr(":INPUT %s [0:0]\n", fw3_flag_names[policy]);
+       fw3_pr(":OUTPUT %s [0:0]\n", fw3_flag_names[policy]);
+       fw3_pr(":FORWARD %s [0:0]\n", fw3_flag_names[policy]);
 }
 
 void
 fw3_flush_rules(enum fw3_table table, enum fw3_family family,
-                bool pass2, struct fw3_state *state)
+                bool pass2, struct fw3_state *state, enum fw3_target policy)
 {
        struct fw3_defaults *d = &state->running_defaults;
        uint16_t mask = ~0;
@@ -343,7 +351,7 @@ fw3_flush_rules(enum fw3_table table, enum fw3_family family,
 
        if (!pass2)
        {
-               reset_policy(table);
+               reset_policy(table, policy);
 
                print_chains(table, family, "-D %s\n", d->flags & mask,
                                         toplevel_rules, ARRAY_SIZE(toplevel_rules));
@@ -363,7 +371,7 @@ fw3_flush_rules(enum fw3_table table, enum fw3_family family,
 void
 fw3_flush_all(enum fw3_table table)
 {
-       reset_policy(table);
+       reset_policy(table, FW3_TARGET_ACCEPT);
 
        fw3_pr("-F\n");
        fw3_pr("-X\n");