diff options
author | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2019-01-17 13:32:24 +1100 |
---|---|---|
committer | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2019-02-01 15:06:50 +1100 |
commit | 47038255f6ec971e8273c441066f8b1cba3380b7 (patch) | |
tree | 67516b942233f82dcbb8a25abc98744f54ad131b | |
parent | 8b9d8bf7c9837832347dd8018b9910cc7d2b4371 (diff) | |
download | talos-petitboot-1.7.5.tar.gz talos-petitboot-1.7.5.zip |
lib/url: Include port in pb_url_to_string()v1.7.5
And include a pxe-parser test which uses a port in the path prefix to
exercise this. This could cause PXE discovery failures if parameters
such as pathprefix included a port in the URL.
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
(cherry picked from commit 28d0d7035ee3099935ef264db40a86142c098ec5)
-rw-r--r-- | lib/url/url.c | 11 | ||||
-rw-r--r-- | test/parser/Makefile.am | 1 | ||||
-rw-r--r-- | test/parser/test-pxe-pathprefix-port.c | 40 |
3 files changed, 50 insertions, 2 deletions
diff --git a/lib/url/url.c b/lib/url/url.c index 6eeced3..a2ca3a5 100644 --- a/lib/url/url.c +++ b/lib/url/url.c @@ -234,10 +234,17 @@ bool is_url(const char *str) char *pb_url_to_string(struct pb_url *url) { const struct pb_scheme_info *scheme = pb_url_scheme_info(url->scheme); + char *str, *port; assert(scheme); - return talloc_asprintf(url, "%s://%s%s", scheme->str, - scheme->has_host ? url->host : "", url->path); + port = url->port ? talloc_asprintf(url, ":%s", url->port) : NULL; + + str = talloc_asprintf(url, "%s://%s%s%s", scheme->str, + scheme->has_host ? url->host : "", + port ?: "", url->path); + + talloc_free(port); + return str; } static void pb_url_update_full(struct pb_url *url) diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am index a0795db..8c01ec8 100644 --- a/test/parser/Makefile.am +++ b/test/parser/Makefile.am @@ -65,6 +65,7 @@ parser_TESTS = \ test/parser/test-pxe-non-url-pathprefix-with-conf \ test/parser/test-pxe-pathprefix-discover \ test/parser/test-pxe-pathprefix-discover-mac \ + test/parser/test-pxe-pathprefix-port \ test/parser/test-pxe-path-resolve-relative \ test/parser/test-pxe-path-resolve-absolute \ test/parser/test-pxe-discover-bootfile-root \ diff --git a/test/parser/test-pxe-pathprefix-port.c b/test/parser/test-pxe-pathprefix-port.c new file mode 100644 index 0000000..c7d018e --- /dev/null +++ b/test/parser/test-pxe-pathprefix-port.c @@ -0,0 +1,40 @@ + +#include "parser-test.h" + +#if 0 /* PARSER_EMBEDDED_CONFIG */ +default linux + +label linux +kernel ./kernel +append command line +initrd /initrd +#endif + +void run_test(struct parser_test *test) +{ + struct discover_boot_option *opt; + struct discover_context *ctx; + + test_read_conf_embedded_url(test, + "http://host:8080/path/to/pxelinux.cfg/default"); + + test_set_event_source(test); + test_set_event_param(test->ctx->event, "ip", "192.168.0.1"); + test_set_event_param(test->ctx->event, "pxepathprefix", + "http://host:8080/path/to/"); + + test_run_parser(test, "pxe"); + + ctx = test->ctx; + + check_boot_option_count(ctx, 1); + opt = get_boot_option(ctx, 0); + + check_name(opt, "linux"); + check_args(opt, "command line"); + + check_resolved_url_resource(opt->boot_image, + "http://host:8080/path/to/./kernel"); + check_resolved_url_resource(opt->initrd, + "http://host:8080/path/to/initrd"); +} |