mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-10 14:39:54 +00:00
freetdm: Another round of parameter handling fixes (ftmod_{libpri,isdn,pritap})
ftmod_pritap: Abort before overflowing spanparameters array and initialize to all zero ftmod_isdn: Fix overflow check, skip over parameters without name or value, initialize spanparameters array to all zero. ftmod_libpri: Skip over parameters without name or value, initialize spanparameters array to all zero and drop "i < 10" hardcoded check. This should fix: 2010-11-15 09:24:34.609515 [ERR] ftmod_libpri.c:1741 Unknown parameter '', aborting configuration 2010-11-15 09:24:34.609515 [ERR] mod_freetdm.c:3080 Error configuring FreeTDM span BRI_1 Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de> Reported-by: Ingmar Schraub <is@eseco.de>
This commit is contained in:
parent
e98b4a6b8d
commit
ced7c9ae43
@ -2937,15 +2937,22 @@ static switch_status_t load_config(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
for (param = switch_xml_child(myspan, "param"); param && paramindex < 10; param = param->next) {
|
||||
memset(spanparameters, 0, sizeof(spanparameters));
|
||||
|
||||
for (param = switch_xml_child(myspan, "param"); param; param = param->next) {
|
||||
char *var = (char *) switch_xml_attr_soft(param, "name");
|
||||
char *val = (char *) switch_xml_attr_soft(param, "value");
|
||||
|
||||
if (ftdm_array_len(spanparameters) == paramindex) {
|
||||
if (ftdm_array_len(spanparameters) - 1 == paramindex) {
|
||||
ftdm_log(FTDM_LOG_ERROR, "Too many parameters for pri span '%s', ignoring everything after '%s'\n", name, var);
|
||||
break;
|
||||
}
|
||||
|
||||
if (ftdm_strlen_zero(var) || ftdm_strlen_zero(val)) {
|
||||
ftdm_log(FTDM_LOG_WARNING, "Skipping parameter with empty name or value\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!strcasecmp(var, "context")) {
|
||||
context = val;
|
||||
} else if (!strcasecmp(var, "dialplan")) {
|
||||
@ -2995,11 +3002,18 @@ static switch_status_t load_config(void)
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required attribute 'name'\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
memset(spanparameters, 0, sizeof(spanparameters));
|
||||
|
||||
for (param = switch_xml_child(myspan, "param"); param; param = param->next) {
|
||||
char *var = (char *) switch_xml_attr_soft(param, "name");
|
||||
char *val = (char *) switch_xml_attr_soft(param, "value");
|
||||
|
||||
if (ftdm_array_len(spanparameters) - 1 == paramindex) {
|
||||
ftdm_log(FTDM_LOG_ERROR, "Too many parameters for pritap span '%s', ignoring everything after '%s'\n", name, var);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!strcasecmp(var, "context")) {
|
||||
context = val;
|
||||
} else if (!strcasecmp(var, "dialplan")) {
|
||||
@ -3049,7 +3063,9 @@ static switch_status_t load_config(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
for (param = switch_xml_child(myspan, "param"); param && paramindex < 10; param = param->next) {
|
||||
memset(spanparameters, 0, sizeof(spanparameters));
|
||||
|
||||
for (param = switch_xml_child(myspan, "param"); param; param = param->next) {
|
||||
char *var = (char *) switch_xml_attr_soft(param, "name");
|
||||
char *val = (char *) switch_xml_attr_soft(param, "value");
|
||||
|
||||
@ -3058,6 +3074,11 @@ static switch_status_t load_config(void)
|
||||
break;
|
||||
}
|
||||
|
||||
if (ftdm_strlen_zero(var) || ftdm_strlen_zero(val)) {
|
||||
ftdm_log(FTDM_LOG_WARNING, "Skipping parameter with empty name or value\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!strcasecmp(var, "context")) {
|
||||
context = val;
|
||||
} else if (!strcasecmp(var, "dialplan")) {
|
||||
|
@ -2667,7 +2667,12 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(isdn_configure_span)
|
||||
const char *var = ftdm_parameters[i].var;
|
||||
const char *val = ftdm_parameters[i].val;
|
||||
|
||||
if (!val) {
|
||||
if (ftdm_strlen_zero(var)) {
|
||||
ftdm_log(FTDM_LOG_WARNING, "Skipping variable with no name\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ftdm_strlen_zero(val)) {
|
||||
ftdm_log(FTDM_LOG_ERROR, "Variable '%s' has no value\n", var);
|
||||
return FTDM_FAIL;
|
||||
}
|
||||
|
@ -1704,11 +1704,16 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_libpri_configure_span)
|
||||
return FTDM_FAIL;
|
||||
}
|
||||
|
||||
for (i = 0; i < 10 && ftdm_parameters[i].var; i++) {
|
||||
for (i = 0; ftdm_parameters[i].var; i++) {
|
||||
const char *var = ftdm_parameters[i].var;
|
||||
const char *val = ftdm_parameters[i].val;
|
||||
|
||||
if (!val) {
|
||||
if (ftdm_strlen_zero(var)) {
|
||||
ftdm_log(FTDM_LOG_WARNING, "Skipping parameter with no name\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ftdm_strlen_zero(val)) {
|
||||
ftdm_log(FTDM_LOG_ERROR, "Parameter '%s' has no value\n", var);
|
||||
snprintf(span->last_error, sizeof(span->last_error), "Parameter [%s] has no value", var);
|
||||
return FTDM_FAIL;
|
||||
|
Loading…
x
Reference in New Issue
Block a user