void linphone_auth_info_write_config(LpConfig *config, LinphoneAuthInfo *obj, int pos) { char key[50]; sprintf(key,"auth_info_%i",pos); lp_config_clean_section(config,key); if (obj==NULL || lp_config_get_int(config, "sip", "store_auth_info", 1) == 0){ return; } if (!obj->ha1 && obj->realm && obj->passwd && (obj->username||obj->userid)) { /*compute ha1 to avoid storing clear text password*/ obj->ha1=ms_malloc(33); sal_auth_compute_ha1(obj->userid?obj->userid:obj->username,obj->realm,obj->passwd,obj->ha1); } if (obj->username!=NULL){ lp_config_set_string(config,key,"username",obj->username); } if (obj->userid!=NULL){ lp_config_set_string(config,key,"userid",obj->userid); } if (obj->ha1!=NULL){ lp_config_set_string(config,key,"ha1",obj->ha1); } else if (obj->passwd!=NULL){ /*only write passwd if no ha1*/ lp_config_set_string(config,key,"passwd",obj->passwd); } if (obj->realm!=NULL){ lp_config_set_string(config,key,"realm",obj->realm); } }
static void ha1_authenticated_register(){ stats* counters; LinphoneCoreManager* lcm = create_lcm(); char ha1[33]; LinphoneAuthInfo *info; char route[256]; sal_auth_compute_ha1(test_username,auth_domain,test_password,ha1); info=linphone_auth_info_new(test_username,NULL,NULL,ha1,auth_domain); /*create authentication structure from identity*/ sprintf(route,"sip:%s",test_route); linphone_core_add_auth_info(lcm->lc,info); /*add authentication info to LinphoneCore*/ counters = &lcm->stat; register_with_refresh(lcm,FALSE,auth_domain,route); CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,0); }
void linphone_auth_info_write_config(LpConfig *config, LinphoneAuthInfo *obj, int pos) { char key[50]; bool_t store_ha1_passwd = lp_config_get_int(config, "sip", "store_ha1_passwd", 1); sprintf(key, "auth_info_%i", pos); lp_config_clean_section(config, key); if (obj == NULL || lp_config_get_int(config, "sip", "store_auth_info", 1) == 0) { return; } if (!obj->ha1 && obj->realm && obj->passwd && (obj->username || obj->userid) && store_ha1_passwd) { /*compute ha1 to avoid storing clear text password*/ obj->ha1 = ms_malloc(33); sal_auth_compute_ha1(obj->userid ? obj->userid : obj->username, obj->realm, obj->passwd, obj->ha1); } if (obj->username != NULL) { lp_config_set_string(config, key, "username", obj->username); } if (obj->userid != NULL) { lp_config_set_string(config, key, "userid", obj->userid); } if (obj->ha1 != NULL) { lp_config_set_string(config, key, "ha1", obj->ha1); } if (obj->passwd != NULL) { if (store_ha1_passwd && obj->ha1) { /*if we have our ha1 and store_ha1_passwd set to TRUE, then drop the clear text password for security*/ linphone_auth_info_set_passwd(obj, NULL); } else { /*we store clear text password only if store_ha1_passwd is FALSE AND we have an ha1 to store. Otherwise, passwd would simply be removed, which might bring major auth issue*/ lp_config_set_string(config, key, "passwd", obj->passwd); } } if (obj->realm != NULL) { lp_config_set_string(config, key, "realm", obj->realm); } if (obj->domain != NULL) { lp_config_set_string(config, key, "domain", obj->domain); } if (obj->tls_cert_path != NULL) { lp_config_set_string(config, key, "client_cert_chain", obj->tls_cert_path); } if (obj->tls_key_path != NULL) { lp_config_set_string(config, key, "client_cert_key", obj->tls_key_path); } }
static const char* ha1_for_passwd(const char* username, const char* realm, const char* passwd) { static char ha1[33]; sal_auth_compute_ha1(username, realm, passwd, ha1); return ha1; }