r10328: Add more emacs python-mode markers.
[bbaumbach/samba-autobuild/.git] / source4 / lib / gendb.c
index befdd63c9e854a488fa330c84e9675d602b98ed3..a5fe7c3bcedce31a3bb636f7b266615ece5c420f 100644 (file)
 */
 int gendb_search_v(struct ldb_context *ldb, 
                   TALLOC_CTX *mem_ctx,
-                  const char *basedn,
+                  const struct ldb_dn *basedn,
                   struct ldb_message ***res,
                   const char * const *attrs,
                   const char *format, 
                   va_list ap)  _PRINTF_ATTRIBUTE(6,0)
 {
+       enum ldb_scope scope = LDB_SCOPE_SUBTREE;
        char *expr = NULL;
        int count;
 
-       vasprintf(&expr, format, ap);
-       if (expr == NULL) {
-               return -1;
+       if (format) {
+               vasprintf(&expr, format, ap);
+               if (expr == NULL) {
+                       return -1;
+               }
+       } else {
+               scope = LDB_SCOPE_BASE;
        }
 
        *res = NULL;
 
-       count = ldb_search(ldb, basedn, LDB_SCOPE_SUBTREE, expr, attrs, res);
+       count = ldb_search(ldb, basedn, scope, expr, attrs, res);
 
        if (*res) talloc_steal(mem_ctx, *res);
 
        DEBUG(4,("gendb_search_v: %s %s -> %d  (%s)\n", 
-                basedn?basedn:"NULL", expr, count,
+                basedn?ldb_dn_linearize(mem_ctx,basedn):"NULL",
+                expr?expr:"NULL", count,
                 count==-1?ldb_errstring(ldb):"OK"));
 
        free(expr);
@@ -61,9 +67,9 @@ int gendb_search_v(struct ldb_context *ldb,
 /*
   search the LDB for the specified attributes - varargs variant
 */
-int gendb_search(struct ldb_context *sam_ldb,
+int gendb_search(struct ldb_context *ldb,
                 TALLOC_CTX *mem_ctx, 
-                const char *basedn,
+                const struct ldb_dn *basedn,
                 struct ldb_message ***res,
                 const char * const *attrs,
                 const char *format, ...) _PRINTF_ATTRIBUTE(6,7)
@@ -72,9 +78,31 @@ int gendb_search(struct ldb_context *sam_ldb,
        int count;
 
        va_start(ap, format);
-       count = gendb_search_v(sam_ldb, mem_ctx, basedn, res, attrs, format, ap);
+       count = gendb_search_v(ldb, mem_ctx, basedn, res, attrs, format, ap);
        va_end(ap);
 
        return count;
 }
 
+int gendb_search_dn(struct ldb_context *ldb,
+                TALLOC_CTX *mem_ctx, 
+                const struct ldb_dn *dn,
+                struct ldb_message ***res,
+                const char * const *attrs)
+{
+       return gendb_search(ldb, mem_ctx, dn, res, attrs, "dn=%s", ldb_dn_linearize(mem_ctx, dn));
+}
+
+/*
+  setup some initial ldif in a ldb
+*/
+int gendb_add_ldif(struct ldb_context *ldb, const char *ldif_string)
+{
+       struct ldb_ldif *ldif;
+       int ret;
+       ldif = ldb_ldif_read_string(ldb, &ldif_string);
+       if (ldif == NULL) return -1;
+       ret = ldb_add(ldb, ldif->msg);
+       talloc_free(ldif);
+       return ret;
+}