"REJECT",
"DROP",
"NOTRACK",
+ "HELPER",
"MARK",
"DNAT",
"SNAT",
{
unsigned int year = 1970, mon = 1, day = 1, hour = 0, min = 0, sec = 0;
struct tm tm = { 0 };
+ time_t ts;
char *p;
year = strtoul(val, &p, 10);
tm.tm_min = min;
tm.tm_sec = sec;
- if (mktime(&tm) >= 0)
+ ts = mktime(&tm) - timezone;
+
+ if (ts >= 0)
{
- *((struct tm *)ptr) = tm;
+ gmtime_r(&ts, (struct tm *)ptr);
return true;
}
return valid;
}
+bool
+fw3_parse_cthelper(void *ptr, const char *val, bool is_list)
+{
+ struct fw3_cthelpermatch m = { };
+
+ if (*val == '!')
+ {
+ m.invert = true;
+ while (isspace(*++val));
+ }
+
+ if (*val)
+ {
+ m.set = true;
+ strncpy(m.name, val, sizeof(m.name) - 1);
+ put_value(ptr, &m, sizeof(m), is_list);
+ return true;
+ }
+
+ return false;
+}
+
+bool
+fw3_parse_setentry(void *ptr, const char *val, bool is_list)
+{
+ struct fw3_setentry e = { };
+
+ e.value = val;
+ put_value(ptr, &e, sizeof(e), is_list);
+
+ return true;
+}
+
bool
fw3_parse_options(void *s, const struct fw3_option *opts,