diff options
Diffstat (limited to 'src/irmd/configfile.c')
-rw-r--r-- | src/irmd/configfile.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/irmd/configfile.c b/src/irmd/configfile.c index 07f31ccf..af2a37c8 100644 --- a/src/irmd/configfile.c +++ b/src/irmd/configfile.c @@ -422,20 +422,20 @@ static int toml_connect(toml_table_t * table, return ret; } -static int toml_ipcp(toml_table_t * table, - const char * name, - struct ipcp_config * conf) +static int toml_ipcp(toml_table_t * table, + const struct ipcp_info * info, + struct ipcp_config * conf) { toml_datum_t bootstrap; toml_datum_t enrol; pid_t pid; int ret; - log_dbg("Found IPCP %s in configuration file.", name); + log_dbg("Found IPCP %s in configuration file.", info->name); - pid = create_ipcp(name, conf->type); + pid = create_ipcp(info); if (pid < 0) { - log_err("Failed to create IPCP %s.", name); + log_err("Failed to create IPCP %s.", info->name); return -1; } @@ -443,13 +443,13 @@ static int toml_ipcp(toml_table_t * table, enrol = toml_string_in(table, "enrol"); if (bootstrap.ok && enrol.ok) { - log_err("Ignoring bootstrap for IPCP %s.", name); + log_err("Ignoring bootstrap for IPCP %s.", info->name); free(bootstrap.u.s); bootstrap.ok = false; } if (!bootstrap.ok && !enrol.ok) { - log_dbg("Nothing more to do for %s.", name); + log_dbg("Nothing more to do for %s.", info->name); return 0; } @@ -458,14 +458,14 @@ static int toml_ipcp(toml_table_t * table, ret = enroll_ipcp(pid, enrol.u.s); free(enrol.u.s); if (ret < 0) { - log_err("Failed to enrol %s.", name); + log_err("Failed to enrol %s.", info->name); return -1; } if (get_layer_for_ipcp(pid, layer) < 0) return -1; - if (toml_autobind(table, pid, name, layer)) + if (toml_autobind(table, pid, info->name, layer)) return -1; if (toml_register(table, pid) < 0) { @@ -522,7 +522,7 @@ static int toml_ipcp(toml_table_t * table, if (bootstrap_ipcp(pid, conf) < 0) return -1; - if (toml_autobind(table, pid, name, conf->layer_info.name) < 0) + if (toml_autobind(table, pid, info->name, conf->layer_info.name) < 0) return -1; if (toml_register(table, pid) < 0) { @@ -541,17 +541,25 @@ static int toml_ipcp_list(toml_table_t * table, for (i = 0; ret == 0; i++) { const char * key; + struct ipcp_info info; struct ipcp_config conf; key = toml_key_in(table, i); if (key == NULL) break; + if (strlen(key) > IPCP_NAME_SIZE) { + log_err("IPCP name too long: %s,", key); + return -1; + } + memset(&conf, 0, sizeof(conf)); + info.type = type; + strcpy(info.name,key); conf.type = type; - ret = toml_ipcp(toml_table_in(table, key), key, &conf); + ret = toml_ipcp(toml_table_in(table, key), &info, &conf); } return ret; |