summaryrefslogtreecommitdiff
path: root/python/rpmsmodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'python/rpmsmodule.c')
-rw-r--r--python/rpmsmodule.c97
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