]> granicus.if.org Git - ipset/blobdiff - lib/parse.c
Fix parsing service names for ports
[ipset] / lib / parse.c
index bc8e7773f05d623afd4ce819a2bf8f78003bba95..7cd643632be84d3d5aa4a53974232768871b8efc 100644 (file)
@@ -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);
 }
 
 /**