summaryrefslogtreecommitdiff
path: root/source4/rpc_server
diff options
context:
space:
mode:
Diffstat (limited to 'source4/rpc_server')
-rw-r--r--source4/rpc_server/netlogon/schannel_state.c48
-rw-r--r--source4/rpc_server/samr/samdb.c96
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);