Skip to content

Commit

Permalink
discover/pxe-parser: Fine grained proxy control
Browse files Browse the repository at this point in the history
Petitboot provides a method for a user to manually specify a
configuration file that should be retrieved. Petitboot also has a
global proxy configuration.

This patch aims to marry the two so that a custom configuration file
can specify that a specific proxy should be used to access one (or all)
of the options within it.

This makes custom configuration files more powerful as they can point
to files behind proxies without the user needing to also specify the
global proxy for that specific custom configuration file to work.

This adds parsing for a `proxy` option which will apply to all boot
items found after.

Signed-off-by: Cyril Bur <cyrilbur@gmail.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
  • Loading branch information
cyrilbur-ibm authored and sammj committed Nov 21, 2017
1 parent 117a75f commit 3a76e42
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 1 deletion.
5 changes: 5 additions & 0 deletions discover/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,11 @@ struct boot_task *boot(void *ctx, struct discover_boot_option *opt,
dtb = opt->dtb->url;
}

if (opt && opt->proxy) {
setenv("http_proxy", opt->proxy, 1);
setenv("https_proxy", opt->proxy, 1);
}

boot_task = talloc_zero(ctx, struct boot_task);
boot_task->dry_run = dry_run;
boot_task->status_fn = status_fn;
Expand Down
1 change: 1 addition & 0 deletions discover/device-handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ struct discover_boot_option {
struct discover_device *device;
struct boot_option *option;
struct list_item list;
const char *proxy;

struct resource *boot_image;
struct resource *initrd;
Expand Down
14 changes: 13 additions & 1 deletion discover/pxe-parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,17 @@ struct pxe_parser_info {
char **pxe_conf_files;
struct pb_url *pxe_base_url;
int current;
char *proxy;
};

static void pxe_finish(struct conf_context *conf)
{
struct pxe_parser_info *info = conf->parser_info;
if (info->opt)
if (info->opt) {
if (info->proxy)
info->opt->proxy = talloc_strdup(info->opt, info->proxy);
discover_context_add_boot_option(conf->dc, info->opt);
}
}

/* We need a slightly modified version of pb_url_join, to allow for the
Expand Down Expand Up @@ -148,6 +152,14 @@ static void pxe_process_pair(struct conf_context *ctx,
return;
}

if (streq(name, "PROXY")) {
if (parser_info->proxy)
talloc_free(parser_info->proxy);

parser_info->proxy = talloc_strdup(parser_info, value);
return;
}

if (streq(name, "LABEL") || streq(name, "PLUGIN")) {
if (opt)
pxe_finish(ctx);
Expand Down

0 comments on commit 3a76e42

Please sign in to comment.