[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] libvirt-php login issue to ESXi



Hi Koen,
please try this patch. I can't test it myself since it's logging
automatically in my setup but I *think* I may have found the problem.
Could you please apply attached patch (revert the patch I sent to you
before) and provide me the test results?

Thanks,
Michal

 On 06/29/2011 03:47 PM, Koen Calliauw wrote:
> Hi Michal,
>
> Here's the output. Please note that special characters were visible
> when opening the file with vi, though not with a cat on the console,
> so this is a copy/paste out of vi.
>
> [2011-06-29 15:43:58 libvirt-php/core]: libvirt_connect: credentials
> index 2
> [2011-06-29 15:43:58 libvirt-php/core]: libvirt_connect: credentials
> index 5
> [2011-06-29 15:43:58 libvirt-php/core]: libvirt_connect: Found 2
> elements for credentials
> [2011-06-29 15:43:58 libvirt-php/core]:
> libvirt_virConnectAuthCallback: cred 0, type 2, prompt Enter username
> for 10.9.0.2 [root] challenge 10.9.0.2
>  [2011-06-29 15:43:58 libvirt-php/core]:
> libvirt_virConnectAuthCallback: result rootV^? (4)
> [2011-06-29 15:43:58 libvirt-php/core]:
> libvirt_virConnectAuthCallback: cred 0, type 5, prompt Enter rootV^?'s
> password for 10.9.0.2 challenge 10.9.0.2
>  [2011-06-29 15:43:58 libvirt-php/core]:
> libvirt_virConnectAuthCallback: result fakepass (12)
> [Wed Jun 29 15:44:00 2011] [error] [client 10.9.1.10] PHP Warning: 
> libvirt_connect(): internal error HTTP response code 500 for call to
> 'Login'. Fault: ServerFaultCode - Cannot complete login due to an
> incorrect user name or password. in /var/www/virt.php on line 9,
> referer: http://10.9.0.3/
> [2011-06-29 15:44:00 libvirt-php/core]: libvirt_connect: Cannot
> establish connection to esx://10.9.0.2?transport=http
> <http://10.9.0.2?transport=http>
>
> Best regards,
> Koen Calliauw
>
>
>
> On Wed, Jun 29, 2011 at 3:35 PM, Michal Novotny <minovotn redhat com
> <mailto:minovotn redhat com>> wrote:
>
>     Hi Koen,
>     that's bad. I don't have logging of username and password length here.
>     I'll try to work on this. You can try attached patch to extend logging
>     by username and password in the mean time and provide me the full
>     resulting log file? Please review whether there is no password and if
>     there is then please change it to fakepass.
>
>     Thanks,
>     Michal
>
>     On 06/29/2011 03:19 PM, Koen Calliauw wrote:
>     > Hi Michal,
>     >
>     > Here's what appears in the logfile when using libvirt_logfile_set:
>     >
>     > [Wed Jun 29 15:18:00 2011] [error] [client 10.9.1.10] PHP Warning:
>     > libvirt_connect(): internal error HTTP response code 500 for call to
>     > 'Login'. Fault: ServerFaultCode - Cannot complete login due to an
>     > incorrect user name or password. in /var/www/virt.php on line 9,
>     > referer: http://10.9.0.3/
>     > [2011-06-29 15:18:00 libvirt-php/core]: libvirt_connect: Cannot
>     > establish connection to esx://10.9.0.2?transport=http
>     <http://10.9.0.2?transport=http>
>     > <http://10.9.0.2?transport=http>
>     >
>     > Best regards,
>     > Koen Calliauw
>     >
>     > On Wed, Jun 29, 2011 at 3:10 PM, Michal Novotny
>     <minovotn redhat com <mailto:minovotn redhat com>
>     > <mailto:minovotn redhat com <mailto:minovotn redhat com>>> wrote:
>     >
>     >     Hi Koen,
>     >     thanks for you e-mail. I don't know what exactly is going on
>     here but
>     >     could you please try to enable debug logging using
>     >
>     >     libvirt_logfile_set($filename, $maxsize)
>     >
>     >     API function? The maxsize parameter is optional and it
>     defaults to
>     >     1024
>     >     KiB (1M). The file have to have write permissions so you can
>     touch the
>     >     file, e.g. debug.log and change it's permissions to 777 to allow
>     >     logging. Once you try to login using the script you
>     mentioned with
>     >     debug
>     >     set you will get the debug output into the debug.log file which
>     >     could be
>     >     send to us for further analysis.
>     >
>     >     Thanks,
>     >     Michal
>     >
>     >
>     >     On 06/29/2011 03:03 PM, Koen Calliauw wrote:
>     >     > Hi all,
>     >     >
>     >     > I've started playing with libvirt-php yesterday and with
>     the help of
>     >     > Michal Novotny got it running quite painlessly. However,
>     the login
>     >     > from PHP to my testing ESXi server seems to be failing. I've
>     >     > wiresharked the HTTP traffic with a virsh -c (which works) and
>     >     > compared that to the traffic I see when using the libvirt-php
>     >     > extension, here's the difference I see (mind the username)
>     >     >
>     >     > Not working (libvirt-php)
>     >     >
>     >     > <Login xmlns="urn:vim25"><_this xmlns="urn:vim25"
>     >     > xsi:type="ManagedObjectReference"
>     >     > type="SessionManager">ha-sessionmgr</_this><userName
>     >     xmlns="urn:vim25"
>     >     > xsi:type="xsd:string">root8.</userName><password
>     xmlns="urn:vim25"
>     >     > xsi:type="xsd:string">fakepass</password></Login>
>     >     >
>     >     > Working (virsh -c)
>     >     >
>     >     > <Login xmlns="urn:vim25"><_this xmlns="urn:vim25"
>     >     > xsi:type="ManagedObjectReference"
>     >     > type="SessionManager">ha-sessionmgr</_this><userName
>     >     xmlns="urn:vim25"
>     >     > xsi:type="xsd:string">root</userName><password
>     xmlns="urn:vim25"
>     >     > xsi:type="xsd:string">fakepass</password></Login>
>     >     >
>     >     > So for some reason something gets appended (8.) or encoded
>     wrong or
>     >     > something when I use the PHP extension. This is the
>     testing code
>     >     I run:
>     >     >
>     >     > <?php
>     >     > $credentials =
>     >     >
>     array(VIR_CRED_AUTHNAME=>'root',VIR_CRED_PASSPHRASE=>'fakepass');
>     >     > $conn = libvirt_connect("esx://10.9.0.2?transport=http
>     <http://10.9.0.2?transport=http>
>     >     <http://10.9.0.2?transport=http>
>     >     > <http://10.9.0.2?transport=http>", FALSE, $credentials);
>     >     > if($conn) {
>     >     >     print_r(libvirt_connect_get_hypervisor($conn));
>     >     >
>     >     > } else {
>     >     >     echo "Connection failed: ".libvirt_get_last_error();
>     >     > }
>     >     >
>     >     > Any help with this issue would be greatly appreciated. Thanks!
>     >     >
>     >     > Best regards,
>     >     > Koen Calliauw
>     >
>     >
>     >     --
>     >     Michal Novotny <minovotn redhat com
>     <mailto:minovotn redhat com> <mailto:minovotn redhat com
>     <mailto:minovotn redhat com>>>,
>     >     RHCE, Red Hat
>     >     Virtualization | libvirt-php bindings | php-virt-control.org
>     <http://php-virt-control.org>
>     >     <http://php-virt-control.org>
>     >
>     >
>
>
>     --
>     Michal Novotny <minovotn redhat com <mailto:minovotn redhat com>>,
>     RHCE, Red Hat
>     Virtualization | libvirt-php bindings | php-virt-control.org
>     <http://php-virt-control.org>
>
>


-- 
Michal Novotny <minovotn redhat com>, RHCE, Red Hat
Virtualization | libvirt-php bindings | php-virt-control.org

diff --git a/src/libvirt-php.c b/src/libvirt-php.c
index c3253c0..21793ee 100644
--- a/src/libvirt-php.c
+++ b/src/libvirt-php.c
@@ -1196,18 +1196,19 @@ static int libvirt_virConnectAuthCallback(virConnectCredentialPtr cred,  unsigne
 	php_libvirt_cred_value *creds=(php_libvirt_cred_value*) cbdata;
 	for(i=0;i<ncred;i++)
 	{
-		//printf ("Cred %i: type %i, prompt %s challenge %s\n",i,cred[i].type,cred[i].prompt,cred[i].challenge);
+		DPRINTF("%s: cred %d, type %d, prompt %s challenge %s\n ", __FUNCTION__, i, cred[i].type, cred[i].prompt, cred[i].challenge);
 		if (creds != NULL)
 			for (j=0;j<creds[0].count;j++)
 			{
 				if (creds[j].type==cred[i].type)
 				{
 					cred[i].resultlen=creds[j].resultlen;
-					cred[i].result=malloc(creds[j].resultlen);
+					cred[i].result=malloc(creds[j].resultlen + 1);
+					memset(cred[i].result, 0, creds[j].resultlen + 1);
 					strncpy(cred[i].result,creds[j].result,creds[j].resultlen);
 				}
 			}
-			//printf ("Result: %s (%i)\n",cred[i].result,cred[i].resultlen);
+			DPRINTF("%s: result %s (%d)\n", __FUNCTION__, cred[i].result, cred[i].resultlen);
 	}
 
 	return 0;
@@ -1316,16 +1317,20 @@ PHP_FUNCTION(libvirt_connect)
 			zend_hash_move_forward_ex(arr_hash, &pointer)) {
 			    	if (Z_TYPE_PP(data) == IS_STRING) {
 					if (zend_hash_get_current_key_ex(arr_hash, &key, &key_len, &index, 0, &pointer) == HASH_KEY_IS_STRING) {
+						DPRINTF("%s: Writing key %s (len %d)\n", PHPFUNC, key, key_len);
 						PHPWRITE(key, key_len);
 					} else {
+						DPRINTF("%s: credentials index %d\n", PHPFUNC, index);
 						creds[j].type=index;
-						creds[j].result=emalloc(Z_STRLEN_PP(data));
+						creds[j].result=emalloc( Z_STRLEN_PP(data) + 1 );
+						memset(creds[j].result, 0, Z_STRLEN_PP(data) + 1);
 						creds[j].resultlen=Z_STRLEN_PP(data);
 						strncpy(creds[j].result,Z_STRVAL_PP(data),Z_STRLEN_PP(data));
 						j++;
 					}
 				}
 		}
+		DPRINTF("%s: Found %d elements for credentials\n", PHPFUNC, j);
 		creds[0].count=j;
 		libvirt_virConnectAuth.cbdata = (void*)creds;
 		conn->conn = virConnectOpenAuth (url, &libvirt_virConnectAuth, readonly ? VIR_CONNECT_RO : 0);

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]