aboutsummaryrefslogtreecommitdiffstats
path: root/src/starter/confread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/starter/confread.c')
-rw-r--r--src/starter/confread.c74
1 files changed, 47 insertions, 27 deletions
diff --git a/src/starter/confread.c b/src/starter/confread.c
index 6ebdaf58b..399e17844 100644
--- a/src/starter/confread.c
+++ b/src/starter/confread.c
@@ -461,6 +461,41 @@ static void handle_firewall(const char *label, starter_end_t *end,
}
}
+static bool handle_mark(char *value, mark_t *mark)
+{
+ char *pos, *endptr;
+
+ pos = strchr(value, '/');
+ if (pos)
+ {
+ *pos = '\0';
+ mark->mask = strtoul(pos+1, &endptr, 0);
+ if (*endptr != '\0')
+ {
+ plog("# invalid mark mask: %s", pos+1);
+ return FALSE;
+ }
+ }
+ else
+ {
+ mark->mask = 0xffffffff;
+ }
+ if (value == '\0')
+ {
+ mark->value = 0;
+ }
+ else
+ {
+ mark->value = strtoul(value, &endptr, 0);
+ if (*endptr != '\0')
+ {
+ plog("# invalid mark value: %s", value);
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
/*
* parse a conn section
*/
@@ -672,40 +707,25 @@ static void load_conn(starter_conn_t *conn, kw_list_t *kw, starter_config_t *cfg
break;
}
case KW_MARK:
- {
- char *pos, *endptr;
-
- pos = strchr(kw->value, '/');
- if (pos)
+ if (!handle_mark(kw->value, &conn->mark_in))
{
- *pos = '\0';
- conn->mark_mask = strtoul(pos+1, &endptr, 0);
- if (*endptr != '\0')
- {
- plog("# invalid mark mask: %s", pos+1);
- cfg->err++;
- break;
- }
- }
- else
- {
- conn->mark_mask = 0xffffffff;
+ cfg->err++;
+ break;
}
- if (*kw->value == '\0')
+ conn->mark_out = conn->mark_in;
+ break;
+ case KW_MARK_IN:
+ if (!handle_mark(kw->value, &conn->mark_in))
{
- conn->mark_value = 0;
+ cfg->err++;
}
- else
+ break;
+ case KW_MARK_OUT:
+ if (!handle_mark(kw->value, &conn->mark_out))
{
- conn->mark_value = strtoul(kw->value, &endptr, 0);
- if (*endptr != '\0')
- {
- plog("# invalid mark value: %s", kw->value);
- cfg->err++;
- }
+ cfg->err++;
}
break;
- }
case KW_KEYINGTRIES:
if (streq(kw->value, "%forever"))
{