This repository has been archived by the owner on Sep 16, 2020. It is now read-only.
forked from dyarnell/python-kadmin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
PyKAdminIterator.c
123 lines (93 loc) · 3.88 KB
/
PyKAdminIterator.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include "PyKAdminObject.h"
#include "PyKAdminIterator.h"
#include "PyKAdminPrincipalObject.h"
#include "PyKAdminPolicyObject.h"
#include "PyKAdminErrors.h"
static void PyKAdminIterator_dealloc(PyKAdminIterator *self) {
kadm5_free_name_list(self->kadmin->server_handle, self->names, self->count);
Py_DECREF(self->kadmin);
Py_TYPE(self)->tp_free((PyObject *)self);
}
static int PyKAdminIterator_init(PyKAdminIterator *self, PyObject *args, PyObject *kwds) {
return 0;
}
static PyObject *PyKAdminIterator_next(PyKAdminIterator *self) {
char *name = NULL;
PyObject *next = NULL;
if (self->index < self->count) {
name = self->names[self->index];
next = PyUnicode_FromString(name);
self->index++;
}
return next;
}
PyTypeObject PyKAdminIterator_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
//PyObject_HEAD_INIT(NULL)
//0, /*ob_size*/
"kadmin.PrincipalIterator", /*tp_name*/
sizeof(PyKAdminIterator), /*tp_basicsize*/
0, /*tp_itemsize*/
(destructor)PyKAdminIterator_dealloc, /*tp_dealloc*/
0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
"KAdmin Principal Iterator", /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc)PyKAdminIterator_next, /* tp_iternext */
0, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
0, //(initproc)PyKAdminIterator_init, /* tp_init */
0, /* tp_alloc */
0, //PyKAdminIterator_new, /* tp_new */
};
PyKAdminIterator *PyKAdminIterator_principal_iterator(PyKAdminObject *kadmin, char *match) {
kadm5_ret_t retval = KADM5_OK;
PyKAdminIterator *iter = PyObject_New(PyKAdminIterator, &PyKAdminIterator_Type);
if (iter) {
iter->count = 0x0;
iter->index = 0x0;
iter->kadmin = kadmin;
Py_INCREF(kadmin);
retval = kadm5_get_principals(kadmin->server_handle, match, &iter->names, &iter->count);
if (retval != KADM5_OK) { PyKAdmin_RETURN_ERROR(retval, "kadm5_get_principals"); }
}
Py_XINCREF(iter);
return iter;
}
PyKAdminIterator *PyKAdminIterator_policy_iterator(PyKAdminObject *kadmin, char *match) {
kadm5_ret_t retval = KADM5_OK;
PyKAdminIterator *iter = PyObject_New(PyKAdminIterator, &PyKAdminIterator_Type);
if (iter) {
iter->count = 0x0;
iter->index = 0x0;
iter->kadmin = kadmin;
Py_INCREF(kadmin);
retval = kadm5_get_policies(kadmin->server_handle, match, &iter->names, &iter->count);
if (retval != KADM5_OK) { PyKAdmin_RETURN_ERROR(retval, "kadm5_get_policies"); }
}
Py_XINCREF(iter);
return iter;
}