On Fri, Nov 10, 2006 at 06:10:23PM -0600, JR Richardson wrote:
> 
> > 
> > I'm having a strage problem related to the way Asterisk is matching
> > SIP peers on inbound calls to DIDs (not REGISTERed extensions).  I
> 
> I just had this same issue as well, drove me crazy.  I have a different
> setup but found that asterisk translates the CID number to a User on an
> inbound SIP call, then searches for that User context to authenticate the
> call.
> 
> I would very much like to know why this is happening, if it is normal to do
> this and how this behavior can be modified.

this is what i wrote to the original poster:

the place you want is the function check_user_full().
I did something similar recently (you find it in trunk, i am attaching
the relevant code below) to match
users from the 'Username' field in the auth field.
For your goals, you should modify (or replicate) the block
below, and do a get_header(req, "To") and a bit of parsing to
extract the string you want. At this point, you should be
able to match the request against the entry in the users list
(your entry [441612412070] is both a user and a peer, but
the match-by-name is on the users list first)

hope this helps

        cheers
        luigi

...
/*! \brief  Check if matching user or peer is defined 
        Match user on From: user name and peer on IP/port
        This is used on first invite (not re-invites) and subscribe requests 
    \return 0 on success, non-zero on failure
*/
static enum check_auth_result check_user_full(struct sip_pvt *p, struct 
sip_request *req,
                                              int sipmethod, char *uri, enum 
xmittype reliable,
                                              struct sockaddr_in *sin, struct 
sip_peer **authpeer)
{
        ...

        if (global_match_auth_username) {
                /*
                 * XXX This is experimental code to grab the search key from the
                 * Auth header's username instead of the 'From' name, if 
available.
                 * Do not enable this block unless you understand the side 
effects (if any!)
                 * Note, the search for "username" should be done in a more 
robust way.
                 * Note2, at the moment we chech both fields, though maybe we 
should
                 * pick one or another depending on the request ? XXX
                 */
                const char *hdr = get_header(req, "Authorization");
                if (ast_strlen_zero(hdr))
                        hdr = get_header(req, "Proxy-Authorization");

                if ( !ast_strlen_zero(hdr) && (hdr = strstr(hdr, 
"username=\"")) ) {
                        ast_copy_string(from, hdr + strlen("username=\""), 
sizeof(from));
                        of = from;
                        of = strsep(&of, "\"");
                }
        }

        ...

        return res;
}
_______________________________________________
--Bandwidth and Colocation provided by Easynews.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to