Multiplay Labs

tech hits and tips from Multiplay

Archive for February 23rd, 2009

ultrastats usernames with @ in them fix

without comments

The standard setup for ultrastats uses url parsing to create the DB entries for the monitored servers. This is far from optimum and when the username contains an ‘@’ falls down completely with their current code.

The fix for this is the following patch:

--- include/functions_common.php.orig	2009-02-23 17:33:29.000000000 +0000
+++ include/functions_common.php	2009-02-23 18:13:34.000000000 +0000
@@ -1135,10 +1135,9 @@
 	$ftpvalues['ftpfilename'] = "";
 
-	if ( strpos($ftpUrl, "@") !== false )
-	{	//Username and maybe password is given
-		$tmparray = explode("@", $ftpUrl);
-
+	$at_pos = strrpos( $ftpUrl, '@' );
+	if ( $at_pos !== false )
+	{	// Username and maybe password is given
 		// Set Username 
-		$ftpvalues['username'] = substr( $tmparray[0], 6 );
+		$ftpvalues['username'] = substr( $ftpUrl, 6, $at_pos - 6 );
 
 		// Check if Password is given
@@ -1149,13 +1148,16 @@
 			$ftpvalues['password'] = $tmparray2[1];
 		}
+		$server = substr( $ftpUrl, $at_pos + 1 );
 
 		// Get FTP Servername
-		$ftpvalues['ftpserver'] = substr( $tmparray[1], 0,  strpos($tmparray[1], "/") );
+		$first_slash = strpos( $server, '/' );
+		$last_slash = strrpos( $server, '/' );
+		$ftpvalues['ftpserver'] = substr( $server, 0,  $first_slash );
 
 		// Get FTP Path
-		$ftpvalues['ftppath'] = substr( $tmparray[1], strpos($tmparray[1], "/"), strrpos($tmparray[1], "/")-strpos($tmparray[1], "/")+1 );
+		$ftpvalues['ftppath'] = substr( $server, $first_slash, $last_slash - $first_slash + 1 );
 
 		// Get the Logfilename
-		$ftpvalues['ftpfilename'] = substr( $tmparray[1], strrpos($tmparray[1], "/")+1 );
+		$ftpvalues['ftpfilename'] = substr( $server, $last_slash + 1 );
 	}
 	else

Written by Dilbert

February 23rd, 2009 at 6:26 pm

Posted in Hackery

Tagged with , ,