aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authordvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-08-21 21:12:14 +0000
committerdvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-08-21 21:12:14 +0000
commit26609141d50cbc2ded2c260bd19fb6bb5a70029d (patch)
tree2c14879b31d325b5e1a873143c6a8eaf82578c96 /channels
parent000a21bf58d2d4c628c7be8b69f63789a248ac99 (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.c30
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';