Author: jelmer Date: 2007-10-14 14:24:27 +0000 (Sun, 14 Oct 2007) New Revision: 25629
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25629 Log: Wrap ldb_dn, rename 'ldb' to Ldb to comply with python standards, allowing connecting immediately using the constructor. Modified: branches/4.0-python/ branches/4.0-python/source/lib/ldb/swig/ldb.i Changeset: Property changes on: branches/4.0-python ___________________________________________________________________ Name: bzr:revision-info ...skipped... Name: bzr:revision-id:v3-trunk0 ...skipped... Modified: branches/4.0-python/source/lib/ldb/swig/ldb.i =================================================================== --- branches/4.0-python/source/lib/ldb/swig/ldb.i 2007-10-14 13:28:01 UTC (rev 25628) +++ branches/4.0-python/source/lib/ldb/swig/ldb.i 2007-10-14 14:24:27 UTC (rev 25629) @@ -5,6 +5,7 @@ Copyright (C) 2005,2006 Tim Potter <[EMAIL PROTECTED]> Copyright (C) 2006 Simo Sorce <[EMAIL PROTECTED]> + Copyright (C) 2007 Jelmer Vernooij <[EMAIL PROTECTED]> ** NOTE! The following LGPL license applies to the ldb ** library. This does NOT imply that all of Samba is released @@ -39,68 +40,19 @@ #include <stdbool.h> #include "talloc.h" #include "ldb.h" +#include "ldb_errors.h" typedef struct ldb_message ldb_msg; typedef struct ldb_message_element ldb_msg_element; typedef struct ldb_context ldb; +typedef struct ldb_dn ldb_dn; %} %include "carrays.i" -%include "exception.i" %include "typemaps.i" +%include "exception.i" -/* - * Constants - */ - -#define LDB_SUCCESS 0 -#define LDB_ERR_OPERATIONS_ERROR 1 -#define LDB_ERR_PROTOCOL_ERROR 2 -#define LDB_ERR_TIME_LIMIT_EXCEEDED 3 -#define LDB_ERR_SIZE_LIMIT_EXCEEDED 4 -#define LDB_ERR_COMPARE_FALSE 5 -#define LDB_ERR_COMPARE_TRUE 6 -#define LDB_ERR_AUTH_METHOD_NOT_SUPPORTED 7 -#define LDB_ERR_STRONG_AUTH_REQUIRED 8 -/* 9 RESERVED */ -#define LDB_ERR_REFERRAL 10 -#define LDB_ERR_ADMIN_LIMIT_EXCEEDED 11 -#define LDB_ERR_UNSUPPORTED_CRITICAL_EXTENSION 12 -#define LDB_ERR_CONFIDENTIALITY_REQUIRED 13 -#define LDB_ERR_SASL_BIND_IN_PROGRESS 14 -#define LDB_ERR_NO_SUCH_ATTRIBUTE 16 -#define LDB_ERR_UNDEFINED_ATTRIBUTE_TYPE 17 -#define LDB_ERR_INAPPROPRIATE_MATCHING 18 -#define LDB_ERR_CONSTRAINT_VIOLATION 19 -#define LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS 20 -#define LDB_ERR_INVALID_ATTRIBUTE_SYNTAX 21 -/* 22-31 unused */ -#define LDB_ERR_NO_SUCH_OBJECT 32 -#define LDB_ERR_ALIAS_PROBLEM 33 -#define LDB_ERR_INVALID_DN_SYNTAX 34 -/* 35 RESERVED */ -#define LDB_ERR_ALIAS_DEREFERENCING_PROBLEM 36 -/* 37-47 unused */ -#define LDB_ERR_INAPPROPRIATE_AUTHENTICATION 48 -#define LDB_ERR_INVALID_CREDENTIALS 49 -#define LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS 50 -#define LDB_ERR_BUSY 51 -#define LDB_ERR_UNAVAILABLE 52 -#define LDB_ERR_UNWILLING_TO_PERFORM 53 -#define LDB_ERR_LOOP_DETECT 54 -/* 55-63 unused */ -#define LDB_ERR_NAMING_VIOLATION 64 -#define LDB_ERR_OBJECT_CLASS_VIOLATION 65 -#define LDB_ERR_NOT_ALLOWED_ON_NON_LEAF 66 -#define LDB_ERR_NOT_ALLOWED_ON_RDN 67 -#define LDB_ERR_ENTRY_ALREADY_EXISTS 68 -#define LDB_ERR_OBJECT_CLASS_MODS_PROHIBITED 69 -/* 70 RESERVED FOR CLDAP */ -#define LDB_ERR_AFFECTS_MULTIPLE_DSAS 71 -/* 72-79 unused */ -#define LDB_ERR_OTHER 80 - enum ldb_scope {LDB_SCOPE_DEFAULT=-1, LDB_SCOPE_BASE=0, LDB_SCOPE_ONELEVEL=1, @@ -123,12 +75,6 @@ * Wrap a small bit of talloc */ -/* Use talloc_init() to create a parameter to pass to ldb_init(). Don't - forget to free it using talloc_free() afterwards. */ - -TALLOC_CTX *talloc_init(char *name); -int talloc_free(TALLOC_CTX *ptr); - /* * Wrap struct ldb_val */ @@ -175,9 +121,25 @@ } ldb_msg_element; /* - * Wrap struct ldb_message + * Wrap struct ldb_dn */ +typedef struct ldb_dn { + %extend { + ldb_dn(ldb *ldb, const char *str) + { + ldb_dn *ret = ldb_dn_new(NULL, ldb, str); + if (ret == NULL) + SWIG_exception(SWIG_ValueError, "unable to parse dn string"); +fail: + return ret; + } + bool validate(); + const char *get_casefold(); + const char *get_linearized(); + } +} ldb_dn; + %array_functions(struct ldb_message_element, ldb_message_element_array); %apply ldb_msg_element **OUTPUT { ldb_msg_element **return_el }; @@ -198,6 +160,10 @@ %array_functions(struct ldb_message *, ldb_message_ptr_array); +/* FIXME: Convert ldb_result to 3-tuple: + (msgs, refs, controls) + */ + struct ldb_result { unsigned int count; ldb_msg **msgs; @@ -209,42 +175,43 @@ * Wrap ldb functions */ -/* Initialisation */ - -int ldb_global_init(void); -struct ldb_context *ldb_init(TALLOC_CTX *mem_ctx); - /* Error handling */ const char *ldb_errstring(struct ldb_context *ldb); const char *ldb_strerror(int ldb_err); +%rename(Ldb) ldb; /* Top-level ldb operations */ - typedef struct ldb_context { %extend { - new(); - int connect(const char *url, unsigned int flags = 0, const char *options[] = NULL); - int search(struct ldb_dn *base = NULL, enum ldb_scope scope = LDB_SCOPE_DEFAULT, const char *expression = NULL, const char * const *attrs = NULL, struct ldb_result **OUT); + ldb(const char *url, unsigned int flags = 0, + const char *options[] = NULL) + { + ldb *ldb = ldb_init(NULL); + int ret = ldb_connect(ldb, url, flags, options); + if (ret != LDB_SUCCESS) { + SWIG_exception(SWIG_ValueError, ldb_errstring(ldb)); + } + return ldb; + +fail: + return NULL; + } + ~ldb() { talloc_free($self); } + int search(struct ldb_dn *base = NULL, + enum ldb_scope scope = LDB_SCOPE_DEFAULT, + const char *expression = NULL, + const char * const *attrs = NULL, + struct ldb_result **OUT); int delete(struct ldb_dn *dn); int rename(struct ldb_dn *olddn, struct ldb_dn *newdn); int add(ldb_msg *message); + ldb_dn *get_config_basedn(); + ldb_dn *get_root_basedn(); + ldb_dn *get_schema_basedn(); + ldb_dn *get_default_basedn(); } } ldb; -/* Ldb message operations */ - -ldb_msg *ldb_msg_new(void *mem_ctx); - -int ldb_msg_sanity_check(struct ldb_context *ldb, const struct ldb_message *msg); - -/* DN operations */ - -/* struct ldb_dn *ldb_dn_explode(void *mem_ctx, const char *dn); */ - -/* char *ldb_dn_linearize(void *mem_ctx, const struct ldb_dn *dn); */ - %nodefault ldb_message; %nodefault ldb; -%newobject ldb_msg_new; -%rename(ldb_context) Ldb;
