Dell Customer Communication

Hi denial,

 

Thanks for explaining the codeflow which takes care of user name and password. I have gone through the function of virConnectAuthCallbackDefault(). Here this function asks user to provide password. Where as in my application I don’t want and prompt. I want to provide this user name and password first time after that I don’t want any prompt for password.

 

I wanted to understand that when I am using a function virConnectOpenAuth and providing my own callback to retrieve the username and password then why it doesn’t work for qemu hypervisor.

Do I need to change any settings in libvirtd.conf file to make this happen?

 

Thanks & Regards,

Dhaval Shah

-----Original Message-----
From: Daniel P. Berrange [mailto:berrange@redhat.com]
Sent: Monday, April 27, 2015 6:19 PM
To: Shah1, Dhaval
Cc: libvirt-users@redhat.com
Subject: Re: [libvirt-users] [Libvirt Users]how to provide password authentication for qemu driver

On Mon, Apr 27, 2015 at 05:13:36AM -0700, Dhaval_Shah1@dell.com wrote:
> Dell Customer Communication
> Hi All,
>
> I am using
>
> Compiled against library: libvirt 1.2.9 Using library: libvirt 1.2.9
> Using API: QEMU 1.2.9 Running hypervisor: QEMU 2.1.2
>
> I want user to provide username and password authentication to
> virConnectPtr virConnectOpenAuth(const char *name,
> virConnectAuthPtr auth,
> unsigned int flags) to login remotely for the qemu hypervisor.
>
> But it is not taking user provided username and driver. Because
> internally it is calling below qemu driver function,
>
> static virDrvOpenStatus qemuConnectOpen(virConnectPtr conn,
> virConnectAuthPtr auth ATTRIBUTE_UNUSED,
> unsigned int flags)
>
> so it is not taking any user provided auth parameters and it is
> internally calling separate function for prompting password. I don't
> want to provide password here.
> In case of windows HyperV it is working fine as it takes auth
> parameters but for Qemu Hypervisor I am facing this issue since here
> the auth parameters as marked as ATTRIBUTE_UNUSED.

Actually your intepretation of the callpath is not quite right. The
virConnectOpenAuth() method in libvirt.so will end up calling the remoteConnectOpen() method in src/remote/remote_driver.c.
This opens an RPC connection to libvirtd, performs authentication, and then calls qemuConnectOpen(). So from that sequence it is the
remoteConnectOpen() method that deals with passwords/usernames, not qemuConnectOpen().

If you want to get an idea how to provide username/password via the callback, take a look at the virConnectAuthCallbackDefault() method in src/libvirt.c which is the default impl that just prompts on the terminal console.

Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|