[Asterisk-cvs] asterisk/channels chan_sip.c,1.394,1.395

markster at lists.digium.com markster at lists.digium.com
Mon May 24 10:30:56 CDT 2004


Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv12474/channels

Modified Files:
	chan_sip.c 
Log Message:
Always authenticate when insecure is not "very" even on matching IP


Index: chan_sip.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_sip.c,v
retrieving revision 1.394
retrieving revision 1.395
diff -u -d -r1.394 -r1.395
--- chan_sip.c	21 May 2004 00:59:38 -0000	1.394
+++ chan_sip.c	24 May 2004 14:44:47 -0000	1.395
@@ -4792,25 +4792,30 @@
 	if (!user) {
 	/* If we didn't find a user match, check for peers */
 		ast_mutex_lock(&peerl.lock);
-		/* which should be used? non-mysql code uses "p->recv", but
-		 * mysql code used "sin"
-		 */
+		/* Look for peer based on the IP address we received data from */
+		/* If peer is registred from this IP address or have this as a default
+		   IP address, this call is from the peer 
+ 		*/
 		peer = find_peer(NULL, &p->recv);
-		/* peer = find_peer(NULL, sin); */
-		ast_mutex_unlock(&peerl.lock);
 		if (peer) {
-				if (sip_debug_test_addr(sin))
-					ast_verbose("Found peer '%s'\n", peer->name);
-				/* Take the peer */
-				p->nat = peer->nat;
-				if (p->rtp) {
-					ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", p->nat);
-					ast_rtp_setnat(p->rtp, p->nat);
-				}
-				if (p->vrtp) {
-					ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", p->nat);
-					ast_rtp_setnat(p->vrtp, p->nat);
-				}
+			if (sip_debug_test_addr(sin))
+				ast_verbose("Found peer '%s'\n", peer->name);
+			/* Take the peer */
+			p->nat = peer->nat;
+			if (p->rtp) {
+				ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", p->nat);
+				ast_rtp_setnat(p->rtp, p->nat);
+			}
+			if (p->vrtp) {
+				ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", p->nat);
+				ast_rtp_setnat(p->vrtp, p->nat);
+			}
+			if (peer->insecure > 1) {
+				/* Pretend there is no required authentication if insecure is "very" */
+				strcpy(p->peersecret, "");
+				strcpy(p->peermd5secret, "");
+			}
+			if (!(res = check_auth(p, req, p->randdata, sizeof(p->randdata), peer->name, peer->secret, peer->md5secret, cmd, uri, reliable, ignore))) {
 				p->canreinvite = peer->canreinvite;
 				strncpy(p->peername, peer->name, sizeof(p->peername) - 1);
 				strncpy(p->authname, peer->name, sizeof(p->authname) - 1);
@@ -4822,11 +4827,6 @@
 					strncpy(p->context, peer->context, sizeof(p->context) - 1);
 				strncpy(p->peersecret, peer->secret, sizeof(p->peersecret) - 1);
 				strncpy(p->peermd5secret, peer->md5secret, sizeof(p->peermd5secret) - 1);
-				if (peer->insecure > 1) {
-					/* Pretend there is no required authentication if insecure is "very" */
-					strcpy(p->peersecret, "");
-					strcpy(p->peermd5secret, "");
-				}
 				p->callgroup = peer->callgroup;
 				p->pickupgroup = peer->pickupgroup;
 				p->capability = peer->capability;
@@ -4838,6 +4838,7 @@
 					else
 						p->noncodeccapability &= ~AST_RTP_DTMF;
 				}
+			}
 			if (peer->temponly) {
 				if (peer->ha) {
 					ast_free_ha(peer->ha);
@@ -4847,6 +4848,7 @@
 		} else
 			if (sip_debug_test_addr(sin))
 				ast_verbose("Found no matching peer or user for '%s:%d'\n", inet_ntoa(p->recv.sin_addr), ntohs(p->recv.sin_port));
+		ast_mutex_unlock(&peerl.lock);
 
 	}
 	return res;




More information about the svn-commits mailing list