diff -up usbguard-0.7.0/src/Library/ConfigFilePrivate.cpp.strict-config usbguard-0.7.0/src/Library/ConfigFilePrivate.cpp --- usbguard-0.7.0/src/Library/ConfigFilePrivate.cpp.strict-config 2017-11-03 10:43:09.528657179 +0100 +++ usbguard-0.7.0/src/Library/ConfigFilePrivate.cpp 2017-11-03 11:03:51.338013408 +0100 @@ -23,6 +23,7 @@ #include "ConfigFilePrivate.hpp" #include "Common/Utility.hpp" +#include "usbguard/Exception.hpp" #include "usbguard/Logger.hpp" #include @@ -53,7 +54,7 @@ namespace usbguard { _stream.open(path, std::ios::in|std::ios::out); if (!_stream.is_open()) { - throw std::runtime_error("Can't open " + path); + throw Exception("Configuration", path, "unable to open the configuration file"); } _dirty = false; parse(); @@ -62,7 +63,7 @@ namespace usbguard void ConfigFilePrivate::write() { if (!_stream.is_open()) { - throw std::runtime_error("BUG: ConfigFilePrivate::write: write() before open()"); + throw USBGUARD_BUG("ConfigFilePrivate::write: write() before open()"); } if (_dirty) { @@ -116,21 +117,22 @@ namespace usbguard while(std::getline(_stream, config_line)) { ++config_line_number; _lines.push_back(config_line); + config_line = trim(config_line); + + if (config_line.size() < 1 || config_line[0] == '#') { + continue; + } const size_t nv_separator = config_line.find_first_of("="); if (nv_separator == std::string::npos) { - continue; + throw Exception("Configuration", "line " + std::to_string(config_line_number), "syntax error"); } std::string name = trim(config_line.substr(0, nv_separator)); - std::string value = config_line.substr(nv_separator + 1); - - if (name[0] == '#') { - continue; - } + std::string value = trim(config_line.substr(nv_separator + 1)); if (!checkNVPair(name, value)) { - continue; + throw Exception("Configuration", name, "unknown configuration directive"); } NVPair& setting = _settings[name];