root/lib/util/util_ldb.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. gendb_search_v
  2. gendb_search
  3. gendb_search_dn
  4. gendb_add_ldif
  5. wrap_casefold

   1 /*
   2    Unix SMB/CIFS implementation.
   3 
   4    common share info functions
   5 
   6    Copyright (C) Andrew Tridgell 2004
   7    Copyright (C) Tim Potter 2004
   8 
   9    This program is free software; you can redistribute it and/or modify
  10    it under the terms of the GNU General Public License as published by
  11    the Free Software Foundation; either version 3 of the License, or
  12    (at your option) any later version.
  13 
  14    This program is distributed in the hope that it will be useful,
  15    but WITHOUT ANY WARRANTY; without even the implied warranty of
  16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17    GNU General Public License for more details.
  18 
  19    You should have received a copy of the GNU General Public License
  20    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  21 */
  22 
  23 #include "includes.h"
  24 #include "lib/ldb/include/ldb.h"
  25 #include "../lib/util/util_ldb.h"
  26 /*
  27   search the sam for the specified attributes - va_list variant
  28 */
  29 int gendb_search_v(struct ldb_context *ldb,
     /* [<][>][^][v][top][bottom][index][help] */
  30                    TALLOC_CTX *mem_ctx,
  31                    struct ldb_dn *basedn,
  32                    struct ldb_message ***msgs,
  33                    const char * const *attrs,
  34                    const char *format,
  35                    va_list ap) 
  36 {
  37         enum ldb_scope scope = LDB_SCOPE_SUBTREE;
  38         struct ldb_result *res;
  39         char *expr = NULL;
  40         int ret;
  41 
  42         if (format) {
  43                 expr = talloc_vasprintf(mem_ctx, format, ap);
  44                 if (expr == NULL) {
  45                         return -1;
  46                 }
  47         } else {
  48                 scope = LDB_SCOPE_BASE;
  49         }
  50 
  51         res = NULL;
  52 
  53         ret = ldb_search(ldb, mem_ctx, &res, basedn, scope, attrs,
  54                          expr?"%s":NULL, expr);
  55 
  56         if (ret == LDB_SUCCESS) {
  57                 talloc_steal(mem_ctx, res->msgs);
  58 
  59                 DEBUG(6,("gendb_search_v: %s %s -> %d\n",
  60                          basedn?ldb_dn_get_linearized(basedn):"NULL",
  61                          expr?expr:"NULL", res->count));
  62 
  63                 ret = res->count;
  64                 *msgs = res->msgs;
  65                 talloc_free(res);
  66         } else if (scope == LDB_SCOPE_BASE && ret == LDB_ERR_NO_SUCH_OBJECT) {
  67                 ret = 0;
  68                 *msgs = NULL;
  69         } else {
  70                 DEBUG(4,("gendb_search_v: search failed: %s\n",
  71                                         ldb_errstring(ldb)));
  72                 ret = -1;
  73         }
  74 
  75         talloc_free(expr);
  76 
  77         return ret;
  78 }
  79 
  80 /*
  81   search the LDB for the specified attributes - varargs variant
  82 */
  83 int gendb_search(struct ldb_context *ldb,
     /* [<][>][^][v][top][bottom][index][help] */
  84                  TALLOC_CTX *mem_ctx,
  85                  struct ldb_dn *basedn,
  86                  struct ldb_message ***res,
  87                  const char * const *attrs,
  88                  const char *format, ...) 
  89 {
  90         va_list ap;
  91         int count;
  92 
  93         va_start(ap, format);
  94         count = gendb_search_v(ldb, mem_ctx, basedn, res, attrs, format, ap);
  95         va_end(ap);
  96 
  97         return count;
  98 }
  99 
 100 /*
 101   search the LDB for a specified record (by DN)
 102 */
 103 
 104 int gendb_search_dn(struct ldb_context *ldb,
     /* [<][>][^][v][top][bottom][index][help] */
 105                  TALLOC_CTX *mem_ctx,
 106                  struct ldb_dn *dn,
 107                  struct ldb_message ***res,
 108                  const char * const *attrs)
 109 {
 110         return gendb_search(ldb, mem_ctx, dn, res, attrs, NULL);
 111 }
 112 
 113 /*
 114   setup some initial ldif in a ldb
 115 */
 116 int gendb_add_ldif(struct ldb_context *ldb, const char *ldif_string)
     /* [<][>][^][v][top][bottom][index][help] */
 117 {
 118         struct ldb_ldif *ldif;
 119         int ret;
 120         ldif = ldb_ldif_read_string(ldb, &ldif_string);
 121         if (ldif == NULL) return -1;
 122         ret = ldb_add(ldb, ldif->msg);
 123         talloc_free(ldif);
 124         return ret;
 125 }
 126 
 127 char *wrap_casefold(void *context, void *mem_ctx, const char *s, size_t n)
     /* [<][>][^][v][top][bottom][index][help] */
 128 {
 129         return strupper_talloc_n(mem_ctx, s, n);
 130 }
 131 
 132 

/* [<][>][^][v][top][bottom][index][help] */