mirror of https://gitee.com/openkylin/libvirt.git
Add manual impl of virConnectOpenAuth python binding
This commit is contained in:
parent
60a6bbe6c5
commit
5ab109f862
|
@ -1,3 +1,8 @@
|
||||||
|
Wed Dec 5 14:08:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
|
* python/libvir.c, python/libvir.py: Add binding for the
|
||||||
|
virConnectOpenAuth() API which generator can't handle
|
||||||
|
|
||||||
Wed Dec 5 13:55:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
|
Wed Dec 5 13:55:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* qemud/qemud.c: Re-added listen_tcp & listen_tls config
|
* qemud/qemud.c: Re-added listen_tcp & listen_tls config
|
||||||
|
|
123
python/libvir.c
123
python/libvir.c
|
@ -245,6 +245,128 @@ libvirt_virRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self,
|
||||||
return (py_retval);
|
return (py_retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int virConnectCredCallbackWrapper(virConnectCredentialPtr cred,
|
||||||
|
unsigned int ncred,
|
||||||
|
void *cbdata) {
|
||||||
|
PyObject *list;
|
||||||
|
PyObject *pycred;
|
||||||
|
PyObject *pyauth = (PyObject *)cbdata;
|
||||||
|
PyObject *pycbdata;
|
||||||
|
PyObject *pycb;
|
||||||
|
PyObject *pyret;
|
||||||
|
int ret = -1, i;
|
||||||
|
|
||||||
|
LIBVIRT_ENSURE_THREAD_STATE;
|
||||||
|
|
||||||
|
pycb = PyList_GetItem(pyauth, 1);
|
||||||
|
pycbdata = PyList_GetItem(pyauth, 2);
|
||||||
|
|
||||||
|
list = PyTuple_New(2);
|
||||||
|
pycred = PyTuple_New(ncred);
|
||||||
|
for (i = 0 ; i < ncred ; i++) {
|
||||||
|
PyObject *pycreditem;
|
||||||
|
pycreditem = PyList_New(5);
|
||||||
|
Py_INCREF(Py_None);
|
||||||
|
PyTuple_SetItem(pycred, i, pycreditem);
|
||||||
|
PyList_SetItem(pycreditem, 0, PyInt_FromLong((long) cred[i].type));
|
||||||
|
PyList_SetItem(pycreditem, 1, PyString_FromString(cred[i].prompt));
|
||||||
|
if (cred[i].challenge) {
|
||||||
|
PyList_SetItem(pycreditem, 2, PyString_FromString(cred[i].challenge));
|
||||||
|
} else {
|
||||||
|
Py_INCREF(Py_None);
|
||||||
|
PyList_SetItem(pycreditem, 2, Py_None);
|
||||||
|
}
|
||||||
|
if (cred[i].defresult) {
|
||||||
|
PyList_SetItem(pycreditem, 3, PyString_FromString(cred[i].defresult));
|
||||||
|
} else {
|
||||||
|
Py_INCREF(Py_None);
|
||||||
|
PyList_SetItem(pycreditem, 3, Py_None);
|
||||||
|
}
|
||||||
|
PyList_SetItem(pycreditem, 4, Py_None);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyTuple_SetItem(list, 0, pycred);
|
||||||
|
Py_XINCREF(pycbdata);
|
||||||
|
PyTuple_SetItem(list, 1, pycbdata);
|
||||||
|
|
||||||
|
PyErr_Clear();
|
||||||
|
pyret = PyEval_CallObject(pycb, list);
|
||||||
|
if (PyErr_Occurred())
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
ret = PyLong_AsLong(pyret);
|
||||||
|
if (ret == 0) {
|
||||||
|
for (i = 0 ; i < ncred ; i++) {
|
||||||
|
PyObject *pycreditem;
|
||||||
|
PyObject *pyresult;
|
||||||
|
char *result = NULL;
|
||||||
|
pycreditem = PyTuple_GetItem(pycred, i);
|
||||||
|
pyresult = PyList_GetItem(pycreditem, 4);
|
||||||
|
if (pyresult != Py_None)
|
||||||
|
result = PyString_AsString(pyresult);
|
||||||
|
if (result != NULL) {
|
||||||
|
cred[i].result = strdup(result);
|
||||||
|
cred[i].resultlen = strlen(result);
|
||||||
|
} else {
|
||||||
|
cred[i].result = NULL;
|
||||||
|
cred[i].resultlen = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
Py_XDECREF(list);
|
||||||
|
Py_XDECREF(pyret);
|
||||||
|
|
||||||
|
LIBVIRT_RELEASE_THREAD_STATE;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
|
||||||
|
PyObject *py_retval;
|
||||||
|
virConnectPtr c_retval;
|
||||||
|
char * name;
|
||||||
|
int flags;
|
||||||
|
PyObject *pyauth;
|
||||||
|
PyObject *pycredcb;
|
||||||
|
PyObject *pycredtype;
|
||||||
|
virConnectAuth auth;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, (char *)"zOi:virConnectOpenAuth", &name, &pyauth, &flags))
|
||||||
|
return(NULL);
|
||||||
|
|
||||||
|
pycredtype = PyList_GetItem(pyauth, 0);
|
||||||
|
pycredcb = PyList_GetItem(pyauth, 1);
|
||||||
|
|
||||||
|
auth.ncredtype = PyList_Size(pycredtype);
|
||||||
|
if (auth.ncredtype) {
|
||||||
|
int i;
|
||||||
|
auth.credtype = malloc(sizeof(int) * auth.ncredtype);
|
||||||
|
if (auth.credtype == NULL) {
|
||||||
|
Py_INCREF(Py_None);
|
||||||
|
return (Py_None);
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
|
||||||
|
LIBVIRT_BEGIN_ALLOW_THREADS;
|
||||||
|
|
||||||
|
c_retval = virConnectOpenAuth(name, &auth, flags);
|
||||||
|
LIBVIRT_END_ALLOW_THREADS;
|
||||||
|
py_retval = libvirt_virConnectPtrWrap((virConnectPtr) c_retval);
|
||||||
|
return(py_retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* *
|
* *
|
||||||
* Wrappers for functions where generator fails *
|
* Wrappers for functions where generator fails *
|
||||||
|
@ -733,6 +855,7 @@ static PyMethodDef libvirtMethods[] = {
|
||||||
#include "libvirt-export.c"
|
#include "libvirt-export.c"
|
||||||
{(char *) "virGetVersion", libvirt_virGetVersion, METH_VARARGS, NULL},
|
{(char *) "virGetVersion", libvirt_virGetVersion, METH_VARARGS, NULL},
|
||||||
{(char *) "virDomainFree", libvirt_virDomainFree, METH_VARARGS, NULL},
|
{(char *) "virDomainFree", libvirt_virDomainFree, METH_VARARGS, NULL},
|
||||||
|
{(char *) "virConnectOpenAuth", libvirt_virConnectOpenAuth, METH_VARARGS, NULL},
|
||||||
{(char *) "virConnectClose", libvirt_virConnectClose, METH_VARARGS, NULL},
|
{(char *) "virConnectClose", libvirt_virConnectClose, METH_VARARGS, NULL},
|
||||||
{(char *) "virConnectListDomainsID", libvirt_virConnectListDomainsID, METH_VARARGS, NULL},
|
{(char *) "virConnectListDomainsID", libvirt_virConnectListDomainsID, METH_VARARGS, NULL},
|
||||||
{(char *) "virConnectListDefinedDomains", libvirt_virConnectListDefinedDomains, METH_VARARGS, NULL},
|
{(char *) "virConnectListDefinedDomains", libvirt_virConnectListDefinedDomains, METH_VARARGS, NULL},
|
||||||
|
|
|
@ -89,6 +89,12 @@ def registerErrorHandler(f, ctx):
|
||||||
Returns 1 in case of success."""
|
Returns 1 in case of success."""
|
||||||
return libvirtmod.virRegisterErrorHandler(f,ctx)
|
return libvirtmod.virRegisterErrorHandler(f,ctx)
|
||||||
|
|
||||||
|
def openAuth(uri, auth, flags):
|
||||||
|
ret = libvirtmod.virConnectOpenAuth(uri, auth, flags)
|
||||||
|
if ret is None:raise libvirtError('virConnectOpenAuth() failed')
|
||||||
|
return virConnect(_obj=ret)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Return library version.
|
# Return library version.
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue