~zulcss/samba/samab-3.4-test

« back to all changes in this revision

Viewing changes to lib/util/util_ldb.c

  • Committer: Chuck Short
  • Date: 2010-05-20 18:57:13 UTC
  • Revision ID: zulcss@ubuntu.com-20100520185713-hwqvf9t50z830wck
Initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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,
 
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,
 
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,
 
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)
 
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)
 
128
{
 
129
        return strupper_talloc_n(mem_ctx, s, n);
 
130
}
 
131
 
 
132