diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libipset.map | 5 | ||||
-rw-r--r-- | lib/parse.c | 22 | ||||
-rw-r--r-- | lib/session.c | 15 |
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 * |