s3:libnet: accept empty realm for AD domains when only security=domain is set.
[samba.git] / source3 / libnet / libnet_samsync.h
index 24b72f3ab1f3a4b8f4135248e2a8a8018b873626..e1d66ec37f51c42bda608a543251fc4925c98fd6 100644 (file)
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+#include "../librpc/gen_ndr/netlogon.h"
 
 enum net_samsync_mode {
        NET_SAMSYNC_MODE_FETCH_PASSDB = 0,
        NET_SAMSYNC_MODE_FETCH_LDIF = 1,
-       NET_SAMSYNC_MODE_DUMP = 2
+       NET_SAMSYNC_MODE_FETCH_KEYTAB = 2,
+       NET_SAMSYNC_MODE_DUMP = 3
+};
+
+struct samsync_context;
+
+struct samsync_ops {
+       NTSTATUS (*startup)(TALLOC_CTX *mem_ctx,
+                           struct samsync_context *ctx,
+                           enum netr_SamDatabaseID id,
+                           uint64_t *sequence_num);
+       NTSTATUS (*process_objects)(TALLOC_CTX *mem_ctx,
+                                   enum netr_SamDatabaseID id,
+                                   struct netr_DELTA_ENUM_ARRAY *array,
+                                   uint64_t *sequence_num,
+                                   struct samsync_context *ctx);
+       NTSTATUS (*finish)(TALLOC_CTX *mem_ctx,
+                          struct samsync_context *ctx,
+                          enum netr_SamDatabaseID id,
+                          uint64_t sequence_num);
+};
+
+struct samsync_object {
+       uint16_t database_id;
+       uint16_t object_type;
+       union {
+               uint32_t rid;
+               const char *name;
+               struct dom_sid sid;
+       } object_identifier;
 };
 
 struct samsync_context {
@@ -31,30 +61,40 @@ struct samsync_context {
        const char *domain_name;
        const char *output_filename;
 
+       const char *username;
+       const char *password;
+
        char *result_message;
        char *error_message;
 
+       bool single_object_replication;
+       bool force_full_replication;
+       bool clean_old_entries;
+
+       uint32_t num_objects;
+       struct samsync_object *objects;
+
+       struct rpc_pipe_client *cli;
+       struct netlogon_creds_cli_context *netlogon_creds;
+       struct messaging_context *msg_ctx;
+
+       const struct samsync_ops *ops;
+
        void *private_data;
 };
 
-typedef NTSTATUS (*samsync_fn_t)(TALLOC_CTX *,
-                                enum netr_SamDatabaseID,
-                                struct netr_DELTA_ENUM_ARRAY *,
-                                NTSTATUS,
-                                struct samsync_context *);
-
-NTSTATUS fetch_sam_entries_ldif(TALLOC_CTX *mem_ctx,
-                               enum netr_SamDatabaseID database_id,
-                               struct netr_DELTA_ENUM_ARRAY *r,
-                               NTSTATUS result,
-                               struct samsync_context *ctx);
-NTSTATUS fetch_sam_entries(TALLOC_CTX *mem_ctx,
-                          enum netr_SamDatabaseID database_id,
-                          struct netr_DELTA_ENUM_ARRAY *r,
-                          NTSTATUS status,
-                          struct samsync_context *ctx);
-NTSTATUS display_sam_entries(TALLOC_CTX *mem_ctx,
-                            enum netr_SamDatabaseID database_id,
-                            struct netr_DELTA_ENUM_ARRAY *r,
-                            NTSTATUS status,
-                            struct samsync_context *ctx);
+extern const struct samsync_ops libnet_samsync_ldif_ops;
+extern const struct samsync_ops libnet_samsync_keytab_ops;
+extern const struct samsync_ops libnet_samsync_display_ops;
+extern const struct samsync_ops libnet_samsync_passdb_ops;
+
+/* The following definitions come from libnet/libnet_samsync.c  */
+
+NTSTATUS libnet_samsync_init_context(TALLOC_CTX *mem_ctx,
+                                    const struct dom_sid *domain_sid,
+                                    struct samsync_context **ctx_p);
+NTSTATUS libnet_samsync(enum netr_SamDatabaseID database_id,
+                       struct samsync_context *ctx);
+NTSTATUS pull_netr_AcctLockStr(TALLOC_CTX *mem_ctx,
+                              struct lsa_BinaryString *r,
+                              struct netr_AcctLockStr **str_p);