[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [proposal 136] Re: Proposal: Simplify Configuration of Private Tor Networks



On Mon, May 19, 2008 at 11:53:12PM +0200, Karsten Loesing wrote:
> I now solved it differently: When reading configurations from torrc and
> the console, Tor checks if TestingTorNetwork was configured. If so,
> default values for dependent options are changed and the configuration
> is read in again. See lines 3835--3892 in config.c.
[snip]
> +  /* If this is a testing network configuration, change defaults
> +   * for a list of dependent config options, re-initialize newoptions
> +   * with the new defaults, and assign all options to it second time. */
> +  if (newoptions->TestingTorNetwork) {
> +
> +    /* Change defaults. */
> +    #define CHANGE_DEFAULT(key, val)                                \
> +    {                                                               \
> +      config_var_t *var = config_find_option(&options_format, key); \
> +      tor_assert(var);                                              \
> +      var->initvalue = tor_strdup(val);                             \
> +    }
> +    CHANGE_DEFAULT("ServerDNSAllowBrokenResolvConf", "1");

The var->initvalue = tor_strdup(val) above clobbers the current value of
var->initvalue. For the first time we assign config options, that's fine,
since its initial value is from a static table. But for future times we
assign config options, we'll leak the previous value.

One better approach might be to have a static table of keys (strings)
and values (strings) for the alternate defaults, and walk through the
table doing a config_find_option() on the key and then assigning value
directly from the table (rather than making a copy).

I'll let Nick chime in with other better approaches, or to correct me,
as necessary. :)

--Roger