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;

Reply via email to