You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.1 KiB

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 <stdexcept>
@@ -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];