Updated Branches: refs/heads/master f579f5cb5 -> 70f8e10a1
config_remap: accept file paths relative to SYSCONFIGDIR Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/ad891bc7 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/ad891bc7 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/ad891bc7 Branch: refs/heads/master Commit: ad891bc7b62e7eebd0575c8084bd1b22496ac495 Parents: f579f5c Author: James Peach <[email protected]> Authored: Sun Feb 2 09:31:22 2014 -0800 Committer: James Peach <[email protected]> Committed: Mon Feb 3 10:34:32 2014 -0800 ---------------------------------------------------------------------- plugins/conf_remap/conf_remap.cc | 37 +++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/ad891bc7/plugins/conf_remap/conf_remap.cc ---------------------------------------------------------------------- diff --git a/plugins/conf_remap/conf_remap.cc b/plugins/conf_remap/conf_remap.cc index 78dc17a..55897db 100644 --- a/plugins/conf_remap/conf_remap.cc +++ b/plugins/conf_remap/conf_remap.cc @@ -24,6 +24,7 @@ #include <string.h> #include <ctype.h> #include <stdlib.h> +#include <string> static const char PLUGIN_NAME[] = "conf_remap"; @@ -48,7 +49,7 @@ struct RemapConfigs memset(_items, 0, sizeof(_items)); }; - bool parse_file(const char *fn); + bool parse_file(const char *filename); Item _items[MAX_OVERRIDABLE_CONFIGS]; int _current; @@ -74,7 +75,7 @@ str_to_datatype(const char* str) // Config file parser, somewhat borrowed from P_RecCore.i bool -RemapConfigs::parse_file(const char* fn) +RemapConfigs::parse_file(const char* filename) { int line_num = 0; TSFile file; @@ -82,15 +83,27 @@ RemapConfigs::parse_file(const char* fn) TSOverridableConfigKey name; TSRecordDataType type, expected_type; - if (!fn || ('\0' == *fn)) + std::string path; + + if (!filename || ('\0' == *filename)) return false; - if (NULL == (file = TSfopen(fn, "r"))) { - TSError("%s: could not open config file %s", PLUGIN_NAME, fn); + if (*filename == '/') { + // Absolute path, just use it. + path = filename; + } else { + // Relative path. Make it relative to the configuration directory. + path = TSConfigDirGet(); + path += "/"; + path += filename; + } + + if (NULL == (file = TSfopen(path.c_str(), "r"))) { + TSError("%s: could not open config file %s", PLUGIN_NAME, path.c_str()); return false; } - TSDebug(PLUGIN_NAME, "loading configuration file %s", fn); + TSDebug(PLUGIN_NAME, "loading configuration file %s", path.c_str()); while (NULL != TSfgets(file, buf, sizeof(buf))) { char *ln, *tok; @@ -106,26 +119,26 @@ RemapConfigs::parse_file(const char* fn) continue; if (strncmp(tok, "CONFIG", 6)) { - TSError("%s: file %s, line %d: non-CONFIG line encountered", PLUGIN_NAME, fn, line_num); + TSError("%s: file %s, line %d: non-CONFIG line encountered", PLUGIN_NAME, path.c_str(), line_num); continue; } // Find the configuration name tok = strtok_r(NULL, " \t", &ln); if (TSHttpTxnConfigFind(tok, -1, &name, &expected_type) != TS_SUCCESS) { - TSError("%s: file %s, line %d: no records.config name given", PLUGIN_NAME, fn, line_num); + TSError("%s: file %s, line %d: no records.config name given", PLUGIN_NAME, path.c_str(), line_num); continue; } // Find the type (INT or STRING only) tok = strtok_r(NULL, " \t", &ln); if (TS_RECORDDATATYPE_NULL == (type = str_to_datatype(tok))) { - TSError("%s: file %s, line %d: only INT and STRING types supported", PLUGIN_NAME, fn, line_num); + TSError("%s: file %s, line %d: only INT and STRING types supported", PLUGIN_NAME, path.c_str(), line_num); continue; } if (type != expected_type) { - TSError("%s: file %s, line %d: mismatch between provide data type, and expected type", PLUGIN_NAME, fn, line_num); + TSError("%s: file %s, line %d: mismatch between provide data type, and expected type", PLUGIN_NAME, path.c_str(), line_num); continue; } @@ -149,7 +162,7 @@ RemapConfigs::parse_file(const char* fn) tok = NULL; } if (!tok) { - TSError("%s: file %s, line %d: the configuration must provide a value", PLUGIN_NAME, fn, line_num); + TSError("%s: file %s, line %d: the configuration must provide a value", PLUGIN_NAME, path.c_str(), line_num); continue; } @@ -163,7 +176,7 @@ RemapConfigs::parse_file(const char* fn) _items[_current]._data_len = strlen(tok); break; default: - TSError("%s: file %s, line %d: type not support (unheard of)", PLUGIN_NAME, fn, line_num); + TSError("%s: file %s, line %d: type not support (unheard of)", PLUGIN_NAME, path.c_str(), line_num); continue; break; }
