extern int ipset_session_report(struct ipset_session *session,
enum ipset_err_type type,
const char *fmt, ...);
+extern int ipset_session_warning_as_error(struct ipset_session *session);
#define ipset_err(session, fmt, args...) \
ipset_session_report(session, IPSET_ERROR, fmt , ## args)
error:
free(saved);
- return syntax_err("cannot parse '%s' as a %s port", str, proto);
+ return ipset_warn(session, "cannot parse '%s' as a %s port",
+ str, proto);
}
/**
const char *proto)
{
uint16_t port;
- int err;
assert(session);
assert(opt == IPSET_OPT_PORT || opt == IPSET_OPT_PORT_TO);
assert(str);
- if ((err = string_to_u16(session, str, &port)) == 0 ||
- (err = parse_portname(session, str, &port, proto)) == 0)
- err = ipset_session_data_set(session, opt, &port);
-
- if (!err)
- /* No error, so reset false error messages! */
+ if (parse_portname(session, str, &port, proto) == 0) {
+ return ipset_session_data_set(session, opt, &port);
+ }
+ /* Error is stored as warning in session report */
+ if (string_to_u16(session, str, &port) == 0) {
+ /* No error, so reset false error messages */
ipset_session_report_reset(session);
-
- return err;
+ return ipset_session_data_set(session, opt, &port);
+ }
+ /* Restore warning as error */
+ return ipset_session_warning_as_error(session);
}
/**
return -1;
}
+/**
+ * ipset_session_warning_as_error - set warning as error
+ * @session: session structrure
+ *
+ * Returns -1.
+ */
+int
+ipset_session_warning_as_error(struct ipset_session *session)
+{
+ session->errmsg = session->report;
+ session->warnmsg = NULL;
+ ipset_data_reset(ipset_session_data(session));
+ return -1;
+}
+
/**
* ipset_session_reset - reset the report buffer
* @session: session structure
0 ipset add test 2.0.0.0,5
# Try to add value after second random value
0 ipset add test 2.1.0.1,128
+# Add port by name
+0 ipset add test 2.1.0.3,smtp
+# Delete port by number
+0 ipset del test 2.1.0.3,25
# List set
0 ipset list test | grep -v Revision: | sed 's/timeout ./timeout x/' > .foo0 && ./sort.sh .foo0
# Check listing