提交 5c94cba8 authored 作者: Anthony Minessale's avatar Anthony Minessale

make sofia use domain wide params when needed for reg

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6612 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 3d5fcabe
...@@ -748,7 +748,7 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co ...@@ -748,7 +748,7 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co
const char *a1_hash = NULL; const char *a1_hash = NULL;
char *sql; char *sql;
char *mailbox = NULL; char *mailbox = NULL;
switch_xml_t domain, xml = NULL, user, param, xparams; switch_xml_t domain, xml = NULL, user, param, uparams, dparams;
char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1] = ""; char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1] = "";
char *pbuf = NULL; char *pbuf = NULL;
char *domain_name = NULL; char *domain_name = NULL;
...@@ -834,16 +834,35 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co ...@@ -834,16 +834,35 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co
goto end; goto end;
} }
if (!(xparams = switch_xml_child(user, "params"))) { if (!(mailbox = (char *)switch_xml_attr(user, "mailbox"))) {
mailbox = username;
}
dparams = switch_xml_child(domain, "params");
uparams = switch_xml_child(user, "params");
if (!(dparams && uparams)) {
ret = AUTH_OK; ret = AUTH_OK;
goto end; goto skip_auth;
} }
if (!(mailbox = (char *)switch_xml_attr(user, "mailbox"))) { if (dparams) {
mailbox = username; for (param = switch_xml_child(dparams, "param"); param; param = param->next) {
const char *var = switch_xml_attr_soft(param, "name");
const char *val = switch_xml_attr_soft(param, "value");
if (!strcasecmp(var, "password")) {
passwd = val;
}
if (!strcasecmp(var, "a1-hash")) {
a1_hash = val;
}
}
} }
for (param = switch_xml_child(xparams, "param"); param; param = param->next) { if (uparams) {
for (param = switch_xml_child(uparams, "param"); param; param = param->next) {
const char *var = switch_xml_attr_soft(param, "name"); const char *var = switch_xml_attr_soft(param, "name");
const char *val = switch_xml_attr_soft(param, "value"); const char *val = switch_xml_attr_soft(param, "value");
...@@ -855,10 +874,11 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co ...@@ -855,10 +874,11 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co
a1_hash = val; a1_hash = val;
} }
} }
}
if (switch_strlen_zero(passwd) && switch_strlen_zero(a1_hash)) { if (switch_strlen_zero(passwd) && switch_strlen_zero(a1_hash)) {
ret = AUTH_OK; ret = AUTH_OK;
goto end; goto skip_auth;
} }
if (!a1_hash) { if (!a1_hash) {
...@@ -908,11 +928,16 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co ...@@ -908,11 +928,16 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co
} }
} }
skip_auth:
if (first && ret == AUTH_OK) { if (first && ret == AUTH_OK) {
if (v_event) { if (v_event) {
switch_event_create(v_event, SWITCH_EVENT_MESSAGE); switch_event_create(v_event, SWITCH_EVENT_MESSAGE);
} }
if (v_event && *v_event) { if (v_event && *v_event) {
switch_xml_t xparams[2];
int i = 0;
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "sip_mailbox", "%s", mailbox); switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "sip_mailbox", "%s", mailbox);
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_username", "%s", username); switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_username", "%s", username);
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_realm", "%s", realm); switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_realm", "%s", realm);
...@@ -920,8 +945,19 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co ...@@ -920,8 +945,19 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "user_name", "%s", username); switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "user_name", "%s", username);
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "domain_name", "%s", realm); switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "domain_name", "%s", realm);
if ((xparams = switch_xml_child(user, "variables"))) { if ((dparams = switch_xml_child(domain, "variables"))) {
for (param = switch_xml_child(xparams, "variable"); param; param = param->next) { xparams[i++] = dparams;
}
if ((uparams = switch_xml_child(user, "variables"))) {
xparams[i++] = uparams;
}
if (dparams || uparams) {
int j = 0;
for (j = 0; j < i; j++) {
for (param = switch_xml_child(xparams[j], "variable"); param; param = param->next) {
const char *var = switch_xml_attr_soft(param, "name"); const char *var = switch_xml_attr_soft(param, "name");
const char *val = switch_xml_attr_soft(param, "value"); const char *val = switch_xml_attr_soft(param, "value");
sofia_gateway_t *gateway_ptr = NULL; sofia_gateway_t *gateway_ptr = NULL;
...@@ -982,7 +1018,7 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co ...@@ -982,7 +1018,7 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co
} }
} }
} }
}
end: end:
if (xml) { if (xml) {
switch_xml_free(xml); switch_xml_free(xml);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论