No subject
Sun Sep 6 16:29:27 MDT 2009
2009 15:33:21 +0200=0ASubject: [PATCH] Create structs carrying the data of =
individual VFS functions, and hand those=0A over to the send function, =
which then casts the void pointer to the struct=0A required by looking at =
the id. This allows us to return different result data=0A depending on the =
VFS function that is running.=0A Make the protocol v1 sender compatible to =
this. Adapt the existing VFS=0A functions to use the new data structures.=
=0A Make use of the new functionality and extend the mkdir VFS logger =
function=0A to return the creation mode additionally.=0A=0A---=0A =
source3/modules/vfs_smb_traffic_analyzer.c | 80 ++++++++++++++++---------=
--=0A 1 files changed, 47 insertions(+), 33 deletions(-)=0A=0Adiff --git =
a/source3/modules/vfs_smb_traffic_analyzer.c b/source3/modules/vfs_smb_traf=
fic_analyzer.c=0Aindex 5b3bb2d..e6ec214 100644=0A--- a/source3/modules/vfs_=
smb_traffic_analyzer.c=0A+++ b/source3/modules/vfs_smb_traffic_analyzer.c=
=0A@@ -40,6 +40,20 @@ enum vfs_id {=0A vfs_id_mkdir=0A };=0A =0A+/* =
Specific data sets for the VFS functions. =
*/=0A+=0A+struct mkdir_data {=0A+ const char *path;=0A+ mode_t =
mode;=0A+ int result;=0A+};=0A+=0A+/* rw_data used for read/write/pre=
ad/pwrite */=0A+struct rw_data {=0A+ =
char *filename;=0A+ size_t len;=0A+};=0A+=0A =0A static int vfs_smb_tra=
ffic_analyzer_debug_level =3D DBGC_VFS;=0A =0A@@ -167,8 +181,7 @@ struct =
refcounted_sock {=0A /* Send data over a socket */=0A =0A static void =
smb_traffic_analyzer_send_data(vfs_handle_struct *handle,=0A- =
ssize_t result,=0A- =
const char *file_name,=0A+ void =
*data,=0A enum vfs_id vfs_operation =
)=0A {=0A struct refcounted_sock *rf_sock =3D NULL;=0A@@ -234,6 =
+247,8 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct =
*handle,=0A =0A if ( protocol_version =3D=3D NULL || strcmp( =
protocol_version,"V1") =3D=3D 0) {=0A =0A+ struct rw_data =
*s_data =3D (struct rw_data *) data;=0A+=0A /* in case of =
protocol v1, ignore any vfs operations */=0A /* except =
read,pread,write,pwrite, and set the "Write" */=0A /* bool =
accordingly. */=0A@@ -246,12 +261,12 @@ =
static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle,=0A =
str =3D talloc_asprintf(talloc_tos(),=0A =
"V1,%u,\"%s\",\"%s\",\"%c\",\"%s\",\"%s\","=0A "\"%04d-%02=
d-%02d %02d:%02d:%02d.%03d\"\n",=0A- (unsigned =
int)result,=0A+ (unsigned int) s_data->len,=0A =
username,=0A pdb_get_domain(handle->conn->server_info->s=
am_account),=0A Write ? 'W' : 'R',=0A =
handle->conn->connectpath,=0A- file_name,=0A+ =
s_data->filename,=0A tm->tm_year+1900,=0A =
tm->tm_mon+1,=0A tm->tm_mday,=0A@@ -374,81 +389,80 =
@@ static int smb_traffic_analyzer_connect(struct vfs_handle_struct =
*handle,=0A static int smb_traffic_analyzer_mkdir(vfs_handle_struct =
*handle, \=0A const char *path, mode_t mode)=0A {=0A- =
int result;=0A- result =3D SMB_VFS_NEXT_MKDIR(handle, path, mode);=0A+ =
struct mkdir_data s_data;=0A+ s_data.result =3D SMB_VFS_NEXT_MKDIR(handle=
, path, mode);=0A+ s_data.path =3D path;=0A+ s_data.mode =3D =
mode;=0A DEBUG(10, ("smb_traffic_analyzer_mkdir: MKDIR: %s\n", =
path));=0A smb_traffic_analyzer_send_data(handle,=0A- =
result,=0A- path,=0A+ &s_data,=0A=
vfs_id_mkdir);=0A- return result;=0A+ =
return s_data.result;=0A }=0A =0A static ssize_t smb_traffic_analyzer_read(=
vfs_handle_struct *handle, \=0A files_struc=
t *fsp, void *data, size_t n)=0A {=0A- ssize_t result;=0A+ struct =
rw_data s_data;=0A =0A- result =3D SMB_VFS_NEXT_READ(handle, fsp, data, =
n);=0A+ s_data.len =3D SMB_VFS_NEXT_READ(handle, fsp, data, n);=0A+ =
s_data.filename =3D fsp->fsp_name->base_name;=0A DEBUG(10, =
("smb_traffic_analyzer_read: READ: %s\n", fsp_str_dbg(fsp)));=0A =0A =
smb_traffic_analyzer_send_data(handle,=0A- result,=0A-=
fsp->fsp_name->base_name,=0A+ =
&s_data,=0A vfs_id_read);=0A- return result;=0A+ =
return s_data.len;=0A }=0A =0A =0A static ssize_t smb_traffic_analyzer_prea=
d(vfs_handle_struct *handle, \=0A files_struct *fsp, void =
*data, size_t n, SMB_OFF_T offset)=0A {=0A- ssize_t result;=0A-=0A- =
result =3D SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);=0A+ =
struct rw_data s_data;=0A =0A+ s_data.len =3D SMB_VFS_NEXT_PREAD(handle, =
fsp, data, n, offset);=0A+ s_data.filename =3D fsp->fsp_name->base_nam=
e;=0A DEBUG(10, ("smb_traffic_analyzer_pread: PREAD: %s\n",=0A =
fsp_str_dbg(fsp)));=0A =0A smb_traffic_analyzer_send_data(handle,=0A- =
result,=0A- fsp->fsp_name->base_name,=
=0A+ &s_data,=0A vfs_id_pread);=0A =
=0A- return result;=0A+ return s_data.len;=0A }=0A =0A static =
ssize_t smb_traffic_analyzer_write(vfs_handle_struct *handle, \=0A =
files_struct *fsp, const void *data, size_t n)=0A {=0A- ssize_t =
result;=0A-=0A- result =3D SMB_VFS_NEXT_WRITE(handle, fsp, data, n);=0A+ =
struct rw_data s_data;=0A =0A+ s_data.len =3D SMB_VFS_NEXT_WRITE(handle, =
fsp, data, n);=0A+ s_data.filename =3D fsp->fsp_name->base_name;=0A =
DEBUG(10, ("smb_traffic_analyzer_write: WRITE: %s\n",=0A =
fsp_str_dbg(fsp)));=0A =0A smb_traffic_analyzer_send_data(handle,=0A- =
result,=0A- fsp->fsp_name->base_name,=
=0A+ &s_data,=0A vfs_id_write);=0A- =
return result;=0A+ return s_data.len;=0A }=0A =0A static ssize_t =
smb_traffic_analyzer_pwrite(vfs_handle_struct *handle, \=0A =
files_struct *fsp, const void *data, size_t n, SMB_OFF_T offset)=0A {=0A- =
ssize_t result;=0A-=0A- result =3D SMB_VFS_NEXT_PWRITE(handle, fsp, data, =
n, offset);=0A+ struct rw_data s_data;=0A =0A- DEBUG(10, ("smb_traffic_ana=
lyzer_pwrite: PWRITE: %s\n", fsp_str_dbg(fsp)));=0A+ s_data.len =3D =
SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);=0A+ s_data.filename =
=3D fsp->fsp_name->base_name;=0A+ DEBUG(10, ("smb_traffic_analyzer_pw=
rite: PWRITE: %s\n", \=0A+ fsp_str_dbg(fsp)));=0A =0A =
smb_traffic_analyzer_send_data(handle,=0A- result,=0A-=
fsp->fsp_name->base_name,=0A+ =
&s_data,=0A vfs_id_pwrite);=0A- return result;=0A+ =
return s_data.len;=0A }=0A =0A static struct vfs_fn_pointers vfs_smb_traffi=
c_analyzer_fns =3D {=0A-- =0A1.6.0.2=0A=0A
--=__Part0328F312.0__=--
More information about the samba-technical
mailing list