diff --git a/src/utils/nsupdate/nsupdate_exec.c b/src/utils/nsupdate/nsupdate_exec.c index 22fafe0d65a7e85148dd572115e78f73c39420fd..747f4b5c4a9e70e7c449a4417a12417bce92f488 100644 --- a/src/utils/nsupdate/nsupdate_exec.c +++ b/src/utils/nsupdate/nsupdate_exec.c @@ -760,37 +760,25 @@ int cmd_server(const char* lp, params_t *params) if (!addr) return KNOT_ENOMEM; DBG("%s: parsed addr: %s\n", __func__, addr); - /* Attempt to parse port (optional) */ + /* Store port/service if present. */ lp = skipspace(lp + len); if (*lp == '\0') { free(addr); return KNOT_EOK; } - char *np = NULL; - unsigned long port = strtoul(lp, &np, 10); - if (!np || (*np != '\0' && !isspace(*np))) { - ERR("failed to parse port number '%s'\n", lp); - free(addr); - return KNOT_EPARSEFAIL; - } - if (port == 0 || port > 65535) { - ERR("invalid port number '%lu', valid range: <1-65535>\n", - port); - free(addr); - return KNOT_ERANGE; - } - - char *port_s = strndup(lp, np-lp); - if (!port_s) { + + len = strcspn(lp, SEP_CHARS); + char *port = strndup(lp, len); + if (!port) { free(addr); return KNOT_ENOMEM; } - DBG("%s: parsed port: %s\n", __func__, port_s); + DBG("%s: parsed port: %s\n", __func__, port); /* Create server struct. */ - server_t *srv = server_create(addr, port_s); + server_t *srv = server_create(addr, port); free(addr); - free(port_s); + free(port); /* Enqueue. */ if (!srv) return KNOT_ENOMEM;