diff options
Diffstat (limited to 'source4/rpc_server')
-rw-r--r-- | source4/rpc_server/netlogon/schannel_state.c | 48 | ||||
-rw-r--r-- | source4/rpc_server/samr/samdb.c | 96 |
2 files changed, 43 insertions, 101 deletions
diff --git a/source4/rpc_server/netlogon/schannel_state.c b/source4/rpc_server/netlogon/schannel_state.c index 88eabc6d37..1153e4043d 100644 --- a/source4/rpc_server/netlogon/schannel_state.c +++ b/source4/rpc_server/netlogon/schannel_state.c @@ -28,22 +28,22 @@ /* connect to the schannel ldb */ -static struct ldb_context *schannel_db_connect(TALLOC_CTX *mem_ctx) +static struct ldb_wrap *schannel_db_connect(TALLOC_CTX *mem_ctx) { char *path; - struct ldb_context *ldb; + struct ldb_wrap *ldb; path = lock_path(mem_ctx, "schannel.ldb"); if (!path) { return NULL; } - ldb = ldb_connect(path, 0, NULL); + ldb = ldb_wrap_connect(mem_ctx, path, 0, NULL); if (!ldb) { return NULL; } - ldb_set_alloc(ldb, talloc_realloc_fn, mem_ctx); + ldb_set_alloc(ldb->ldb, talloc_realloc_fn, mem_ctx); return ldb; } @@ -56,7 +56,7 @@ NTSTATUS schannel_store_session_key(TALLOC_CTX *mem_ctx, const char *computer_name, struct creds_CredentialState *creds) { - struct ldb_context *ldb; + struct ldb_wrap *ldb; struct ldb_message msg; struct ldb_val val, seed; char *s = NULL; @@ -71,7 +71,7 @@ NTSTATUS schannel_store_session_key(TALLOC_CTX *mem_ctx, asprintf(&s, "%u", (unsigned int)expiry); if (s == NULL) { - ldb_close(ldb); + talloc_free(ldb); return NT_STATUS_NO_MEMORY; } @@ -79,7 +79,7 @@ NTSTATUS schannel_store_session_key(TALLOC_CTX *mem_ctx, ZERO_STRUCT(msg); msg.dn = talloc_strdup(mem_ctx, computer_name); if (msg.dn == NULL) { - ldb_close(ldb); + talloc_free(ldb); return NT_STATUS_NO_MEMORY; } @@ -89,21 +89,23 @@ NTSTATUS schannel_store_session_key(TALLOC_CTX *mem_ctx, seed.data = creds->seed.data; seed.length = sizeof(creds->seed.data); - ldb_msg_add_value(ldb, &msg, "sessionKey", &val); - ldb_msg_add_value(ldb, &msg, "seed", &seed); - ldb_msg_add_string(ldb, &msg, "expiry", s); + ldb_msg_add_value(ldb->ldb, &msg, "sessionKey", &val); + ldb_msg_add_value(ldb->ldb, &msg, "seed", &seed); + ldb_msg_add_string(ldb->ldb, &msg, "expiry", s); - ldb_delete(ldb, msg.dn); + ldb_delete(ldb->ldb, msg.dn); - ret = ldb_add(ldb, &msg); + ret = ldb_add(ldb->ldb, &msg); if (ret != 0) { - DEBUG(0,("Unable to add %s to session key db - %s\n", msg.dn, ldb_errstring(ldb))); - ldb_close(ldb); + DEBUG(0,("Unable to add %s to session key db - %s\n", + msg.dn, ldb_errstring(ldb->ldb))); + talloc_free(ldb); return NT_STATUS_INTERNAL_DB_CORRUPTION; } - ldb_close(ldb); + talloc_free(ldb); + return NT_STATUS_OK; } @@ -115,7 +117,7 @@ NTSTATUS schannel_fetch_session_key(TALLOC_CTX *mem_ctx, const char *computer_name, struct creds_CredentialState *creds) { - struct ldb_context *ldb; + struct ldb_wrap *ldb; time_t expiry; struct ldb_message **res; int ret; @@ -131,26 +133,26 @@ NTSTATUS schannel_fetch_session_key(TALLOC_CTX *mem_ctx, expr = talloc_asprintf(mem_ctx, "(dn=%s)", computer_name); if (expr == NULL) { - ldb_close(ldb); + talloc_free(ldb); return NT_STATUS_NO_MEMORY; } - ret = ldb_search(ldb, NULL, LDB_SCOPE_SUBTREE, expr, NULL, &res); + ret = ldb_search(ldb->ldb, NULL, LDB_SCOPE_SUBTREE, expr, NULL, &res); if (ret != 1) { - ldb_close(ldb); + talloc_free(ldb); return NT_STATUS_INVALID_HANDLE; } expiry = ldb_msg_find_uint(res[0], "expiry", 0); if (expiry < time(NULL)) { DEBUG(1,("schannel: attempt to use expired session key for %s\n", computer_name)); - ldb_close(ldb); + talloc_free(ldb); return NT_STATUS_INVALID_HANDLE; } val = ldb_msg_find_ldb_val(res[0], "sessionKey"); if (val == NULL || val->length != 16) { - ldb_close(ldb); + talloc_free(ldb); return NT_STATUS_INVALID_HANDLE; } @@ -158,13 +160,13 @@ NTSTATUS schannel_fetch_session_key(TALLOC_CTX *mem_ctx, val = ldb_msg_find_ldb_val(res[0], "seed"); if (val == NULL || val->length != 8) { - ldb_close(ldb); + talloc_free(ldb); return NT_STATUS_INVALID_HANDLE; } memcpy(creds->seed.data, val->data, 8); - ldb_close(ldb); + talloc_free(ldb); return NT_STATUS_OK; } 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); |