[SCM] Samba Shared Repository - branch v3-2-test updated -
release-3-2-0pre2-3060-gdc1ff1a
Jeremy Allison
jra at samba.org
Tue Sep 30 23:21:34 GMT 2008
The branch, v3-2-test has been updated
via dc1ff1a9c07edf7e3e649b256667704ad59aafbd (commit)
from 2f7884babcefcb04d1f9a877dde41e11b0f7b825 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test
- Log -----------------------------------------------------------------
commit dc1ff1a9c07edf7e3e649b256667704ad59aafbd
Author: Jeremy Allison <jra at samba.org>
Date: Tue Sep 30 16:20:29 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:
source/modules/vfs_smb_traffic_analyzer.c | 100 ++++++++++++-----------------
1 files changed, 42 insertions(+), 58 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/modules/vfs_smb_traffic_analyzer.c b/source/modules/vfs_smb_traffic_analyzer.c
index cd843e6..6be58cd 100644
--- a/source/modules/vfs_smb_traffic_analyzer.c
+++ b/source/modules/vfs_smb_traffic_analyzer.c
@@ -24,31 +24,10 @@
#define UNIX_DOMAIN_SOCKET 1
#define INTERNET_SOCKET 0
-
-/* Prototypes */
-
extern userdom_struct current_user_info;
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;
@@ -60,7 +39,6 @@ static int smb_traffic_analyzer_connMode(vfs_handle_struct *handle)
} else {
return INTERNET_SOCKET;
}
-
}
/* Connect to an internet socket */
@@ -169,13 +147,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);
@@ -185,27 +166,39 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle,
return;
}
- strlcpy(Sender, str, sizeof(Sender));
- strlcat(Sender, ",\"", sizeof(Sender));
- strlcat(Sender, get_current_username(), sizeof(Sender));
- strlcat(Sender, "\",\"", sizeof(Sender));
- strlcat(Sender, current_user_info.domain, 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,
+ get_current_username(),
+ current_user_info.domain,
+ 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 ;
@@ -256,15 +249,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;
@@ -275,15 +265,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);
@@ -294,15 +282,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;
@@ -312,15 +298,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