extern struct smbd_dmapi_context *dmapi_ctx;
#endif
-extern connection_struct *Connections;
-/* number of open connections */
-extern struct bitmap *bmap;
-extern int num_open;
-
extern bool dfree_broken;
extern struct bitmap *dptr_bmap;
extern bool logged_ioctl_message;
-/* users from session setup */
-extern char *session_userlist;
-/* workgroup from session setup. */
-extern char *session_workgroup;
-/* this holds info on user ids that are already validated for this VC */
-extern user_struct *validated_users;
-extern uint16_t next_vuid;
-extern int num_validated_vuids;
-#ifdef HAVE_NETGROUP
-extern char *my_yp_domain;
-#endif
-
extern int trans_num;
extern pid_t mypid;
const struct iovec *vector,
int count);
+void smbd_server_connection_terminate_ex(struct smbd_server_connection *sconn,
+ const char *reason,
+ const char *location);
+#define smbd_server_connection_terminate(sconn, reason) \
+ smbd_server_connection_terminate_ex(sconn, reason, __location__)
+
bool smbd_is_smb2_header(const uint8_t *inbuf, size_t size);
void reply_smb2002(struct smb_request *req, uint16_t choice);
const uint8_t *inbuf, size_t size);
NTSTATUS smbd_smb2_request_error_ex(struct smbd_smb2_request *req,
- NTSTATUS status, DATA_BLOB *info);
-NTSTATUS smbd_smb2_request_error(struct smbd_smb2_request *req,
- NTSTATUS status);
+ NTSTATUS status,
+ DATA_BLOB *info,
+ const char *location);
+#define smbd_smb2_request_error(req, status) \
+ smbd_smb2_request_error_ex(req, status, NULL, __location__)
NTSTATUS smbd_smb2_request_done_ex(struct smbd_smb2_request *req,
NTSTATUS status,
- DATA_BLOB body, DATA_BLOB *dyn);
-NTSTATUS smbd_smb2_request_done(struct smbd_smb2_request *req,
- DATA_BLOB body, DATA_BLOB *dyn);
+ DATA_BLOB body, DATA_BLOB *dyn,
+ const char *location);
+#define smbd_smb2_request_done(req, body, dyn) \
+ smbd_smb2_request_done_ex(req, NT_STATUS_OK, body, dyn, __location__)
+
+NTSTATUS smbd_smb2_send_oplock_break(struct smbd_server_connection *sconn,
+ uint64_t file_id_persistent,
+ uint64_t file_id_volatile,
+ uint8_t oplock_level);
NTSTATUS smbd_smb2_request_check_session(struct smbd_smb2_request *req);
NTSTATUS smbd_smb2_request_check_tcon(struct smbd_smb2_request *req);
+struct smb_request *smbd_smb2_fake_smb_request(struct smbd_smb2_request *req);
+
NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req);
NTSTATUS smbd_smb2_request_process_sesssetup(struct smbd_smb2_request *req);
NTSTATUS smbd_smb2_request_process_logoff(struct smbd_smb2_request *req);
NTSTATUS smbd_smb2_request_process_tcon(struct smbd_smb2_request *req);
NTSTATUS smbd_smb2_request_process_tdis(struct smbd_smb2_request *req);
+NTSTATUS smbd_smb2_request_process_create(struct smbd_smb2_request *req);
+NTSTATUS smbd_smb2_request_process_close(struct smbd_smb2_request *req);
+NTSTATUS smbd_smb2_request_process_flush(struct smbd_smb2_request *req);
+NTSTATUS smbd_smb2_request_process_read(struct smbd_smb2_request *req);
+NTSTATUS smbd_smb2_request_process_write(struct smbd_smb2_request *req);
+NTSTATUS smbd_smb2_request_process_ioctl(struct smbd_smb2_request *req);
NTSTATUS smbd_smb2_request_process_keepalive(struct smbd_smb2_request *req);
struct smbd_smb2_request {
int current_idx;
bool do_signing;
+ struct files_struct *compat_chain_fsp;
+
+ NTSTATUS next_status;
+
struct {
/* the NBT header is not allocated */
uint8_t nbt_hdr[4];
DATA_BLOB session_key;
bool do_signing;
+ user_struct *compat_vuser;
+
struct {
/* an id tree used to allocate tids */
struct idr_context *idtree;
struct smbd_smb2_session *session;
uint32_t tid;
int snum;
+ connection_struct *compat_conn;
};
struct pending_auth_data;
*/
int max_send;
uint16_t last_session_tag;
+
+ /* users from session setup */
+ char *session_userlist;
+ /* workgroup from session setup. */
+ char *session_workgroup;
+ /*
+ * this holds info on user ids that are already
+ * validated for this VC
+ */
+ user_struct *validated_users;
+ uint16_t next_vuid;
+ int num_validated_vuids;
+#ifdef HAVE_NETGROUP
+ char *my_yp_domain;
+#endif
} sessions;
+ struct {
+ connection_struct *Connections;
+ /* number of open connections */
+ struct bitmap *bmap;
+ int num_open;
+ } tcons;
struct smb_signing_state *signing_state;
/* List to store partial SPNEGO auth fragments. */
struct pending_auth_data *pd_list;