[asterisk-dev] Is it a right workaround?

Sergey Okhapkin sos at sokhapkin.dyndns.org
Fri Oct 6 17:02:40 MST 2006


My (buggy :-) VOIP provider does not like REGISTER request to have authentication digest from
previous registration and responds with "401 Unauthorized" response with a new "nonce" field.
Asterisk sends new REGISTER with a digest based on the new "nonce" field but gets 401 again 
(and new nonce field :-) The only way to re-register is to send REGISTER request without any
authentication digest, get 407 back (with new nonce field) and register with this "nonce". 
To get asterisk working with the provider I made the following patch to chan_sip:

--- chan_sip.c.orig	2006-09-20 16:40:39.000000000 -0400
+++ chan_sip.c	2006-10-06 18:12:37.000000000 -0400
@@ -11575,6 +11575,7 @@ static int handle_response_register(stru
 
 	switch (resp) {
 	case 401:	/* Unauthorized */
+		ast_string_field_free(r, nonce);
 		if ((p->authtries == MAX_AUTHTRIES) || do_register_auth(p, req, "WWW-Authenticate", "Authorization")) {
 			ast_log(LOG_NOTICE, "Failed to authenticate on REGISTER to '%s@%s' (Tries %d)\n", p->registry->username, p->registry->hostname, p->authtries);
 			ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	

Is it a right way? Or is it better to implement per-peer configuration option like "reuse_digest=yes/no"?


More information about the asterisk-dev mailing list