lex.yy.o: lex.yy.c parse_adm.h
-dumpadm: dumpadm.o parse_adm.o parse_adm.o lex.yy.o
+parse_adm.o lex.yy.o: CFLAGS+=-fPIC
+
+libpolicy.$(SHLIBEXT): parse_adm.o lex.yy.o
+ $(CC) -shared -o $@ $^ $(TALLOC_LIBS)
+
+dumpadm: dumpadm.o libpolicy.$(SHLIBEXT)
$(CC) -o $@ $^ $(POPT_LIBS)
clean::
check-python:: python
PYTHONPATH=python $(TRIAL) python/tests
-python/policy.$(SHLIBEXT): pypolicy.o
- $(CC) -shared -o $@ $^ `$(PYTHON_CONFIG) --libs`
+python/policy.$(SHLIBEXT): pypolicy.o libpolicy.$(SHLIBEXT)
+ $(CC) -shared -o $@ $^ `$(PYTHON_CONFIG) --libs` $(TALLOC_LIBS)
pypolicy.o: CFLAGS+=`$(PYTHON_CONFIG) --cflags` -fPIC
AC_PROG_YACC
AC_PROG_LEX
+PKG_CHECK_MODULES(TALLOC, talloc)
PKG_CHECK_MODULES(REGISTRY, registry)
AC_CHECK_LIB([popt], [poptFreeContext], [
*/
#include <Python.h>
+#include <talloc.h>
+#include "adm.h"
+
+typedef struct {
+ PyObject_HEAD
+ struct adm_file *file;
+} AdmFileObject;
+
+static int adm_file_init(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+ char *path;
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", &path))
+ return -1;
+
+ adm_read_file(path);
+
+ return 0;
+}
+
+static void adm_file_dealloc(AdmFileObject *self)
+{
+ talloc_free(self->file);
+ self->ob_type->tp_free(self);
+}
+
+static PyTypeObject PyAdmFile = {
+ .tp_name = "AdmFile",
+ .tp_flags = Py_TPFLAGS_DEFAULT,
+ .tp_basicsize = sizeof(AdmFileObject),
+ .tp_dealloc = (destructor)adm_file_dealloc,
+ .tp_init = adm_file_init,
+};
void initpolicy(void)
{
PyObject *m;
+
+ if (PyType_Ready(&PyAdmFile) < 0)
+ return;
- m = Py_InitModule3("policy", NULL, NULL);
+ m = Py_InitModule3("policy", NULL, "Windows policy management");
if (m == NULL)
return;
+
+ PyModule_AddObject(m, "AdmFile", (PyObject *)&PyAdmFile);
+ Py_INCREF(&PyAdmFile);
}