Check and reject non-digits e164 values on peers and general sections in ooh323.conf

Regenerate e164 endpoint list on reload ooh323
(issue ASTERISK-22901)
Reported by: Cyril CONSTANTIN
Patches:
	ASTERISK-22901.patch
........

Merged revisions 403288 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 403290 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@403292 65c4cc65-6c06-0410-ace0-fbb531ad65f3
changes/97/197/1
Alexandr Anikin 12 years ago
parent 177e7861a2
commit 879bd7aad9

@ -2487,11 +2487,23 @@ static struct ooh323_peer *build_peer(const char *name, struct ast_variable *v,
return NULL; return NULL;
} }
} else if (!strcasecmp(v->name, "e164")) { } else if (!strcasecmp(v->name, "e164")) {
if (!(peer->e164 = ast_strdup(v->value))) { int valid = 1;
ast_log(LOG_ERROR, "Could not allocate memory for e164 of " const char *tmp;
for(tmp = v->value; *tmp; tmp++) {
if (!isdigit(*tmp)) {
valid = 0;
break;
}
}
if (valid) {
if (!(peer->e164 = ast_strdup(v->value))) {
ast_log(LOG_ERROR, "Could not allocate memory for e164 of "
"peer %s\n", name); "peer %s\n", name);
ooh323_delete_peer(peer); ooh323_delete_peer(peer);
return NULL; return NULL;
}
} else {
ast_log(LOG_ERROR, "Invalid e164: %s for peer %s\n", v->value, name);
} }
} else if (!strcasecmp(v->name, "email")) { } else if (!strcasecmp(v->name, "email")) {
if (!(peer->email = ast_strdup(v->value))) { if (!(peer->email = ast_strdup(v->value))) {
@ -2622,6 +2634,9 @@ static struct ooh323_peer *build_peer(const char *name, struct ast_variable *v,
static int ooh323_do_reload(void) static int ooh323_do_reload(void)
{ {
struct ooAliases * pNewAlias = NULL;
struct ooh323_peer *peer = NULL;
if (gH323Debug) { if (gH323Debug) {
ast_verb(0, "--- ooh323_do_reload\n"); ast_verb(0, "--- ooh323_do_reload\n");
} }
@ -2641,6 +2656,46 @@ static int ooh323_do_reload(void)
ooGkClientStart(gH323ep.gkClient); ooGkClientStart(gH323ep.gkClient);
} }
/* Set aliases if any */
if (gH323Debug) {
ast_verb(0, "updating local aliases\n");
}
for (pNewAlias = gAliasList; pNewAlias; pNewAlias = pNewAlias->next) {
switch (pNewAlias->type) {
case T_H225AliasAddress_h323_ID:
ooH323EpAddAliasH323ID(pNewAlias->value);
break;
case T_H225AliasAddress_dialedDigits:
ooH323EpAddAliasDialedDigits(pNewAlias->value);
break;
case T_H225AliasAddress_email_ID:
ooH323EpAddAliasEmailID(pNewAlias->value);
break;
default:
;
}
}
ast_mutex_lock(&peerl.lock);
peer = peerl.peers;
while (peer) {
if(peer->h323id) {
ooH323EpAddAliasH323ID(peer->h323id);
}
if(peer->email) {
ooH323EpAddAliasEmailID(peer->email);
}
if(peer->e164) {
ooH323EpAddAliasDialedDigits(peer->e164);
}
if(peer->url) {
ooH323EpAddAliasURLID(peer->url);
}
peer = peer->next;
}
ast_mutex_unlock(&peerl.lock);
if (gH323Debug) { if (gH323Debug) {
ast_verb(0, "+++ ooh323_do_reload\n"); ast_verb(0, "+++ ooh323_do_reload\n");
} }
@ -2724,6 +2779,7 @@ int reload_config(int reload)
free(prev); free(prev);
} }
gAliasList = NULL; gAliasList = NULL;
ooH323EpClearAllAliases();
} }
/* Inintialize everything to default */ /* Inintialize everything to default */
@ -2840,17 +2896,29 @@ int reload_config(int reload)
gAliasList = pNewAlias; gAliasList = pNewAlias;
pNewAlias = NULL; pNewAlias = NULL;
} else if (!strcasecmp(v->name, "e164")) { } else if (!strcasecmp(v->name, "e164")) {
pNewAlias = ast_calloc(1, sizeof(struct ooAliases)); int valid = 1;
if (!pNewAlias) { const char *tmp;
ast_log(LOG_ERROR, "Failed to allocate memory for e164 alias\n"); for(tmp = v->value; *tmp; tmp++) {
ast_config_destroy(cfg); if (!isdigit(*tmp)) {
return 1; valid = 0;
break;
}
}
if (valid) {
pNewAlias = ast_calloc(1, sizeof(struct ooAliases));
if (!pNewAlias) {
ast_log(LOG_ERROR, "Failed to allocate memory for e164 alias\n");
ast_config_destroy(cfg);
return 1;
}
pNewAlias->type = T_H225AliasAddress_dialedDigits;
pNewAlias->value = strdup(v->value);
pNewAlias->next = gAliasList;
gAliasList = pNewAlias;
pNewAlias = NULL;
} else {
ast_log(LOG_ERROR, "Invalid e164: %s\n", v->value);
} }
pNewAlias->type = T_H225AliasAddress_dialedDigits;
pNewAlias->value = strdup(v->value);
pNewAlias->next = gAliasList;
gAliasList = pNewAlias;
pNewAlias = NULL;
} else if (!strcasecmp(v->name, "email")) { } else if (!strcasecmp(v->name, "email")) {
pNewAlias = ast_calloc(1, sizeof(struct ooAliases)); pNewAlias = ast_calloc(1, sizeof(struct ooAliases));
if (!pNewAlias) { if (!pNewAlias) {

Loading…
Cancel
Save