diff options
author | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-08-21 21:12:14 +0000 |
---|---|---|
committer | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-08-21 21:12:14 +0000 |
commit | 26609141d50cbc2ded2c260bd19fb6bb5a70029d (patch) | |
tree | 2c14879b31d325b5e1a873143c6a8eaf82578c96 /channels | |
parent | 000a21bf58d2d4c628c7be8b69f63789a248ac99 (diff) |
Merged revisions 213635 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r213635 | dvossel | 2009-08-21 16:02:50 -0500 (Fri, 21 Aug 2009) | 5 lines
fixes sip register parsing when user@domain is used
(issue #15008)
(issue #15672)
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@213636 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 47f1ac849..add6d6135 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -7093,12 +7093,9 @@ static int sip_register(const char *value, int lineno) char buf[256] = ""; char *username = NULL; char *tmp = NULL, *transport_str = NULL; + char *userpart = NULL, *hostpart = NULL; char *peername = NULL; /* register => [peer?][transport://]user[@domain][:secret[:authuser]]@host[:port][/extension][~expiry] */ - AST_DECLARE_APP_ARGS(parts, - AST_APP_ARG(userpart); - AST_APP_ARG(hostpart); - ); AST_DECLARE_APP_ARGS(user1, AST_APP_ARG(userpart); AST_APP_ARG(secret); @@ -7123,17 +7120,26 @@ static int sip_register(const char *value, int lineno) /*! register => [peer?][transport://]user[@domain][:secret[:authuser]]@host[:port][/extension][~expiry] * becomes - * parts.userpart => [peer?][transport://]user[@domain][:secret[:authuser]] - * parts.hostpart => host[:port][/extension][~expiry] + * userpart => [peer?][transport://]user[@domain][:secret[:authuser]] + * hostpart => host[:port][/extension][~expiry] */ - AST_NONSTANDARD_RAW_ARGS(parts, buf, '@'); + if ((hostpart = strrchr(buf, '@'))) { + *hostpart++ = '\0'; + userpart = buf; + } + + if (ast_strlen_zero(userpart) || ast_strlen_zero(hostpart)) { + ast_log(LOG_WARNING, "Format for registration is [transport://]user[@domain][:secret[:authuser]]@host[:port][/extension][~expiry] at line %d\n", lineno); + return -1; + } + /*! * user1.userpart => [peer?][transport://]user[@domain] * user1.secret => secret * user1.authuser => authuser - * parts.hostpart => host[:port][/extension][~expiry] + * hostpart => host[:port][/extension][~expiry] */ - AST_NONSTANDARD_RAW_ARGS(user1, parts.userpart, ':'); + AST_NONSTANDARD_RAW_ARGS(user1, userpart, ':'); /*! * user1.userpart => [peer?][transport://]user[@domain] @@ -7142,7 +7148,7 @@ static int sip_register(const char *value, int lineno) * host1.hostpart => host[:port][/extension] * host1.expiry => [expiry] */ - AST_NONSTANDARD_RAW_ARGS(host1, parts.hostpart, '~'); + AST_NONSTANDARD_RAW_ARGS(host1, hostpart, '~'); /*! * user1.userpart => [peer?][transport://]user[@domain] @@ -7152,7 +7158,7 @@ static int sip_register(const char *value, int lineno) * host2.extension => [extension] * host1.expiry => [expiry] */ - AST_NONSTANDARD_RAW_ARGS(host2, parts.hostpart, '/'); + AST_NONSTANDARD_RAW_ARGS(host2, hostpart, '/'); /*! * user1.userpart => [peer?][transport://]user[@domain] @@ -7163,7 +7169,7 @@ static int sip_register(const char *value, int lineno) * host2.extension => extension * host1.expiry => expiry */ - AST_NONSTANDARD_RAW_ARGS(host3, parts.hostpart, ':'); + AST_NONSTANDARD_RAW_ARGS(host3, hostpart, ':'); if ((tmp = strchr(user1.userpart, '?'))) { *tmp = '\0'; |