diff options
Diffstat (limited to 'source4/rpc_server/samr')
-rw-r--r-- | source4/rpc_server/samr/samdb.c | 96 |
1 files changed, 18 insertions, 78 deletions
diff --git a/source4/rpc_server/samr/samdb.c b/source4/rpc_server/samr/samdb.c index 330741e29d..3fb8fcef1e 100644 --- a/source4/rpc_server/samr/samdb.c +++ b/source4/rpc_server/samr/samdb.c @@ -22,73 +22,13 @@ #include "includes.h" -struct samdb_context { - struct ldb_context *ldb; - struct samdb_context **static_ptr; -}; - - -/* - this is used to catch debug messages from ldb -*/ -void samdb_debug(void *context, enum ldb_debug_level level, const char *fmt, va_list ap) _PRINTF_ATTRIBUTE(3,0) -{ - char *s = NULL; - if (DEBUGLEVEL < 4 && level > LDB_DEBUG_WARNING) { - return; - } - vasprintf(&s, fmt, ap); - if (!s) return; - DEBUG(level, ("samdb: %s\n", s)); - free(s); -} - -/* destroy the last connection to the sam */ -static int samdb_destructor(void *ctx) -{ - struct samdb_context *sam_ctx = ctx; - ldb_close(sam_ctx->ldb); - *(sam_ctx->static_ptr) = NULL; - return 0; -} - /* connect to the SAM database return an opaque context pointer on success, or NULL on failure */ void *samdb_connect(TALLOC_CTX *mem_ctx) { - static struct samdb_context *ctx; - /* - the way that unix fcntl locking works forces us to have a - static ldb handle here rather than a much more sensible - approach of having the ldb handle as part of the - samr_Connect() pipe state. Otherwise we would try to open - the ldb more than once, and tdb would rightly refuse the - second open due to the broken nature of unix locking. - */ - if (ctx != NULL) { - return talloc_reference(mem_ctx, ctx); - } - - ctx = talloc_p(mem_ctx, struct samdb_context); - if (ctx == NULL) { - errno = ENOMEM; - return NULL; - } - - ctx->static_ptr = &ctx; - - ctx->ldb = ldb_connect(lp_sam_url(), 0, NULL); - if (ctx->ldb == NULL) { - talloc_free(ctx); - return NULL; - } - - talloc_set_destructor(ctx, samdb_destructor); - ldb_set_debug(ctx->ldb, samdb_debug, NULL); - - return ctx; + return ldb_wrap_connect(mem_ctx, lp_sam_url(), 0, NULL); } /* @@ -101,7 +41,7 @@ int samdb_search(void *ctx, const char * const *attrs, const char *format, ...) _PRINTF_ATTRIBUTE(6,7) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; va_list ap; int count; @@ -118,7 +58,7 @@ int samdb_search(void *ctx, int samdb_search_free(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message **res) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; ldb_set_alloc(sam_ctx->ldb, talloc_realloc_fn, mem_ctx); return ldb_search_free(sam_ctx->ldb, res); } @@ -132,7 +72,7 @@ const char *samdb_search_string_v(void *ctx, const char *attr_name, const char *format, va_list ap) _PRINTF_ATTRIBUTE(5,0) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; int count; const char * const attrs[2] = { attr_name, NULL }; struct ldb_message **res = NULL; @@ -178,7 +118,7 @@ int samdb_search_count(void *ctx, const char *basedn, const char *format, ...) _PRINTF_ATTRIBUTE(4,5) { - struct samdb_context *samdb_ctx = ctx; + struct ldb_wrap *samdb_ctx = ctx; va_list ap; struct ldb_message **res; const char * const attrs[] = { NULL }; @@ -202,7 +142,7 @@ uint_t samdb_search_uint(void *ctx, const char *attr_name, const char *format, ...) _PRINTF_ATTRIBUTE(6,7) { - struct samdb_context *samdb_ctx = ctx; + struct ldb_wrap *samdb_ctx = ctx; va_list ap; int count; struct ldb_message **res; @@ -229,7 +169,7 @@ int64_t samdb_search_int64(void *ctx, const char *attr_name, const char *format, ...) _PRINTF_ATTRIBUTE(6,7) { - struct samdb_context *samdb_ctx = ctx; + struct ldb_wrap *samdb_ctx = ctx; va_list ap; int count; struct ldb_message **res; @@ -257,7 +197,7 @@ int samdb_search_string_multiple(void *ctx, const char *attr_name, const char *format, ...) _PRINTF_ATTRIBUTE(6,7) { - struct samdb_context *samdb_ctx = ctx; + struct ldb_wrap *samdb_ctx = ctx; va_list ap; int count, i; const char * const attrs[2] = { attr_name, NULL }; @@ -643,7 +583,7 @@ int samdb_copy_template(void *ctx, TALLOC_CTX *mem_ctx, static NTSTATUS _samdb_allocate_next_id(void *ctx, TALLOC_CTX *mem_ctx, const char *dn, const char *attr, uint32_t *id) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; struct ldb_message msg; int ret; const char *str; @@ -740,7 +680,7 @@ NTSTATUS samdb_allocate_next_id(void *ctx, TALLOC_CTX *mem_ctx, const char *dn, int samdb_msg_add_string(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, const char *attr_name, const char *str) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; char *s = talloc_strdup(mem_ctx, str); char *a = talloc_strdup(mem_ctx, attr_name); if (s == NULL || a == NULL) { @@ -756,7 +696,7 @@ int samdb_msg_add_string(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg int samdb_msg_add_delete(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, const char *attr_name) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; char *a = talloc_strdup(mem_ctx, attr_name); if (a == NULL) { return -1; @@ -803,7 +743,7 @@ int samdb_msg_add_uint64(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg int samdb_msg_add_hash(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, const char *attr_name, struct samr_Password hash) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; struct ldb_val val; val.data = talloc(mem_ctx, 16); val.length = 16; @@ -821,7 +761,7 @@ int samdb_msg_add_hash(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, int samdb_msg_add_hashes(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, const char *attr_name, struct samr_Password *hashes, uint_t count) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; struct ldb_val val; int i; val.data = talloc(mem_ctx, count*16); @@ -851,7 +791,7 @@ int samdb_msg_add_acct_flags(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message int samdb_msg_add_logon_hours(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, const char *attr_name, struct samr_LogonHours hours) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; struct ldb_val val; val.length = hours.units_per_week / 8; val.data = hours.bitmap; @@ -865,7 +805,7 @@ int samdb_msg_add_logon_hours(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message int samdb_msg_set_string(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, const char *attr_name, const char *str) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; struct ldb_message_element *el; ldb_set_alloc(sam_ctx->ldb, talloc_realloc_fn, mem_ctx); @@ -895,7 +835,7 @@ int samdb_msg_set_ldaptime(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *m */ int samdb_add(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; ldb_set_alloc(sam_ctx->ldb, talloc_realloc_fn, mem_ctx); return ldb_add(sam_ctx->ldb, msg); @@ -906,7 +846,7 @@ int samdb_add(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg) */ int samdb_delete(void *ctx, TALLOC_CTX *mem_ctx, const char *dn) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; ldb_set_alloc(sam_ctx->ldb, talloc_realloc_fn, mem_ctx); return ldb_delete(sam_ctx->ldb, dn); @@ -917,7 +857,7 @@ int samdb_delete(void *ctx, TALLOC_CTX *mem_ctx, const char *dn) */ int samdb_modify(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg) { - struct samdb_context *sam_ctx = ctx; + struct ldb_wrap *sam_ctx = ctx; ldb_set_alloc(sam_ctx->ldb, talloc_realloc_fn, mem_ctx); return ldb_modify(sam_ctx->ldb, msg); |