[libvirt] [PATCH] bhyve: add support for passing stdin to loader
Fabian Freyer
fabian.freyer at physik.tu-berlin.de
Thu Apr 26 17:48:32 UTC 2018
On 26 Apr 2018, at 18:38, John Ferlan wrote:
> On 04/13/2018 03:27 PM, Fabian Freyer wrote:
>> This commit adds the <bootloader_stdin> node to the domain definition,
>> with the following semantics:
>>
>> To pass standard input verbatim to the bootloader, set
>>
>> <bootloader_stdin>some stdin</bootloader_stdin>
>>
>> Multiline standard input can be set using a CDATA tag:
>>
>> <bootloader_stdin><![CDATA[
>> this standard input
>> will be passed in with
>> newlines and indentation.
>> ]]></bootloader_stdin>
>>
>> Standard input can be read from a file as follows:
>>
>> <bootloader_stdin file="/path/to/some/file"/>
>
> Not my area of expertise, but some feedback to hopefully help a bit
> seeing as there have been no other takes for 2 weeks.
Thanks!
> Personally this format over the other format would seem to be better
> although the attribute name would be "path" not "file". IOW: That whole
> CDATA thing - not sure it passes by all the censors^W reviewers
> scrutiny. Is there a particular reason to have this CDATA tag syntax?
The idea here is to be able to specify several lines of standard input,
especially for line-oriented command line interfaces, while not needing
to add a separate file.
> Parsing the line and making sure consumers provide a specific format is
> probably more hassle than it's worth and I would think presents an
> opportunity to insert things that may cause interesting errors. Any time
> you accept something from stdin like that you open up buffer overflows
> and buffer handling problems. Not that the same thing cannot be in the
> file, but at least you're then passing that off to something else to
> manage whether what's in a file is correctly formatted as you're not
> validating the contents of the file, just that it exists.
I’m not quite sure I comprehend the difference to a file here.
>>
>> Signed-off-by: Fabian Freyer <fabian.freyer at physik.tu-berlin.de>
>> ---
>> docs/formatdomain.html.in | 19 ++++++
>> docs/schemas/domaincommon.rng | 10 ++++
>> src/bhyve/bhyve_driver.c | 10 ++++
>> src/bhyve/bhyve_parse_command.c | 70 ++++++++++++++++++++++
>> src/bhyve/bhyve_process.c | 22 +++++++
>> src/conf/domain_conf.c | 41 +++++++++++++
>> src/conf/domain_conf.h | 11 ++++
>> .../bhyveargv2xml-loader-stdin-file.args | 9 +++
>> .../bhyveargv2xml-loader-stdin-file.xml | 19 ++++++
>> .../bhyveargv2xml-loader-stdin-multiline.args | 13 ++++
>> .../bhyveargv2xml-loader-stdin-multiline.xml | 21 +++++++
>> .../bhyveargv2xml-loader-stdin-oneline.args | 11 ++++
>> .../bhyveargv2xml-loader-stdin-oneline.xml | 19 ++++++
>> tests/bhyveargv2xmltest.c | 3 +
>> .../bhyvexml2argv-grub-stdin-file.args | 9 +++
>> .../bhyvexml2argv-grub-stdin-file.devmap | 1 +
>> .../bhyvexml2argv-grub-stdin-file.ldargs | 4 ++
>> .../bhyvexml2argv-grub-stdin-file.xml | 25 ++++++++
>> .../bhyvexml2argv-grub-stdin-multiline.args | 9 +++
>> .../bhyvexml2argv-grub-stdin-multiline.devmap | 1 +
>> .../bhyvexml2argv-grub-stdin-multiline.ldargs | 4 ++
>> .../bhyvexml2argv-grub-stdin-multiline.xml | 30 ++++++++++
>> .../bhyvexml2argv-grub-stdin-oneline.args | 9 +++
>> .../bhyvexml2argv-grub-stdin-oneline.devmap | 1 +
>> .../bhyvexml2argv-grub-stdin-oneline.ldargs | 4 ++
>> .../bhyvexml2argv-grub-stdin-oneline.xml | 25 ++++++++
>> tests/bhyvexml2argvtest.c | 3 +
>> .../bhyvexml2xmlout-grub-stdin-file.xml | 34 +++++++++++
>> .../bhyvexml2xmlout-grub-stdin-multiline.xml | 39 ++++++++++++
>> .../bhyvexml2xmlout-grub-stdin-oneline.xml | 34 +++++++++++
>> tests/bhyvexml2xmltest.c | 3 +
>> 31 files changed, 513 insertions(+)
>> create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-file.args
>> create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-file.xml
>> create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-multiline.args
>> create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-multiline.xml
>> create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-oneline.args
>> create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-oneline.xml
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.args
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.devmap
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.ldargs
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.xml
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.args
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.devmap
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.ldargs
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.xml
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.args
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.devmap
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.ldargs
>> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.xml
>> create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-file.xml
>> create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-multiline.xml
>> create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-oneline.xml
>>
>
> Couple of quick hitter general comments
>
> 1. Separate the domain_conf, docs, and xml2xml changes into one patch
>
> 2. Place the driver, argv2xml and xml2argv changes in another patch or
> even another 2 patches (argv2xml being separated out)...
>
> 3. Be sure to run syntax-check before posting - although I don't have
> the necessary parts for bhyve on my host, I can compile parts of this
> and syntax-check will run on it all.
>
> 4. CC Roman Bogorodskiy <bogorodskiy at gmail.com> on your submit since
> that's who generally handles bhyve related things and perhaps doesn't
> follow libvir-list every day...
He’s CC’d via a different alias.
> Splitting patches means the concepts can be reviewed separately. If
> using stdin args for loader has uses for other hypervisors, then we need
> to make sure the domain_conf, docs/schemas, etc are "good enough" for
> others. Could allow some success too...
I’ll split out the patches in a followup series.
>> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
>> index 5e99884dc..cea024235 100644
>> --- a/docs/formatdomain.html.in
>> +++ b/docs/formatdomain.html.in
>> @@ -245,6 +245,11 @@
>> ...
>> <bootloader>/usr/bin/pygrub</bootloader>
>> <bootloader_args>--append single</bootloader_args>
>> +<bootloader_stdin><![CDATA[
>> +kernel (hd)/path/to/kernel
>> +initrd (host)/path/to/initrd
>> +boot
>> +]]>
>> ...</pre>
>>
>> <dl>
>> @@ -259,6 +264,20 @@
>> command line arguments to be passed to the bootloader.
>> <span class="since">Since 0.2.3</span>
>> </dd>
>> + <dt><code>bootloader_stdin</code></dt>
>> + <dd>The optional <code>bootloader_stdin</code> element specifies
>> + standard input to be passed to the bootloader. To pass multiple
>> + lines of standard input to the bootloader, wrap the content in
>> + a CDATA tag. Instead of specifying the standard input in the
>> + domain XML, the path to a file to be read may be given using the
>> + <code>file</code> attribute:
>> +<pre>
>> +...
>> +<bootloader_stdin file="/path/to/some/file"/>
>> +...
>> +</pre>
>> + <span class="since">Since 4.3.0 (bhyve only)</span>
>
> Won't be 4.3.0.... this wouldn't seem at face value to be a bhyve thing
> only...
Ok. I just wasn’t sure what to put in here, I’d basically update the version
in future reviews.
>> + </dd>
>>
>> </dl>
>>
>> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
>> index 4cab55f05..a44d88ef3 100644
>> --- a/docs/schemas/domaincommon.rng
>> +++ b/docs/schemas/domaincommon.rng
>> @@ -1211,6 +1211,16 @@
>> <text/>
>> </element>
>> </optional>
>> + <optional>
>> + <choice>
>> + <element name="bootloader_stdin">
>> + <text/>
>> + </element>
>> + <element name="bootloader_stdin">
>> + <attribute name="file"/>
>
> Use "path" and "absFilePath" (see other "path" attributes)
>
>> + </element>
>> + </choice>
>> + </optional>
>> </interleave>
>> </define>
>> <define name="osbootkernel">
>> diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
>> index 24c4a9c80..7ac3ad3f0 100644
>> --- a/src/bhyve/bhyve_driver.c
>> +++ b/src/bhyve/bhyve_driver.c
>> @@ -743,6 +743,16 @@ bhyveConnectDomainXMLToNative(virConnectPtr conn,
>> goto cleanup;
>>
>> virBufferAdd(&buf, virCommandToString(loadcmd), -1);
>> +
>
> Should you check if the file exists and can be accessed?
Probably, thanks for catching that.
>> + if (def->os.bootloaderStdinSource == VIR_DOMAIN_BOOTLOADER_STDIN_FILE)
>> + virBufferEscapeString(&buf, " < %s", def->os.bootloaderStdin);
>> + else if (def->os.bootloaderStdinSource
>> + == VIR_DOMAIN_BOOTLOADER_STDIN_LITERAL) {
>> + virBufferEscapeString(&buf, " << END_LOADER_STDIN\n"
>> + "%s\nEND_LOADER_STDIN",
>> + def->os.bootloaderStdin);
>> + }
>> +
>> virBufferAddChar(&buf, '\n');
>> }
>>
>> diff --git a/src/bhyve/bhyve_parse_command.c b/src/bhyve/bhyve_parse_command.c
>> index fcaaed275..ef51a75f1 100644
>> --- a/src/bhyve/bhyve_parse_command.c
>> +++ b/src/bhyve/bhyve_parse_command.c
>> @@ -124,6 +124,8 @@ static int
>> bhyveCommandLineToArgv(const char *nativeConfig,
>> int *loader_argc,
>> char ***loader_argv,
>> + char **loader_stdin_buffer,
>> + char **loader_stdin_file,
>> int *bhyve_argc,
>> char ***bhyve_argv)
>> {
>> @@ -139,6 +141,10 @@ bhyveCommandLineToArgv(const char *nativeConfig,
>> char **_bhyve_argv = NULL;
>> char **_loader_argv = NULL;
>>
>> + virBuffer heredoc = VIR_BUFFER_INITIALIZER;
>> + int in_heredoc = 0;
>> + char *heredoc_delim = NULL;
>> +
>> nativeConfig_unescaped = bhyveParseCommandLineUnescape(nativeConfig);
>> if (nativeConfig_unescaped == NULL) {
>> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> @@ -178,6 +184,52 @@ bhyveCommandLineToArgv(const char *nativeConfig,
>> char **arglist = NULL;
>> size_t args_count = 0;
>> size_t args_alloc = 0;
>> + char *stdin_redir = NULL;
>> +
>> + /* are we in a heredoc? */
>> + if ( in_heredoc ) {
>
> ^^ syntax-check failure due to extra spaces
>
>> + if (STRPREFIX(curr, heredoc_delim)) {
>> + in_heredoc = 0;
>> + *loader_stdin_buffer = virBufferContentAndReset(&heredoc);
>> + continue;
>> + }
>> +
>> + if (in_heredoc++ == 1)
>> + virBufferAsprintf(&heredoc, "%s", curr);
>> + else
>> + virBufferAsprintf(&heredoc, "\n%s", curr);
>> +
>> + continue;
>> + }
>> +
>> + /* check if this line contains standard input redirection. */
>> + if ( (stdin_redir = strchr(curr, '<')) ) {
>
> syntax-check failure again
>
>> + if (STREQLEN(stdin_redir, "<<", 2)) {
>> + *stdin_redir = '\0';
>> + in_heredoc = 1;
>> + heredoc_delim = stdin_redir + 2;
>> +
>> + /* skip non-alphanumeric chars */
>> + while (*heredoc_delim && !c_isalnum(*heredoc_delim))
>> + heredoc_delim ++;
>> +
>> + if (!*heredoc_delim)
>> + goto error;
>> +
>> + virBufferFreeAndReset(&heredoc);
>> + } else {
>> + /* file redirection */
>> + *stdin_redir = '\0';
>> + stdin_redir ++;
>> +
>> + /* skip non-alphanumeric chars */
>> + while (*stdin_redir && !c_isalnum(*stdin_redir))
>> + stdin_redir ++;
>> +
>> + if (VIR_STRDUP(*loader_stdin_file, stdin_redir) != 1)
>> + goto error;
>> + }
>> + }
>>
>> /* iterate over each line, splitting on sequences of ' '. This code is
>> * adapted from qemu/qemu_parse_command.c. */
>> @@ -254,12 +306,16 @@ bhyveCommandLineToArgv(const char *nativeConfig,
>> if (!(*bhyve_argv = _bhyve_argv))
>> goto error;
>>
>> + if (in_heredoc)
>> + goto error;
>> +
>> virStringListFree(lines);
>> return 0;
>>
>> error:
>> VIR_FREE(_loader_argv);
>> VIR_FREE(_bhyve_argv);
>> + virBufferFreeAndReset(&heredoc);
>> virStringListFree(lines);
>> return -1;
>> }
>> @@ -869,6 +925,8 @@ bhyveParseCommandLineString(const char* nativeConfig,
>> char **bhyve_argv = NULL;
>> int loader_argc = 0;
>> char **loader_argv = NULL;
>> + char *loader_stdin_file = NULL;
>> + char *loader_stdin_buffer = NULL;
>>
>> if (!(def = virDomainDefNew()))
>> goto cleanup;
>> @@ -887,12 +945,21 @@ bhyveParseCommandLineString(const char* nativeConfig,
>>
>> if (bhyveCommandLineToArgv(nativeConfig,
>> &loader_argc, &loader_argv,
>> + &loader_stdin_buffer, &loader_stdin_file,
>> &bhyve_argc, &bhyve_argv)) {
>> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> _("Failed to convert the command string to argv-lists"));
>> goto error;
>> }
>>
>> + if (loader_stdin_file && !loader_stdin_buffer) {
>> + def->os.bootloaderStdinSource = VIR_DOMAIN_BOOTLOADER_STDIN_FILE;
>> + def->os.bootloaderStdin = loader_stdin_file;
>> + } else if (loader_stdin_buffer && !loader_stdin_file) {
>> + def->os.bootloaderStdinSource = VIR_DOMAIN_BOOTLOADER_STDIN_LITERAL,
>> + def->os.bootloaderStdin = loader_stdin_buffer;
>> + }
>> +
>> if (bhyveParseBhyveCommandLine(def, xmlopt, caps, bhyve_argc, bhyve_argv))
>> goto error;
>> if (loader_argv && STREQ(loader_argv[0], "/usr/sbin/bhyveload")) {
>> @@ -906,9 +973,12 @@ bhyveParseCommandLineString(const char* nativeConfig,
>> cleanup:
>> virStringListFree(loader_argv);
>> virStringListFree(bhyve_argv);
>> +
>> return def;
>> error:
>> virDomainDefFree(def);
>> + VIR_FREE(loader_stdin_buffer);
>> + VIR_FREE(loader_stdin_file);
>> def = NULL;
>> goto cleanup;
>> }
>> diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c
>> index 9276d7d36..1a6f783d7 100644
>> --- a/src/bhyve/bhyve_process.c
>> +++ b/src/bhyve/bhyve_process.c
>> @@ -113,6 +113,7 @@ virBhyveProcessStart(virConnectPtr conn,
>> bhyveDomainObjPrivatePtr priv = vm->privateData;
>> int ret = -1, rc;
>> virCapsPtr caps = NULL;
>> + int stdinfd = -1;
>>
>> if (virAsprintf(&logfile, "%s/%s.log",
>> BHYVE_LOG_DIR, vm->def->name) < 0)
>> @@ -173,6 +174,26 @@ virBhyveProcessStart(virConnectPtr conn,
>> if (!(load_cmd = virBhyveProcessBuildLoadCmd(conn, vm->def, devmap_file,
>> &devicemap)))
>> goto cleanup;
>> +
>> + switch (vm->def->os.bootloaderStdinSource) {
>> + case VIR_DOMAIN_BOOTLOADER_STDIN_NONE:
>> + break;
>> + case VIR_DOMAIN_BOOTLOADER_STDIN_FILE:
>> + if ((stdinfd = open(vm->def->os.bootloaderStdin, O_RDONLY)) < 0) {
>
> Does using virFileOpenAs make sense here? Probably doesn't much matter.?
Other things in the driver seem to use open(...), but probably virFileOpenAs might
be better here. I can change this in a future revision, if it would make more sense.
Maybe Roman has some insights here?
>> + virReportSystemError(errno, _("Failed to open '%s'"),
>> + vm->def->os.bootloaderStdin);
>> + goto cleanup;
>> + }
>> + virCommandSetInputFD(load_cmd, stdinfd);
>> + break;
>> + case VIR_DOMAIN_BOOTLOADER_STDIN_LITERAL:
>> + virCommandSetInputBuffer(load_cmd, vm->def->os.bootloaderStdin);
>> + break;
>> + /* coverity[dead_error_begin] */
>> + case VIR_DOMAIN_BOOTLOADER_STDIN_LAST:
>> + break;
>> + }
>> +
>> virCommandSetOutputFD(load_cmd, &logfd);
>> virCommandSetErrorFD(load_cmd, &logfd);
>>
>> @@ -252,6 +273,7 @@ virBhyveProcessStart(virConnectPtr conn,
>> virCommandFree(load_cmd);
>> virCommandFree(cmd);
>> VIR_FREE(logfile);
>> + VIR_FORCE_CLOSE(stdinfd);
>> VIR_FORCE_CLOSE(logfd);
>> return ret;
>> }
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index d23182f18..d99ecf9f7 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -3037,6 +3037,8 @@ void virDomainDefFree(virDomainDefPtr def)
>> VIR_FREE(def->os.bootloader);
>> VIR_FREE(def->os.bootloaderArgs);
>>
>> + VIR_FREE(def->os.bootloaderStdin);
>> +
>> virDomainClockDefClear(&def->clock);
>>
>> VIR_FREE(def->name);
>> @@ -18700,6 +18702,16 @@ virDomainDefParseXML(xmlDocPtr xml,
>> def->os.bootloader = virXPathString("string(./bootloader)", ctxt);
>> def->os.bootloaderArgs = virXPathString("string(./bootloader_args)", ctxt);
>>
>> + if ((def->os.bootloaderStdin = virXPathString("string(./bootloader_stdin/"
>> + "@file)", ctxt)))
>> + def->os.bootloaderStdinSource = VIR_DOMAIN_BOOTLOADER_STDIN_FILE;
>> + else if ((def->os.bootloaderStdin = virXPathString("string("
>> + "./bootloader_stdin)",
>> + ctxt)))
>> + def->os.bootloaderStdinSource = VIR_DOMAIN_BOOTLOADER_STDIN_LITERAL;
>> + else
>> + def->os.bootloaderStdinSource = VIR_DOMAIN_BOOTLOADER_STDIN_NONE;
>> +
>> tmp = virXPathString("string(./os/type[1])", ctxt);
>> if (!tmp) {
>> if (def->os.bootloader) {
>> @@ -26717,6 +26729,35 @@ virDomainDefFormatInternal(virDomainDefPtr def,
>> virBufferEscapeString(buf,
>> "<bootloader_args>%s</bootloader_args>\n",
>> def->os.bootloaderArgs);
>> +
>> + switch (def->os.bootloaderStdinSource) {
>> + case VIR_DOMAIN_BOOTLOADER_STDIN_NONE:
>> + break;
>> + case VIR_DOMAIN_BOOTLOADER_STDIN_FILE:
>> + virBufferEscapeString(buf, "<bootloader_stdin file=\"%s\"/>\n",
>> + def->os.bootloaderStdin);
>> + break;
>> + case VIR_DOMAIN_BOOTLOADER_STDIN_LITERAL:
>> + if (strchr(def->os.bootloaderStdin, '\n')
>> + || strchr(def->os.bootloaderStdin, '<')
>> + || strchr(def->os.bootloaderStdin, '>')
>> + || strchr(def->os.bootloaderStdin, '&'))
>
> Move the || to the end of the previous lines. Although I think a moot
> point.
>
>> + {
>> + virBufferEscapeString(buf,
>> + "<bootloader_stdin><![CDATA[%s]]>"
>> + "</bootloader_stdin>\n",
>> + def->os.bootloaderStdin);
>> + } else {
>> + virBufferEscapeString(buf,
>> + "<bootloader_stdin>%s"
>> + "</bootloader_stdin>\n",
>> + def->os.bootloaderStdin);
>> + }
>> + break;
>> + /* coverity[dead_error_begin] */
>> + case VIR_DOMAIN_BOOTLOADER_STDIN_LAST:
>> + break;
>> + }
>> }
>>
>> virBufferAddLit(buf, "<os>\n");
>> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
>> index bbaa24137..41af6cc8a 100644
>> --- a/src/conf/domain_conf.h
>> +++ b/src/conf/domain_conf.h
>> @@ -1897,6 +1897,15 @@ struct _virDomainOSEnv {
>> char *value;
>> };
>>
>> +/* Bootloader standard input source */
>> +typedef enum {
>> + VIR_DOMAIN_BOOTLOADER_STDIN_NONE = 0,
>> + VIR_DOMAIN_BOOTLOADER_STDIN_FILE,
>> + VIR_DOMAIN_BOOTLOADER_STDIN_LITERAL,
>> +
>> + VIR_DOMAIN_BOOTLOADER_STDIN_LAST
>> +} virDomainBootloaderStdinSource;
>> +
>> typedef struct _virDomainOSDef virDomainOSDef;
>> typedef virDomainOSDef *virDomainOSDefPtr;
>> struct _virDomainOSDef {
>> @@ -1923,6 +1932,8 @@ struct _virDomainOSDef {
>> virDomainLoaderDefPtr loader;
>> char *bootloader;
>> char *bootloaderArgs;
>> + virDomainBootloaderStdinSource bootloaderStdinSource;
>> + char *bootloaderStdin;
>> int smbios_mode;
>>
>> virDomainBIOSDef bios;
>> diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-file.args b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-file.args
>> new file mode 100644
>> index 000000000..ca51f2f04
>> --- /dev/null
>> +++ b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-file.args
>> @@ -0,0 +1,9 @@
>> +/usr/bin/custom-loader \
>> +-s ome \
>> +--args < path/to/some/file
>
> abs/rel file?
>
>> +/usr/sbin/bhyve \
>> +-c 1 \
>> +-m 214 \
>> +-H \
>> +-P \
>> +-s 0:0,hostbridge bhyve
>> diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-file.xml b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-file.xml
>> new file mode 100644
>> index 000000000..a56a4c451
>> --- /dev/null
>> +++ b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-file.xml
>> @@ -0,0 +1,19 @@
>> +<domain type='bhyve'>
>> + <name>bhyve</name>
>> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>> + <memory unit='KiB'>219136</memory>
>> + <currentMemory unit='KiB'>219136</currentMemory>
>> + <vcpu placement='static'>1</vcpu>
>> + <bootloader>/usr/bin/custom-loader</bootloader>
>> + <bootloader_args>-s ome --args</bootloader_args>
>> + <bootloader_stdin file="path/to/some/file"/>
>
> You want absFile or relFile?
>
> That's why I noted it above in rng schema...
Not really sure what would make more sense here. I guess that’s open for discussion?
>> + <os>
>> + <type>hvm</type>
>> + </os>
>> + <clock offset='localtime'/>
>> + <on_poweroff>destroy</on_poweroff>
>> + <on_reboot>destroy</on_reboot>
>> + <on_crash>destroy</on_crash>
>> + <devices>
>> + </devices>
>> +</domain>
>> diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-multiline.args b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-multiline.args
>> new file mode 100644
>> index 000000000..050ddf442
>> --- /dev/null
>> +++ b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-multiline.args
>> @@ -0,0 +1,13 @@
>> +/usr/bin/custom-loader \
>> +-s ome \
>> +--args << END_OF_THIS_HEREDOC
>
> This doesn't seem right - "END_OF_THIS_HEREDOC"
This is basically an arbitrary identifier that ends ...
>> +some
>> +standard input
>> +here
>> +END_OF_THIS_HEREDOC
here
>> +/usr/sbin/bhyve \
>> +-c 1 \
>> +-m 214 \
>> +-H \
>> +-P \
>> +-s 0:0,hostbridge bhyve
>> diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-multiline.xml b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-multiline.xml
>> new file mode 100644
>> index 000000000..496b5ea87
>> --- /dev/null
>> +++ b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-multiline.xml
>> @@ -0,0 +1,21 @@
>> +<domain type='bhyve'>
>> + <name>bhyve</name>
>> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>> + <memory unit='KiB'>219136</memory>
>> + <currentMemory unit='KiB'>219136</currentMemory>
>> + <vcpu placement='static'>1</vcpu>
>> + <bootloader>/usr/bin/custom-loader</bootloader>
>> + <bootloader_args>-s ome --args</bootloader_args>
>> + <bootloader_stdin><![CDATA[some
>> +standard input
>> +here]]></bootloader_stdin>
>> + <os>
>> + <type>hvm</type>
>> + </os>
>> + <clock offset='localtime'/>
>> + <on_poweroff>destroy</on_poweroff>
>> + <on_reboot>destroy</on_reboot>
>> + <on_crash>destroy</on_crash>
>> + <devices>
>> + </devices>
>> +</domain>
>> diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-oneline.args b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-oneline.args
>> new file mode 100644
>> index 000000000..f8bcdcddd
>> --- /dev/null
>> +++ b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-oneline.args
>> @@ -0,0 +1,11 @@
>> +/usr/bin/custom-loader \
>> +-s ome \
>> +--args << END_OF_THIS_HEREDOC> +some standard input here
>> +END_OF_THIS_HEREDOC
>> +/usr/sbin/bhyve \
>> +-c 1 \
>> +-m 214 \
>> +-H \
>> +-P \
>> +-s 0:0,hostbridge bhyve
>> diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-oneline.xml b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-oneline.xml
>> new file mode 100644
>> index 000000000..17c9da664
>> --- /dev/null
>> +++ b/tests/bhyveargv2xmldata/bhyveargv2xml-loader-stdin-oneline.xml
>> @@ -0,0 +1,19 @@
>> +<domain type='bhyve'>
>> + <name>bhyve</name>
>> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>> + <memory unit='KiB'>219136</memory>
>> + <currentMemory unit='KiB'>219136</currentMemory>
>> + <vcpu placement='static'>1</vcpu>
>> + <bootloader>/usr/bin/custom-loader</bootloader>
>> + <bootloader_args>-s ome --args</bootloader_args>
>> + <bootloader_stdin>some standard input here</bootloader_stdin>
>> + <os>
>> + <type>hvm</type>
>> + </os>
>> + <clock offset='localtime'/>
>> + <on_poweroff>destroy</on_poweroff>
>> + <on_reboot>destroy</on_reboot>
>> + <on_crash>destroy</on_crash>
>> + <devices>
>> + </devices>
>> +</domain>
>> diff --git a/tests/bhyveargv2xmltest.c b/tests/bhyveargv2xmltest.c
>> index e5d78530c..fef01d7da 100644
>> --- a/tests/bhyveargv2xmltest.c
>> +++ b/tests/bhyveargv2xmltest.c
>> @@ -187,6 +187,9 @@ mymain(void)
>> DO_TEST("memsize-human");
>> DO_TEST_FAIL("memsize-fail");
>> DO_TEST("custom-loader");
>> + DO_TEST("loader-stdin-file");
>> + DO_TEST("loader-stdin-oneline");
>> + DO_TEST("loader-stdin-multiline");
>> DO_TEST("bhyveload-custom");
>> DO_TEST("bhyveload-vda");
>> DO_TEST_FAIL("bhyveload-name-mismatch");
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.args b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.args
>> new file mode 100644
>> index 000000000..3ba5c1160
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.args
>> @@ -0,0 +1,9 @@
>> +/usr/sbin/bhyve \
>> +-c 1 \
>> +-m 214 \
>> +-u \
>> +-H \
>> +-P \
>> +-s 0:0,hostbridge \
>> +-s 2:0,ahci,hd:/tmp/freebsd.img \
>> +-s 3:0,virtio-net,faketapdev,mac=52:54:00:ee:f5:79 bhyve
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.devmap b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.devmap
>> new file mode 100644
>> index 000000000..b312bfdaf
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.devmap
>> @@ -0,0 +1 @@
>> +(hd0) /tmp/freebsd.img
>> \ No newline at end of file
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.ldargs b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.ldargs
>> new file mode 100644
>> index 000000000..7d9a5155a
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.ldargs
>> @@ -0,0 +1,4 @@
>> +/usr/local/sbin/grub-bhyve \
>> +--root hd0,msdos1 \
>> +--device-map '<device.map>' \
>> +--memory 214 bhyve
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.xml
>> new file mode 100644
>> index 000000000..f804da0db
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-file.xml
>> @@ -0,0 +1,25 @@
>> +<domain type='bhyve'>
>> + <name>bhyve</name>
>> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
>> + <memory>219136</memory>
>> + <vcpu>1</vcpu>
>> + <bootloader>/usr/local/sbin/grub-bhyve</bootloader>
>> + <bootloader_stdin file="/path/to/some/file"/>
>> + <os>
>> + <type>hvm</type>
>> + </os>
>> + <devices>
>> + <disk type='file'>
>> + <driver name='file' type='raw'/>
>> + <source file='/tmp/freebsd.img'/>
>> + <target dev='hda' bus='sata'/>
>> + <address type='drive' controller='0' bus='0' target='2' unit='0'/>
>> + </disk>
>> + <interface type='bridge'>
>> + <mac address='52:54:00:ee:f5:79'/>
>> + <model type='virtio'/>
>> + <source bridge="virbr0"/>
>> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>> + </interface>
>> + </devices>
>> +</domain>
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.args b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.args
>> new file mode 100644
>> index 000000000..3ba5c1160
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.args
>> @@ -0,0 +1,9 @@
>> +/usr/sbin/bhyve \
>> +-c 1 \
>> +-m 214 \
>> +-u \
>> +-H \
>> +-P \
>> +-s 0:0,hostbridge \
>> +-s 2:0,ahci,hd:/tmp/freebsd.img \
>> +-s 3:0,virtio-net,faketapdev,mac=52:54:00:ee:f5:79 bhyve
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.devmap b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.devmap
>> new file mode 100644
>> index 000000000..b312bfdaf
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.devmap
>> @@ -0,0 +1 @@
>> +(hd0) /tmp/freebsd.img
>> \ No newline at end of file
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.ldargs b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.ldargs
>> new file mode 100644
>> index 000000000..7d9a5155a
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.ldargs
>> @@ -0,0 +1,4 @@
>> +/usr/local/sbin/grub-bhyve \
>> +--root hd0,msdos1 \
>> +--device-map '<device.map>' \
>> +--memory 214 bhyve
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.xml
>> new file mode 100644
>> index 000000000..456ab0443
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-multiline.xml
>> @@ -0,0 +1,30 @@
>> +<domain type='bhyve'>
>> + <name>bhyve</name>
>> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
>> + <memory>219136</memory>
>> + <vcpu>1</vcpu>
>> + <bootloader>/usr/local/sbin/grub-bhyve</bootloader>
>> + <bootloader_stdin><![CDATA[
>> +multiple
>> +boot
>> +loader
>> +commands
>> +]]></bootloader_stdin>
>> + <os>
>> + <type>hvm</type>
>> + </os>
>> + <devices>
>> + <disk type='file'>
>> + <driver name='file' type='raw'/>
>> + <source file='/tmp/freebsd.img'/>
>> + <target dev='hda' bus='sata'/>
>> + <address type='drive' controller='0' bus='0' target='2' unit='0'/>
>> + </disk>
>> + <interface type='bridge'>
>> + <mac address='52:54:00:ee:f5:79'/>
>> + <model type='virtio'/>
>> + <source bridge="virbr0"/>
>> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>> + </interface>
>> + </devices>
>> +</domain>
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.args b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.args
>> new file mode 100644
>> index 000000000..3ba5c1160
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.args
>> @@ -0,0 +1,9 @@
>> +/usr/sbin/bhyve \
>> +-c 1 \
>> +-m 214 \
>> +-u \
>> +-H \
>> +-P \
>> +-s 0:0,hostbridge \
>> +-s 2:0,ahci,hd:/tmp/freebsd.img \
>> +-s 3:0,virtio-net,faketapdev,mac=52:54:00:ee:f5:79 bhyve
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.devmap b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.devmap
>> new file mode 100644
>> index 000000000..b312bfdaf
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.devmap
>> @@ -0,0 +1 @@
>> +(hd0) /tmp/freebsd.img
>> \ No newline at end of file
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.ldargs b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.ldargs
>> new file mode 100644
>> index 000000000..7d9a5155a
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.ldargs
>> @@ -0,0 +1,4 @@
>> +/usr/local/sbin/grub-bhyve \
>> +--root hd0,msdos1 \
>> +--device-map '<device.map>' \
>> +--memory 214 bhyve
>> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.xml
>> new file mode 100644
>> index 000000000..03b6987fd
>> --- /dev/null
>> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-grub-stdin-oneline.xml
>> @@ -0,0 +1,25 @@
>> +<domain type='bhyve'>
>> + <name>bhyve</name>
>> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
>> + <memory>219136</memory>
>> + <vcpu>1</vcpu>
>> + <bootloader>/usr/local/sbin/grub-bhyve</bootloader>
>> + <bootloader_stdin>some input commands</bootloader_stdin>
>> + <os>
>> + <type>hvm</type>
>> + </os>
>> + <devices>
>> + <disk type='file'>
>> + <driver name='file' type='raw'/>
>> + <source file='/tmp/freebsd.img'/>
>> + <target dev='hda' bus='sata'/>
>> + <address type='drive' controller='0' bus='0' target='2' unit='0'/>
>> + </disk>
>> + <interface type='bridge'>
>> + <mac address='52:54:00:ee:f5:79'/>
>> + <model type='virtio'/>
>> + <source bridge="virbr0"/>
>> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>> + </interface>
>> + </devices>
>> +</domain>
>> diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c
>> index 6f3b0c2eb..e4cb0592e 100644
>> --- a/tests/bhyvexml2argvtest.c
>> +++ b/tests/bhyvexml2argvtest.c
>> @@ -188,6 +188,9 @@ mymain(void)
>> DO_TEST("grub-defaults");
>> DO_TEST("grub-bootorder");
>> DO_TEST("grub-bootorder2");
>> + DO_TEST("grub-stdin-file");
>> + DO_TEST("grub-stdin-oneline");
>> + DO_TEST("grub-stdin-multiline");
>> DO_TEST("bhyveload-bootorder");
>> DO_TEST("bhyveload-bootorder1");
>> DO_TEST_FAILURE("bhyveload-bootorder2");
>> diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-file.xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-file.xml
>> new file mode 100644
>> index 000000000..f07368d01
>> --- /dev/null
>> +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-file.xml
>> @@ -0,0 +1,34 @@
>> +<domain type='bhyve'>
>> + <name>bhyve</name>
>> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
>> + <memory unit='KiB'>219136</memory>
>> + <currentMemory unit='KiB'>219136</currentMemory>
>> + <vcpu placement='static'>1</vcpu>
>> + <bootloader>/usr/local/sbin/grub-bhyve</bootloader>
>> + <bootloader_stdin file="/path/to/some/file"/>
>> + <os>
>> + <type arch='x86_64'>hvm</type>
>> + </os>
>> + <clock offset='utc'/>
>> + <on_poweroff>destroy</on_poweroff>
>> + <on_reboot>restart</on_reboot>
>> + <on_crash>destroy</on_crash>
>> + <devices>
>> + <disk type='file' device='disk'>
>> + <driver name='file' type='raw'/>
>> + <source file='/tmp/freebsd.img'/>
>> + <target dev='hda' bus='sata'/>
>> + <address type='drive' controller='0' bus='0' target='2' unit='0'/>
>> + </disk>
>> + <controller type='pci' index='0' model='pci-root'/>
>> + <controller type='sata' index='0'>
>> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
>> + </controller>
>> + <interface type='bridge'>
>> + <mac address='52:54:00:ee:f5:79'/>
>> + <source bridge='virbr0'/>
>> + <model type='virtio'/>
>> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>> + </interface>
>> + </devices>
>> +</domain>
>> diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-multiline.xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-multiline.xml
>> new file mode 100644
>> index 000000000..eae6df4b4
>> --- /dev/null
>> +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-multiline.xml
>> @@ -0,0 +1,39 @@
>> +<domain type='bhyve'>
>> + <name>bhyve</name>
>> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
>> + <memory unit='KiB'>219136</memory>
>> + <currentMemory unit='KiB'>219136</currentMemory>
>> + <vcpu placement='static'>1</vcpu>
>> + <bootloader>/usr/local/sbin/grub-bhyve</bootloader>
>> + <bootloader_stdin><![CDATA[
>> +multiple
>> +boot
>> +loader
>> +commands
>> +]]></bootloader_stdin>
>> + <os>
>> + <type arch='x86_64'>hvm</type>
>> + </os>
>> + <clock offset='utc'/>
>> + <on_poweroff>destroy</on_poweroff>
>> + <on_reboot>restart</on_reboot>
>> + <on_crash>destroy</on_crash>
>> + <devices>
>> + <disk type='file' device='disk'>
>> + <driver name='file' type='raw'/>
>> + <source file='/tmp/freebsd.img'/>
>> + <target dev='hda' bus='sata'/>
>> + <address type='drive' controller='0' bus='0' target='2' unit='0'/>
>> + </disk>
>> + <controller type='pci' index='0' model='pci-root'/>
>> + <controller type='sata' index='0'>
>> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
>> + </controller>
>> + <interface type='bridge'>
>> + <mac address='52:54:00:ee:f5:79'/>
>> + <source bridge='virbr0'/>
>> + <model type='virtio'/>
>> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>> + </interface>
>> + </devices>
>> +</domain>
>> diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-oneline.xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-oneline.xml
>> new file mode 100644
>> index 000000000..b038a9065
>> --- /dev/null
>> +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-grub-stdin-oneline.xml
>> @@ -0,0 +1,34 @@
>> +<domain type='bhyve'>
>> + <name>bhyve</name>
>> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
>> + <memory unit='KiB'>219136</memory>
>> + <currentMemory unit='KiB'>219136</currentMemory>
>> + <vcpu placement='static'>1</vcpu>
>> + <bootloader>/usr/local/sbin/grub-bhyve</bootloader>
>> + <bootloader_stdin>some input commands</bootloader_stdin>
>> + <os>
>> + <type arch='x86_64'>hvm</type>
>> + </os>
>> + <clock offset='utc'/>
>> + <on_poweroff>destroy</on_poweroff>
>> + <on_reboot>restart</on_reboot>
>> + <on_crash>destroy</on_crash>
>> + <devices>
>> + <disk type='file' device='disk'>
>> + <driver name='file' type='raw'/>
>> + <source file='/tmp/freebsd.img'/>
>> + <target dev='hda' bus='sata'/>
>> + <address type='drive' controller='0' bus='0' target='2' unit='0'/>
>> + </disk>
>> + <controller type='pci' index='0' model='pci-root'/>
>> + <controller type='sata' index='0'>
>> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
>> + </controller>
>> + <interface type='bridge'>
>> + <mac address='52:54:00:ee:f5:79'/>
>> + <source bridge='virbr0'/>
>> + <model type='virtio'/>
>> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>> + </interface>
>> + </devices>
>> +</domain>
>> diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c
>> index 4d9c1681d..fd386b504 100644
>> --- a/tests/bhyvexml2xmltest.c
>> +++ b/tests/bhyvexml2xmltest.c
>> @@ -98,6 +98,9 @@ mymain(void)
>> DO_TEST_DIFFERENT("grub-bootorder");
>> DO_TEST_DIFFERENT("grub-bootorder2");
>> DO_TEST_DIFFERENT("grub-defaults");
>> + DO_TEST_DIFFERENT("grub-stdin-file");
>> + DO_TEST_DIFFERENT("grub-stdin-oneline");
>> + DO_TEST_DIFFERENT("grub-stdin-multiline");
>> DO_TEST_DIFFERENT("localtime");
>> DO_TEST_DIFFERENT("macaddr");
>> DO_TEST_DIFFERENT("metadata");
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 882 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180426/17f28c7d/attachment-0001.sig>
More information about the libvir-list
mailing list