You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@trafficserver.apache.org by James Peach <jp...@apache.org> on 2014/02/03 19:56:10 UTC

Re: [1/2] git commit: config_remap: accept file paths relative to SYSCONFIGDIR

On Feb 3, 2014, at 10:51 AM, jpeach@apache.org wrote:

> Updated Branches:
>  refs/heads/master f579f5cb5 -> 70f8e10a1
> 
> 
> config_remap: accept file paths relative to SYSCONFIGDIR

Sorry, I didn't realize this was on the same branch. Happy to revert if you want ...

> 
> 
> 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 <jp...@apache.org>
> Authored: Sun Feb 2 09:31:22 2014 -0800
> Committer: James Peach <jp...@apache.org>
> 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;
>     }
>