]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Use rpccli_netr_DatabaseSync2() in rpcclient.
authorGünther Deschner <gd@samba.org>
Fri, 15 Feb 2008 13:11:20 +0000 (14:11 +0100)
committerGünther Deschner <gd@samba.org>
Fri, 15 Feb 2008 13:11:20 +0000 (14:11 +0100)
Guenther

source/rpcclient/cmd_netlogon.c

index cf52da7c9f3f25977753b1bcf874f25c694f9827..49098b12e43e4534b00967708db7a2fd76f2942e 100644 (file)
@@ -554,37 +554,66 @@ static void display_sam_sync(struct netr_DELTA_ENUM_ARRAY *r)
 
 /* Perform sam synchronisation */
 
-static NTSTATUS cmd_netlogon_sam_sync(struct rpc_pipe_client *cli, 
+static NTSTATUS cmd_netlogon_sam_sync(struct rpc_pipe_client *cli,
                                       TALLOC_CTX *mem_ctx, int argc,
                                       const char **argv)
 {
        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-        uint32 database_id = 0, num_deltas;
-        SAM_DELTA_HDR *hdr_deltas;
-        SAM_DELTA_CTR *deltas;
+       const char *logon_server = cli->cli->desthost;
+       const char *computername = global_myname();
+       struct netr_Authenticator credential;
+       struct netr_Authenticator return_authenticator;
+       enum netr_SamDatabaseID database_id = SAM_DATABASE_DOMAIN;
+       uint16_t restart_state = 0;
+       uint32_t sync_context = 0;
 
         if (argc > 2) {
                 fprintf(stderr, "Usage: %s [database_id]\n", argv[0]);
                 return NT_STATUS_OK;
         }
 
-        if (argc == 2)
-                database_id = atoi(argv[1]);
+       if (argc == 2) {
+               database_id = atoi(argv[1]);
+       }
+
+       /* Synchronise sam database */
+
+       do {
+               struct netr_DELTA_ENUM_ARRAY *delta_enum_array = NULL;
 
-        /* Synchronise sam database */
+               netlogon_creds_client_step(cli->dc, &credential);
 
-       result = rpccli_netlogon_sam_sync(cli, mem_ctx, database_id,
-                                      0, &num_deltas, &hdr_deltas, &deltas);
+               result = rpccli_netr_DatabaseSync2(cli, mem_ctx,
+                                                  logon_server,
+                                                  computername,
+                                                  &credential,
+                                                  &return_authenticator,
+                                                  database_id,
+                                                  restart_state,
+                                                  &sync_context,
+                                                  &delta_enum_array,
+                                                  0xffff);
 
-       if (!NT_STATUS_IS_OK(result))
-               goto done;
+               /* Check returned credentials. */
+               if (!netlogon_creds_client_check(cli->dc,
+                                                &return_authenticator.cred)) {
+                       DEBUG(0,("credentials chain check failed\n"));
+                       return NT_STATUS_ACCESS_DENIED;
+               }
 
-        /* Display results */
+               if (NT_STATUS_IS_ERR(result)) {
+                       break;
+               }
 
-/*        display_sam_sync(num_deltas, hdr_deltas, deltas); */
+               /* Display results */
 
- done:
-        return result;
+               display_sam_sync(delta_enum_array);
+
+               TALLOC_FREE(delta_enum_array);
+
+       } while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
+
+       return result;
 }
 
 /* Perform sam delta synchronisation */