diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2019-10-17 23:08:43 -0500 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2019-10-17 23:08:43 -0500 |
commit | 383ed329bffdec853bdb4c9c03e56ed3b86455da (patch) | |
tree | eda7ef3f25eb1ecae6b0c8824c87252a5d2d0379 /hscript/script.cc | |
parent | 01105c999b6ff14f8ba9dae9031c3adfc8391193 (diff) | |
download | horizon-383ed329bffdec853bdb4c9c03e56ed3b86455da.tar.gz horizon-383ed329bffdec853bdb4c9c03e56ed3b86455da.tar.bz2 horizon-383ed329bffdec853bdb4c9c03e56ed3b86455da.tar.xz horizon-383ed329bffdec853bdb4c9c03e56ed3b86455da.zip |
hscript: Implement diskid key (except execution)
Diffstat (limited to 'hscript/script.cc')
-rw-r--r-- | hscript/script.cc | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/hscript/script.cc b/hscript/script.cc index f45c5f2..83957f8 100644 --- a/hscript/script.cc +++ b/hscript/script.cc @@ -86,6 +86,9 @@ struct Script::ScriptPrivate { /*! APK repositories */ std::vector< std::unique_ptr<Horizon::Keys::Repository> > repos; + /*! Disk identification keys */ + std::vector< std::unique_ptr<Horizon::Keys::DiskId> > diskids; + /*! Store +key_obj+ representing the key +key_name+. * @param key_name The name of the key that is being stored. * @param obj The Key object associated with the key. @@ -164,6 +167,10 @@ struct Script::ScriptPrivate { std::unique_ptr<Repository> repo(dynamic_cast<Repository *>(obj)); this->repos.push_back(std::move(repo)); return true; + } else if(key_name == "diskid") { + std::unique_ptr<DiskId> diskid(dynamic_cast<DiskId *>(obj)); + this->diskids.push_back(std::move(diskid)); + return true; } else { return false; } @@ -318,13 +325,29 @@ const Script *Script::load(std::istream &sstream, const ScriptOptions opts) { bool Script::validate() const { int failures = 0; - std::set<std::string> seen_mounts; + std::set<std::string> seen_diskids, seen_mounts; std::map<const std::string, int> seen_iface; 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 &diskid : this->internal->diskids) { + if(!diskid->validate(this->opts)) { + failures++; + continue; + } + + /* Runner.Validate.diskid.Unique */ + if(seen_diskids.find(diskid->device()) != seen_diskids.end()) { + failures++; + output_error("installfile:" + std::to_string(diskid->lineno()), + "diskid: device " + diskid->device() + + " has already been identified"); + } + seen_diskids.insert(diskid->device()); + } + for(auto &mount : this->internal->mounts) { if(!mount->validate(this->opts)) { failures++; |