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