| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- /* See http://www.python-ldap.org/ for details.
- * $Id: functions.c,v 1.27 2009/08/17 05:00:57 leonard Exp $ */
- #include "common.h"
- #include "functions.h"
- #include "LDAPObject.h"
- #include "berval.h"
- #include "errors.h"
- #include "options.h"
- /* ldap_initialize */
- static PyObject*
- l_ldap_initialize(PyObject* unused, PyObject *args)
- {
- char *uri;
- LDAP *ld = NULL;
- int ret;
- if (!PyArg_ParseTuple(args, "s", &uri))
- return NULL;
- Py_BEGIN_ALLOW_THREADS
- ret = ldap_initialize(&ld, uri);
- Py_END_ALLOW_THREADS
- if (ret != LDAP_SUCCESS)
- return LDAPerror(ld, "ldap_initialize");
- return (PyObject*)newLDAPObject(ld);
- }
- /* ldap_str2dn */
- static PyObject*
- l_ldap_str2dn( PyObject* unused, PyObject *args )
- {
- struct berval str;
- LDAPDN dn;
- int flags = 0;
- PyObject *result = NULL, *tmp;
- int res, i, j;
- Py_ssize_t str_len;
- /*
- * From a DN string such as "a=b,c=d;e=f", build
- * a list-equivalent of AVA structures; namely:
- * ((('a','b',1),('c','d',1)),(('e','f',1),))
- * The integers are a bit combination of the AVA_* flags
- */
- if (!PyArg_ParseTuple( args, "z#|i:str2dn",
- &str.bv_val, &str_len, &flags ))
- return NULL;
- str.bv_len = (ber_len_t) str_len;
- res = ldap_bv2dn(&str, &dn, flags);
- if (res != LDAP_SUCCESS)
- return LDAPerr(res);
- tmp = PyList_New(0);
- if (!tmp)
- goto failed;
- for (i = 0; dn[i]; i++) {
- LDAPRDN rdn;
- PyObject *rdnlist;
- rdn = dn[i];
- rdnlist = PyList_New(0);
- if (!rdnlist)
- goto failed;
- if (PyList_Append(tmp, rdnlist) == -1) {
- Py_DECREF(rdnlist);
- goto failed;
- }
- for (j = 0; rdn[j]; j++) {
- LDAPAVA *ava = rdn[j];
- PyObject *tuple;
- tuple = Py_BuildValue("(O&O&i)",
- LDAPberval_to_object, &ava->la_attr,
- LDAPberval_to_object, &ava->la_value,
- ava->la_flags & ~(LDAP_AVA_FREE_ATTR|LDAP_AVA_FREE_VALUE));
- if (!tuple) {
- Py_DECREF(rdnlist);
- goto failed;
- }
- if (PyList_Append(rdnlist, tuple) == -1) {
- Py_DECREF(tuple);
- goto failed;
- }
- Py_DECREF(tuple);
- }
- Py_DECREF(rdnlist);
- }
- result = tmp;
- tmp = NULL;
- failed:
- Py_XDECREF(tmp);
- ldap_dnfree(dn);
- return result;
- }
- /* ldap_set_option (global options) */
- static PyObject*
- l_ldap_set_option(PyObject* self, PyObject *args)
- {
- PyObject *value;
- int option;
- if (!PyArg_ParseTuple(args, "iO:set_option", &option, &value))
- return NULL;
- if (!LDAP_set_option(NULL, option, value))
- return NULL;
- Py_INCREF(Py_None);
- return Py_None;
- }
- /* ldap_get_option (global options) */
- static PyObject*
- l_ldap_get_option(PyObject* self, PyObject *args)
- {
- int option;
- if (!PyArg_ParseTuple(args, "i:get_option", &option))
- return NULL;
- return LDAP_get_option(NULL, option);
- }
- /* methods */
- static PyMethodDef methods[] = {
- { "initialize", (PyCFunction)l_ldap_initialize, METH_VARARGS },
- { "str2dn", (PyCFunction)l_ldap_str2dn, METH_VARARGS },
- { "set_option", (PyCFunction)l_ldap_set_option, METH_VARARGS },
- { "get_option", (PyCFunction)l_ldap_get_option, METH_VARARGS },
- { NULL, NULL }
- };
- /* initialisation */
- void
- LDAPinit_functions( PyObject* d ) {
- LDAPadd_methods( d, methods );
- }
|