"Daniel P. Berrange" <berrange@xxxxxxxxxx> wrote: > This adds a binding for the virConnectOpenAuth() api in the python > API. This allows a python function to be used as the callback. > > This short example code illustrates the use of the API from a > python app which wants to support username/password credentials > only. > > from getpass import getpass > mydata = "Hello" > > def getCred(creds, data): > print "yes" > print str(creds) > for cred in creds: > print cred[1] + ": ", > if cred[0] == libvirt.VIR_CRED_AUTHNAME: > data = sys.stdin.readline() > data = data[0:len(data)-1] > cred[4] = data > elif cred[0] == libvirt.VIR_CRED_PASSPHRASE: > cred[4] = getpass("") > else: > return -1 > return 0 > > uri = "qemu+tcp://localhost/system" > conn = libvirt.openAuth(uri, > [[libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_PASSPHRASE], > getCred, > mydata], 0) > > > print str(conn.listDefinedDomains()) Nice. One nit: > diff -r 8a79678f789f python/libvir.c > --- a/python/libvir.c Wed Nov 28 23:01:30 2007 -0500 > +++ b/python/libvir.c Wed Nov 28 23:29:40 2007 -0500 ... > +static PyObject * > +libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { ... > + auth.ncredtype = PyList_Size(pycredtype); > + if (auth.ncredtype) { > + int i; > + auth.credtype = malloc(sizeof(int) * auth.ncredtype); Check for malloc failure: if (!auth.credtype) return NULL; > + for (i = 0 ; i < auth.ncredtype ; i++) { > + PyObject *val; > + val = PyList_GetItem(pycredtype, i); > + auth.credtype[i] = (int)PyLong_AsLong(val); > + } > + } > + auth.cb = pycredcb ? virConnectCredCallbackWrapper : NULL; > + auth.cbdata = pyauth; -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list