diff options
Diffstat (limited to 'python/rpmsmodule.c')
-rw-r--r-- | python/rpmsmodule.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/python/rpmsmodule.c b/python/rpmsmodule.c new file mode 100644 index 0000000..e0b1b66 --- /dev/null +++ b/python/rpmsmodule.c @@ -0,0 +1,97 @@ +#include "rpmsystem-py.h" + +#include <rpm/rpmsign.h> + +#include "debug.h" + +static char rpms__doc__[] = +""; + +static PyObject * addSign(PyObject * self, PyObject * args, PyObject *kwds) +{ + const char *path = NULL; + const char *passPhrase = NULL; + char * kwlist[] = { "path", "passPhrase", "keyid", "hashalgo", NULL }; + struct rpmSignArgs sig, *sigp = NULL; + + memset(&sig, 0, sizeof(sig)); + if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss|si", kwlist, + &path, &passPhrase, &sig.keyid, &sig.hashalgo)) + return NULL; + + if (sig.keyid || sig.hashalgo) + sigp = &sig; + + return PyBool_FromLong(rpmPkgSign(path, sigp, passPhrase) == 0); +} + +static PyObject * delSign(PyObject * self, PyObject * args, PyObject *kwds) +{ + const char *path = NULL; + char * kwlist[] = { "path", NULL }; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, &path)) + return NULL; + + return PyBool_FromLong(rpmPkgDelSign(path) == 0); +} + +/* + Do any common preliminary work before python 2 vs python 3 module creation: +*/ +static int prepareInitModule(void) +{ + return 1; +} + +static int initModule(PyObject *m) +{ + return 1; +} + +static PyMethodDef modMethods[] = { + { "addSign", (PyCFunction) addSign, METH_VARARGS|METH_KEYWORDS, NULL }, + { "delSign", (PyCFunction) delSign, METH_VARARGS|METH_KEYWORDS, NULL }, + { NULL }, +}; + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, + "_rpms", /* m_name */ + rpms__doc__, /* m_doc */ + 0, /* m_size */ + NULL, /* m_methods */ + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; + +PyObject * PyInit__rpm(void); /* XXX eliminate gcc warning */ +PyObject * PyInit__rpm(void) +{ + PyObject *m; + + if (!prepareInitModule()) + return NULL; + m = PyModule_Create(&moduledef); + if (m == NULL || !initModule(m)) { + Py_XDECREF(m); + m = NULL; + } + return m; +} +#else +void init_rpms(void); /* XXX eliminate gcc warning */ +void init_rpms(void) +{ + PyObject *m; + + if (!prepareInitModule()) + return; + + m = Py_InitModule3("_rpms", modMethods, rpms__doc__); + if (m) initModule(m); +} +#endif |