diff options
author | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2017-12-12 14:05:40 +1100 |
---|---|---|
committer | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2017-12-12 16:15:59 +1100 |
commit | a2d5a3e3cb55fe3583acaae44fabc7c3d7f8df50 (patch) | |
tree | 01779205e51f0e2870e6627873ad8158e0b3694d /discover/pxe-parser.c | |
parent | 865097ff2cbb64f4d5b3122ab09e7b1550ecd3dd (diff) | |
download | talos-petitboot-a2d5a3e3cb55fe3583acaae44fabc7c3d7f8df50.tar.gz talos-petitboot-a2d5a3e3cb55fe3583acaae44fabc7c3d7f8df50.zip |
discover/pxe-parser: Fix relative parsing for manual config files
Manually specified config files are asynchronously downloaded by
device_handler_process_url() before being parsed. This overwrites the
'pxeconffile' parameter, causing the parser to create relative paths
relative to the downloaded file's path, not the original remote path.
Work around this by setting 'pxeconffile-local' instead to differentiate
between the original config file's location and the local copy.
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Diffstat (limited to 'discover/pxe-parser.c')
-rw-r--r-- | discover/pxe-parser.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/discover/pxe-parser.c b/discover/pxe-parser.c index 7183ecf..2f099e3 100644 --- a/discover/pxe-parser.c +++ b/discover/pxe-parser.c @@ -368,7 +368,7 @@ static struct conf_context *copy_context(void *ctx, struct discover_context *dc) static int pxe_parse(struct discover_context *dc) { - struct pb_url *pxe_base_url; + struct pb_url *pxe_base_url, *file_url; struct conf_context *conf = NULL; struct load_url_result *result; void *ctx = talloc_parent(dc); @@ -397,13 +397,25 @@ static int pxe_parse(struct discover_context *dc) return -1; if (complete_url) { + /* Check if this file has already been downloaded */ + if (event_get_param(dc->event, "pxeconffile-local")) + file_url = pb_url_parse(dc, event_get_param(dc->event, + "pxeconffile-local")); + else + file_url = dc->conf_url; + + if (!file_url) { + pb_log("%s: Failed to parse conf url!\n", __func__); + goto out_conf; + } + device_handler_status_dev_info(conf->dc->handler, dc->device, _("Requesting config %s"), pb_url_to_string(conf->dc->conf_url)); /* we have a complete URL; use this and we're done. */ - result = load_url_async(conf->dc, conf->dc->conf_url, + result = load_url_async(conf->dc, file_url, pxe_conf_parse_cb, conf, NULL, ctx); if (!result) { pb_log("load_url_async fails for %s\n", |