--- asterisk-1.8.9.0-rc1/channels/chan_sip.c.orig 2012-01-07 11:07:05.000000000 -0500 +++ asterisk-1.8.9.0-rc1/channels/chan_sip.c 2012-01-07 11:06:54.000000000 -0500 @@ -15701,7 +15701,7 @@ } /*! \brief Validate device authentication */ -static enum check_auth_result check_peer_ok(struct sip_pvt *p, char *of, +static enum check_auth_result check_peer_ok(struct sip_pvt *p, char *of, char *domain, struct sip_request *req, int sipmethod, struct ast_sockaddr *addr, struct sip_peer **authpeer, enum xmittype reliable, char *calleridname, char *uri2) @@ -15716,8 +15716,16 @@ */ peer = find_peer(of, NULL, TRUE, FINDALLDEVICES, FALSE, 0); } else { - /* First find devices based on username (avoid all type=peer's) */ - peer = find_peer(of, NULL, TRUE, FINDUSERS, FALSE, 0); + /* Make sure the device is from a local domain */ + if (AST_LIST_EMPTY(&domain_list) || check_sip_domain(domain, NULL, 0)) { + /* First find devices based on username (avoid all type=peer's) */ + peer = find_peer(of, NULL, TRUE, FINDUSERS, FALSE, 0); + } + else { + if(debug) + ast_verbose("Unknown peer from domain %s\n", domain); + peer = NULL; + } /* Then find devices based on IP */ if (!peer) { @@ -15983,7 +15991,7 @@ } } - res = check_peer_ok(p, name, req, sipmethod, addr, + res = check_peer_ok(p, name, domain, req, sipmethod, addr, authpeer, reliable, calleridname, uri2); if (res != AUTH_DONT_KNOW) { return res;