s4:dsdb/common/util.c - change the usage of the RECYCLED control
authorMatthias Dieter Wallnöfer <mdw@samba.org>
Mon, 4 Oct 2010 15:18:19 +0000 (17:18 +0200)
committerMatthias Dieter Wallnöfer <mdw@sn-devel-104.sn.samba.org>
Mon, 4 Oct 2010 16:10:11 +0000 (16:10 +0000)
Use it only in conjunction with the DELETE one to allow the functions to work
also against Windows < 2008R2. This is really important for the vampire
operation.

Also mark the RECYCLED control as non-critical (so that it's simply ignored by
older Windows'es).

Autobuild-User: Matthias Dieter Wallnöfer <mdw@samba.org>
Autobuild-Date: Mon Oct  4 16:10:11 UTC 2010 on sn-devel-104

source4/dsdb/common/util.c

index 523dd8ef8e3afdd76f588871c2547a44a309781a..faf2fb5f965e4085f20637b444b234bab356bb5e 100644 (file)
@@ -2517,6 +2517,7 @@ int dsdb_find_guid_attr_by_dn(struct ldb_context *ldb,
        attrs[1] = NULL;
 
        ret = dsdb_search_dn(ldb, tmp_ctx, &res, dn, attrs,
+                            DSDB_SEARCH_SHOW_DELETED |
                             DSDB_SEARCH_SHOW_RECYCLED);
        if (ret != LDB_SUCCESS) {
                talloc_free(tmp_ctx);
@@ -2592,6 +2593,7 @@ int dsdb_find_sid_by_dn(struct ldb_context *ldb,
        ZERO_STRUCTP(sid);
 
        ret = dsdb_search_dn(ldb, tmp_ctx, &res, dn, attrs,
+                            DSDB_SEARCH_SHOW_DELETED |
                             DSDB_SEARCH_SHOW_RECYCLED);
        if (ret != LDB_SUCCESS) {
                talloc_free(tmp_ctx);
@@ -3275,6 +3277,7 @@ int dsdb_wellknown_dn(struct ldb_context *samdb, TALLOC_CTX *mem_ctx,
        }
 
        ret = dsdb_search_dn(samdb, tmp_ctx, &res, dn, attrs,
+                            DSDB_SEARCH_SHOW_DELETED |
                             DSDB_SEARCH_SHOW_RECYCLED);
        if (ret != LDB_SUCCESS) {
                talloc_free(tmp_ctx);
@@ -3574,7 +3577,7 @@ int dsdb_request_add_controls(struct ldb_request *req, uint32_t dsdb_flags)
        }
 
        if (dsdb_flags & DSDB_SEARCH_SHOW_RECYCLED) {
-               ret = ldb_request_add_control(req, LDB_CONTROL_SHOW_RECYCLED_OID, true, NULL);
+               ret = ldb_request_add_control(req, LDB_CONTROL_SHOW_RECYCLED_OID, false, NULL);
                if (ret != LDB_SUCCESS) {
                        return ret;
                }