--- ../../../../libs/freeradius-client-1.1.6/lib/config.c 2012-08-18 22:13:13.000000000 -0700 +++ ./config.c 2012-08-18 22:14:08.000000000 -0700 @@ -301,6 +301,8 @@ int i; SERVER *authservers; SERVER *acctservers; + OPTION *acct; + OPTION *auth; rh->config_options = malloc(sizeof(config_options_default)); if (rh->config_options == NULL) @@ -311,8 +313,8 @@ } memcpy(rh->config_options, &config_options_default, sizeof(config_options_default)); - authservers = rc_conf_srv(rh, "authserver"); - acctservers = rc_conf_srv(rh, "acctserver"); + acct = find_option(rh, "acctserver", OT_ANY); + auth = find_option(rh, "authserver", OT_ANY); authservers = malloc(sizeof(SERVER)); acctservers = malloc(sizeof(SERVER)); @@ -334,6 +336,8 @@ acctservers->name[i] = NULL; acctservers->secret[i] = NULL; } + acct->val = acctservers; + auth->val = authservers; return rh; } @@ -894,11 +898,15 @@ continue; if (rh->config_options[i].type == OT_SRV) { serv = (SERVER *)rh->config_options[i].val; - for (j = 0; j < serv->max; j++) + for (j = 0; j < serv->max; j++) { free(serv->name[j]); - free(serv); - } else { + free(serv->secret[j]); + } free(rh->config_options[i].val); + rh->config_options[i].val = NULL; + + } else { + free(rh->config_options[i].val); } } free(rh->config_options);