summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/rpc_server/common/gendb.c54
-rw-r--r--source4/rpc_server/samr/samdb.c52
2 files changed, 67 insertions, 39 deletions
diff --git a/source4/rpc_server/common/gendb.c b/source4/rpc_server/common/gendb.c
new file mode 100644
index 0000000000..c9e195db8c
--- /dev/null
+++ b/source4/rpc_server/common/gendb.c
@@ -0,0 +1,54 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ common share info functions
+
+ Copyright (C) Andrew Tridgell 2004
+ Copyright (C) Tim Potter 2004
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+/*
+ search the sam for the specified attributes - va_list variant
+*/
+int gendb_search_v(struct ldb_context *ldb,
+ TALLOC_CTX *mem_ctx,
+ const char *basedn,
+ struct ldb_message ***res,
+ const char * const *attrs,
+ const char *format,
+ va_list ap)
+{
+ char *expr = NULL;
+ int count;
+
+ vasprintf(&expr, format, ap);
+ if (expr == NULL) {
+ return -1;
+ }
+
+ ldb_set_alloc(ldb, talloc_ldb_alloc, mem_ctx);
+
+ count = ldb_search(ldb, basedn, LDB_SCOPE_SUBTREE, expr, attrs, res);
+
+ DEBUG(4,("gendb_search_v: %s %s -> %d\n", basedn?basedn:"NULL", expr, count));
+
+ free(expr);
+
+ return count;
+}
diff --git a/source4/rpc_server/samr/samdb.c b/source4/rpc_server/samr/samdb.c
index 3997285fd2..c02692703c 100644
--- a/source4/rpc_server/samr/samdb.c
+++ b/source4/rpc_server/samr/samdb.c
@@ -86,39 +86,7 @@ void samdb_close(void *ctx)
/* we don't actually close due to broken posix locking semantics */
sam_ctx->ldb = NULL;
free(sam_ctx);
-}
-
-/*
- search the sam for the specified attributes - va_list variant
-*/
-int samdb_search_v(void *ctx,
- TALLOC_CTX *mem_ctx,
- const char *basedn,
- struct ldb_message ***res,
- const char * const *attrs,
- const char *format,
- va_list ap)
-{
- struct samdb_context *sam_ctx = ctx;
- char *expr = NULL;
- int count;
-
- vasprintf(&expr, format, ap);
- if (expr == NULL) {
- return -1;
- }
-
- ldb_set_alloc(sam_ctx->ldb, talloc_ldb_alloc, mem_ctx);
-
- count = ldb_search(sam_ctx->ldb, basedn, LDB_SCOPE_SUBTREE, expr, attrs, res);
-
- DEBUG(4,("samdb_search_v: %s %s -> %d\n", basedn?basedn:"NULL", expr, count));
-
- free(expr);
-
- return count;
-}
-
+}
/*
search the sam for the specified attributes - varargs variant
@@ -130,11 +98,12 @@ int samdb_search(void *ctx,
const char * const *attrs,
const char *format, ...) _PRINTF_ATTRIBUTE(6,7)
{
+ struct samdb_context *sam_ctx = ctx;
va_list ap;
int count;
va_start(ap, format);
- count = samdb_search_v(ctx, mem_ctx, basedn, res, attrs, format, ap);
+ count = gendb_search_v(sam_ctx->ldb, mem_ctx, basedn, res, attrs, format, ap);
va_end(ap);
return count;
@@ -160,11 +129,12 @@ const char *samdb_search_string_v(void *ctx,
const char *attr_name,
const char *format, va_list ap)
{
+ struct samdb_context *sam_ctx = ctx;
int count;
const char * const attrs[2] = { attr_name, NULL };
struct ldb_message **res = NULL;
- count = samdb_search_v(ctx, mem_ctx, basedn, &res, attrs, format, ap);
+ count = gendb_search_v(sam_ctx->ldb, mem_ctx, basedn, &res, attrs, format, ap);
if (count > 1) {
DEBUG(1,("samdb: search for %s %s not single valued (count=%d)\n",
attr_name, format, count));
@@ -205,13 +175,14 @@ int samdb_search_count(void *ctx,
const char *basedn,
const char *format, ...) _PRINTF_ATTRIBUTE(4,5)
{
+ struct samdb_context *samdb_ctx = ctx;
va_list ap;
struct ldb_message **res;
const char * const attrs[] = { NULL };
int ret;
va_start(ap, format);
- ret = samdb_search_v(ctx, mem_ctx, basedn, &res, attrs, format, ap);
+ ret = gendb_search_v(samdb_ctx->ldb, mem_ctx, basedn, &res, attrs, format, ap);
va_end(ap);
return ret;
@@ -228,13 +199,14 @@ uint_t samdb_search_uint(void *ctx,
const char *attr_name,
const char *format, ...) _PRINTF_ATTRIBUTE(6,7)
{
+ struct samdb_context *samdb_ctx = ctx;
va_list ap;
int count;
struct ldb_message **res;
const char * const attrs[2] = { attr_name, NULL };
va_start(ap, format);
- count = samdb_search_v(ctx, mem_ctx, basedn, &res, attrs, format, ap);
+ count = gendb_search_v(samdb_ctx->ldb, mem_ctx, basedn, &res, attrs, format, ap);
va_end(ap);
if (count != 1) {
@@ -254,13 +226,14 @@ int64_t samdb_search_int64(void *ctx,
const char *attr_name,
const char *format, ...) _PRINTF_ATTRIBUTE(6,7)
{
+ struct samdb_context *samdb_ctx = ctx;
va_list ap;
int count;
struct ldb_message **res;
const char * const attrs[2] = { attr_name, NULL };
va_start(ap, format);
- count = samdb_search_v(ctx, mem_ctx, basedn, &res, attrs, format, ap);
+ count = gendb_search_v(samdb_ctx->ldb, mem_ctx, basedn, &res, attrs, format, ap);
va_end(ap);
if (count != 1) {
@@ -281,13 +254,14 @@ int samdb_search_string_multiple(void *ctx,
const char *attr_name,
const char *format, ...) _PRINTF_ATTRIBUTE(6,7)
{
+ struct samdb_context *samdb_ctx = ctx;
va_list ap;
int count, i;
const char * const attrs[2] = { attr_name, NULL };
struct ldb_message **res = NULL;
va_start(ap, format);
- count = samdb_search_v(ctx, mem_ctx, basedn, &res, attrs, format, ap);
+ count = gendb_search_v(samdb_ctx->ldb, mem_ctx, basedn, &res, attrs, format, ap);
va_end(ap);
if (count <= 0) {