ret = samdb_connect_url(state, state->ev_ctx, state->lp,
system_session(state->lp), 0,
state->options.url,
- &state->samdb, &errstring);
+ NULL, &state->samdb, &errstring);
if (ret != LDB_SUCCESS) {
state->log(ISC_LOG_ERROR,
"samba_dlz: Failed to connect to %s: %s",
#include "auth/credentials/credentials.h"
#include "param/secrets.h"
#include "auth/auth.h"
+#include "lib/tsocket/tsocket.h"
/*
connect to the SAM database specified by URL
struct tevent_context *ev_ctx,
struct loadparm_context *lp_ctx,
struct auth_session_info *session_info,
- unsigned int flags, const char *url,
+ unsigned int flags,
+ const char *url,
+ struct tsocket_address *remote_address,
struct ldb_context **ldb_ret,
char **errstring)
{
int ret;
*ldb_ret = NULL;
*errstring = NULL;
- ldb = ldb_wrap_find(url, ev_ctx, lp_ctx, session_info, NULL, flags);
- if (ldb != NULL) {
- *ldb_ret = talloc_reference(mem_ctx, ldb);
- if (*ldb_ret == NULL) {
- return LDB_ERR_OPERATIONS_ERROR;
+
+ if (remote_address == NULL) {
+ ldb = ldb_wrap_find(url, ev_ctx, lp_ctx,
+ session_info, NULL, flags);
+ if (ldb != NULL) {
+ *ldb_ret = talloc_reference(mem_ctx, ldb);
+ if (*ldb_ret == NULL) {
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+ return LDB_SUCCESS;
}
- return LDB_SUCCESS;
}
ldb = samba_ldb_init(mem_ctx, ev_ctx, lp_ctx, session_info, NULL);
return LDB_ERR_OPERATIONS_ERROR;
}
+ /*
+ * If a remote_address was specified, then set it on the DB
+ * and do not add to the wrap list (as we need to keep the LDB
+ * pointer unique for the address).
+ *
+ * We use this for audit logging and for the "netlogon" attribute
+ */
+ if (remote_address != NULL) {
+ ldb_set_opaque(ldb, "remoteAddress",
+ remote_address);
+ *ldb_ret = ldb;
+ return LDB_SUCCESS;
+ }
+
if (!ldb_wrap_add(url, ev_ctx, lp_ctx, session_info, NULL, flags, ldb)) {
*errstring = talloc_asprintf(mem_ctx,
"Failed to add cached DB reference"
char *errstring;
struct ldb_context *ldb;
int ret = samdb_connect_url(mem_ctx, ev_ctx, lp_ctx, session_info, flags,
- "sam.ldb", &ldb, &errstring);
+ "sam.ldb", NULL, &ldb, &errstring);
if (ret == LDB_SUCCESS) {
return ldb;
}
#include <ldb_errors.h>
#include <ldb_module.h>
#include "ldb_wrap.h"
+#include "lib/tsocket/tsocket.h"
static int map_ldb_error(TALLOC_CTX *mem_ctx, int ldb_err,
const char *add_err_string, const char **errstring)
conn->lp_ctx,
conn->session_info,
conn->global_catalog ? LDB_FLG_RDONLY : 0,
- "sam.ldb", &conn->ldb, errstring);
+ "sam.ldb",
+ conn->connection->remote_address,
+ &conn->ldb,
+ errstring);
if (ret != LDB_SUCCESS) {
return ret;
}
ldb_set_opaque(conn->ldb, "supportedSASLMechanisms", sasl_mechs);
}
- ldb_set_opaque(conn->ldb, "remoteAddress",
- conn->connection->remote_address);
-
return LDB_SUCCESS;
}