*/
#include "includes.h"
+#include "smbd/smbd.h"
+#include "../smbd/globals.h"
#include "../lib/crypto/crypto.h"
#include "vfs_smb_traffic_analyzer.h"
+#include "../libcli/security/security.h"
+#include "secrets.h"
+#include "../librpc/gen_ndr/ndr_netlogon.h"
/* abstraction for the send_over_network function */
enum sock_type {INTERNET_SOCKET = 0, UNIX_DOMAIN_SOCKET};
{
int s1,s2,h,d;
AES_KEY key;
- char filler[17]= "................";
+ unsigned char filler[17]= "................";
char *output;
- char crypted[18];
+ unsigned char crypted[18];
if (akey == NULL) return NULL;
- samba_AES_set_encrypt_key(akey, 128, &key);
+ samba_AES_set_encrypt_key((unsigned char *) akey, 128, &key);
s1 = strlen(str) / 16;
s2 = strlen(str) % 16;
for (h = 0; h < s2; h++) *(filler+h)=*(str+(s1*16)+h);
output = talloc_array(ctx, char, (s1*16)+17 );
d=0;
for (h = 0; h < s1; h++) {
- samba_AES_encrypt(str+(16*h), crypted, &key);
+ samba_AES_encrypt((unsigned char *) str+(16*h), crypted, &key);
for (d = 0; d<16; d++) output[d+(16*h)]=crypted[d];
}
- samba_AES_encrypt( str+(16*h), filler, &key );
+ samba_AES_encrypt( (unsigned char *) str+(16*h), filler, &key );
for (d = 0;d < 16; d++) output[d+(16*h)]=*(filler+d);
*len = (s1*16)+16;
return output;
const char *state_flags, size_t data_len)
{
char *header = talloc_asprintf( ctx, "V2.%s%017u",
- state_flags, data_len);
+ state_flags, (unsigned int) data_len);
DEBUG(10, ("smb_traffic_analyzer_send_data_socket: created Header:\n"));
dump_data(10, (uint8_t *)header, strlen(header));
return header;
char *usersid = NULL;
char *buf = NULL;
char *vfs_operation_str = NULL;
+ const char *service_name = lp_const_servicename(handle->conn->params->service);
+
/*
* first create the data that is transfered with any VFS op
* These are, in the following order:
* 4.affected share
* 5.domain
* 6.timestamp
+ * 7.IP Addresss of client
*/
/*
* anonymized if needed, by the calling function.
*/
usersid = dom_sid_string( common_data_count_str,
- &handle->conn->server_info->ptok->user_sids[0]);
+ &handle->conn->session_info->security_token->sids[0]);
sidstr = smb_traffic_analyzer_anonymize(
common_data_count_str,
len = strlen( timestr );
/* create the string of common data */
buf = talloc_asprintf(ctx,
- "%s%04u%s%04u%s%04u%s%04u%s%04u%s%04u%s",
+ "%s%04u%s%04u%s%04u%s%04u%s%04u%s%04u%s%04u%s",
common_data_count_str,
- strlen(vfs_operation_str),
+ (unsigned int) strlen(vfs_operation_str),
vfs_operation_str,
- strlen(username),
+ (unsigned int) strlen(username),
username,
- strlen(sidstr),
+ (unsigned int) strlen(sidstr),
sidstr,
- strlen(handle->conn->connectpath),
- handle->conn->connectpath,
- strlen(pdb_get_domain(handle->conn->server_info->sam_account)),
- pdb_get_domain(handle->conn->server_info->sam_account),
- strlen(timestr),
- timestr);
+ (unsigned int) strlen(service_name),
+ service_name,
+ (unsigned int)
+ strlen(handle->conn->session_info->info3->base.domain.string),
+ handle->conn->session_info->info3->base.domain.string,
+ (unsigned int) strlen(timestr),
+ timestr,
+ (unsigned int) strlen(handle->conn->sconn->client_id.addr),
+ handle->conn->sconn->client_id.addr);
talloc_free(common_data_count_str);
}
GetTimeOfDay(&tv);
- tv_sec = convert_timespec_to_time_t(convert_timeval_to_timespec(tv));
+ tv_sec = tv.tv_sec;
tm = localtime(&tv_sec);
if (!tm) {
return;
* function.
*/
username = smb_traffic_analyzer_anonymize( talloc_tos(),
- handle->conn->server_info->sanitized_username,
+ handle->conn->session_info->sanitized_username,
handle);
if (!username) {
"\"%04d-%02d-%02d %02d:%02d:%02d.%03d\"\n",
(unsigned int) s_data->len,
username,
- pdb_get_domain(handle->conn->server_info->sam_account),
+ handle->conn->session_info->info3->base.domain.string,
Write ? 'W' : 'R',
handle->conn->connectpath,
s_data->filename,
tm->tm_min,
tm->tm_sec,
(int)seconds);
+ len = strlen(str);
if (write_data(rf_sock->sock, str, len) != len) {
DEBUG(1, ("smb_traffic_analyzer_send_data_socket: "
"error sending V1 protocol data to socket!\n"));
tm, seconds, handle, username, vfs_operation,
2, ((struct rw_data *) data)->filename, \
talloc_asprintf(talloc_tos(), "%u", \
- ((struct rw_data *) data)->len));
+ (unsigned int)
+ ((struct rw_data *) data)->len));
break;
default:
DEBUG(1, ("smb_traffic_analyzer: error! "
} else {
DEBUG(1, ("smb_traffic_analyzer_send_data_socket: "
- "error, unkown protocol given!\n"));
+ "error, unknown protocol given!\n"));
return;
}
" found, encrypting data!\n"));
output = smb_traffic_analyzer_encrypt( talloc_tos(),
akey, str, &len);
+ SAFE_FREE(akey);
header = smb_traffic_analyzer_create_header( talloc_tos(),
state_flags, len);
return s_data.result;
}
-#if 0
static int smb_traffic_analyzer_rmdir(vfs_handle_struct *handle, \
const char *path)
{
smb_traffic_analyzer_send_data(handle, &s_data, vfs_id_rmdir);
return s_data.result;
}
-#endif
static int smb_traffic_analyzer_mkdir(vfs_handle_struct *handle, \
const char *path, mode_t mode)
DEBUG(10,("smb_traffic_analyzer_open: OPEN: %s\n",
fsp_str_dbg(fsp)));
s_data.filename = fsp->fsp_name->base_name;
+ s_data.mode = mode;
smb_traffic_analyzer_send_data(handle,
&s_data,
vfs_id_open);
.rename = smb_traffic_analyzer_rename,
.chdir = smb_traffic_analyzer_chdir,
.open = smb_traffic_analyzer_open,
+ .rmdir = smb_traffic_analyzer_rmdir,
.close_fn = smb_traffic_analyzer_close
};