summaryrefslogtreecommitdiff
path: root/source4/ldap_server/ldap_backend.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2007-02-22 01:54:40 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:48:44 -0500
commit7dc7156bd76425df129102a42dd29a85fd8c7ebc (patch)
tree2da9bd209f1cd6f102a48b26094f838860e7e181 /source4/ldap_server/ldap_backend.c
parent81adf162a80b6b0c6c24d40f783ddcd1c9813532 (diff)
downloadsamba-7dc7156bd76425df129102a42dd29a85fd8c7ebc.tar.gz
samba-7dc7156bd76425df129102a42dd29a85fd8c7ebc.tar.bz2
samba-7dc7156bd76425df129102a42dd29a85fd8c7ebc.zip
r21496: A number of ldb control and LDAP changes, surrounding the
'phantom_root' flag in the search_options control - Add in support for LDB controls to the js layer - Test the behaviour - Implement support for the 'phantom_root' flag in the partitions module - Make the LDAP server set the 'phantom_root' flag in the search_options control - This replaces the global_catalog flag passed down as an opaque pointer - Rework the string-format control parsing function into ldb_parse_control_strings(), returning errors by ldb_errorstring() method, rather than with printf to stderr - Rework some of the ldb_control handling logic Andrew Bartlett (This used to be commit 2b3df7f38d7790358dbb4de1b8609bf794a351fb)
Diffstat (limited to 'source4/ldap_server/ldap_backend.c')
-rw-r--r--source4/ldap_server/ldap_backend.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/source4/ldap_server/ldap_backend.c b/source4/ldap_server/ldap_backend.c
index b318996f43..fa8c07fa55 100644
--- a/source4/ldap_server/ldap_backend.c
+++ b/source4/ldap_server/ldap_backend.c
@@ -90,10 +90,6 @@ NTSTATUS ldapsrv_backend_Init(struct ldapsrv_connection *conn)
ldb_set_opaque(conn->ldb, "supportedSASLMechanims", sasl_mechs);
}
- if (conn->global_catalog) {
- ldb_set_opaque(conn->ldb, "global_catalog", (void *)(-1));
- }
-
return NT_STATUS_OK;
}
@@ -229,6 +225,21 @@ static NTSTATUS ldapsrv_SearchRequest(struct ldapsrv_call *call)
lreq->controls = call->request->controls;
+ if (call->conn->global_catalog) {
+ struct ldb_control *search_control = ldb_request_get_control(lreq, LDB_CONTROL_SEARCH_OPTIONS_OID);
+
+ struct ldb_search_options_control *search_options = NULL;
+ if (search_control) {
+ search_options = talloc_get_type(search_control->data, struct ldb_search_options_control);
+ search_options->search_options |= LDB_SEARCH_OPTION_PHANTOM_ROOT;
+ } else {
+ search_options = talloc(lreq, struct ldb_search_options_control);
+ NT_STATUS_HAVE_NO_MEMORY(search_options);
+ search_options->search_options = LDB_SEARCH_OPTION_PHANTOM_ROOT;
+ ldb_request_add_control(lreq, LDB_CONTROL_SEARCH_OPTIONS_OID, false, search_options);
+ }
+ }
+
lreq->context = res;
lreq->callback = ldb_search_default_callback;