mirror of
https://github.com/samba-team/samba.git
synced 2025-08-02 00:22:11 +03:00
r14739: keep the last request time for the smbsrv_connection,
smbsrv_session and smbsrv_tcon for management tools metze
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
f61bd2e9a2
commit
2c87f210e9
@ -92,6 +92,7 @@
|
||||
astring client_ip;
|
||||
NTTIME connect_time;
|
||||
NTTIME auth_time;
|
||||
NTTIME last_use_time;
|
||||
} smbsrv_session_info;
|
||||
|
||||
typedef struct {
|
||||
@ -104,6 +105,7 @@
|
||||
astring share_name;
|
||||
astring client_ip;
|
||||
NTTIME connect_time;
|
||||
NTTIME last_use_time;
|
||||
} smbsrv_tcon_info;
|
||||
|
||||
typedef struct {
|
||||
|
@ -63,6 +63,7 @@ static NTSTATUS smbsrv_session_information(struct irpc_message *msg,
|
||||
|
||||
info->connect_time = timeval_to_nttime(&sess->statistics.connect_time);
|
||||
info->auth_time = timeval_to_nttime(&sess->statistics.auth_time);
|
||||
info->last_use_time= timeval_to_nttime(&sess->statistics.last_request_time);
|
||||
i++;
|
||||
}
|
||||
|
||||
@ -102,6 +103,7 @@ static NTSTATUS smbsrv_tcon_information(struct irpc_message *msg,
|
||||
info->tid = tcon->tid;
|
||||
info->share_name = tcon->share_name;
|
||||
info->connect_time = timeval_to_nttime(&tcon->statistics.connect_time);
|
||||
info->last_use_time= timeval_to_nttime(&tcon->statistics.last_request_time);
|
||||
i++;
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,8 @@ NTSTATUS smbsrv_init_sessions(struct smbsrv_connection *smb_conn, uint64_t limit
|
||||
* Find the session structure assoicated with a VUID
|
||||
* (not one from an in-progress session setup)
|
||||
*/
|
||||
struct smbsrv_session *smbsrv_session_find(struct smbsrv_connection *smb_conn, uint64_t vuid)
|
||||
struct smbsrv_session *smbsrv_session_find(struct smbsrv_connection *smb_conn,
|
||||
uint64_t vuid, struct timeval request_time)
|
||||
{
|
||||
void *p;
|
||||
struct smbsrv_session *sess;
|
||||
@ -62,6 +63,7 @@ struct smbsrv_session *smbsrv_session_find(struct smbsrv_connection *smb_conn, u
|
||||
/* only return a finished session */
|
||||
sess = talloc_get_type(p, struct smbsrv_session);
|
||||
if (sess && sess->session_info) {
|
||||
sess->statistics.last_request_time = request_time;
|
||||
return sess;
|
||||
}
|
||||
|
||||
|
@ -71,8 +71,11 @@ NTSTATUS smbsrv_recv_smb_request(void *private, DATA_BLOB blob)
|
||||
{
|
||||
struct smbsrv_connection *smb_conn = talloc_get_type(private, struct smbsrv_connection);
|
||||
struct smbsrv_request *req;
|
||||
struct timeval cur_time = timeval_current();
|
||||
uint8_t command;
|
||||
|
||||
smb_conn->statistics.last_request_time = cur_time;
|
||||
|
||||
/* see if its a special NBT packet */
|
||||
if (CVAL(blob.data, 0) != 0) {
|
||||
req = smbsrv_init_request(smb_conn);
|
||||
@ -82,7 +85,7 @@ NTSTATUS smbsrv_recv_smb_request(void *private, DATA_BLOB blob)
|
||||
|
||||
req->in.buffer = talloc_steal(req, blob.data);
|
||||
req->in.size = blob.length;
|
||||
req->request_time = timeval_current();
|
||||
req->request_time = cur_time;
|
||||
|
||||
smbsrv_reply_special(req);
|
||||
return NT_STATUS_OK;
|
||||
@ -107,7 +110,7 @@ NTSTATUS smbsrv_recv_smb_request(void *private, DATA_BLOB blob)
|
||||
|
||||
req->in.buffer = talloc_steal(req, blob.data);
|
||||
req->in.size = blob.length;
|
||||
req->request_time = timeval_current();
|
||||
req->request_time = cur_time;
|
||||
req->chained_fnum = -1;
|
||||
req->in.allocated = req->in.size;
|
||||
req->in.hdr = req->in.buffer + NBT_HDR_SIZE;
|
||||
@ -471,7 +474,7 @@ static void switch_message(int type, struct smbsrv_request *req)
|
||||
|
||||
flags = smb_messages[type].flags;
|
||||
|
||||
req->tcon = smbsrv_smb_tcon_find(smb_conn, SVAL(req->in.hdr,HDR_TID));
|
||||
req->tcon = smbsrv_smb_tcon_find(smb_conn, SVAL(req->in.hdr,HDR_TID), req->request_time);
|
||||
|
||||
if (!req->session) {
|
||||
/* setup the user context for this request if it
|
||||
@ -484,7 +487,7 @@ static void switch_message(int type, struct smbsrv_request *req)
|
||||
req->session = req->tcon->sec_share.session;
|
||||
}
|
||||
} else {
|
||||
req->session = smbsrv_session_find(req->smb_conn, SVAL(req->in.hdr,HDR_UID));
|
||||
req->session = smbsrv_session_find(req->smb_conn, SVAL(req->in.hdr,HDR_UID), req->request_time);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -128,8 +128,8 @@ static NTSTATUS smb2srv_reply(struct smb2srv_request *req)
|
||||
tid = IVAL(req->in.hdr, SMB2_HDR_TID);
|
||||
uid = BVAL(req->in.hdr, SMB2_HDR_UID);
|
||||
|
||||
req->session = smbsrv_session_find(req->smb_conn, uid);
|
||||
req->tcon = smbsrv_smb2_tcon_find(req->session, tid);
|
||||
req->session = smbsrv_session_find(req->smb_conn, uid, req->request_time);
|
||||
req->tcon = smbsrv_smb2_tcon_find(req->session, tid, req->request_time);
|
||||
|
||||
errno = 0;
|
||||
|
||||
@ -241,10 +241,13 @@ NTSTATUS smbsrv_recv_smb2_request(void *private, DATA_BLOB blob)
|
||||
{
|
||||
struct smbsrv_connection *smb_conn = talloc_get_type(private, struct smbsrv_connection);
|
||||
struct smb2srv_request *req;
|
||||
struct timeval cur_time = timeval_current();
|
||||
uint32_t protocol_version;
|
||||
uint16_t buffer_code;
|
||||
uint32_t dynamic_size;
|
||||
|
||||
smb_conn->statistics.last_request_time = cur_time;
|
||||
|
||||
/* see if its a special NBT packet */
|
||||
if (CVAL(blob.data,0) != 0) {
|
||||
DEBUG(2,("Special NBT packet on SMB2 connection"));
|
||||
@ -271,7 +274,7 @@ NTSTATUS smbsrv_recv_smb2_request(void *private, DATA_BLOB blob)
|
||||
|
||||
req->in.buffer = talloc_steal(req, blob.data);
|
||||
req->in.size = blob.length;
|
||||
req->request_time = timeval_current();
|
||||
req->request_time = cur_time;
|
||||
req->in.allocated = req->in.size;
|
||||
|
||||
req->in.hdr = req->in.buffer+ NBT_HDR_SIZE;
|
||||
|
@ -151,6 +151,8 @@ static void smbsrv_accept(struct stream_connection *conn)
|
||||
|
||||
irpc_add_name(conn->msg_ctx, "smb_server");
|
||||
|
||||
smb_conn->statistics.connect_time = timeval_current();
|
||||
|
||||
smbsrv_management_init(smb_conn);
|
||||
}
|
||||
|
||||
|
@ -84,6 +84,8 @@ struct smbsrv_session {
|
||||
struct timeval connect_time;
|
||||
/* the time when the session setup was finished */
|
||||
struct timeval auth_time;
|
||||
/* the time when the last request comes in */
|
||||
struct timeval last_request_time;
|
||||
} statistics;
|
||||
};
|
||||
|
||||
@ -124,7 +126,10 @@ struct smbsrv_tcon {
|
||||
|
||||
/* some statictics for the management tools */
|
||||
struct {
|
||||
/* the time when the tree connect started */
|
||||
struct timeval connect_time;
|
||||
/* the time when the last request comes in */
|
||||
struct timeval last_request_time;
|
||||
} statistics;
|
||||
};
|
||||
|
||||
@ -297,6 +302,14 @@ struct smbsrv_connection {
|
||||
enum security_types security;
|
||||
BOOL nt_status_support;
|
||||
} config;
|
||||
|
||||
/* some statictics for the management tools */
|
||||
struct {
|
||||
/* the time when the client connects */
|
||||
struct timeval connect_time;
|
||||
/* the time when the last request comes in */
|
||||
struct timeval last_request_time;
|
||||
} statistics;
|
||||
};
|
||||
|
||||
#include "smb_server/smb_server_proto.h"
|
||||
|
@ -58,7 +58,8 @@ NTSTATUS smbsrv_smb2_init_tcons(struct smbsrv_session *smb_sess)
|
||||
/****************************************************************************
|
||||
find a tcon given a tid for SMB
|
||||
****************************************************************************/
|
||||
static struct smbsrv_tcon *smbsrv_tcon_find(struct smbsrv_tcons_context *tcons_ctx, uint32_t tid)
|
||||
static struct smbsrv_tcon *smbsrv_tcon_find(struct smbsrv_tcons_context *tcons_ctx,
|
||||
uint32_t tid, struct timeval request_time)
|
||||
{
|
||||
void *p;
|
||||
struct smbsrv_tcon *tcon;
|
||||
@ -71,19 +72,24 @@ static struct smbsrv_tcon *smbsrv_tcon_find(struct smbsrv_tcons_context *tcons_c
|
||||
if (!p) return NULL;
|
||||
|
||||
tcon = talloc_get_type(p, struct smbsrv_tcon);
|
||||
if (!tcon) return NULL;
|
||||
|
||||
tcon->statistics.last_request_time = request_time;
|
||||
|
||||
return tcon;
|
||||
}
|
||||
|
||||
struct smbsrv_tcon *smbsrv_smb_tcon_find(struct smbsrv_connection *smb_conn, uint32_t tid)
|
||||
struct smbsrv_tcon *smbsrv_smb_tcon_find(struct smbsrv_connection *smb_conn,
|
||||
uint32_t tid, struct timeval request_time)
|
||||
{
|
||||
return smbsrv_tcon_find(&smb_conn->smb_tcons, tid);
|
||||
return smbsrv_tcon_find(&smb_conn->smb_tcons, tid, request_time);
|
||||
}
|
||||
|
||||
struct smbsrv_tcon *smbsrv_smb2_tcon_find(struct smbsrv_session *smb_sess, uint32_t tid)
|
||||
struct smbsrv_tcon *smbsrv_smb2_tcon_find(struct smbsrv_session *smb_sess,
|
||||
uint32_t tid, struct timeval request_time)
|
||||
{
|
||||
if (!smb_sess) return NULL;
|
||||
return smbsrv_tcon_find(&smb_sess->smb2_tcons, tid);
|
||||
return smbsrv_tcon_find(&smb_sess->smb2_tcons, tid, request_time);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user