diff options
author | Andrew Tridgell <tridge@samba.org> | 2009-09-22 17:07:33 -0700 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2009-09-22 17:10:06 -0700 |
commit | ee4f7f1209cc7668e7245d21e9bf2424d8c77244 (patch) | |
tree | 79287709bda11c735a0f62a35e6ef2a834e9e2fe /source4/rpc_server/drsuapi/drsutil.c | |
parent | 83bef7d047def0711b0893c6b2a5096b195811ef (diff) | |
download | samba-ee4f7f1209cc7668e7245d21e9bf2424d8c77244.tar.gz samba-ee4f7f1209cc7668e7245d21e9bf2424d8c77244.tar.bz2 samba-ee4f7f1209cc7668e7245d21e9bf2424d8c77244.zip |
s4-drsserver: sort by DN to give tree order
This might help the windows client with ordered requests. Later we
need to support the "ancestors" mode flag.
Diffstat (limited to 'source4/rpc_server/drsuapi/drsutil.c')
-rw-r--r-- | source4/rpc_server/drsuapi/drsutil.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/source4/rpc_server/drsuapi/drsutil.c b/source4/rpc_server/drsuapi/drsutil.c index 03116f29d9..ef48a9f079 100644 --- a/source4/rpc_server/drsuapi/drsutil.c +++ b/source4/rpc_server/drsuapi/drsutil.c @@ -44,12 +44,13 @@ char *drs_ObjectIdentifier_to_string(TALLOC_CTX *mem_ctx, } int drsuapi_search_with_extended_dn(struct ldb_context *ldb, - TALLOC_CTX *mem_ctx, - struct ldb_result **_res, - struct ldb_dn *basedn, - enum ldb_scope scope, - const char * const *attrs, - const char *format, ...) + TALLOC_CTX *mem_ctx, + struct ldb_result **_res, + struct ldb_dn *basedn, + enum ldb_scope scope, + const char * const *attrs, + const char *sort_attrib, + const char *format, ...) { va_list ap; int ret; @@ -93,6 +94,24 @@ int drsuapi_search_with_extended_dn(struct ldb_context *ldb, return ret; } + if (sort_attrib) { + struct ldb_server_sort_control *sort_control; + sort_control = talloc(req, struct ldb_server_sort_control); + if (sort_control == NULL) { + talloc_free(tmp_ctx); + return LDB_ERR_OPERATIONS_ERROR; + } + sort_control->attributeName = sort_attrib; + sort_control->orderingRule = NULL; + sort_control->reverse = 1; + + ret = ldb_request_add_control(req, LDB_CONTROL_SERVER_SORT_OID, true, sort_control); + if (ret != LDB_SUCCESS) { + return ret; + } + } + + ret = ldb_request(ldb, req); if (ret == LDB_SUCCESS) { ret = ldb_wait(req->handle, LDB_WAIT_ALL); |