summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorKarolin Seeger <kseeger@samba.org>2008-11-17 14:02:53 +0100
committerKarolin Seeger <kseeger@samba.org>2008-11-17 14:02:53 +0100
commit27beb800b888cb4be66586bed85c2803573a4507 (patch)
tree41215af77dd66fef2fd1332bc3642338efd1f8a0 /source
parent3a5d68ca4bc47cfef413e1e7db220352634cb1eb (diff)
downloadsamba-27beb800b888cb4be66586bed85c2803573a4507.tar.gz
samba-27beb800b888cb4be66586bed85c2803573a4507.tar.xz
samba-27beb800b888cb4be66586bed85c2803573a4507.zip
Revert "Convert to allocated strings. Use write_data(), not send as this doesn't correctly"
This reverts commit 747f7a5647851290f6a3968477a8749e1134777c.
Diffstat (limited to 'source')
-rw-r--r--source/modules/vfs_smb_traffic_analyzer.c100
1 files changed, 58 insertions, 42 deletions
diff --git a/source/modules/vfs_smb_traffic_analyzer.c b/source/modules/vfs_smb_traffic_analyzer.c
index 6be58cd19fe..cd843e6ad4e 100644
--- a/source/modules/vfs_smb_traffic_analyzer.c
+++ b/source/modules/vfs_smb_traffic_analyzer.c
@@ -24,10 +24,31 @@
#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;
@@ -39,6 +60,7 @@ static int smb_traffic_analyzer_connMode(vfs_handle_struct *handle)
} else {
return INTERNET_SOCKET;
}
+
}
/* Connect to an internet socket */
@@ -147,16 +169,13 @@ 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,
- ssize_t result,
+ char *str,
const char *file_name,
bool Write)
{
int *psockfd = NULL;
- struct timeval tv;
- struct tm *tm = NULL;
- int seconds;
- char *str = NULL;
- size_t len;
+ char Sender[200];
+ char TimeStamp[200];
SMB_VFS_HANDLE_GET_DATA(handle, psockfd, int, return);
@@ -166,39 +185,27 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle,
return;
}
- 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);
-
+ 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);
DEBUG(10, ("smb_traffic_analyzer_send_data_socket: sending %s\n",
- str));
- if (write_data(*psockfd, str, len) != len) {
+ Sender));
+ if (send(*psockfd, Sender, strlen(Sender), 0) == -1 ) {
DEBUG(1, ("smb_traffic_analyzer_send_data_socket: "
"error sending data to socket!\n"));
return ;
@@ -249,12 +256,15 @@ 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,
- result,
+ Buffer,
fsp->fsp_name,
false);
return result;
@@ -265,13 +275,15 @@ 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,
- result,
+ Buffer,
fsp->fsp_name,
false);
@@ -282,13 +294,15 @@ 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,
- result,
+ Buffer,
fsp->fsp_name,
true);
return result;
@@ -298,13 +312,15 @@ 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,
- result,
+ Buffer,
fsp->fsp_name,
true);
return result;