discover/pxe-parser: Fine grained proxy control
authorCyril Bur <cyrilbur@gmail.com>
Thu, 16 Nov 2017 03:49:14 +0000 (14:49 +1100)
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>
Tue, 21 Nov 2017 03:23:05 +0000 (14:23 +1100)
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>
discover/boot.c
discover/device-handler.h
discover/pxe-parser.c

index fab4b61cd681d4a3aac00464641936029388e4e2..ba4e7208fc7cf700a86c87fad4a8b5e4f092e375 100644 (file)
@@ -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;
index a95cc9d75180eb7aeaaa7ce62acd78554644ecf9..771cd066a37697e5c99a73054b2a043341832820 100644 (file)
@@ -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;
index aef43b8cdfc06737ad72d06fc7f76a4c1670473f..7183ecff2dca169251999be12c3f592a441b1bce 100644 (file)
@@ -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
@@ -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);