s3:smbd/blocking: avoid usage of server_event_context()
[kai/samba.git] / source3 / smbd / blocking.c
index 7b04cde4958dd27053f3bc2ea8a2e4e07d492a90..f07a79259fcd821b3d03a919549e9fad588e45fb 100644 (file)
@@ -18,8 +18,9 @@
 */
 
 #include "includes.h"
+#include "smbd/smbd.h"
 #include "smbd/globals.h"
-#include "librpc/gen_ndr/messaging.h"
+#include "messages.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_LOCKING
@@ -138,9 +139,9 @@ static bool recalc_brl_timeout(struct smbd_server_connection *sconn)
                    (int)from_now.tv_sec, (int)from_now.tv_usec));
        }
 
-       sconn->smb1.locks.brl_timeout = event_add_timed(smbd_event_context(),
-                                                       NULL, next_timeout,
-                                                       brl_timeout_fn, sconn);
+       sconn->smb1.locks.brl_timeout = tevent_add_timer(sconn->ev_ctx,
+                                                        NULL, next_timeout,
+                                                        brl_timeout_fn, sconn);
        if (sconn->smb1.locks.brl_timeout == NULL) {
                return False;
        }
@@ -207,8 +208,7 @@ bool push_blocking_lock_request( struct byte_range_lock *br_lck,
                blr->expire_time.tv_sec = 0;
                blr->expire_time.tv_usec = 0; /* Never expire. */
        } else {
-               blr->expire_time = timeval_current_ofs(lock_timeout/1000,
-                                       (lock_timeout % 1000) * 1000);
+               blr->expire_time = timeval_current_ofs_msec(lock_timeout);
        }
        blr->lock_num = lock_num;
        blr->smblctx = smblctx;
@@ -225,7 +225,7 @@ bool push_blocking_lock_request( struct byte_range_lock *br_lck,
        status = brl_lock(req->sconn->msg_ctx,
                        br_lck,
                        smblctx,
-                       procid_self(),
+                       sconn_server_id(req->sconn),
                        offset,
                        count,
                        lock_type == READ_LOCK ? PENDING_READ_LOCK : PENDING_WRITE_LOCK,
@@ -301,7 +301,8 @@ static void generic_blocking_lock_error(struct blocking_lock_record *blr, NTSTAT
                if (fsp) {
                        fsp->last_lock_failure.context.smblctx = blr->smblctx;
                        fsp->last_lock_failure.context.tid = fsp->conn->cnum;
-                       fsp->last_lock_failure.context.pid = procid_self();
+                       fsp->last_lock_failure.context.pid =
+                               sconn_server_id(fsp->conn->sconn);
                        fsp->last_lock_failure.start = blr->offset;
                        fsp->last_lock_failure.size = blr->count;
                        fsp->last_lock_failure.fnum = fsp->fnum;
@@ -311,7 +312,7 @@ static void generic_blocking_lock_error(struct blocking_lock_record *blr, NTSTAT
        }
 
        reply_nterror(blr->req, status);
-       if (!srv_send_smb(smbd_server_fd(), (char *)blr->req->outbuf,
+       if (!srv_send_smb(blr->req->sconn, (char *)blr->req->outbuf,
                          true, blr->req->seqnum+1,
                          blr->req->encrypted, NULL)) {
                exit_server_cleanly("generic_blocking_lock_error: srv_send_smb failed.");
@@ -335,7 +336,7 @@ static void reply_lockingX_error(struct blocking_lock_record *blr, NTSTATUS stat
        uint8_t *data;
        int i;
 
-       data = (uint8_t *)blr->req->buf
+       data = discard_const_p(uint8_t, blr->req->buf)
                + ((large_file_format ? 20 : 10)*num_ulocks);
 
        /* 
@@ -394,7 +395,7 @@ static void blocking_lock_reply_error(struct blocking_lock_record *blr, NTSTATUS
                 */
                SCVAL(blr->req->outbuf,smb_com,SMBtrans2);
 
-               if (!srv_send_smb(smbd_server_fd(),
+               if (!srv_send_smb(blr->req->sconn,
                                  (char *)blr->req->outbuf,
                                  true, blr->req->seqnum+1,
                                  IS_CONN_ENCRYPTED(blr->fsp->conn),
@@ -427,7 +428,7 @@ static bool process_lockingX(struct blocking_lock_record *blr)
        uint8_t *data;
        NTSTATUS status = NT_STATUS_OK;
 
-       data = (uint8_t *)blr->req->buf
+       data = discard_const_p(uint8_t, blr->req->buf)
                + ((large_file_format ? 20 : 10)*num_ulocks);
 
        /* 
@@ -573,9 +574,9 @@ static bool blocking_lock_record_process(struct blocking_lock_record *blr)
  Called when a file is closed.
 *****************************************************************************/
 
-void cancel_pending_lock_requests_by_fid(files_struct *fsp,
-                       struct byte_range_lock *br_lck,
-                       enum file_close_type close_type)
+void smbd_cancel_pending_lock_requests_by_fid(files_struct *fsp,
+                                             struct byte_range_lock *br_lck,
+                                             enum file_close_type close_type)
 {
        struct smbd_server_connection *sconn = fsp->conn->sconn;
        struct blocking_lock_record *blr, *blr_cancelled, *next = NULL;
@@ -615,7 +616,7 @@ void cancel_pending_lock_requests_by_fid(files_struct *fsp,
 
                brl_lock_cancel(br_lck,
                                blr->smblctx,
-                               procid_self(),
+                               sconn_server_id(sconn),
                                blr->offset,
                                blr->count,
                                blr->lock_flav,
@@ -658,7 +659,7 @@ void remove_pending_lock_requests_by_mid_smb1(
 
                        brl_lock_cancel(br_lck,
                                        blr->smblctx,
-                                       procid_self(),
+                                       sconn_server_id(sconn),
                                        blr->offset,
                                        blr->count,
                                        blr->lock_flav,
@@ -701,8 +702,16 @@ static void received_unlock_msg(struct messaging_context *msg,
                                struct server_id server_id,
                                DATA_BLOB *data)
 {
+       struct smbd_server_connection *sconn;
+
+       sconn = msg_ctx_to_sconn(msg);
+       if (sconn == NULL) {
+               DEBUG(1, ("could not find sconn\n"));
+               return;
+       }
+
        DEBUG(10,("received_unlock_msg\n"));
-       process_blocking_lock_queue(smbd_server_conn);
+       process_blocking_lock_queue(sconn);
 }
 
 /****************************************************************************
@@ -753,7 +762,7 @@ void process_blocking_lock_queue(struct smbd_server_connection *sconn)
                        if (br_lck) {
                                brl_lock_cancel(br_lck,
                                        blr->smblctx,
-                                       procid_self(),
+                                       sconn_server_id(sconn),
                                        blr->offset,
                                        blr->count,
                                        blr->lock_flav,
@@ -790,7 +799,7 @@ void process_blocking_lock_queue(struct smbd_server_connection *sconn)
 
                                brl_lock_cancel(br_lck,
                                        blr->smblctx,
-                                       procid_self(),
+                                       sconn_server_id(sconn),
                                        blr->offset,
                                        blr->count,
                                        blr->lock_flav,
@@ -819,7 +828,7 @@ static void process_blocking_lock_cancel_message(struct messaging_context *ctx,
                                                 struct server_id server_id,
                                                 DATA_BLOB *data)
 {
-       struct smbd_server_connection *sconn = smbd_server_conn;
+       struct smbd_server_connection *sconn;
        NTSTATUS err;
        const char *msg = (const char *)data->data;
        struct blocking_lock_record *blr;
@@ -834,6 +843,12 @@ static void process_blocking_lock_cancel_message(struct messaging_context *ctx,
                smb_panic("process_blocking_lock_cancel_message: bad msg");
         }
 
+       sconn = msg_ctx_to_sconn(ctx);
+       if (sconn == NULL) {
+               DEBUG(1, ("could not find sconn\n"));
+               return;
+       }
+
        memcpy(&blr, msg, sizeof(blr));
        memcpy(&err, &msg[sizeof(blr)], sizeof(NTSTATUS));
 
@@ -901,7 +916,7 @@ struct blocking_lock_record *blocking_lock_cancel_smb1(files_struct *fsp,
        memcpy(msg, &blr, sizeof(blr));
        memcpy(&msg[sizeof(blr)], &err, sizeof(NTSTATUS));
 
-       messaging_send_buf(sconn->msg_ctx, procid_self(),
+       messaging_send_buf(sconn->msg_ctx, sconn_server_id(sconn),
                           MSG_SMB_BLOCKING_LOCK_CANCEL,
                           (uint8 *)&msg, sizeof(msg));