s3-dcerpc: add dcerpc_pull_ncacn_packet_header().
[abartlet/samba.git/.git] / source3 / include / proto.h
index 9a19fbe9b5e85bb7d98888b5f9405b13aea54be9..99afcf3e053ee12b4a3d1c66b9e4774d1cbee6e0 100644 (file)
@@ -54,10 +54,38 @@ NTSTATUS auth_netlogond_init(void);
 
 /* The following definitions come from auth/auth_ntlmssp.c  */
 
-NTSTATUS auth_ntlmssp_start(AUTH_NTLMSSP_STATE **auth_ntlmssp_state);
-void auth_ntlmssp_end(AUTH_NTLMSSP_STATE **auth_ntlmssp_state);
-NTSTATUS auth_ntlmssp_update(AUTH_NTLMSSP_STATE *auth_ntlmssp_state, 
+struct auth_serversupplied_info *auth_ntlmssp_server_info(TALLOC_CTX *mem_ctx,
+                                                         struct auth_ntlmssp_state *auth_ntlmssp_state);
+struct ntlmssp_state *auth_ntlmssp_get_ntlmssp_state(struct auth_ntlmssp_state *auth_ntlmssp_state);
+const char *auth_ntlmssp_get_username(struct auth_ntlmssp_state *auth_ntlmssp_state);
+const char *auth_ntlmssp_get_domain(struct auth_ntlmssp_state *auth_ntlmssp_state);
+const char *auth_ntlmssp_get_client(struct auth_ntlmssp_state *auth_ntlmssp_state);
+bool auth_ntlmssp_negotiated_sign(struct auth_ntlmssp_state *auth_ntlmssp_state);
+bool auth_ntlmssp_negotiated_seal(struct auth_ntlmssp_state *auth_ntlmssp_state);
+void auth_ntlmssp_want_sign(struct auth_ntlmssp_state *auth_ntlmssp_state);
+void auth_ntlmssp_want_seal(struct auth_ntlmssp_state *auth_ntlmssp_state);
+NTSTATUS auth_ntlmssp_start(struct auth_ntlmssp_state **auth_ntlmssp_state);
+void auth_ntlmssp_end(struct auth_ntlmssp_state **auth_ntlmssp_state);
+NTSTATUS auth_ntlmssp_update(struct auth_ntlmssp_state *auth_ntlmssp_state,
                             const DATA_BLOB request, DATA_BLOB *reply) ;
+NTSTATUS auth_ntlmssp_sign_packet(struct auth_ntlmssp_state *auth_ntlmssp_state,
+                                 TALLOC_CTX *sig_mem_ctx,
+                                 const uint8_t *data, size_t length,
+                                 const uint8_t *whole_pdu, size_t pdu_length,
+                                 DATA_BLOB *sig);
+NTSTATUS auth_ntlmssp_check_packet(struct auth_ntlmssp_state *auth_ntlmssp_state,
+                                  const uint8_t *data, size_t length,
+                                  const uint8_t *whole_pdu, size_t pdu_length,
+                                  const DATA_BLOB *sig) ;
+NTSTATUS auth_ntlmssp_seal_packet(struct auth_ntlmssp_state *auth_ntlmssp_state,
+                                 TALLOC_CTX *sig_mem_ctx,
+                                 uint8_t *data, size_t length,
+                                 const uint8_t *whole_pdu, size_t pdu_length,
+                                 DATA_BLOB *sig);
+NTSTATUS auth_ntlmssp_unseal_packet(struct auth_ntlmssp_state *auth_ntlmssp_state,
+                                   uint8_t *data, size_t length,
+                                   const uint8_t *whole_pdu, size_t pdu_length,
+                                   const DATA_BLOB *sig);
 
 /* The following definitions come from auth/auth_sam.c  */
 
@@ -80,7 +108,7 @@ NTSTATUS auth_unix_init(void);
 NTSTATUS make_user_info_map(struct auth_usersupplied_info **user_info,
                            const char *smb_name, 
                            const char *client_domain, 
-                           const char *wksta_name, 
+                           const char *workstation_name,
                            DATA_BLOB *lm_pwd, DATA_BLOB *nt_pwd,
                            DATA_BLOB *lm_interactive_pwd, DATA_BLOB *nt_interactive_pwd,
                            DATA_BLOB *plaintext, 
@@ -88,7 +116,7 @@ NTSTATUS make_user_info_map(struct auth_usersupplied_info **user_info,
 bool make_user_info_netlogon_network(struct auth_usersupplied_info **user_info,
                                     const char *smb_name, 
                                     const char *client_domain, 
-                                    const char *wksta_name, 
+                                    const char *workstation_name,
                                     uint32 logon_parameters,
                                     const uchar *lm_network_pwd,
                                     int lm_pwd_len,
@@ -97,7 +125,7 @@ bool make_user_info_netlogon_network(struct auth_usersupplied_info **user_info,
 bool make_user_info_netlogon_interactive(struct auth_usersupplied_info **user_info,
                                         const char *smb_name, 
                                         const char *client_domain, 
-                                        const char *wksta_name, 
+                                        const char *workstation_name,
                                         uint32 logon_parameters,
                                         const uchar chal[8], 
                                         const uchar lm_interactive_pwd[16], 
@@ -133,10 +161,13 @@ NTSTATUS make_serverinfo_from_username(TALLOC_CTX *mem_ctx,
 struct auth_serversupplied_info *copy_serverinfo(TALLOC_CTX *mem_ctx,
                                                 const struct auth_serversupplied_info *src);
 bool init_guest_info(void);
+bool init_system_info(void);
 bool server_info_set_session_key(struct auth_serversupplied_info *info,
                                 DATA_BLOB session_key);
 NTSTATUS make_server_info_guest(TALLOC_CTX *mem_ctx,
                                struct auth_serversupplied_info **server_info);
+NTSTATUS make_server_info_system(TALLOC_CTX *mem_ctx,
+                                struct auth_serversupplied_info **server_info);
 bool copy_current_user(struct current_user *dst, struct current_user *src);
 struct passwd *smb_getpwnam( TALLOC_CTX *mem_ctx, char *domuser,
                             fstring save_username, bool create );
@@ -161,7 +192,7 @@ NTSTATUS make_user_info(struct auth_usersupplied_info **user_info,
                        const char *internal_username,
                        const char *client_domain,
                        const char *domain,
-                       const char *wksta_name,
+                       const char *workstation_name,
                        const DATA_BLOB *lm_pwd,
                        const DATA_BLOB *nt_pwd,
                        const DATA_BLOB *lm_interactive_pwd,
@@ -177,11 +208,27 @@ NTSTATUS auth_winbind_init(void);
 /* The following definitions come from auth/server_info.c  */
 
 struct auth_serversupplied_info *make_server_info(TALLOC_CTX *mem_ctx);
-
+NTSTATUS serverinfo_to_SamInfo2(struct auth_serversupplied_info *server_info,
+                               uint8_t *pipe_session_key,
+                               size_t pipe_session_key_len,
+                               struct netr_SamInfo2 *sam2);
+NTSTATUS serverinfo_to_SamInfo3(struct auth_serversupplied_info *server_info,
+                               uint8_t *pipe_session_key,
+                               size_t pipe_session_key_len,
+                               struct netr_SamInfo3 *sam3);
+NTSTATUS serverinfo_to_SamInfo6(struct auth_serversupplied_info *server_info,
+                               uint8_t *pipe_session_key,
+                               size_t pipe_session_key_len,
+                               struct netr_SamInfo6 *sam6);
 NTSTATUS samu_to_SamInfo3(TALLOC_CTX *mem_ctx,
                          struct samu *samu,
                          const char *login_server,
-                         struct netr_SamInfo3 **_info3);
+                         struct netr_SamInfo3 **_info3,
+                         struct extra_auth_info *extra);
+struct netr_SamInfo3 *copy_netr_SamInfo3(TALLOC_CTX *mem_ctx,
+                                        struct netr_SamInfo3 *orig);
+struct netr_SamInfo3 *wbcAuthUserInfo_to_netr_SamInfo3(TALLOC_CTX *mem_ctx,
+                                       const struct wbcAuthUserInfo *info);
 
 /* The following definitions come from auth/auth_wbc.c  */
 
@@ -218,6 +265,11 @@ struct nt_user_token *create_local_nt_token(TALLOC_CTX *mem_ctx,
                                            bool is_guest,
                                            int num_groupsids,
                                            const struct dom_sid *groupsids);
+NTSTATUS create_local_nt_token_from_info3(TALLOC_CTX *mem_ctx,
+                                         bool is_guest,
+                                         struct netr_SamInfo3 *info3,
+                                         struct extra_auth_info *extra,
+                                         struct nt_user_token **ntok);
 void debug_nt_user_token(int dbg_class, int dbg_lev, NT_USER_TOKEN *token);
 void debug_unix_user_token(int dbg_class, int dbg_lev, uid_t uid, gid_t gid,
                           int n_groups, gid_t *groups);
@@ -650,7 +702,7 @@ NTSTATUS privilege_delete_account(const struct dom_sid *sid);
 NTSTATUS privilege_set_init(PRIVILEGE_SET *priv_set);
 NTSTATUS privilege_set_init_by_ctx(TALLOC_CTX *mem_ctx, PRIVILEGE_SET *priv_set);
 void privilege_set_free(PRIVILEGE_SET *priv_set);
-NTSTATUS dup_luid_attr(TALLOC_CTX *mem_ctx, LUID_ATTR **new_la, LUID_ATTR *old_la, int count);
+NTSTATUS dup_luid_attr(TALLOC_CTX *mem_ctx, struct lsa_LUIDAttribute **new_la, struct lsa_LUIDAttribute *old_la, int count);
 bool is_privileged_sid( const struct dom_sid *sid );
 bool grant_all_privileges( const struct dom_sid *sid );
 
@@ -669,8 +721,8 @@ const char* get_privilege_dispname( const char *name );
 bool user_has_privileges(const NT_USER_TOKEN *token, const SE_PRIV *privilege);
 bool user_has_any_privilege(NT_USER_TOKEN *token, const SE_PRIV *privilege);
 int count_all_privileges( void );
-LUID_ATTR get_privilege_luid( SE_PRIV *mask );
-const char *luid_to_privilege_name(const LUID *set);
+struct lsa_LUIDAttribute get_privilege_luid( SE_PRIV *mask );
+const char *luid_to_privilege_name(const struct lsa_LUID *set);
 bool se_priv_to_privilege_set( PRIVILEGE_SET *set, SE_PRIV *mask );
 bool privilege_set_to_se_priv( SE_PRIV *mask, struct lsa_PrivilegeSet *privset );
 
@@ -766,8 +818,6 @@ bool parse_usershare_acl(TALLOC_CTX *ctx, const char *acl_str, struct security_d
 /* The following definitions come from lib/smbldap.c  */
 
 int smb_ldap_start_tls(LDAP *ldap_struct, int version);
-int smb_ldap_setup_conn(LDAP **ldap_struct, const char *uri);
-int smb_ldap_upgrade_conn(LDAP *ldap_struct, int *new_version) ;
 int smb_ldap_setup_full_conn(LDAP **ldap_struct, const char *uri);
 int smbldap_search(struct smbldap_state *ldap_state, 
                   const char *base, int scope, const char *filter, 
@@ -1107,15 +1157,19 @@ bool nt_time_is_set(const NTTIME *nt);
 char *get_user_home_dir(TALLOC_CTX *mem_ctx, const char *user);
 struct passwd *Get_Pwnam_alloc(TALLOC_CTX *mem_ctx, const char *user);
 
+/* The following definitions come from lib/util_names.c  */
+void gfree_netbios_names(void);
+bool set_global_myname(const char *myname);
+const char *global_myname(void);
+bool set_global_myworkgroup(const char *myworkgroup);
+const char *lp_workgroup(void);
+const char *get_global_sam_name(void);
+
 /* The following definitions come from lib/util.c  */
 
 enum protocol_types get_Protocol(void);
 void set_Protocol(enum protocol_types  p);
 bool all_zero(const uint8_t *ptr, size_t size);
-bool set_global_myname(const char *myname);
-const char *global_myname(void);
-bool set_global_myworkgroup(const char *myworkgroup);
-const char *lp_workgroup(void);
 bool set_global_scope(const char *scope);
 const char *global_scope(void);
 void gfree_names(void);
@@ -1172,8 +1226,9 @@ ssize_t write_data_at_offset(int fd, const char *buffer, size_t N, SMB_OFF_T pos
 int set_blocking(int fd, bool set);
 void smb_msleep(unsigned int t);
 NTSTATUS reinit_after_fork(struct messaging_context *msg_ctx,
-                      struct event_context *ev_ctx,
-                      bool parent_longlived);
+                          struct event_context *ev_ctx,
+                          struct server_id id,
+                          bool parent_longlived);
 void *malloc_(size_t size);
 void *memalign_array(size_t el_size, size_t align, unsigned int count);
 void *calloc_array(size_t size, size_t nmemb);
@@ -1336,7 +1391,6 @@ bool is_setuid_root(void) ;
 
 const char *sid_type_lookup(uint32 sid_type) ;
 NT_USER_TOKEN *get_system_token(void) ;
-const char *get_global_sam_name(void) ;
 char *sid_to_fstring(fstring sidstr_out, const struct dom_sid *sid);
 char *sid_string_talloc(TALLOC_CTX *mem_ctx, const struct dom_sid *sid);
 char *sid_string_dbg(const struct dom_sid *sid);
@@ -1700,16 +1754,6 @@ void wins_srv_tags_free(char **list);
 struct in_addr wins_srv_ip_tag(const char *tag, struct in_addr src_ip);
 unsigned wins_srv_count_tag(const char *tag);
 
-/* The following definitions come from libads/ads_status.c  */
-
-ADS_STATUS ads_build_error(enum ads_error_type etype, 
-                          int rc, int minor_status);
-ADS_STATUS ads_build_nt_error(enum ads_error_type etype, 
-                          NTSTATUS nt_status);
-NTSTATUS ads_ntstatus(ADS_STATUS status);
-const char *ads_errstr(ADS_STATUS status);
-NTSTATUS gss_err_to_ntstatus(uint32 maj, uint32 min);
-
 /* The following definitions come from libads/ads_struct.c  */
 
 char *ads_build_path(const char *realm, const char *sep, const char *field, int reverse);
@@ -1738,52 +1782,10 @@ NTSTATUS kerberos_return_pac(TALLOC_CTX *mem_ctx,
                             const char *impersonate_princ_s,
                             struct PAC_LOGON_INFO **logon_info);
 
-/* The following definitions come from libads/cldap.c  */
-bool ads_cldap_netlogon(TALLOC_CTX *mem_ctx,
-                       const char *server,
-                       const char *realm,
-                       uint32_t nt_version,
-                       struct netlogon_samlogon_response **reply);
-bool ads_cldap_netlogon_5(TALLOC_CTX *mem_ctx,
-                         const char *server,
-                         const char *realm,
-                         struct NETLOGON_SAM_LOGON_RESPONSE_EX *reply5);
-
 /* The following definitions come from libads/disp_sec.c  */
 
 void ads_disp_sd(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, struct security_descriptor *sd);
 
-/* The following definitions come from libads/dns.c  */
-
-NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx,
-                               const char *dnsdomain,
-                               struct dns_rr_ns **nslist,
-                               int *numns);
-NTSTATUS ads_dns_query_dcs(TALLOC_CTX *ctx,
-                          const char *realm,
-                          const char *sitename,
-                          struct dns_rr_srv **dclist,
-                          int *numdcs );
-NTSTATUS ads_dns_query_gcs(TALLOC_CTX *ctx,
-                          const char *realm,
-                          const char *sitename,
-                          struct dns_rr_srv **dclist,
-                          int *numdcs );
-NTSTATUS ads_dns_query_kdcs(TALLOC_CTX *ctx,
-                           const char *dns_forest_name,
-                           const char *sitename,
-                           struct dns_rr_srv **dclist,
-                           int *numdcs );
-NTSTATUS ads_dns_query_pdc(TALLOC_CTX *ctx,
-                          const char *dns_domain_name,
-                          struct dns_rr_srv **dclist,
-                          int *numdcs );
-NTSTATUS ads_dns_query_dcs_guid(TALLOC_CTX *ctx,
-                               const char *dns_forest_name,
-                               const struct GUID *domain_guid,
-                               struct dns_rr_srv **dclist,
-                               int *numdcs );
-
 /* The following definitions come from libads/kerberos.c  */
 
 int kerberos_kinit_password_ext(const char *principal,
@@ -1937,23 +1939,6 @@ bool get_local_printer_publishing_data(TALLOC_CTX *mem_ctx,
                                       ADS_MODLIST *mods,
                                       NT_PRINTER_DATA *data);
 
-/* The following definitions come from libads/ldap_schema.c  */
-
-ADS_STATUS ads_get_attrnames_by_oids(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
-                                    const char *schema_path,
-                                    const char **OIDs, size_t num_OIDs, 
-                                    char ***OIDs_out, char ***names, size_t *count);
-const char *ads_get_attrname_by_guid(ADS_STRUCT *ads, 
-                                    const char *schema_path, 
-                                    TALLOC_CTX *mem_ctx, 
-                                    const struct GUID *schema_guid);
-const char *ads_get_attrname_by_oid(ADS_STRUCT *ads, const char *schema_path, TALLOC_CTX *mem_ctx, const char * OID);
-ADS_STATUS ads_schema_path(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, char **schema_path);
-ADS_STATUS ads_check_posix_schema_mapping(TALLOC_CTX *mem_ctx,
-                                         ADS_STRUCT *ads,
-                                         enum wb_posix_mapping map_type,
-                                         struct posix_schema **s ) ;
-
 /* The following definitions come from libads/ldap_user.c  */
 
 ADS_STATUS ads_add_user_acct(ADS_STRUCT *ads, const char *user, 
@@ -2010,9 +1995,6 @@ ADS_STATUS ads_change_trust_account_password(ADS_STRUCT *ads, char *host_princip
 ADS_STATUS ads_guess_service_principal(ADS_STRUCT *ads,
                                       char **returned_principal);
 
-#include "librpc/gen_ndr/ndr_krb5pac.h"
-#include "librpc/gen_ndr/ndr_spoolss.h"
-
 /* The following definitions come from librpc/ndr/util.c  */
 
 enum ndr_err_code ndr_push_server_id(struct ndr_push *ndr, int ndr_flags, const struct server_id *r);
@@ -2026,10 +2008,6 @@ _PUBLIC_ void ndr_print_sockaddr_storage(struct ndr_print *ndr, const char *name
 const char *ndr_errstr(enum ndr_err_code err);
 extern const struct ndr_syntax_id null_ndr_syntax_id;
 
-/* The following definitions come from librpc/ndr/sid.c  */
-
-char *dom_sid_string(TALLOC_CTX *mem_ctx, const struct dom_sid *sid);
-
 /* The following definitions come from libsmb/cliconnect.c  */
 
 ADS_STATUS cli_session_setup_spnego(struct cli_state *cli, const char *user, 
@@ -2156,20 +2134,6 @@ bool cli_check_msdfs_proxy(TALLOC_CTX *ctx,
                        const char *username,
                        const char *password,
                        const char *domain);
-/* The following definitions come from libsmb/clidgram.c  */
-
-bool send_getdc_request(TALLOC_CTX *mem_ctx,
-                       struct messaging_context *msg_ctx,
-                       struct sockaddr_storage *dc_ss,
-                       const char *domain_name,
-                       const struct dom_sid *sid,
-                       uint32_t nt_version);
-bool receive_getdc_response(TALLOC_CTX *mem_ctx,
-                           struct sockaddr_storage *dc_ss,
-                           const char *domain_name,
-                           uint32_t *nt_version,
-                           const char **dc_name,
-                           struct netlogon_samlogon_response **reply);
 
 /* The following definitions come from libsmb/clientgen.c  */
 
@@ -3114,7 +3078,6 @@ NTSTATUS nt_status_squash(NTSTATUS nt_status);
 
 /* The following definitions come from libsmb/ntlmssp.c  */
 
-void debug_ntlmssp_flags(uint32 neg_flags);
 NTSTATUS ntlmssp_set_username(struct ntlmssp_state *ntlmssp_state, const char *user) ;
 NTSTATUS ntlmssp_set_hashes(struct ntlmssp_state *ntlmssp_state,
                            const uint8_t lm_hash[16],
@@ -3140,26 +3103,6 @@ NTSTATUS ntlmssp_client_start(TALLOC_CTX *mem_ctx,
                              bool use_ntlmv2,
                              struct ntlmssp_state **_ntlmssp_state);
 
-/* The following definitions come from libsmb/ntlmssp_sign.c  */
-
-NTSTATUS ntlmssp_sign_packet(struct ntlmssp_state *ntlmssp_state,
-                            const uint8_t *data, size_t length,
-                            const uint8_t *whole_pdu, size_t pdu_length,
-                            DATA_BLOB *sig);
-NTSTATUS ntlmssp_check_packet(struct ntlmssp_state *ntlmssp_state,
-                             const uint8_t *data, size_t length,
-                             const uint8_t *whole_pdu, size_t pdu_length,
-                             const DATA_BLOB *sig) ;
-NTSTATUS ntlmssp_seal_packet(struct ntlmssp_state *ntlmssp_state,
-                            uint8_t *data, size_t length,
-                            const uint8_t *whole_pdu, size_t pdu_length,
-                            DATA_BLOB *sig);
-NTSTATUS ntlmssp_unseal_packet(struct ntlmssp_state *ntlmssp_state,
-                              uint8_t *data, size_t length,
-                              const uint8_t *whole_pdu, size_t pdu_length,
-                              const DATA_BLOB *sig);
-NTSTATUS ntlmssp_sign_init(struct ntlmssp_state *ntlmssp_state);
-
 /* The following definitions come from libsmb/passchange.c  */
 
 NTSTATUS remote_password_change(const char *remote_machine, const char *user_name, 
@@ -3256,6 +3199,7 @@ NTSTATUS trust_pw_find_change_and_store_it(struct rpc_pipe_client *cli,
 bool enumerate_domain_trusts( TALLOC_CTX *mem_ctx, const char *domain,
                                      char ***domain_names, uint32 *num_domains,
                                     struct dom_sid **sids );
+NTSTATUS change_trust_account_password( const char *domain, const char *remote_machine);
 
 /* The following definitions come from libsmb/unexpected.c  */
 
@@ -3404,9 +3348,10 @@ void set_share_mode(struct share_mode_lock *lck, files_struct *fsp,
                    uid_t uid, uint64_t mid, uint16 op_type);
 void add_deferred_open(struct share_mode_lock *lck, uint64_t mid,
                       struct timeval request_time,
-                      struct file_id id);
+                      struct server_id pid, struct file_id id);
 bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp);
-void del_deferred_open_entry(struct share_mode_lock *lck, uint64_t mid);
+void del_deferred_open_entry(struct share_mode_lock *lck, uint64_t mid,
+                            struct server_id pid);
 bool remove_share_oplock(struct share_mode_lock *lck, files_struct *fsp);
 bool downgrade_share_oplock(struct share_mode_lock *lck, files_struct *fsp);
 NTSTATUS can_set_delete_on_close(files_struct *fsp, uint32 dosmode);
@@ -3907,7 +3852,6 @@ bool lp_winbind_offline_logon(void);
 bool lp_winbind_normalize_names(void);
 bool lp_winbind_rpc_only(void);
 bool lp_create_krb5_conf(void);
-const char **lp_idmap_domains(void);
 const char *lp_idmap_backend(void);
 char *lp_idmap_alloc_backend(void);
 int lp_idmap_cache_time(void);
@@ -3952,8 +3896,10 @@ const char **lp_init_logon_delayed_hosts(void);
 int lp_init_logon_delay(void);
 bool lp_load_printers(void);
 bool lp_readraw(void);
+bool _lp_readraw(void);
 bool lp_large_readwrite(void);
 bool lp_writeraw(void);
+bool _lp_writeraw(void);
 bool lp_null_passwords(void);
 bool lp_obey_pam_restrictions(void);
 bool lp_encrypted_passwords(void);
@@ -4279,8 +4225,8 @@ struct share_params *next_share(struct share_iterator *list);
 struct share_params *next_printer(struct share_iterator *list);
 struct share_params *snum2params_static(int snum);
 const char *volume_label(int snum);
-int lp_server_role(void);
 bool lp_domain_master(void);
+bool lp_domain_master_true_or_auto(void);
 bool lp_preferred_master(void);
 void lp_remove_service(int snum);
 void lp_copy_service(int snum, const char *new_name);
@@ -4308,6 +4254,11 @@ char* lp_perfcount_module(void);
 void lp_set_passdb_backend(const char *backend);
 void widelinks_warning(int snum);
 
+/* The following definitions come from param/loadparm_server_role.c  */
+
+int lp_server_role(void);
+void set_server_role(void);
+
 /* The following definitions come from param/util.c  */
 
 uint32 get_int_param( const char* param );
@@ -4345,6 +4296,10 @@ void uid_to_sid(struct dom_sid *psid, uid_t uid);
 void gid_to_sid(struct dom_sid *psid, gid_t gid);
 bool sid_to_uid(const struct dom_sid *psid, uid_t *puid);
 bool sid_to_gid(const struct dom_sid *psid, gid_t *pgid);
+NTSTATUS get_primary_group_sid(TALLOC_CTX *mem_ctx,
+                               const char *username,
+                               struct passwd **_pwd,
+                               struct dom_sid **_group_sid);
 
 /* The following definitions come from passdb/machine_sid.c  */
 
@@ -4579,7 +4534,6 @@ int ldapsam_search_suffix_by_name(struct ldapsam_privates *ldap_state,
                                          const char *user,
                                          LDAPMessage ** result,
                                          const char **attr);
-const char **talloc_attrs(TALLOC_CTX *mem_ctx, ...);
 NTSTATUS pdb_init_ldapsam_compat(struct pdb_methods **pdb_method, const char *location);
 NTSTATUS pdb_init_ldapsam(struct pdb_methods **pdb_method, const char *location);
 NTSTATUS pdb_ldap_init(void);
@@ -4639,6 +4593,7 @@ bool secrets_delete_machine_password(const char *domain);
 bool secrets_delete_machine_password_ex(const char *domain);
 bool secrets_delete_domain_sid(const char *domain);
 bool secrets_store_machine_password(const char *pass, const char *domain, enum netr_SchannelType sec_channel);
+char *secrets_fetch_prev_machine_password(const char *domain);
 char *secrets_fetch_machine_password(const char *domain,
                                     time_t *pass_last_set_time,
                                     enum netr_SchannelType *channel);
@@ -4737,7 +4692,8 @@ bool delete_a_form(nt_forms_struct **list, const char *del_name, int *count, WER
 void update_a_form(nt_forms_struct **list, struct spoolss_AddFormInfo1 *form, int count);
 int get_ntdrivers(fstring **list, const char *architecture, uint32 version);
 const char *get_short_archi(const char *long_archi);
-WERROR clean_up_driver_struct(struct pipes_struct *rpc_pipe,
+WERROR clean_up_driver_struct(TALLOC_CTX *mem_ctx,
+                             struct pipes_struct *rpc_pipe,
                              struct spoolss_AddDriverInfoCtr *r);
 WERROR move_driver_to_download_area(struct pipes_struct *p,
                                    struct spoolss_AddDriverInfoCtr *r,
@@ -4877,6 +4833,20 @@ struct tevent_req *rpc_api_pipe_req_send(TALLOC_CTX *mem_ctx,
                                         prs_struct *req_data);
 NTSTATUS rpc_api_pipe_req_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
                               prs_struct *reply_pdu);
+NTSTATUS dcerpc_push_ncacn_packet(TALLOC_CTX *mem_ctx,
+                                 enum dcerpc_pkt_type ptype,
+                                 uint8_t pfc_flags,
+                                 uint16_t frag_length,
+                                 uint16_t auth_length,
+                                 uint32_t call_id,
+                                 union dcerpc_payload u,
+                                 DATA_BLOB *blob);
+NTSTATUS dcerpc_pull_ncacn_packet(TALLOC_CTX *mem_ctx,
+                                 const DATA_BLOB *blob,
+                                 struct ncacn_packet *r);
+NTSTATUS dcerpc_pull_ncacn_packet_header(TALLOC_CTX *mem_ctx,
+                                        const DATA_BLOB *blob,
+                                        struct ncacn_packet_header *r);
 struct tevent_req *rpc_pipe_bind_send(TALLOC_CTX *mem_ctx,
                                      struct event_context *ev,
                                      struct rpc_pipe_client *cli,
@@ -4900,6 +4870,10 @@ NTSTATUS rpc_pipe_open_tcp(TALLOC_CTX *mem_ctx, const char *host,
 NTSTATUS rpc_pipe_open_ncalrpc(TALLOC_CTX *mem_ctx, const char *socket_path,
                               const struct ndr_syntax_id *abstract_syntax,
                               struct rpc_pipe_client **presult);
+struct pipes_struct *make_internal_rpc_pipe_p(TALLOC_CTX *mem_ctx,
+                                             const struct ndr_syntax_id *syntax,
+                                             const char *client_address,
+                                             struct auth_serversupplied_info *server_info);
 NTSTATUS rpc_pipe_open_internal(TALLOC_CTX *mem_ctx, const struct ndr_syntax_id *abstract_syntax,
                                NTSTATUS (*dispatch) (struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const struct ndr_interface_table *table, uint32_t opnum, void *r),
                                struct auth_serversupplied_info *serversupplied_info,
@@ -5026,24 +5000,6 @@ void init_lsa_StringLarge(struct lsa_StringLarge *name, const char *s);
 void init_lsa_AsciiString(struct lsa_AsciiString *name, const char *s);
 void init_lsa_AsciiStringLarge(struct lsa_AsciiStringLarge *name, const char *s);
 
-/* The following definitions come from rpc_client/init_netlogon.c  */
-
-NTSTATUS serverinfo_to_SamInfo2(struct auth_serversupplied_info *server_info,
-                               uint8_t *pipe_session_key,
-                               size_t pipe_session_key_len,
-                               struct netr_SamInfo2 *sam2);
-NTSTATUS serverinfo_to_SamInfo3(struct auth_serversupplied_info *server_info,
-                               uint8_t *pipe_session_key,
-                               size_t pipe_session_key_len,
-                               struct netr_SamInfo3 *sam3);
-NTSTATUS serverinfo_to_SamInfo6(struct auth_serversupplied_info *server_info,
-                               uint8_t *pipe_session_key,
-                               size_t pipe_session_key_len,
-                               struct netr_SamInfo6 *sam6);
-void init_netr_CryptPassword(const char *pwd,
-                            unsigned char session_key[16],
-                            struct netr_CryptPassword *pwd_buf);
-
 /* The following definitions come from rpc_client/ndr.c  */
 
 struct tevent_req *cli_do_rpc_ndr_send(TALLOC_CTX *mem_ctx,
@@ -5078,7 +5034,6 @@ char *prs_alloc_mem_(prs_struct *ps, size_t size, unsigned int count);
 char *prs_alloc_mem(prs_struct *ps, size_t size, unsigned int count);
 TALLOC_CTX *prs_get_mem_context(prs_struct *ps);
 void prs_give_memory(prs_struct *ps, char *buf, uint32 size, bool is_dynamic);
-char *prs_take_memory(prs_struct *ps, uint32 *psize);
 bool prs_set_buffer_size(prs_struct *ps, uint32 newsize);
 bool prs_grow(prs_struct *ps, uint32 extra_space);
 bool prs_force_grow(prs_struct *ps, uint32 extra_space);
@@ -5101,8 +5056,6 @@ bool prs_align_custom(prs_struct *ps, uint8 boundary);
 bool prs_align_needed(prs_struct *ps, uint32 needed);
 char *prs_mem_get(prs_struct *ps, uint32 extra_size);
 void prs_switch_type(prs_struct *ps, bool io);
-void prs_force_dynamic(prs_struct *ps);
-void prs_set_session_key(prs_struct *ps, const char sess_key[16]);
 bool prs_uint8(const char *name, prs_struct *ps, int depth, uint8 *data8);
 bool prs_uint16(const char *name, prs_struct *ps, int depth, uint16 *data16);
 bool prs_uint32(const char *name, prs_struct *ps, int depth, uint32 *data32);
@@ -5112,7 +5065,6 @@ bool prs_dcerpc_status(const char *name, prs_struct *ps, int depth, NTSTATUS *st
 bool prs_uint8s(bool charmode, const char *name, prs_struct *ps, int depth, uint8 *data8s, int len);
 bool prs_uint16s(bool charmode, const char *name, prs_struct *ps, int depth, uint16 *data16s, int len);
 bool prs_uint32s(bool charmode, const char *name, prs_struct *ps, int depth, uint32 *data32s, int len);
-bool prs_unistr(const char *name, prs_struct *ps, int depth, UNISTR *str);
 bool prs_init_data_blob(prs_struct *prs, DATA_BLOB *blob, TALLOC_CTX *mem_ctx);
 bool prs_data_blob(prs_struct *prs, DATA_BLOB *blob, TALLOC_CTX *mem_ctx);
 
@@ -5126,12 +5078,6 @@ const char *get_pipe_name_from_syntax(TALLOC_CTX *mem_ctx,
 void init_rpc_hdr(RPC_HDR *hdr, enum dcerpc_pkt_type pkt_type, uint8 flags,
                                uint32 call_id, int data_len, int auth_len);
 bool smb_io_rpc_hdr(const char *desc,  RPC_HDR *rpc, prs_struct *ps, int depth);
-void init_rpc_context(RPC_CONTEXT *rpc_ctx, uint16 context_id,
-                     const struct ndr_syntax_id *abstract,
-                     const struct ndr_syntax_id *transfer);
-void init_rpc_hdr_rb(RPC_HDR_RB *rpc, 
-                               uint16 max_tsize, uint16 max_rsize, uint32 assoc_gid,
-                               RPC_CONTEXT *context);
 bool smb_io_rpc_context(const char *desc, RPC_CONTEXT *rpc_ctx, prs_struct *ps, int depth);
 bool smb_io_rpc_hdr_rb(const char *desc, RPC_HDR_RB *rpc, prs_struct *ps, int depth);
 void init_rpc_hdr_ba(RPC_HDR_BA *rpc, 
@@ -5143,7 +5089,6 @@ bool smb_io_rpc_hdr_ba(const char *desc, RPC_HDR_BA *rpc, prs_struct *ps, int de
 void init_rpc_hdr_req(RPC_HDR_REQ *hdr, uint32 alloc_hint, uint16 opnum);
 bool smb_io_rpc_hdr_req(const char *desc, RPC_HDR_REQ *rpc, prs_struct *ps, int depth);
 bool smb_io_rpc_hdr_resp(const char *desc, RPC_HDR_RESP *rpc, prs_struct *ps, int depth);
-bool smb_io_rpc_hdr_fault(const char *desc, RPC_HDR_FAULT *rpc, prs_struct *ps, int depth);
 void init_rpc_hdr_auth(RPC_HDR_AUTH *rai,
                                uint8 auth_type, uint8 auth_level,
                                uint8 auth_pad_len,
@@ -5152,11 +5097,10 @@ bool smb_io_rpc_hdr_auth(const char *desc, RPC_HDR_AUTH *rai, prs_struct *ps, in
 
 /* The following definitions come from rpc_server/srv_eventlog_nt.c  */
 
-/* The following definitions come from rpc_server/srv_lsa_hnd.c  */
+/* The following definitions come from rpc_server/rpc_handles.c  */
 
-size_t num_pipe_handles(struct handle_list *list);
-bool init_pipe_handle_list(pipes_struct *p,
-                          const struct ndr_syntax_id *syntax);
+size_t num_pipe_handles(pipes_struct *p);
+bool init_pipe_handles(pipes_struct *p, const struct ndr_syntax_id *syntax);
 bool create_policy_hnd(pipes_struct *p, struct policy_handle *hnd, void *data_ptr);
 bool find_policy_by_hnd(pipes_struct *p, const struct policy_handle *hnd,
                        void **data_p);
@@ -5208,6 +5152,7 @@ bool api_pipe_request(pipes_struct *p);
 
 pipes_struct *get_first_internal_pipe(void);
 pipes_struct *get_next_internal_pipe(pipes_struct *p);
+bool check_open_pipes(void);
 
 bool fsp_is_np(struct files_struct *fsp);
 struct tsocket_address;
@@ -5332,9 +5277,21 @@ NTSTATUS schedule_aio_write_and_X(connection_struct *conn,
                              files_struct *fsp, char *data,
                              SMB_OFF_T startpos,
                              size_t numtowrite);
+NTSTATUS schedule_smb2_aio_read(connection_struct *conn,
+                               struct smb_request *smbreq,
+                               files_struct *fsp,
+                               char *inbuf,
+                               SMB_OFF_T startpos,
+                               size_t smb_maxcnt);
+NTSTATUS schedule_aio_smb2_write(connection_struct *conn,
+                               struct smb_request *smbreq,
+                               files_struct *fsp,
+                               uint64_t in_offset,
+                               DATA_BLOB in_data,
+                               bool write_through);
 int wait_for_aio_completion(files_struct *fsp);
 void cancel_aio_by_fsp(files_struct *fsp);
-void smbd_aio_complete_mid(uint64_t mid);
+void smbd_aio_complete_aio_ex(struct aio_extra *aio_ex);
 
 /* The following definitions come from smbd/blocking.c  */
 
@@ -5344,7 +5301,7 @@ void brl_timeout_fn(struct event_context *event_ctx,
                void *private_data);
 struct timeval timeval_brl_min(const struct timeval *tv1,
                        const struct timeval *tv2);
-void process_blocking_lock_queue(void);
+void process_blocking_lock_queue(struct smbd_server_connection *sconn);
 bool push_blocking_lock_request( struct byte_range_lock *br_lck,
                struct smb_request *req,
                files_struct *fsp,
@@ -5359,8 +5316,10 @@ bool push_blocking_lock_request( struct byte_range_lock *br_lck,
 void cancel_pending_lock_requests_by_fid(files_struct *fsp,
                        struct byte_range_lock *br_lck,
                        enum file_close_type close_type);
-void remove_pending_lock_requests_by_mid_smb1(uint64_t mid);
-bool blocking_lock_was_deferred_smb1(uint64_t mid);
+void remove_pending_lock_requests_by_mid_smb1(
+       struct smbd_server_connection *sconn, uint64_t mid);
+bool blocking_lock_was_deferred_smb1(
+       struct smbd_server_connection *sconn, uint64_t mid);
 struct blocking_lock_record *blocking_lock_cancel_smb1(files_struct *fsp,
                        uint64_t smblctx,
                        uint64_t offset,
@@ -5369,10 +5328,6 @@ struct blocking_lock_record *blocking_lock_cancel_smb1(files_struct *fsp,
                        unsigned char locktype,
                         NTSTATUS err);
 
-/* The following definitions come from smbd/change_trust_pw.c  */
-
-NTSTATUS change_trust_account_password( const char *domain, const char *remote_machine);
-
 /* The following definitions come from smbd/close.c  */
 
 void set_close_write_time(struct files_struct *fsp, struct timespec ts);
@@ -5407,9 +5362,7 @@ void msg_force_tdis(struct messaging_context *msg,
 
 bool yield_connection(connection_struct *conn, const char *name);
 int count_current_connections( const char *sharename, bool clear  );
-bool claim_connection(connection_struct *conn, const char *name,
-                     uint32 msg_flags);
-bool register_message_flags(bool doreg, uint32 msg_flags);
+bool claim_connection(connection_struct *conn, const char *name);
 
 /* The following definitions come from smbd/dfree.c  */
 
@@ -5705,7 +5658,7 @@ const struct mangle_fns *posix_mangle_init(void);
 
 /* The following definitions come from smbd/map_username.c  */
 
-bool map_username(struct smbd_server_connection *sconn, fstring user);
+bool map_username(fstring user);
 
 /* The following definitions come from smbd/message.c  */
 
@@ -5759,14 +5712,13 @@ void reply_negprot(struct smb_request *req);
 
 /* The following definitions come from smbd/notify.c  */
 
-void change_notify_reply(connection_struct *conn,
-                        struct smb_request *req,
+void change_notify_reply(struct smb_request *req,
                         NTSTATUS error_code,
                         uint32_t max_param,
                         struct notify_change_buf *notify_buf,
                         void (*reply_fn)(struct smb_request *req,
-                               NTSTATUS error_code,
-                               uint8_t *buf, size_t len));
+                                         NTSTATUS error_code,
+                                         uint8_t *buf, size_t len));
 NTSTATUS change_notify_create(struct files_struct *fsp, uint32 filter,
                              bool recursive);
 NTSTATUS change_notify_add_request(struct smb_request *req,
@@ -5776,7 +5728,8 @@ NTSTATUS change_notify_add_request(struct smb_request *req,
                                void (*reply_fn)(struct smb_request *req,
                                        NTSTATUS error_code,
                                        uint8_t *buf, size_t len));
-void remove_pending_change_notify_requests_by_mid(uint64_t mid);
+void remove_pending_change_notify_requests_by_mid(
+       struct smbd_server_connection *sconn, uint64_t mid);
 void remove_pending_change_notify_requests_by_fid(files_struct *fsp,
                                                  NTSTATUS status);
 void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
@@ -5892,7 +5845,8 @@ bool map_open_params_to_ntcreate(const struct smb_filename *smb_fname,
                                 uint32 *pcreate_disposition,
                                 uint32 *pcreate_options,
                                 uint32_t *pprivate_flags);
-void remove_deferred_open_entry(struct file_id id, uint64_t mid);
+void remove_deferred_open_entry(struct file_id id, uint64_t mid,
+                               struct server_id pid);
 NTSTATUS open_file_fchmod(struct smb_request *req, connection_struct *conn,
                          struct smb_filename *smb_fname,
                          files_struct **result);
@@ -5987,10 +5941,8 @@ void add_session_user(struct smbd_server_connection *sconn, const char *user);
 void add_session_workgroup(struct smbd_server_connection *sconn,
                           const char *workgroup);
 const char *get_session_workgroup(struct smbd_server_connection *sconn);
-bool user_in_netgroup(struct smbd_server_connection *sconn,
-                     const char *user, const char *ngname);
-bool user_in_list(struct smbd_server_connection *sconn,
-                 const char *user,const char **list);
+bool user_in_netgroup(const char *user, const char *ngname);
+bool user_in_list(const char *user,const char **list);
 bool authorise_login(struct smbd_server_connection *sconn,
                     int snum, fstring user, DATA_BLOB password,
                     bool *guest);
@@ -6128,9 +6080,7 @@ bool check_fsp(connection_struct *conn, struct smb_request *req,
               files_struct *fsp);
 bool check_fsp_ntquota_handle(connection_struct *conn, struct smb_request *req,
                              files_struct *fsp);
-bool fsp_belongs_conn(connection_struct *conn, struct smb_request *req,
-                     files_struct *fsp);
-void reply_special(char *inbuf);
+void reply_special(struct smbd_server_connection *sconn, char *inbuf);
 void reply_tcon(struct smb_request *req);
 void reply_tcon_and_X(struct smb_request *req);
 void reply_unknown_new(struct smb_request *req, uint8 type);
@@ -6158,7 +6108,8 @@ void error_to_writebrawerr(struct smb_request *req);
 void reply_writebraw(struct smb_request *req);
 void reply_writeunlock(struct smb_request *req);
 void reply_write(struct smb_request *req);
-bool is_valid_writeX_buffer(const uint8_t *inbuf);
+bool is_valid_writeX_buffer(struct smbd_server_connection *sconn,
+                           const uint8_t *inbuf);
 void reply_write_and_X(struct smb_request *req);
 void reply_lseek(struct smb_request *req);
 void reply_flush(struct smb_request *req);
@@ -6237,6 +6188,12 @@ void set_root_sec_ctx(void);
 bool pop_sec_ctx(void);
 void init_sec_ctx(void);
 
+/* The following definitions come from lib/server_contexts.c  */
+struct tevent_context *server_event_context(void);
+void server_event_context_free(void);
+struct messaging_context *server_messaging_context(void);
+void server_messaging_context_free(void);
+
 /* The following definitions come from smbd/server.c  */
 
 int smbd_server_fd(void);
@@ -6271,7 +6228,7 @@ void close_cnum(connection_struct *conn, uint16 vuid);
 /* The following definitions come from smbd/session.c  */
 
 bool session_init(void);
-bool session_claim(user_struct *vuser);
+bool session_claim(struct server_id pid, user_struct *vuser);
 void session_yield(user_struct *vuser);
 int list_sessions(TALLOC_CTX *mem_ctx, struct sessionid **session_list);
 
@@ -6495,7 +6452,6 @@ NTSTATUS idmap_passdb_init(void);
 
 /* The following definitions come from winbindd/idmap_tdb.c  */
 
-bool idmap_tdb_tdb_close(TDB_CONTEXT *tdbctx);
 NTSTATUS idmap_alloc_tdb_init(void);
 NTSTATUS idmap_tdb_init(void);