diff options
author | Karolin Seeger <kseeger@samba.org> | 2008-11-17 14:02:53 +0100 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2008-11-17 14:02:53 +0100 |
commit | 27beb800b888cb4be66586bed85c2803573a4507 (patch) | |
tree | 41215af77dd66fef2fd1332bc3642338efd1f8a0 /source | |
parent | 3a5d68ca4bc47cfef413e1e7db220352634cb1eb (diff) | |
download | samba-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.c | 100 |
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; |