From 1f0a1dec1af315e6465e1c1dd503aa942a85b1f4 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Sat, 12 Oct 2019 00:44:14 -0500 Subject: hscript: Pass opts to all validate()s, implement 'mount' validation --- hscript/script.cc | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'hscript/script.cc') diff --git a/hscript/script.cc b/hscript/script.cc index ddd6cd3..dbf845d 100644 --- a/hscript/script.cc +++ b/hscript/script.cc @@ -296,23 +296,38 @@ const Script *Script::load(std::istream &sstream, const ScriptOptions opts) { bool Script::validate() const { int failures = 0; - if(!this->internal->network->validate()) failures++; - if(!this->internal->hostname->validate()) failures++; - if(!this->internal->rootpw->validate()) failures++; + std::set seen_mounts; + + if(!this->internal->network->validate(this->opts)) failures++; + if(!this->internal->hostname->validate(this->opts)) failures++; + if(!this->internal->rootpw->validate(this->opts)) failures++; + for(auto &mount : this->internal->mounts) { - if(!mount->validate()) { + if(!mount->validate(this->opts)) { failures++; continue; } - /* TODO requirements to implement: - * Runner.Validate.mount.Unique. - * Runner.Validate.mount.Root. - */ + + /* Runner.Validate.mount.Unique */ + if(seen_mounts.find(mount->mountpoint()) != seen_mounts.end()) { + failures++; + output_error("installfile:" + std::to_string(mount->lineno()), + "mount: mountpoint " + mount->mountpoint() + + " has already been specified; " + mount->device() + + " is a duplicate", ""); + } + seen_mounts.insert(mount->mountpoint()); if(this->opts.test(InstallEnvironment)) { - /* TODO: Runner.Validate.mount.Block. */ + /* TODO: Runner.Validate.mount.Block for not-yet-created devs. */ } } + /* Runner.Validate.mount.Root */ + if(seen_mounts.find("/") == seen_mounts.end()) { + failures++; + output_error("installfile:0", "mount: no root mount specified", ""); + } + output_message("validator", "0", "installfile", std::to_string(failures) + " failure(s).", ""); return (failures == 0); -- cgit v1.2.3-60-g2f50