[svn-commits] dvossel: trunk r213635 - /trunk/channels/chan_sip.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Aug 21 16:02:55 CDT 2009


Author: dvossel
Date: Fri Aug 21 16:02:50 2009
New Revision: 213635

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=213635
Log:
fixes sip register parsing when user at domain is used

(issue #15008)
(issue #15672)

Modified:
    trunk/channels/chan_sip.c

Modified: trunk/channels/chan_sip.c
URL: http://svn.asterisk.org/svn-view/asterisk/trunk/channels/chan_sip.c?view=diff&rev=213635&r1=213634&r2=213635
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Fri Aug 21 16:02:50 2009
@@ -7343,12 +7343,9 @@
 	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);
@@ -7377,17 +7374,26 @@
 
 	/*! 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]
@@ -7396,7 +7402,7 @@
 	 * 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]
@@ -7406,7 +7412,7 @@
 	 * 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]
@@ -7417,7 +7423,18 @@
 	 * host2.extension => extension
 	 * host1.expiry => expiry
 	 */
-	AST_NONSTANDARD_RAW_ARGS(host3, parts.hostpart, ':');
+	AST_NONSTANDARD_RAW_ARGS(host3, hostpart, ':');
+
+	/*!
+	 * user2.userpart => [peer?][transport://]user[@domain]
+	 * user1.secret => secret
+	 * user1.authuser => authuser
+	 * host3.host => host
+	 * host3.port => port
+	 * host2.extension => extension (callback)
+	 * host1.expiry => expiry
+	 */
+	AST_NONSTANDARD_RAW_ARGS(user2, user1.userpart, ':');
 
 	/*!
 	 * user2.userpart => [peer?][transport://]user
@@ -7429,7 +7446,7 @@
 	 * host2.extension => extension (callback)
 	 * host1.expiry => expiry
 	 */
-	AST_NONSTANDARD_RAW_ARGS(user2, user1.userpart, ':');
+	AST_NONSTANDARD_RAW_ARGS(user2, user2.userpart, '@');
 
 	if ((tmp = strchr(user2.userpart, '?'))) {
 		*tmp = '\0';




More information about the svn-commits mailing list