]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Ignore spurious REGISTER requests
authorTerry Wilson <twilson@digium.com>
Thu, 9 Dec 2010 22:00:30 +0000 (22:00 +0000)
committerTerry Wilson <twilson@digium.com>
Thu, 9 Dec 2010 22:00:30 +0000 (22:00 +0000)
If a REGISTER request with a Call-ID matching an existing transaction is received
it was possible that the REGISTER request would overwrite the initreq of the
private structure. This info is used to generate messages for other responses in
the transaction. This patch ignores REGISTER requests that match non-REGISTER
transactions.

(closes issue #18051)
Reported by: eeman
Tested by: twilson

Review: https://reviewboard.asterisk.org/r/1050/

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@297959 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index bdc375ce42bb5c8f1a6fac89347990756c1a290c..3caf1c66db1e22de1a00ea3babe673b2d94619b5 100644 (file)
@@ -16755,6 +16755,13 @@ static int handle_request_register(struct sip_pvt *p, struct sip_request *req, s
 {
        enum check_auth_result res;
 
+       /* If this is not the intial request, and the initial request isn't
+        * a register, something screwy happened, so bail */
+       if (p->initreq.headers && p->initreq.method != SIP_REGISTER) {
+               ast_log(LOG_WARNING, "Ignoring spurious REGISTER with Call-ID: %s\n", p->callid);
+               return -1;
+       }
+
        /* Use this as the basis */
        if (ast_test_flag(req, SIP_PKT_DEBUG))
                ast_verbose("Using latest REGISTER request as basis request\n");