summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libipset.map5
-rw-r--r--lib/parse.c22
-rw-r--r--lib/session.c15
3 files changed, 32 insertions, 10 deletions
diff --git a/lib/libipset.map b/lib/libipset.map
index a2e9bd3..475fae5 100644
--- a/lib/libipset.map
+++ b/lib/libipset.map
@@ -168,3 +168,8 @@ LIBIPSET_4.6 {
global:
ipset_keyword;
} LIBIPSET_4.5;
+
+LIBIPSET_4.7 {
+global:
+ ipset_session_warning_as_error;
+} LIBIPSET_4.6;
diff --git a/lib/parse.c b/lib/parse.c
index bc8e777..7cd6436 100644
--- a/lib/parse.c
+++ b/lib/parse.c
@@ -292,7 +292,8 @@ parse_portname(struct ipset_session *session, const char *str,
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);
}
/**
@@ -313,21 +314,22 @@ ipset_parse_port(struct ipset_session *session,
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);
}
/**
diff --git a/lib/session.c b/lib/session.c
index b1c5f5e..ca96aaa 100644
--- a/lib/session.c
+++ b/lib/session.c
@@ -240,6 +240,21 @@ ipset_session_report(struct ipset_session *session,
}
/**
+ * 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
*