[SCM] Samba Shared Repository - branch master updated - c164ff2be5f9af7cc83e43d8c54b54186444fac0

Jeremy Allison jra at samba.org
Tue Sep 30 23:22:07 GMT 2008


The branch, master has been updated
       via  c164ff2be5f9af7cc83e43d8c54b54186444fac0 (commit)
      from  5d7d18b7e827930018ab30fc5e738b5a5cd90789 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit c164ff2be5f9af7cc83e43d8c54b54186444fac0
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Sep 30 16:19:37 2008 -0700

    Convert to allocated strings. Use write_data(), not send as this doesn't correctly
    deal with EINTR. Jim and Holger please check this still works.
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source3/modules/vfs_smb_traffic_analyzer.c |  100 ++++++++++++----------------
 1 files changed, 42 insertions(+), 58 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_smb_traffic_analyzer.c b/source3/modules/vfs_smb_traffic_analyzer.c
index 12c893f..3925424 100644
--- a/source3/modules/vfs_smb_traffic_analyzer.c
+++ b/source3/modules/vfs_smb_traffic_analyzer.c
@@ -24,29 +24,8 @@
 #define UNIX_DOMAIN_SOCKET 1
 #define INTERNET_SOCKET 0
 
-
-/* Prototypes */
-
 static int vfs_smb_traffic_analyzer_debug_level = DBGC_VFS;
 
-/* create the timestamp in sqlite compatible format */
-static void get_timestamp(fstring str)
-{
-	struct timeval tv;
-	struct timezone tz;
-	struct tm *tm;
-	int seconds;
-
-	gettimeofday(&tv, &tz);
- 	tm=localtime(&tv.tv_sec);
-	seconds=(float) (tv.tv_usec / 1000);
-
-	fstr_sprintf(str,"%04d-%02d-%02d %02d:%02d:%02d.%03d", \
-			tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, \
-			tm->tm_hour, tm->tm_min, tm->tm_sec, (int)seconds);
-
-}
-
 static int smb_traffic_analyzer_connMode(vfs_handle_struct *handle)
 {
 	connection_struct *conn = handle->conn;
@@ -58,7 +37,6 @@ static int smb_traffic_analyzer_connMode(vfs_handle_struct *handle)
 	} else {
 		return INTERNET_SOCKET;
 	}
-
 }
 
 /* Connect to an internet socket */
@@ -167,13 +145,16 @@ static int smb_traffic_analyzer_connect_unix_socket(vfs_handle_struct *handle)
 /* Send data over a socket */
 
 static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle,
-					char *str,
+					ssize_t result,
 					const char *file_name,
 					bool Write)
 {
 	int *psockfd = NULL;
-	char Sender[200];
-	char TimeStamp[200];
+	struct timeval tv;
+	struct tm *tm = NULL;
+	int seconds;
+	char *str = NULL;
+	size_t len;
 
 	SMB_VFS_HANDLE_GET_DATA(handle, psockfd, int, return);
 
@@ -183,27 +164,39 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle,
 		return;
 	}
 
-	strlcpy(Sender, str, sizeof(Sender));
-	strlcat(Sender, ",\"", sizeof(Sender));
-	strlcat(Sender, handle->conn->server_info->sanitized_username, sizeof(Sender));
-	strlcat(Sender, "\",\"", sizeof(Sender));
-	strlcat(Sender, pdb_get_domain(handle->conn->server_info->sam_account), sizeof(Sender));
-	strlcat(Sender, "\",\"", sizeof(Sender));
-        if (Write)
-		strlcat(Sender, "W", sizeof(Sender));
-	else
-		strlcat(Sender, "R", sizeof(Sender));
-	strlcat(Sender, "\",\"", sizeof(Sender));
-	strlcat(Sender, handle->conn->connectpath, sizeof(Sender));
-	strlcat(Sender, "\",\"", sizeof(Sender) - 1);
-	strlcat(Sender, file_name, sizeof(Sender) - 1);
-	strlcat(Sender, "\",\"", sizeof(Sender) - 1);
-        get_timestamp(TimeStamp);
-	strlcat(Sender, TimeStamp, sizeof(Sender) - 1);
-	strlcat(Sender, "\");", sizeof(Sender) - 1);
+	GetTimeOfDay(&tv);
+	tm=localtime(&tv.tv_sec);
+	if (!tm) {
+		return;
+	}
+	seconds=(float) (tv.tv_usec / 1000);
+
+	str = talloc_asprintf(talloc_tos(),
+			"%u,\"%s\",\"%s\",\"%c\",\"%s\",\"%s\","
+			"\"%04d-%02d-%02d %02d:%02d:%02d.%03d\");",
+			(unsigned int)result,
+			handle->conn->server_info->sanitized_username,
+			pdb_get_domain(handle->conn->server_info->sam_account),
+			Write ? 'W' : 'R',
+			handle->conn->connectpath,
+			file_name,
+			tm->tm_year+1900,
+			tm->tm_mon+1,
+			tm->tm_mday,
+			tm->tm_hour,
+			tm->tm_min,
+			tm->tm_sec,
+			(int)seconds);
+
+	if (!str) {
+		return;
+	}
+
+	len = strlen(str);
+
 	DEBUG(10, ("smb_traffic_analyzer_send_data_socket: sending %s\n",
-			Sender));
-	if (send(*psockfd, Sender, strlen(Sender), 0) == -1 ) {
+			str));
+	if (write_data(*psockfd, str, len) != len) {
 		DEBUG(1, ("smb_traffic_analyzer_send_data_socket: "
 			"error sending data to socket!\n"));
 		return ;
@@ -254,15 +247,12 @@ static ssize_t smb_traffic_analyzer_read(vfs_handle_struct *handle, \
 				files_struct *fsp, void *data, size_t n)
 {
 	ssize_t result;
-        fstring Buffer;
 
 	result = SMB_VFS_NEXT_READ(handle, fsp, data, n);
 	DEBUG(10, ("smb_traffic_analyzer_read: READ: %s\n", fsp->fsp_name ));
 
-	fstr_sprintf(Buffer, "%u", (uint) result);
-
 	smb_traffic_analyzer_send_data(handle,
-			Buffer,
+			result,
 			fsp->fsp_name,
 			false);
 	return result;
@@ -273,15 +263,13 @@ static ssize_t smb_traffic_analyzer_pread(vfs_handle_struct *handle, \
 		files_struct *fsp, void *data, size_t n, SMB_OFF_T offset)
 {
 	ssize_t result;
-        fstring Buffer;
 
 	result = SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
 
 	DEBUG(10, ("smb_traffic_analyzer_pread: PREAD: %s\n", fsp->fsp_name ));
 
-	fstr_sprintf(Buffer,"%u", (uint) result);
 	smb_traffic_analyzer_send_data(handle,
-			Buffer,
+			result,
 			fsp->fsp_name,
 			false);
 
@@ -292,15 +280,13 @@ static ssize_t smb_traffic_analyzer_write(vfs_handle_struct *handle, \
 			files_struct *fsp, const void *data, size_t n)
 {
 	ssize_t result;
-        fstring Buffer;
 
 	result = SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
 
 	DEBUG(10, ("smb_traffic_analyzer_write: WRITE: %s\n", fsp->fsp_name ));
 
-	fstr_sprintf(Buffer, "%u", (uint) result);
 	smb_traffic_analyzer_send_data(handle,
-			Buffer,
+			result,
 			fsp->fsp_name,
 			true);
 	return result;
@@ -310,15 +296,13 @@ static ssize_t smb_traffic_analyzer_pwrite(vfs_handle_struct *handle, \
 	     files_struct *fsp, const void *data, size_t n, SMB_OFF_T offset)
 {
 	ssize_t result;
-        fstring Buffer;
 
 	result = SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
 
 	DEBUG(10, ("smb_traffic_analyzer_pwrite: PWRITE: %s\n", fsp->fsp_name ));
 
-	fstr_sprintf(Buffer, "%u", (uint) result);
 	smb_traffic_analyzer_send_data(handle,
-			Buffer,
+			result,
 			fsp->fsp_name,
 			true);
 	return result;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list