The branch, master has been updated
       via  71c862cd91969f238f4d63c8b1178621714d0cc4 (commit)
       via  c9dc6506e626611283756a0f426e23b8a456dc25 (commit)
       via  5925e2952c391aba48c49426a176677a9f623fc2 (commit)
      from  f28219d1a117bf02746679de5e9e25103fd83b29 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 71c862cd91969f238f4d63c8b1178621714d0cc4
Author: Anatoliy Atanasov <anatoliy.atana...@postpath.com>
Date:   Wed Sep 23 15:48:10 2009 -0700

    idl: regenerate idl

commit c9dc6506e626611283756a0f426e23b8a456dc25
Author: Anatoliy Atanasov <anatoliy.atana...@postpath.com>
Date:   Wed Sep 23 15:47:14 2009 -0700

    s4: Handle DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY req in getncchanges

commit 5925e2952c391aba48c49426a176677a9f623fc2
Author: Stefan Metzmacher <me...@samba.org>
Date:   Fri Dec 8 00:11:39 2006 +0000

    Revert "r20074: this values seem to be typos in drsuapi"
    
    This reverts commit 1dfd365d57dcd712d315a1a903c8d3d0a0f0fc12
    
    This change was from and the flags I was seeing have another meaning.
    
    metze
    
    Signed-off-by: Anatoliy Atanasov <anatoliy.atana...@postpath.com>

-----------------------------------------------------------------------

Summary of changes:
 librpc/gen_ndr/drsuapi.h                    |    8 ++++++--
 librpc/gen_ndr/ndr_drsuapi.c                |    6 +++++-
 librpc/idl/drsuapi.idl                      |   10 +++++++---
 source4/rpc_server/drsuapi/dcesrv_drsuapi.h |    2 +-
 source4/rpc_server/drsuapi/drsutil.c        |    7 +------
 source4/rpc_server/drsuapi/getncchanges.c   |   16 +++++++++++++---
 6 files changed, 33 insertions(+), 16 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/drsuapi.h b/librpc/gen_ndr/drsuapi.h
index 258c273..3562123 100644
--- a/librpc/gen_ndr/drsuapi.h
+++ b/librpc/gen_ndr/drsuapi.h
@@ -163,11 +163,15 @@ struct drsuapi_DsReplicaCursorCtrEx {
 #define DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP ( 0x00000020 )
 #define DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS ( 0x00000040 )
 #define DRSUAPI_DS_REPLICA_NEIGHBOUR_USE_ASYNC_INTERSIDE_TRANSPORT ( 
0x00000080 )
+#define DRSUAPI_DS_REPLICA_NEIGHBOUR_ASYNC_REP ( 0x00000100 )
+#define DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_ERROR ( 0x00000100 )
 #define DRSUAPI_DS_REPLICA_NEIGHBOUR_TWO_WAY_SYNC ( 0x00000200 )
+#define DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY ( 0x00000400 )
 #define DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS ( 0x00000800 )
-#define DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS ( 0x00001000 )
-#define DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_NEXT_PACKET ( 0x00002000 )
+#define DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS ( 0x00010000 )
+#define DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_SYNC_PACKET ( 0x00020000 )
 #define DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED ( 0x00200000 )
+#define DRSUAPI_DS_REPLICA_NEIGHBOUR_SPECIAL_SECRET_PROCESSING ( 0x00800000 )
 #define DRSUAPI_DS_REPLICA_NEIGHBOUR_PREEMPTED ( 0x01000000 )
 #define DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_CHANGE_NOTIFICATIONS ( 0x04000000 )
 #define DRSUAPI_DS_REPLICA_NEIGHBOUR_DISABLE_SCHEDULED_SYNC ( 0x08000000 )
diff --git a/librpc/gen_ndr/ndr_drsuapi.c b/librpc/gen_ndr/ndr_drsuapi.c
index dc2a067..9d65b2e 100644
--- a/librpc/gen_ndr/ndr_drsuapi.c
+++ b/librpc/gen_ndr/ndr_drsuapi.c
@@ -875,11 +875,15 @@ _PUBLIC_ void 
ndr_print_drsuapi_DsReplicaNeighbourFlags(struct ndr_print *ndr, c
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_USE_ASYNC_INTERSIDE_TRANSPORT", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_USE_ASYNC_INTERSIDE_TRANSPORT, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_ASYNC_REP", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_ASYNC_REP, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_ERROR", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_ERROR, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_TWO_WAY_SYNC", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_TWO_WAY_SYNC, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS, r);
-       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_NEXT_PACKET", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_NEXT_PACKET, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_SYNC_PACKET", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_SYNC_PACKET, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_SPECIAL_SECRET_PROCESSING", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_SPECIAL_SECRET_PROCESSING, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_PREEMPTED", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_PREEMPTED, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_CHANGE_NOTIFICATIONS", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_CHANGE_NOTIFICATIONS, r);
        ndr_print_bitmap_flag(ndr, sizeof(uint32_t), 
"DRSUAPI_DS_REPLICA_NEIGHBOUR_DISABLE_SCHEDULED_SYNC", 
DRSUAPI_DS_REPLICA_NEIGHBOUR_DISABLE_SCHEDULED_SYNC, r);
diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl
index 54abcbd..27d3089 100644
--- a/librpc/idl/drsuapi.idl
+++ b/librpc/idl/drsuapi.idl
@@ -224,11 +224,15 @@ interface drsuapi
                DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP                    
= 0x00000020,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS                 
= 0x00000040,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_USE_ASYNC_INTERSIDE_TRANSPORT      
= 0x00000080,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_ASYNC_REP                          
= 0x00000100,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_ERROR                       
= 0x00000100,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_TWO_WAY_SYNC                       
= 0x00000200,
-               DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS              
= 0x00000800,
-               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS                   
= 0x00001000, /* was 0x00010000, */
-               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_NEXT_PACKET                   
= 0x00002000, /* was 0x00020000, */
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY                      
= 0x00000400,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS              
= 0x00000800,/*Include updates to ancestor objects before updates to their 
descendants*/
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS                   
= 0x00010000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_SYNC_PACKET                   
= 0x00020000,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED                       
= 0x00200000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_SPECIAL_SECRET_PROCESSING          
= 0x00800000,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_PREEMPTED                          
= 0x01000000,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_CHANGE_NOTIFICATIONS        
= 0x04000000,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_DISABLE_SCHEDULED_SYNC             
= 0x08000000,
diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.h 
b/source4/rpc_server/drsuapi/dcesrv_drsuapi.h
index a6b11c5..4097862 100644
--- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.h
+++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.h
@@ -55,7 +55,7 @@ int drsuapi_search_with_extended_dn(struct ldb_context *ldb,
                                    enum ldb_scope scope,
                                    const char * const *attrs,
                                    const char *sort_attrib,
-                                   const char *format, ...) 
PRINTF_ATTRIBUTE(8,9);
+                                   const char *filter);
 
 WERROR drs_security_level_check(struct dcesrv_call_state *dce_call,
                                const char* call);
diff --git a/source4/rpc_server/drsuapi/drsutil.c 
b/source4/rpc_server/drsuapi/drsutil.c
index e1d6bed..c78ebdd 100644
--- a/source4/rpc_server/drsuapi/drsutil.c
+++ b/source4/rpc_server/drsuapi/drsutil.c
@@ -50,12 +50,11 @@ int drsuapi_search_with_extended_dn(struct ldb_context *ldb,
                                    enum ldb_scope scope,
                                    const char * const *attrs,
                                    const char *sort_attrib,
-                                   const char *format, ...)
+                                   const char *filter)
 {
        va_list ap;
        int ret;
        struct ldb_request *req;
-       char *filter;
        TALLOC_CTX *tmp_ctx;
        struct ldb_result *res;
 
@@ -66,10 +65,6 @@ int drsuapi_search_with_extended_dn(struct ldb_context *ldb,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       va_start(ap, format);
-       filter = talloc_vasprintf(tmp_ctx, format, ap);
-       va_end(ap);
-
        if (filter == NULL) {
                talloc_free(tmp_ctx);
                return LDB_ERR_OPERATIONS_ERROR;
diff --git a/source4/rpc_server/drsuapi/getncchanges.c 
b/source4/rpc_server/drsuapi/getncchanges.c
index f38f95c..75f5651 100644
--- a/source4/rpc_server/drsuapi/getncchanges.c
+++ b/source4/rpc_server/drsuapi/getncchanges.c
@@ -306,7 +306,8 @@ WERROR dcesrv_drsuapi_DsGetNCChanges(struct 
dcesrv_call_state *dce_call, TALLOC_
        DATA_BLOB session_key;
        const char *attrs[] = { "*", "parentGUID", "distinguishedName", NULL };
        WERROR werr;
-       
+       char* search_filter;
+
        *r->out.level_out = 6;
        /* TODO: linked attributes*/
        r->out.ctr->ctr6.linked_attributes_count = 0;
@@ -355,12 +356,21 @@ WERROR dcesrv_drsuapi_DsGetNCChanges(struct 
dcesrv_call_state *dce_call, TALLOC_
        }
 
        /* Construct response. */
+       search_filter = talloc_asprintf(mem_ctx,
+                                       "(uSNChanged>=%llu)",
+                                       (unsigned long 
long)(r->in.req->req8.highwatermark.highest_usn+1));
+
+       if ((r->in.req->req8.replica_flags & 
DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY)
+           == DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY) {
+               search_filter = talloc_asprintf(mem_ctx,
+                                               
"(&%s(isCriticalSystemObject=true))",
+                                               search_filter);
+       }
        ncRoot_dn = ldb_dn_new(mem_ctx, sam_ctx, ncRoot->dn);
        ret = drsuapi_search_with_extended_dn(sam_ctx, mem_ctx, &site_res,
                                              ncRoot_dn, LDB_SCOPE_SUBTREE, 
attrs,
                                              "distinguishedName",
-                                             "(uSNChanged>=%llu)", 
-                                             (unsigned long 
long)(r->in.req->req8.highwatermark.highest_usn+1));
+                                             search_filter);
        if (ret != LDB_SUCCESS) {
                return WERR_DS_DRA_INTERNAL_ERROR;
        }


-- 
Samba Shared Repository

Reply via email to